diff options
Diffstat (limited to 'src/plugins/platforms/xcb/qxcbscreen.cpp')
-rw-r--r-- | src/plugins/platforms/xcb/qxcbscreen.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/plugins/platforms/xcb/qxcbscreen.cpp b/src/plugins/platforms/xcb/qxcbscreen.cpp index 82e256657c..e65418b077 100644 --- a/src/plugins/platforms/xcb/qxcbscreen.cpp +++ b/src/plugins/platforms/xcb/qxcbscreen.cpp @@ -131,6 +131,9 @@ QXcbVirtualDesktop::QXcbVirtualDesktop(QXcbConnection *connection, xcb_screen_t QXcbVirtualDesktop::~QXcbVirtualDesktop() { delete m_xSettings; + + for (auto cmap : qAsConst(m_visualColormaps)) + xcb_free_colormap(xcb_connection(), cmap); } QDpi QXcbVirtualDesktop::dpi() const @@ -493,6 +496,22 @@ quint8 QXcbVirtualDesktop::depthOfVisual(xcb_visualid_t visualid) const return *it; } +xcb_colormap_t QXcbVirtualDesktop::colormapForVisual(xcb_visualid_t visualid) const +{ + auto it = m_visualColormaps.constFind(visualid); + if (it != m_visualColormaps.constEnd()) + return *it; + + auto cmap = xcb_generate_id(xcb_connection()); + xcb_create_colormap(xcb_connection(), + XCB_COLORMAP_ALLOC_NONE, + cmap, + screen()->root, + visualid); + m_visualColormaps.insert(visualid, cmap); + return cmap; +} + QXcbScreen::QXcbScreen(QXcbConnection *connection, QXcbVirtualDesktop *virtualDesktop, xcb_randr_output_t outputId, xcb_randr_get_output_info_reply_t *output) : QXcbObject(connection) |