Commit 494141f2 authored by dmMaze's avatar dmMaze
Browse files

fix titlebar for Qt>=6.8 on macOS

parent 9076ab24
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -5,7 +5,7 @@ if sys.platform == "win32":
    from .windows import WindowsFramelessWindow as FramelessWindow
    from .windows import WindowsWindowEffect as WindowEffect
elif sys.platform == "darwin":
    from .mac import AcrylicWindow
    # from .mac import AcrylicWindow
    from .mac import MacFramelessWindow as FramelessWindow
    from .mac import MacWindowEffect as WindowEffect
else:
+5 −16
Original line number Diff line number Diff line
@@ -14,9 +14,8 @@ class MacFramelessWindow(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent=parent)
        self.windowEffect = MacWindowEffect(self)
        # must enable acrylic effect before creating title bar
        if isinstance(self, AcrylicWindow):
            self.windowEffect.setAcrylicEffect(self.winId())
        # https://bugreports.qt.io/browse/QTBUG-133215
        self.setAttribute(Qt.WidgetAttribute.WA_ContentsMarginsRespectsSafeArea, False)

        # self.titleBar = TitleBar(self)

@@ -24,7 +23,7 @@ class MacFramelessWindow(QWidget):
        self.__nsWindow = view.window()

        # hide system title bar
        self.__hideSystemTitleBar()
        self.hideSystemTitleBar()

        # self.resize(500, 500)
        # self.titleBar.raise_()
@@ -53,9 +52,9 @@ class MacFramelessWindow(QWidget):
    def changeEvent(self, event):
        super().changeEvent(event)
        if event.type() == QEvent.Type.WindowStateChange:
            self.__hideSystemTitleBar()
            self.hideSystemTitleBar()

    def __hideSystemTitleBar(self):
    def hideSystemTitleBar(self):
        # extend view to title bar region
        self.__nsWindow.setStyleMask_(
            self.__nsWindow.styleMask() | Cocoa.NSFullSizeContentViewWindowMask)
@@ -71,13 +70,3 @@ class MacFramelessWindow(QWidget):
        # self.__nsWindow.standardWindowButton_(Cocoa.NSWindowCloseButton).setHidden_(True)
        # self.__nsWindow.standardWindowButton_(Cocoa.NSWindowZoomButton).setHidden_(True)
        # self.__nsWindow.standardWindowButton_(Cocoa.NSWindowMiniaturizeButton).setHidden_(True)


class AcrylicWindow(MacFramelessWindow):
    """ A frameless window with acrylic effect """

    def __init__(self, parent=None):
        super().__init__(parent)
        self.setAttribute(Qt.WidgetAttribute.WA_TranslucentBackground)
        self.windowEffect.setAcrylicEffect(self.winId())
        self.setStyleSheet("background: transparent")
+5 −0
Original line number Diff line number Diff line
@@ -103,6 +103,11 @@ class MainWindow(mainwindow_cls):
        if shared.HEADLESS:
            self.run_batch(**exec_args)

        if shared.ON_MACOS:
            # https://bugreports.qt.io/browse/QTBUG-133215
            self.hideSystemTitleBar()
            self.showMaximized()

    def setStyleSheet(self, styleSheet: str) -> None:
        self.imgtrans_progress_msgbox.setStyleSheet(styleSheet)
        self.export_doc_thread.progress_bar.setStyleSheet(styleSheet)
+2 −1
Original line number Diff line number Diff line
@@ -273,7 +273,8 @@ class TitleBar(Widget):

    def __init__(self, parent, *args, **kwargs) -> None:
        super().__init__(parent, *args, **kwargs)

        if C.ON_MACOS:# https://bugreports.qt.io/browse/QTBUG-133215
            self.setAttribute(Qt.WidgetAttribute.WA_ContentsMarginsRespectsSafeArea, False)
        self.mainwindow : QMainWindow = parent
        self.mPos: QPoint = None
        self.normalsize = False