Why is the titlebar-content division line a feature of MainWindow, rather than KWin's Breeze decoration?

It causes significant inconsistency, even amongst KDE GUIs.

As an example:

#!/usr/bin/env python
import sys
from PyQt6.QtWidgets import QApplication, QMainWindow

app = QApplication(sys.argv)
window = QMainWindow()




#!/usr/bin/env python
import sys
from PyQt6.QtWidgets import QApplication, QWidget

app = QApplication(sys.argv)
window = QWidget()



This isn’t a problem during development, because the example provided would be a very strange thing to do, generally. However, I see this in a lot of situations when running 3rd-party software, especially proprietary:

This again might not immediately appear problematic, because some proprietary software provides issue trackers, so I can request that they inherit from a more suitable class. This would apply to the instances in which I see this in KDE software:


…unless they’re not using Qt.

Consequently, why is this a feature of MainWindow, rather than KWin’s Breeze decoration? I expect this is deliberate.

Well if they are not using Qt or any KDE software, how would we know where to draw the line? This is why it’s left up to the application

@redstrate, below the titlebar…? Surely I’m missing something? If the titlebar were one pixel longer, and that one pixel was a line, then I imagine this would be fixed.

Think of it like this - surely QMainWindow windows running in decoration styles without window borders must currently render a single top-line, but no lines for the rest of the borders. I can’t imagine why we would leave part of this to the application’s code, and part to the WM.

Which Plasma version are you on? I don’t even see a content-border here in any of your examples

@redstrate, apologies for the wait:

  1. kcmshell6 kcm_about-distro
  2. Operating System: Fedora Linux 40
    KDE Plasma Version: 6.1.1
    KDE Frameworks Version: 6.3.0
    Qt Version: 6.7.2
    Kernel Version: 6.9.8-200.fc40.x86_64 (64-bit)
    Graphics Platform: Wayland
    Processors: 12 × AMD Ryzen 5 7600X 6-Core Processor
    Memory: 30.5 GiB of RAM
    Graphics Processor: AMD Radeon RX 5700
    Manufacturer: ASRock
    Product Name: X670E Taichi


  1. Python 3.12.4

    dnf5 info python3
    PS /home/RokeJulianLockhart> dnf5 info python3
    Updating and loading repositories:
    Repositories loaded.
    Installed packages
    Name            : python3
    Epoch           : 0
    Version         : 3.12.4
    Release         : 1.fc40
    Architecture    : x86_64
    Installed size  : 31.5 KiB
    Source          : python3.12-3.12.4-1.fc40.src.rpm
    From repository : <unknown>
    Summary         : Python 3.12 interpreter
    URL             : https://www.python.org/
    License         : Python-2.0.1
    Description     : Python 3.12 is an accessible, high-level, dynamically typed, interpreted
                    : programming language, designed with an emphasis on code readability.
                    : It includes an extensive standard library, and has a vast ecosystem of
                    : third-party libraries.
                    : The python3 package provides the "python3" executable: the reference
                    : interpreter for the Python language, version 3.
                    : The majority of its standard library is provided in the python3-libs package,
                    : which should be installed automatically along with python3.
                    : The remaining parts of the Python standard library are broken out into the
                    : python3-tkinter and python3-test packages, which may need to be installed
                    : separately.
                    : Documentation for Python is provided in the python3-docs package.
                    : Packages containing additional libraries for Python are generally named with
                    : the "python3-" prefix.
    Vendor          : Fedora Project
  2. PyQt 6.7.0

    dnf5 info python3-pyqt6
    PS /home/RokeJulianLockhart> dnf5 info python3-pyqt6                                                                                                                                                                                                                           Updating and loading repositories:                                                                                                                                                                                            
    Repositories loaded.
    Installed packages
    Name            : python3-pyqt6
    Epoch           : 0
    Version         : 6.7.0
    Release         : 5.fc40
    Architecture    : x86_64
    Installed size  : 5.4 MiB
    Source          : python-pyqt6-6.7.0-5.fc40.src.rpm
    From repository : <unknown>
    Summary         : Python 3 bindings for Qt6
    URL             : http://www.riverbankcomputing.com/software/pyqt/
    License         : gpl-3.0-only
    Description     : Python 3 bindings for Qt6.
    Vendor          : Fedora Project
  3. Steam

    dnf5 info steam
    PS /home/RokeJulianLockhart> dnf5 info steam
    Updating and loading repositories:
    Repositories loaded.
    Available packages
    Name           : steam
    Epoch          : 0
    Version        :
    Release        : 5.fc40
    Architecture   : i686
    Download size  : 3.8 MiB
    Installed size : 3.9 MiB
    Source         : steam-
    Repository     : rpmfusion-nonfree-updates
    Summary        : Installer for the Steam software distribution service
    URL            : http://www.steampowered.com/
    License        : Steam License Agreement and MIT
    Description    : Steam is a software distribution service with an online store, automated
                   : installation, automatic updates, achievements, SteamCloud synchronized savegame
                   : and screenshot functionality, and many social features.

KWin Preferences

I don’t see anything that I could have enabled which would cause this, so I think this is part of Breeze:

The divider line seems to cause a slight padding problem with the QPushButton when using QMainWindow - it doesn’t have 1 px of padding at the top:


@redstrate, if, as you state, it’s not meant to have a line at the top (and yours apparently doesn’t) then the lack of padding would make sense (since it’s not meant to be there).