Qt 6.x
The Qt SDK
Loading...
Searching...
No Matches
qxcbintegration.cpp
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#include "qxcbintegration.h"
5#include "qxcbconnection.h"
6#include "qxcbscreen.h"
7#include "qxcbwindow.h"
8#include "qxcbcursor.h"
9#include "qxcbkeyboard.h"
10#include "qxcbbackingstore.h"
11#include "qxcbnativeinterface.h"
12#include "qxcbclipboard.h"
13#include "qxcbeventqueue.h"
14#include "qxcbeventdispatcher.h"
15#if QT_CONFIG(draganddrop)
16#include "qxcbdrag.h"
17#endif
18#include "qxcbglintegration.h"
19
20#ifndef QT_NO_SESSIONMANAGER
21#include "qxcbsessionmanager.h"
22#endif
23#include "qxcbxsettings.h"
24
25#include <xcb/xcb.h>
26
27#include <QtGui/private/qgenericunixfontdatabase_p.h>
28#include <QtGui/private/qgenericunixservices_p.h>
29
30#include <stdio.h>
31
32#include <QtGui/private/qguiapplication_p.h>
33
34#if QT_CONFIG(xcb_xlib)
35#define register /* C++17 deprecated register */
36#include <X11/Xlib.h>
37#undef register
38#endif
39#if QT_CONFIG(xcb_native_painting)
40#include "qxcbnativepainting.h"
41#include "qpixmap_x11_p.h"
42#include "qbackingstore_x11_p.h"
43#endif
44
45#include <qpa/qplatforminputcontextfactory_p.h>
46#include <private/qgenericunixthemes_p.h>
47#include <qpa/qplatforminputcontext.h>
48
49#include <QtGui/QOpenGLContext>
50#include <QtGui/QScreen>
51#include <QtGui/QOffscreenSurface>
52#if QT_CONFIG(accessibility)
53#include <qpa/qplatformaccessibility.h>
54#if QT_CONFIG(accessibility_atspi_bridge)
55#include <QtGui/private/qspiaccessiblebridge_p.h>
56#endif
57#endif
58
59#include <QtCore/QFileInfo>
60
61#if QT_CONFIG(vulkan)
62#include "qxcbvulkaninstance.h"
63#include "qxcbvulkanwindow.h"
64#endif
65
67
68using namespace Qt::StringLiterals;
69
70// Find out if our parent process is gdb by looking at the 'exe' symlink under /proc,.
71// or, for older Linuxes, read out 'cmdline'.
73{
74#if defined(QT_DEBUG) && defined(Q_OS_LINUX)
75 const QString parentProc = "/proc/"_L1 + QString::number(getppid());
76 const QFileInfo parentProcExe(parentProc + "/exe"_L1);
77 if (parentProcExe.isSymLink())
78 return parentProcExe.symLinkTarget().endsWith("/gdb"_L1);
79 QFile f(parentProc + "/cmdline"_L1);
80 if (!f.open(QIODevice::ReadOnly))
81 return false;
83 char c;
84 while (f.getChar(&c) && c) {
85 if (c == '/')
86 s.clear();
87 else
88 s += c;
89 }
90 return s == "gdb";
91#else
92 return false;
93#endif
94}
95
97{
98public:
100};
101
102
103QXcbIntegration *QXcbIntegration::m_instance = nullptr;
104
105QXcbIntegration::QXcbIntegration(const QStringList &parameters, int &argc, char **argv)
106 : m_services(new QXcbUnixServices)
107 , m_instanceName(nullptr)
108 , m_canGrab(true)
109 , m_defaultVisualId(UINT_MAX)
110{
111 Q_UNUSED(parameters);
112
113 m_instance = this;
114 qApp->setAttribute(Qt::AA_CompressHighFrequencyEvents, true);
115
116 qRegisterMetaType<QXcbWindow*>();
117#if QT_CONFIG(xcb_xlib)
118 XInitThreads();
119#endif
120 m_nativeInterface.reset(new QXcbNativeInterface);
121
122 // Parse arguments
123 const char *displayName = nullptr;
124 bool noGrabArg = false;
125 bool doGrabArg = false;
126 if (argc) {
127 int j = 1;
128 for (int i = 1; i < argc; i++) {
129 QByteArray arg(argv[i]);
130 if (arg.startsWith("--"))
131 arg.remove(0, 1);
132 if (arg == "-display" && i < argc - 1)
133 displayName = argv[++i];
134 else if (arg == "-name" && i < argc - 1)
135 m_instanceName = argv[++i];
136 else if (arg == "-nograb")
137 noGrabArg = true;
138 else if (arg == "-dograb")
139 doGrabArg = true;
140 else if (arg == "-visual" && i < argc - 1) {
141 bool ok = false;
142 m_defaultVisualId = QByteArray(argv[++i]).toUInt(&ok, 0);
143 if (!ok)
144 m_defaultVisualId = UINT_MAX;
145 }
146 else
147 argv[j++] = argv[i];
148 }
149 argc = j;
150 } // argc
151
152 bool underDebugger = runningUnderDebugger();
153 if (noGrabArg && doGrabArg && underDebugger) {
154 qWarning("Both -nograb and -dograb command line arguments specified. Please pick one. -nograb takes precedence");
155 doGrabArg = false;
156 }
157
158#if defined(QT_DEBUG)
159 if (!noGrabArg && !doGrabArg && underDebugger) {
160 qCDebug(lcQpaXcb, "Qt: gdb: -nograb added to command-line options.\n"
161 "\t Use the -dograb option to enforce grabbing.");
162 }
163#endif
164 m_canGrab = (!underDebugger && !noGrabArg) || (underDebugger && doGrabArg);
165
166 static bool canNotGrabEnv = qEnvironmentVariableIsSet("QT_XCB_NO_GRAB_SERVER");
167 if (canNotGrabEnv)
168 m_canGrab = false;
169
170 m_connection = new QXcbConnection(m_nativeInterface.data(), m_canGrab, m_defaultVisualId, displayName);
171 if (!m_connection->isConnected()) {
172 delete m_connection;
173 m_connection = nullptr;
174 return;
175 }
176
177 m_fontDatabase.reset(new QGenericUnixFontDatabase());
178
179#if QT_CONFIG(xcb_native_painting)
180 if (nativePaintingEnabled()) {
181 qCDebug(lcQpaXcb, "QXCB USING NATIVE PAINTING");
183 }
184#endif
185}
186
188{
189 delete m_connection;
190 m_connection = nullptr;
191 m_instance = nullptr;
192}
193
195{
196#if QT_CONFIG(xcb_native_painting)
198 return new QX11PlatformPixmap(type);
199#endif
200
202}
203
205{
206 QXcbGlIntegration *glIntegration = nullptr;
207 const bool isTrayIconWindow = QXcbWindow::isTrayIconWindow(window);;
208 if (window->type() != Qt::Desktop && !isTrayIconWindow) {
209 if (window->supportsOpenGL()) {
210 glIntegration = connection()->glIntegration();
211 if (glIntegration) {
212 QXcbWindow *xcbWindow = glIntegration->createWindow(window);
213 xcbWindow->create();
214 return xcbWindow;
215 }
216#if QT_CONFIG(vulkan)
217 } else if (window->surfaceType() == QSurface::VulkanSurface) {
218 QXcbWindow *xcbWindow = new QXcbVulkanWindow(window);
219 xcbWindow->create();
220 return xcbWindow;
221#endif
222 }
223 }
224
225 Q_ASSERT(window->type() == Qt::Desktop || isTrayIconWindow || !window->supportsOpenGL()
226 || (!glIntegration && window->surfaceType() == QSurface::RasterGLSurface)); // for VNC
227 QXcbWindow *xcbWindow = new QXcbWindow(window);
228 xcbWindow->create();
229 return xcbWindow;
230}
231
233{
234 return new QXcbForeignWindow(window, nativeHandle);
235}
236
237#ifndef QT_NO_OPENGL
239{
240 QXcbGlIntegration *glIntegration = m_connection->glIntegration();
241 if (!glIntegration) {
242 qWarning("QXcbIntegration: Cannot create platform OpenGL context, neither GLX nor EGL are enabled");
243 return nullptr;
244 }
245 return glIntegration->createPlatformOpenGLContext(context);
246}
247
248# if QT_CONFIG(xcb_glx_plugin)
249QOpenGLContext *QXcbIntegration::createOpenGLContext(GLXContext context, void *visualInfo, QOpenGLContext *shareContext) const
250{
251 using namespace QNativeInterface::Private;
252 if (auto *glxIntegration = dynamic_cast<QGLXIntegration*>(m_connection->glIntegration()))
253 return glxIntegration->createOpenGLContext(context, visualInfo, shareContext);
254 else
255 return nullptr;
256}
257# endif
258
259#if QT_CONFIG(egl)
260QOpenGLContext *QXcbIntegration::createOpenGLContext(EGLContext context, EGLDisplay display, QOpenGLContext *shareContext) const
261{
262 using namespace QNativeInterface::Private;
263 if (auto *eglIntegration = dynamic_cast<QEGLIntegration*>(m_connection->glIntegration()))
264 return eglIntegration->createOpenGLContext(context, display, shareContext);
265 else
266 return nullptr;
267}
268#endif
269
270#endif // QT_NO_OPENGL
271
273{
274 QPlatformBackingStore *backingStore = nullptr;
275
276 const bool isTrayIconWindow = QXcbWindow::isTrayIconWindow(window);
277 if (isTrayIconWindow) {
278 backingStore = new QXcbSystemTrayBackingStore(window);
279#if QT_CONFIG(xcb_native_painting)
280 } else if (nativePaintingEnabled()) {
281 backingStore = new QXcbNativeBackingStore(window);
282#endif
283 } else {
284 backingStore = new QXcbBackingStore(window);
285 }
286 Q_ASSERT(backingStore);
287 return backingStore;
288}
289
291{
292 QXcbScreen *screen = static_cast<QXcbScreen *>(surface->screen()->handle());
293 QXcbGlIntegration *glIntegration = screen->connection()->glIntegration();
294 if (!glIntegration) {
295 qWarning("QXcbIntegration: Cannot create platform offscreen surface, neither GLX nor EGL are enabled");
296 return nullptr;
297 }
298 return glIntegration->createPlatformOffscreenSurface(surface);
299}
300
302{
303 switch (cap) {
304 case OpenGL:
305 case ThreadedOpenGL:
306 {
307 if (const auto *integration = connection()->glIntegration())
308 return cap != ThreadedOpenGL || integration->supportsThreadedOpenGL();
309 return false;
310 }
311
312 case ThreadedPixmaps:
313 case WindowMasks:
314 case MultipleWindows:
315 case ForeignWindows:
316 case SyncState:
317 case RasterGLSurface:
318 return true;
319
321 {
322 return m_connection->glIntegration()
324 }
325
327 }
328}
329
331{
333}
334
335using namespace Qt::Literals::StringLiterals;
336static const auto xsNetCursorBlink = "Net/CursorBlink"_ba;
337static const auto xsNetCursorBlinkTime = "Net/CursorBlinkTime"_ba;
338static const auto xsNetDoubleClickTime = "Net/DoubleClickTime"_ba;
339static const auto xsNetDoubleClickDistance = "Net/DoubleClickDistance"_ba;
340static const auto xsNetDndDragThreshold = "Net/DndDragThreshold"_ba;
341
343{
344 const auto defaultInputContext = "compose"_L1;
345 // Perform everything that may potentially need the event dispatcher (timers, socket
346 // notifiers) here instead of the constructor.
348 if (icStr.isNull())
349 icStr = defaultInputContext;
350 m_inputContext.reset(QPlatformInputContextFactory::create(icStr));
351 if (!m_inputContext && icStr != defaultInputContext && icStr != "none"_L1)
352 m_inputContext.reset(QPlatformInputContextFactory::create(defaultInputContext));
353
355
356 auto notifyThemeChanged = [](QXcbVirtualDesktop *, const QByteArray &, const QVariant &, void *) {
358 };
359
360 auto *xsettings = connection()->primaryScreen()->xSettings();
361 xsettings->registerCallbackForProperty(xsNetCursorBlink, notifyThemeChanged, this);
362 xsettings->registerCallbackForProperty(xsNetCursorBlinkTime, notifyThemeChanged, this);
363 xsettings->registerCallbackForProperty(xsNetDoubleClickTime, notifyThemeChanged, this);
364 xsettings->registerCallbackForProperty(xsNetDoubleClickDistance, notifyThemeChanged, this);
365 xsettings->registerCallbackForProperty(xsNetDndDragThreshold, notifyThemeChanged, this);
366}
367
369{
372}
373
375{
376 return m_fontDatabase.data();
377}
378
380{
381 return m_nativeInterface.data();
382}
383
384#ifndef QT_NO_CLIPBOARD
386{
387 return m_connection->clipboard();
388}
389#endif
390
391#if QT_CONFIG(draganddrop)
392#include <private/qsimpledrag_p.h>
393QPlatformDrag *QXcbIntegration::drag() const
394{
395 static const bool useSimpleDrag = qEnvironmentVariableIsSet("QT_XCB_USE_SIMPLE_DRAG");
396 if (Q_UNLIKELY(useSimpleDrag)) { // This is useful for testing purposes
397 static QSimpleDrag *simpleDrag = nullptr;
398 if (!simpleDrag)
399 simpleDrag = new QSimpleDrag();
400 return simpleDrag;
401 }
402
403 return m_connection->drag();
404}
405#endif
406
408{
409 return m_inputContext.data();
410}
411
412#if QT_CONFIG(accessibility)
413QPlatformAccessibility *QXcbIntegration::accessibility() const
414{
415#if !defined(QT_NO_ACCESSIBILITY_ATSPI_BRIDGE)
416 if (!m_accessibility) {
418 "Initializing accessibility without event-dispatcher!");
419 m_accessibility.reset(new QSpiAccessibleBridge());
420 }
421#endif
422
423 return m_accessibility.data();
424}
425#endif
426
428{
429 return m_services.data();
430}
431
432Qt::KeyboardModifiers QXcbIntegration::queryKeyboardModifiers() const
433{
434 return m_connection->queryKeyboardModifiers();
435}
436
438{
439 return m_connection->keyboard()->possibleKeys(e);
440}
441
443{
445}
446
448{
450}
451
452#define RETURN_VALID_XSETTINGS(key) { \
453 auto value = connection()->primaryScreen()->xSettings()->setting(key); \
454 if (value.isValid()) return value; \
455}
456
458{
459 switch (hint) {
461 bool ok = false;
462 // If cursor blinking is off, returns 0 to keep the cursor awlays display.
463 if (connection()->primaryScreen()->xSettings()->setting(xsNetCursorBlink).toInt(&ok) == 0 && ok)
464 return 0;
465
467 break;
468 }
471 break;
474 break;
484 // TODO using various xcb, gnome or KDE settings
485 break; // Not implemented, use defaults
489 // The default (in QPlatformTheme::defaultThemeHint) is 10 pixels, but
490 // on a high-resolution screen it makes sense to increase it.
491 qreal dpi = 100;
492 if (const QXcbScreen *screen = connection()->primaryScreen()) {
493 if (screen->logicalDpi().first > dpi)
494 dpi = screen->logicalDpi().first;
495 if (screen->logicalDpi().second > dpi)
496 dpi = screen->logicalDpi().second;
497 }
498 return (hint == QPlatformIntegration::FlickStartDistance ? qreal(15) : qreal(10)) * dpi / qreal(100);
499 }
501 // X11 always has support for windows, but the
502 // window manager could prevent it (e.g. matchbox)
503 return false;
505 return false;
506 default:
507 break;
508 }
510}
511
513{
516 if (!arguments.isEmpty() && !arguments.front().isEmpty()) {
518 const int lastSlashPos = result.lastIndexOf(u'/');
519 if (lastSlashPos != -1)
520 result.remove(0, lastSlashPos + 1);
521 }
522 return result;
523}
524
525static const char resourceNameVar[] = "RESOURCE_NAME";
526
528{
529 if (m_wmClass.isEmpty()) {
530 // Instance name according to ICCCM 4.1.2.5
532 if (m_instanceName)
533 name = QString::fromLocal8Bit(m_instanceName);
536 if (name.isEmpty())
538
539 // Note: QCoreApplication::applicationName() cannot be called from the QGuiApplication constructor,
540 // hence this delayed initialization.
542 if (className.isEmpty()) {
544 if (!className.isEmpty() && className.at(0).isLower())
545 className[0] = className.at(0).toUpper();
546 }
547
548 if (!name.isEmpty() && !className.isEmpty())
549 m_wmClass = std::move(name).toLocal8Bit() + '\0' + std::move(className).toLocal8Bit() + '\0';
550 }
551 return m_wmClass;
552}
553
554#if QT_CONFIG(xcb_sm)
556{
557 return new QXcbSessionManager(id, key);
558}
559#endif
560
562{
563 m_connection->sync();
564}
565
566// For QApplication::beep()
568{
570 if (!priScreen)
571 return;
572 QPlatformScreen *screen = priScreen->handle();
573 if (!screen)
574 return;
575 xcb_connection_t *connection = static_cast<QXcbScreen *>(screen)->xcb_connection();
576 xcb_bell(connection, 0);
577 xcb_flush(connection);
578}
579
581{
582#if QT_CONFIG(xcb_native_painting)
583 static bool enabled = qEnvironmentVariableIsSet("QT_XCB_NATIVE_PAINTING");
584 return enabled;
585#else
586 return false;
587#endif
588}
589
590#if QT_CONFIG(vulkan)
591QPlatformVulkanInstance *QXcbIntegration::createPlatformVulkanInstance(QVulkanInstance *instance) const
592{
593 return new QXcbVulkanInstance(instance);
594}
595#endif
596
598{
599 auto unixServices = dynamic_cast<QGenericUnixServices *>(services());
600 unixServices->setApplicationBadge(number);
601}
602
604{
605 return "x11:"_L1 + QString::number(window->winId(), 16);
606}
607
\inmodule QtCore
Definition qbytearray.h:57
uint toUInt(bool *ok=nullptr, int base=10) const
Returns the byte array converted to an {unsigned int} using base base, which is ten by default.
bool isEmpty() const noexcept
Returns true if the byte array has size 0; otherwise returns false.
Definition qbytearray.h:106
static QAbstractEventDispatcher * eventDispatcher()
Returns a pointer to the event dispatcher object for the main thread.
static QStringList arguments()
QString applicationName
the name of this application
\inmodule QtCore \reentrant
Definition qfileinfo.h:22
bool isSymLink() const
Returns true if this object points to a symbolic link, shortcut, or alias; otherwise returns false.
QString symLinkTarget() const
\inmodule QtCore
Definition qfile.h:93
void setApplicationBadge(qint64 number)
static QPlatformTheme * createUnixTheme(const QString &name)
Creates a UNIX theme according to the detected desktop environment.
static QStringList themeNames()
QScreen * primaryScreen
the primary (or default) screen of the application.
The QKeyEvent class describes a key event.
Definition qevent.h:423
Definition qlist.h:74
bool isEmpty() const noexcept
Definition qlist.h:390
reference front()
Definition qlist.h:684
\inmodule QtGui
QScreen * screen() const
Returns the screen to which the offscreen surface is connected.
\inmodule QtGui
The QPlatformBackingStore class provides the drawing area for top-level windows.
The QPlatformClipboard class provides an abstraction for the system clipboard.
The QPlatformDrag class provides an abstraction for drag.
The QPlatformFontDatabase class makes it possible to customize how fonts are discovered and how they ...
static QPlatformInputContext * create()
The QPlatformInputContext class abstracts the input method dependent data and composing state.
virtual QPlatformPixmap * createPlatformPixmap(QPlatformPixmap::PixelType type) const
Factory function for QPlatformPixmap.
virtual QPlatformSessionManager * createPlatformSessionManager(const QString &id, const QString &key) const
virtual QVariant styleHint(StyleHint hint) const
virtual bool hasCapability(Capability cap) const
Capability
Capabilities are used to determine specific features of a platform integration.
The QPlatformNativeInterface class provides an abstraction for retrieving native resource handles.
The QPlatformOpenGLContext class provides an abstraction for native GL contexts.
The QPlatformPixmap class provides an abstraction for native pixmaps.
The QPlatformScreen class provides an abstraction for visual displays.
The QPlatformServices provides the backend for desktop-related functionality.
The QPlatformTheme class allows customizing the UI based on themes.
The QPlatformVulkanInstance class provides an abstraction for Vulkan instances.
The QPlatformWindow class provides an abstraction for top-level windows.
T * data() const noexcept
Returns the value of the pointer referenced by this object.
void reset(T *other=nullptr) noexcept(noexcept(Cleanup::cleanup(std::declval< T * >())))
Deletes the existing object it is pointing to (if any), and sets its pointer to other.
The QScreen class is used to query screen properties. \inmodule QtGui.
Definition qscreen.h:32
QPlatformScreen * handle() const
Get the platform screen handle.
Definition qscreen.cpp:83
QSimpleDrag implements QBasicDrag for Drag and Drop operations within the Qt Application itself.
\inmodule QtCore
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:127
static QString fromLocal8Bit(QByteArrayView ba)
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition qstring.cpp:5788
bool isNull() const
Returns true if this string is null; otherwise returns false.
Definition qstring.h:898
bool endsWith(const QString &s, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
Returns true if the string ends with s; otherwise returns false.
Definition qstring.cpp:5350
static QString number(int, int base=10)
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition qstring.cpp:7822
@ RasterGLSurface
Definition qsurface.h:33
@ VulkanSurface
Definition qsurface.h:35
\inmodule QtCore
Definition qvariant.h:64
The QVulkanInstance class represents a native Vulkan instance, enabling Vulkan rendering onto a QSurf...
static void handleThemeChange(QWindow *window=nullptr)
\inmodule QtGui
Definition qwindow.h:63
QXcbKeyboard * keyboard() const
QXcbGlIntegration * glIntegration() const
QXcbScreen * primaryScreen() const
Qt::KeyboardModifiers queryKeyboardModifiers() const
QXcbClipboard * clipboard() const
static QAbstractEventDispatcher * createEventDispatcher(QXcbConnection *connection)
virtual bool supportsSwitchableWidgetComposition() const
virtual QPlatformOpenGLContext * createPlatformOpenGLContext(QOpenGLContext *context) const =0
virtual QXcbWindow * createWindow(QWindow *window) const =0
virtual QPlatformOffscreenSurface * createPlatformOffscreenSurface(QOffscreenSurface *surface) const =0
QPlatformServices * services() const override
bool hasCapability(Capability cap) const override
QByteArray wmClass() const
QPlatformWindow * createForeignWindow(QWindow *window, WId nativeHandle) const override
Qt::KeyboardModifiers queryKeyboardModifiers() const override
void initialize() override
Performs initialization steps that depend on having an event dispatcher available.
QPlatformNativeInterface * nativeInterface() const override
bool nativePaintingEnabled() const
QPlatformOpenGLContext * createPlatformOpenGLContext(QOpenGLContext *context) const override
Factory function for QPlatformOpenGLContext.
void sync() override
QPlatformTheme * createPlatformTheme(const QString &name) const override
void beep() const override
QPlatformFontDatabase * fontDatabase() const override
Accessor for the platform integration's fontdatabase.
void setApplicationBadge(qint64 number) override
QPlatformPixmap * createPlatformPixmap(QPlatformPixmap::PixelType type) const override
Factory function for QPlatformPixmap.
QStringList themeNames() const override
QPlatformWindow * createPlatformWindow(QWindow *window) const override
Factory function for QPlatformWindow.
QVariant styleHint(StyleHint hint) const override
QPlatformBackingStore * createPlatformBackingStore(QWindow *window) const override
Factory function for QPlatformBackingStore.
static QXcbIntegration * instance()
QPlatformClipboard * clipboard() const override
Accessor for the platform integration's clipboard.
QXcbIntegration(const QStringList &parameters, int &argc, char **argv)
QXcbConnection * connection() const
QAbstractEventDispatcher * createEventDispatcher() const override
Factory function for the GUI event dispatcher.
QList< int > possibleKeys(const QKeyEvent *e) const override
Should be used to obtain a list of possible shortcuts for the given key event.
QPlatformOffscreenSurface * createPlatformOffscreenSurface(QOffscreenSurface *surface) const override
Factory function for QOffscreenSurface.
void moveToScreen(QWindow *window, int screen)
QPlatformInputContext * inputContext() const override
Returns the platforms input context.
QList< int > possibleKeys(const QKeyEvent *event) const
QXcbXSettings * xSettings() const
QString portalWindowIdentifier(QWindow *window) override
static bool isTrayIconWindow(QWindow *window)
Definition qxcbwindow.h:144
virtual void create()
void registerCallbackForProperty(const QByteArray &property, PropertyChangeFunc func, void *handle)
double e
QList< QVariant > arguments
struct wl_display * display
Definition linuxdmabuf.h:41
Combined button and popup list for selecting options.
@ AA_CompressHighFrequencyEvents
Definition qnamespace.h:459
@ Desktop
Definition qnamespace.h:214
static void * context
static QString displayName(CGDirectDisplayID displayID)
#define Q_UNLIKELY(x)
#define qApp
typedef EGLDisplay(EGLAPIENTRYP PFNEGLGETPLATFORMDISPLAYEXTPROC)(EGLenum platform
QPlatformFontDatabase QGenericUnixFontDatabase
#define qWarning
Definition qlogging.h:162
#define qCDebug(category,...)
GLuint64 key
GLenum GLenum GLsizei const GLuint GLboolean enabled
GLfloat GLfloat f
GLenum type
GLuint name
const GLubyte * c
GLuint64EXT * result
[6]
GLdouble s
[6]
Definition qopenglext.h:235
GLenum cap
#define Q_ASSERT(cond)
Definition qrandom.cpp:47
#define Q_ASSERT_X(cond, x, msg)
Definition qrandom.cpp:48
SSL_CTX int(*) void arg)
static QT_BEGIN_NAMESPACE QVariant hint(QPlatformIntegration::StyleHint h)
QScreen * screen
[1]
Definition main.cpp:29
Q_CORE_EXPORT QByteArray qgetenv(const char *varName)
Q_CORE_EXPORT bool qEnvironmentVariableIsSet(const char *varName) noexcept
#define Q_UNUSED(x)
long long qint64
Definition qtypes.h:55
double qreal
Definition qtypes.h:92
static int toInt(const QChar &qc, int R)
#define enabled
const char className[16]
[1]
Definition qwizard.cpp:100
static const auto xsNetCursorBlink
static const auto xsNetDndDragThreshold
static QString argv0BaseName()
static const auto xsNetDoubleClickTime
static const auto xsNetCursorBlinkTime
static bool runningUnderDebugger()
static const auto xsNetDoubleClickDistance
#define RETURN_VALID_XSETTINGS(key)
static const char resourceNameVar[]
void qt_xcb_native_x11_info_init(QXcbConnection *conn)
QObject::connect nullptr
aWidget window() -> setWindowTitle("New Window Title")
[2]