summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/xcb/qxcbwindow.cpp
diff options
context:
space:
mode:
authorTor Arne Vestbø <tor.arne.vestbo@qt.io>2020-07-17 22:15:07 +0200
committerTor Arne Vestbø <tor.arne.vestbo@qt.io>2020-07-20 17:47:39 +0200
commit9166abcd997f57625c17db8e8734988ff303217e (patch)
treefa8c97b1f5d89e7c64645a2d261b75ddfbbea18c /src/plugins/platforms/xcb/qxcbwindow.cpp
parent6034494070041baab95b835a2605c795f0d7166c (diff)
Add QXcbWindow platform interface
Task-number: QTBUG-84220 Change-Id: I8bb4288f1ac06d77fb4f43ae091fa1712f694eeb Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Diffstat (limited to 'src/plugins/platforms/xcb/qxcbwindow.cpp')
-rw-r--r--src/plugins/platforms/xcb/qxcbwindow.cpp116
1 files changed, 44 insertions, 72 deletions
diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp
index c29e18529c..224f0bd4cb 100644
--- a/src/plugins/platforms/xcb/qxcbwindow.cpp
+++ b/src/plugins/platforms/xcb/qxcbwindow.cpp
@@ -511,7 +511,7 @@ void QXcbWindow::create()
if (window()->dynamicPropertyNames().contains(wm_window_role_property_id)) {
QByteArray wmWindowRole = window()->property(wm_window_role_property_id).toByteArray();
- setWmWindowRole(wmWindowRole);
+ setWindowRole(QString::fromLatin1(wmWindowRole));
}
if (m_trayIconWindow)
@@ -919,9 +919,9 @@ void QXcbWindow::setWindowFlags(Qt::WindowFlags flags)
xcb_change_window_attributes(xcb_connection(), xcb_window(), mask, values);
- QXcbWindowFunctions::WmWindowTypes wmWindowTypes;
+ WindowTypes wmWindowTypes;
if (window()->dynamicPropertyNames().contains(wm_window_type_property_id)) {
- wmWindowTypes = static_cast<QXcbWindowFunctions::WmWindowTypes>(
+ wmWindowTypes = static_cast<WindowTypes>(
qvariant_cast<int>(window()->property(wm_window_type_property_id)));
}
@@ -1445,38 +1445,9 @@ QSurfaceFormat QXcbWindow::format() const
return m_format;
}
-void QXcbWindow::setWmWindowTypeStatic(QWindow *window, QXcbWindowFunctions::WmWindowTypes windowTypes)
+QXcbWindow::WindowTypes QXcbWindow::wmWindowTypes() const
{
- window->setProperty(wm_window_type_property_id, QVariant::fromValue(static_cast<int>(windowTypes)));
-
- if (window->handle())
- static_cast<QXcbWindow *>(window->handle())->setWmWindowType(windowTypes, window->flags());
-}
-
-void QXcbWindow::setWindowIconTextStatic(QWindow *window, const QString &text)
-{
- if (window->handle())
- static_cast<QXcbWindow *>(window->handle())->setWindowIconText(text);
-}
-
-void QXcbWindow::setWmWindowRoleStatic(QWindow *window, const QByteArray &role)
-{
- if (window->handle())
- static_cast<QXcbWindow *>(window->handle())->setWmWindowRole(role);
- else
- window->setProperty(wm_window_role_property_id, role);
-}
-
-uint QXcbWindow::visualIdStatic(QWindow *window)
-{
- if (window && window->handle())
- return static_cast<QXcbWindow *>(window->handle())->visualId();
- return UINT_MAX;
-}
-
-QXcbWindowFunctions::WmWindowTypes QXcbWindow::wmWindowTypes() const
-{
- QXcbWindowFunctions::WmWindowTypes result;
+ WindowTypes result;
auto reply = Q_XCB_REPLY_UNCHECKED(xcb_get_property, xcb_connection(),
0, m_window, atom(QXcbAtom::_NET_WM_WINDOW_TYPE),
@@ -1488,49 +1459,49 @@ QXcbWindowFunctions::WmWindowTypes QXcbWindow::wmWindowTypes() const
QXcbAtom::Atom type = connection()->qatom(*types);
switch (type) {
case QXcbAtom::_NET_WM_WINDOW_TYPE_NORMAL:
- result |= QXcbWindowFunctions::Normal;
+ result |= WindowType::Normal;
break;
case QXcbAtom::_NET_WM_WINDOW_TYPE_DESKTOP:
- result |= QXcbWindowFunctions::Desktop;
+ result |= WindowType::Desktop;
break;
case QXcbAtom::_NET_WM_WINDOW_TYPE_DOCK:
- result |= QXcbWindowFunctions::Dock;
+ result |= WindowType::Dock;
break;
case QXcbAtom::_NET_WM_WINDOW_TYPE_TOOLBAR:
- result |= QXcbWindowFunctions::Toolbar;
+ result |= WindowType::Toolbar;
break;
case QXcbAtom::_NET_WM_WINDOW_TYPE_MENU:
- result |= QXcbWindowFunctions::Menu;
+ result |= WindowType::Menu;
break;
case QXcbAtom::_NET_WM_WINDOW_TYPE_UTILITY:
- result |= QXcbWindowFunctions::Utility;
+ result |= WindowType::Utility;
break;
case QXcbAtom::_NET_WM_WINDOW_TYPE_SPLASH:
- result |= QXcbWindowFunctions::Splash;
+ result |= WindowType::Splash;
break;
case QXcbAtom::_NET_WM_WINDOW_TYPE_DIALOG:
- result |= QXcbWindowFunctions::Dialog;
+ result |= WindowType::Dialog;
break;
case QXcbAtom::_NET_WM_WINDOW_TYPE_DROPDOWN_MENU:
- result |= QXcbWindowFunctions::DropDownMenu;
+ result |= WindowType::DropDownMenu;
break;
case QXcbAtom::_NET_WM_WINDOW_TYPE_POPUP_MENU:
- result |= QXcbWindowFunctions::PopupMenu;
+ result |= WindowType::PopupMenu;
break;
case QXcbAtom::_NET_WM_WINDOW_TYPE_TOOLTIP:
- result |= QXcbWindowFunctions::Tooltip;
+ result |= WindowType::Tooltip;
break;
case QXcbAtom::_NET_WM_WINDOW_TYPE_NOTIFICATION:
- result |= QXcbWindowFunctions::Notification;
+ result |= WindowType::Notification;
break;
case QXcbAtom::_NET_WM_WINDOW_TYPE_COMBO:
- result |= QXcbWindowFunctions::Combo;
+ result |= WindowType::Combo;
break;
case QXcbAtom::_NET_WM_WINDOW_TYPE_DND:
- result |= QXcbWindowFunctions::Dnd;
+ result |= WindowType::Dnd;
break;
case QXcbAtom::_KDE_NET_WM_WINDOW_TYPE_OVERRIDE:
- result |= QXcbWindowFunctions::KdeOverride;
+ result |= WindowType::KdeOverride;
break;
default:
break;
@@ -1540,46 +1511,46 @@ QXcbWindowFunctions::WmWindowTypes QXcbWindow::wmWindowTypes() const
return result;
}
-void QXcbWindow::setWmWindowType(QXcbWindowFunctions::WmWindowTypes types, Qt::WindowFlags flags)
+void QXcbWindow::setWmWindowType(WindowTypes types, Qt::WindowFlags flags)
{
QList<xcb_atom_t> atoms;
// manual selection 1 (these are never set by Qt and take precedence)
- if (types & QXcbWindowFunctions::Normal)
+ if (types & WindowType::Normal)
atoms.append(atom(QXcbAtom::_NET_WM_WINDOW_TYPE_NORMAL));
- if (types & QXcbWindowFunctions::Desktop)
+ if (types & WindowType::Desktop)
atoms.append(atom(QXcbAtom::_NET_WM_WINDOW_TYPE_DESKTOP));
- if (types & QXcbWindowFunctions::Dock)
+ if (types & WindowType::Dock)
atoms.append(atom(QXcbAtom::_NET_WM_WINDOW_TYPE_DOCK));
- if (types & QXcbWindowFunctions::Notification)
+ if (types & WindowType::Notification)
atoms.append(atom(QXcbAtom::_NET_WM_WINDOW_TYPE_NOTIFICATION));
// manual selection 2 (Qt uses these during auto selection);
- if (types & QXcbWindowFunctions::Utility)
+ if (types & WindowType::Utility)
atoms.append(atom(QXcbAtom::_NET_WM_WINDOW_TYPE_UTILITY));
- if (types & QXcbWindowFunctions::Splash)
+ if (types & WindowType::Splash)
atoms.append(atom(QXcbAtom::_NET_WM_WINDOW_TYPE_SPLASH));
- if (types & QXcbWindowFunctions::Dialog)
+ if (types & WindowType::Dialog)
atoms.append(atom(QXcbAtom::_NET_WM_WINDOW_TYPE_DIALOG));
- if (types & QXcbWindowFunctions::Tooltip)
+ if (types & WindowType::Tooltip)
atoms.append(atom(QXcbAtom::_NET_WM_WINDOW_TYPE_TOOLTIP));
- if (types & QXcbWindowFunctions::KdeOverride)
+ if (types & WindowType::KdeOverride)
atoms.append(atom(QXcbAtom::_KDE_NET_WM_WINDOW_TYPE_OVERRIDE));
// manual selection 3 (these can be set by Qt, but don't have a
// corresponding Qt::WindowType). note that order of the *MENU
// atoms is important
- if (types & QXcbWindowFunctions::Menu)
+ if (types & WindowType::Menu)
atoms.append(atom(QXcbAtom::_NET_WM_WINDOW_TYPE_MENU));
- if (types & QXcbWindowFunctions::DropDownMenu)
+ if (types & WindowType::DropDownMenu)
atoms.append(atom(QXcbAtom::_NET_WM_WINDOW_TYPE_DROPDOWN_MENU));
- if (types & QXcbWindowFunctions::PopupMenu)
+ if (types & WindowType::PopupMenu)
atoms.append(atom(QXcbAtom::_NET_WM_WINDOW_TYPE_POPUP_MENU));
- if (types & QXcbWindowFunctions::Toolbar)
+ if (types & WindowType::Toolbar)
atoms.append(atom(QXcbAtom::_NET_WM_WINDOW_TYPE_TOOLBAR));
- if (types & QXcbWindowFunctions::Combo)
+ if (types & WindowType::Combo)
atoms.append(atom(QXcbAtom::_NET_WM_WINDOW_TYPE_COMBO));
- if (types & QXcbWindowFunctions::Dnd)
+ if (types & WindowType::Dnd)
atoms.append(atom(QXcbAtom::_NET_WM_WINDOW_TYPE_DND));
// automatic selection
@@ -1587,27 +1558,27 @@ void QXcbWindow::setWmWindowType(QXcbWindowFunctions::WmWindowTypes types, Qt::W
switch (type) {
case Qt::Dialog:
case Qt::Sheet:
- if (!(types & QXcbWindowFunctions::Dialog))
+ if (!(types & WindowType::Dialog))
atoms.append(atom(QXcbAtom::_NET_WM_WINDOW_TYPE_DIALOG));
break;
case Qt::Tool:
case Qt::Drawer:
- if (!(types & QXcbWindowFunctions::Utility))
+ if (!(types & WindowType::Utility))
atoms.append(atom(QXcbAtom::_NET_WM_WINDOW_TYPE_UTILITY));
break;
case Qt::ToolTip:
- if (!(types & QXcbWindowFunctions::Tooltip))
+ if (!(types & WindowType::Tooltip))
atoms.append(atom(QXcbAtom::_NET_WM_WINDOW_TYPE_TOOLTIP));
break;
case Qt::SplashScreen:
- if (!(types & QXcbWindowFunctions::Splash))
+ if (!(types & WindowType::Splash))
atoms.append(atom(QXcbAtom::_NET_WM_WINDOW_TYPE_SPLASH));
break;
default:
break;
}
- if ((flags & Qt::FramelessWindowHint) && !(type & QXcbWindowFunctions::KdeOverride)) {
+ if ((flags & Qt::FramelessWindowHint) && !(type & WindowType::KdeOverride)) {
// override netwm type - quick and easy for KDE noborder
atoms.append(atom(QXcbAtom::_KDE_NET_WM_WINDOW_TYPE_OVERRIDE));
}
@@ -1627,11 +1598,12 @@ void QXcbWindow::setWmWindowType(QXcbWindowFunctions::WmWindowTypes types, Qt::W
xcb_flush(xcb_connection());
}
-void QXcbWindow::setWmWindowRole(const QByteArray &role)
+void QXcbWindow::setWindowRole(const QString &role)
{
+ QByteArray roleData = role.toLatin1();
xcb_change_property(xcb_connection(), XCB_PROP_MODE_REPLACE, m_window,
atom(QXcbAtom::WM_WINDOW_ROLE), XCB_ATOM_STRING, 8,
- role.size(), role.constData());
+ roleData.size(), roleData.constData());
}
void QXcbWindow::setParentRelativeBackPixmap()