diff options
author | Tang Haixiang <tanghaixiang@uniontech.com> | 2021-06-16 10:01:53 +0800 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2021-06-24 17:42:42 +0200 |
commit | 7311cdc0d2c10d47511e5b4850e3b348ea10e0d8 (patch) | |
tree | b7fa6e90cd861e83424935cdbf8db08f2ca736be /src/plugins/platforms/xcb/qxcbcursor.cpp | |
parent | fa664e0b2ad748a5b56de8ca0fd9ee3ed1966e7d (diff) |
xcb: fix cursorTheme update issue
Clear the cache when cursor theme changed.
Idealy we should subscribe root window's RESOURCE_MANAGER property
to update cursor theme via Xcursor. KDE already has a daemon
KDE GTK Configurator to sync KDE settings to GTK. Then we can
register the fallback there both for KDE and GTK changes. See also
https://invent.kde.org/plasma/kde-gtk-config
Fixes: QTBUG-94538
Pick-to: 6.2 6.1 6.0 5.15
Change-Id: Ia4de30930a0dc1dc306c61e1553970c3dab67bd6
Reviewed-by: Liang Qi <liang.qi@qt.io>
Diffstat (limited to 'src/plugins/platforms/xcb/qxcbcursor.cpp')
-rw-r--r-- | src/plugins/platforms/xcb/qxcbcursor.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/plugins/platforms/xcb/qxcbcursor.cpp b/src/plugins/platforms/xcb/qxcbcursor.cpp index a032085f0b..4210bf428e 100644 --- a/src/plugins/platforms/xcb/qxcbcursor.cpp +++ b/src/plugins/platforms/xcb/qxcbcursor.cpp @@ -534,6 +534,8 @@ bool updateCursorTheme(void *dpy, const QByteArray &theme) { Q_UNUSED(screen); Q_UNUSED(name); QXcbCursor *self = static_cast<QXcbCursor *>(handle); + self->m_cursorHash.clear(); + updateCursorTheme(self->connection()->xlib_display(),property.toByteArray()); } @@ -559,14 +561,16 @@ xcb_cursor_t QXcbCursor::createFontCursor(int cshape) int cursorId = cursorIdForShape(cshape); xcb_cursor_t cursor = XCB_NONE; - // Try Xcursor first #if QT_CONFIG(xcb_xlib) && QT_CONFIG(library) + if (m_screen->xSettings()->initialized()) + m_screen->xSettings()->registerCallbackForProperty("Gtk/CursorThemeName",cursorThemePropertyChanged,this); + + // Try Xcursor first if (cshape >= 0 && cshape <= Qt::LastCursor) { void *dpy = connection()->xlib_display(); cursor = loadCursor(dpy, cshape); if (!cursor && !m_gtkCursorThemeInitialized && m_screen->xSettings()->initialized()) { QByteArray gtkCursorTheme = m_screen->xSettings()->setting("Gtk/CursorThemeName").toByteArray(); - m_screen->xSettings()->registerCallbackForProperty("Gtk/CursorThemeName",cursorThemePropertyChanged,this); if (updateCursorTheme(dpy,gtkCursorTheme)) { cursor = loadCursor(dpy, cshape); } |