diff --git a/platformtheme/CMakeLists.txt b/platformtheme/CMakeLists.txt index c3ab164..6a26bf6 100644 --- a/platformtheme/CMakeLists.txt +++ b/platformtheme/CMakeLists.txt @@ -17,9 +17,6 @@ find_path(QT6XDGICONLOADER_PRIVATE_INCLUDE_DIR REQUIRED ) -# qdbusmenubar uses them -remove_definitions(-DQT_NO_SIGNALS_SLOTS_KEYWORDS) - # xcb-ewmh was never used by this plugin and is no longer pulled in by Qt. pkg_check_modules(XCB REQUIRED IMPORTED_TARGET xcb x11) @@ -31,8 +28,6 @@ set (SRCS hintsettings.cpp systemtrayicon.h systemtrayicon.cpp - qdbusmenubar_p.h - qdbusmenubar.cpp x11integration.h x11integration.cpp statusnotifier/dbustypes.h diff --git a/platformtheme/hintsettings.cpp b/platformtheme/hintsettings.cpp index 8363a1c..cd45eca 100644 --- a/platformtheme/hintsettings.cpp +++ b/platformtheme/hintsettings.cpp @@ -19,6 +19,7 @@ #include #include #include +#include static const QByteArray s_systemFontName = QByteArrayLiteral("Font"); static const QByteArray s_systemFixedFontName = QByteArrayLiteral("FixedFont"); @@ -27,6 +28,19 @@ static const QByteArray s_darkModeName = QByteArrayLiteral("DarkMode"); static const QByteArray s_lightIconName = QByteArrayLiteral("Crule"); static const QByteArray s_darkIconName = QByteArrayLiteral("Crule-dark"); +static QString availableFontFamily(const QString &requested, const QString &fallback) +{ + QFontDatabase database; + const QStringList families = database.families(); + + if (families.contains(requested)) + return requested; + if (families.contains(fallback)) + return fallback; + + return QStringLiteral("Sans Serif"); +} + HintsSettings::HintsSettings(QObject *parent) : QObject(parent), m_settings(new QSettings(QSettings::UserScope, "cutefishos", "theme")) @@ -78,12 +92,14 @@ QStringList HintsSettings::xdgIconThemePaths() const QString HintsSettings::systemFont() const { - return m_settings->value(s_systemFontName, "Noto Sans").toString(); + return availableFontFamily(m_settings->value(s_systemFontName, "Noto Sans").toString(), + QStringLiteral("DejaVu Sans")); } QString HintsSettings::systemFixedFont() const { - return m_settings->value(s_systemFixedFontName, "Monospace").toString(); + return availableFontFamily(m_settings->value(s_systemFixedFontName, "Monospace").toString(), + QStringLiteral("DejaVu Sans Mono")); } qreal HintsSettings::systemFontPointSize() const diff --git a/platformtheme/platformtheme.cpp b/platformtheme/platformtheme.cpp index 8feee9e..364e770 100644 --- a/platformtheme/platformtheme.cpp +++ b/platformtheme/platformtheme.cpp @@ -1,6 +1,5 @@ #include "platformtheme.h" #include "x11integration.h" -#include "qdbusmenubar_p.h" #include #include @@ -18,29 +17,8 @@ #include #include -// Qt DBus -#include -#include -#include - #include -static const QByteArray s_x11AppMenuServiceNamePropertyName = QByteArrayLiteral("_KDE_NET_WM_APPMENU_SERVICE_NAME"); -static const QByteArray s_x11AppMenuObjectPathPropertyName = QByteArrayLiteral("_KDE_NET_WM_APPMENU_OBJECT_PATH"); - -static bool checkDBusGlobalMenuAvailable() -{ - QDBusConnection connection = QDBusConnection::sessionBus(); - QString registrarService = QStringLiteral("com.canonical.AppMenu.Registrar"); - return connection.interface()->isServiceRegistered(registrarService); -} - -static bool isDBusGlobalMenuAvailable() -{ - static bool dbusGlobalMenuAvailable = checkDBusGlobalMenuAvailable(); - return dbusGlobalMenuAvailable; -} - extern void updateXdgIconSystemTheme(); void onDarkModeChanged() @@ -135,39 +113,9 @@ const QFont* PlatformTheme::font(Font type) const QPlatformMenuBar *PlatformTheme::createPlatformMenuBar() const { - if (isDBusGlobalMenuAvailable()) { - auto *menu = new QDBusMenuBar(); - - QObject::connect(menu, &QDBusMenuBar::windowChanged, menu, [this, menu](QWindow *newWindow, QWindow *oldWindow) { - const QString &serviceName = QDBusConnection::sessionBus().baseService(); - const QString &objectPath = menu->objectPath(); - - if (m_x11Integration) { - if (oldWindow) { - m_x11Integration->setWindowProperty(oldWindow, s_x11AppMenuServiceNamePropertyName, {}); - m_x11Integration->setWindowProperty(oldWindow, s_x11AppMenuObjectPathPropertyName, {}); - } - - if (newWindow) { - m_x11Integration->setWindowProperty(newWindow, s_x11AppMenuServiceNamePropertyName, serviceName.toUtf8()); - m_x11Integration->setWindowProperty(newWindow, s_x11AppMenuObjectPathPropertyName, objectPath.toUtf8()); - } - } - -// if (m_kwaylandIntegration) { -// if (oldWindow) { -// m_kwaylandIntegration->setAppMenu(oldWindow, QString(), QString()); -// } -// -// if (newWindow) { -// m_kwaylandIntegration->setAppMenu(newWindow, serviceName, objectPath); -// } -// } - }); - - return menu; - } - + // Qt 6 no longer exports the private QDBusPlatformMenu implementation + // used by the old Qt 5 global-menu code. The old implementation would + // make this platform theme plugin fail to load at runtime. return nullptr; }