fix(platformtheme): restore Qt6 theme plugin loading

main
reionwong 4 weeks ago
parent 520d84d174
commit 80d37ed4d2

@ -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

@ -19,6 +19,7 @@
#include <QDBusArgument>
#include <QDBusConnection>
#include <QDBusInterface>
#include <QFontDatabase>
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

@ -1,6 +1,5 @@
#include "platformtheme.h"
#include "x11integration.h"
#include "qdbusmenubar_p.h"
#include <QApplication>
#include <QFont>
@ -18,29 +17,8 @@
#include <private/qwindow_p.h>
#include <private/qguiapplication_p.h>
// Qt DBus
#include <QDBusConnection>
#include <QDBusConnectionInterface>
#include <QDBusInterface>
#include <KWindowSystem>
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;
}

Loading…
Cancel
Save