summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/xcb/qxcbwindow.cpp
Commit message (Collapse)AuthorAgeFilesLines
* QWindow: Persist foreign winId to support destroy/create cyclesTor Arne Vestbø6 days1-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | We used to set a private _q_foreignWinId property on QWindow when creating foreign windows, and this was the mechanism which we then passed the foreign winId to the platform plugin. With c585802e946d97e7d177ea334a162dc7bc286b84 this was removed, since we now were passing the winId through via explicit QPA APIs, and since 0c6911e5cde24c45d6f2c08b6e71064bdd1eccfa removed the ability to explicitly destroy() a foreign window. But when closing a QWindow, we destroy both the window itself, and all its children, including foreign windows. In this case we still want to support recreating the foreign window, for example when the parent window is shown again. To enable this we restore the _q_foreignWinId private property, but keep the limitation of not being able to explicitly destroy a foreign window. Pick-to: 6.7 6.5 Fixes: QTBUG-124160 Change-Id: Ia885ba9f043e64fb21eedd2b4c344679726f1b5c Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
* XCB: Suppress leave event, when mouse leaves with button pressedAxel Spoerl2024-04-101-9/+11
| | | | | | | | Fixes: QTBUG-124003 Pick-to: 6.7 6.6 6.5 6.2 5.15 Change-Id: I232f731b4b5f9e332b1297e5fdae2cadbdf2db1a Reviewed-by: Liang Qi <liang.qi@qt.io> Reviewed-by: Błażej Szczygieł <mumei6102@gmail.com>
* xcb: Avoid recreating xcb window in QXcbWindow::requestActivateWindow()Liang Qi2024-03-191-1/+6
| | | | | | | | | | | | 12203e94f5a34b59b6a7389402c854e823135a35 exposes the issue in xcb qpa plugin. We should not recreate xcb window via the call of focusWindow->winId(). Fixes: QTBUG-123032 Pick-to: 6.7 6.6 6.5 6.2 5.15 Change-Id: I6da4f3e64a9d7a92a2aab714591986c5d128fbd4 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* XCB: Unset the connection's mousePressWindow if it's this windowAndy Shaw2024-03-081-0/+2
| | | | | | | | | In some rare cases it can delete the window before this is handled by other calls, so rather than crashing we clean up. Pick-to: 6.7 6.6 6.5 6.2 5.15 Change-Id: Iddcd9890f0c13f4130626b0ed9c5b32f5890208d Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
* Fix -Wimplicit-fallthrough for clangTim Blechmann2024-03-011-0/+1
| | | | | | | | | | | | | | | | | | | Clang's `-Wimplicit-fallthrough` warnings are a little stricter than gcc's interpretation: switch (i) { case 0: foo(); case 4: break; } While gcc accepts the implicit fallthrough, if the following statement is a trivial `break`, clang will warn about it. Pick-to: 6.7 Change-Id: I38e0817f1bc034fbb552aeac21de1516edcbcbb0 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* QXcbWindow::handleLeaveNotifyEvent(): Consume when leaving geometryAxel Spoerl2024-02-171-5/+14
| | | | | | | | | | | | | | | | | | | | | | QXcbConnection::mousePressWindow() returns the XCB toplevel window, which has consumed the window system's last mouse press. When the function returns a valid pointer, QXcbWindow::handleLeaveNotifyEvent() didn't propagate the leave event to QWSI::handleLeaveEvent(). Instead, the leave event was ingored. That behavior is correct, e.g. when a button on the main window is pressed and the mouse hovers away from the button, with the mouse button continuously being pressed. It is not correct, if the mouse cursor leaves the main window. => Ignore the leave event only as long as the mouse cursor remains within mousePressWindow()->geometry(). => Deliver the leave event, when the mouse cursor leaves the window. Fixes: QTBUG-119864 Pick-to: 6.7 6.6 6.5 6.2 5.15 Change-Id: I30a6ebedcd148285b9f17dfd87885ff67726b54c Reviewed-by: Liang Qi <liang.qi@qt.io>
* QXcbWindow: protect access to m_mapped with a QMutexAxel Spoerl2023-12-061-5/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | QXcbWindow::requestActivateWindow() is called from the main thread, while handleMapNotifyEvent() is called from the XCB event thread. In a data race, handleMapNotifyEvent sets m_mapped to true, before requestActivateWindow() checks if it is false and sets m_deferredActivation to true. If that happens, a window activation is skipped until the next window systems event is processed. This is harmless in a normal application environment, where each mouse move causes window systems events to be processed. In an autotest environment, it causes flakiness, because an expected window activation may or may not happen. As a workaround, QApplicationPrivate::setActiveWindow() is frequently called after QWidget::activateWindow() or QWindow::requestActivate(), to set the active window on application level. In essence, this is setting expected outcome of a skipped deferred activation by force. This patch protects access to m_mapped and m_deferredActivation with a QMutex in both methods. That prevents the data race and ensures all deferred activations processed. Calling QApplicationPrivate::setActiveWindow() after activation on window/widget level becomes redundant. Task-number: QTBUG-119287 Pick-to: 6.6 6.5 Change-Id: I2eee69292afe0ef6381880a10d4e8483c2c7cbfa Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* Rename QWSI::handleWindowActivated to QWSI::handleFocusWindowChangedTor Arne Vestbø2023-11-231-9/+9
| | | | | | | | | | | | | | | | | | | A single QWindow is QGuiApplication::focusWindow() at a time, and this window is typically also QWindow::isActive(), but other windows may also be QWindow::isActive(). For example, we treat any sibling or ancestor of the focusWindow as being QWindow::isActive() as well. In addition, in the case of non-QWindow child windows, we may have to query the platform for the activation state, which means we also need a way for the platform to reflect changes in this state through QWSI. The current API for this, QWSI::handleWindowActivated, is in practice a focus window change API, so as a first step let's rename it to better reflect what it's doing. Task-number: QTBUG-119287 Change-Id: I381baf8505dd13a4a829c961095a8d2ed120092b Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
* xcb: only set base size when it's validLiang Qi2023-11-171-1/+2
| | | | | | | | | | | | | | | | | In rare situation, base size could be (-1,-1) or (-2,-2) for high dpi, it will be converted into huge positive numbers. https://tronche.com/gui/x/icccm/sec-4.html If a base size is not provided, the minimum size is to be used in its place and vice versa. Pick-to: 6.6 6.5 6.2 5.15 Task-number: QTBUG-117702 Change-Id: I900ed82f2291fb454d7e34a0dee27459d0a57240 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io> Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
* xcb: update WM_TRANSIENT_FOR on transientParent native window recreationLiang Qi2023-11-161-17/+52
| | | | | | | | | It follows f9e4402ffeef791e66b7b2f2cc332000df7f5cd4. Fixes: QTBUG-105395 Pick-to: 6.6 6.5 Change-Id: I399c448517b7dbdc28ba33f75ae43102836a8998 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* xcb: make QXcbWindow inherit QObjectLiang Qi2023-11-161-15/+15
| | | | | | Pick-to: 6.6 6.5 Change-Id: I418305f1e66bdf90b8bda724976916e320012961 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* xcb: unset states and set new ones as needMike Chen2023-11-021-10/+8
| | | | | | | | | | | | | | | Should not unset all the old state and set the new ones. Only unset the state that needs to be unset. If states changes from maximized to minimized, there is no need to unset the maximized state and set the maximized states again. (minimized and maximized can exist simultaneously :) This amends f61b140482d9578c07410a5979379e44e05352e5 . Pick-to: 6.6 6.5 6.2 Change-Id: Ic93122b92fafcdba973b885e299b282408da7a1c Reviewed-by: Liang Qi <liang.qi@qt.io>
* xcb: set _KDE_NET_WM_DESKTOP_FILE and _GTK_APPLICATION_ID for windowLiang Qi2023-10-061-0/+26
| | | | | | | | | | | in top level, which are in used very common for KDE and GNOME. Pick-to: 6.6 6.5 6.2 Fixes: QTBUG-117488 Change-Id: I88fe7b4afe44e4ac8f07e60e990cbe68498e98d9 Reviewed-by: Nicolas Fella <nicolas.fella@kdab.com> Reviewed-by: Ilya Fedin <fedin-ilja2010@ya.ru> Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
* xcb: replace a warning with debug infoLiang Qi2023-09-251-1/+1
| | | | | | | Pick-to: 6.6 6.5 6.2 5.15 Change-Id: I850297ad34edaf5dd66f56f549325745f2f5a07f Reviewed-by: Keith Kyzivat <keith.kyzivat@qt.io> Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* xcb: Reflect geometry of foreign window on creationTor Arne Vestbø2023-09-121-0/+12
| | | | | | Pick-to: 6.6 Change-Id: I305b256696a32454f64c12c5a8901b65506fc520 Reviewed-by: Liang Qi <liang.qi@qt.io>
* XCB: do not use reserved identifiersGiuseppe D'Angelo2023-02-071-152/+152
| | | | | | | | | | | Any identifier starting with underscore followed by a capital letter is reserved for the implementation in C++, so don't use them. Rename the entries in the Atom enumeration by adding an "Atom" prefix to them. Pick-to: 6.2 6.4 6.5 Change-Id: I059e2093149f39cc9324cd1159c0d9e076eda93a Reviewed-by: JiDe Zhang <zhangjide@uniontech.com> Reviewed-by: Liang Qi <liang.qi@qt.io>
* qxcbwindow.cpp: Fix sign-compare and another warningsLiang Qi2023-01-111-3/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | qsizetype(int32 on 32bit, int64 on 64bit) vs uint32. qxcbwindow.cpp: In member function 'virtual void QXcbWindow::setWindowIcon(const QIcon&)': qxcbwindow.cpp:1300:30: warning: comparison of integer expressions of different signedness: 'qsizetype' {aka 'int'} and 'uint32_t' {aka 'unsigned int'} [-Wsign-compare] 1300 | if (icon_data.size() > xcb_get_maximum_request_length(xcb_connection())) { | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ qxcbwindow.cpp:1301:53: warning: format '%llu' expects argument of type 'long long unsigned int', but argument 3 has type 'qsizetype' {aka 'int'} [-Wformat=] 1301 | qWarning("Ignoring window icon: Size %llu exceeds maximum xcb request length %u.", | ~~~^ | | | long long unsigned int | %u 1302 | icon_data.size(), xcb_get_maximum_request_length(xcb_connection())); | ~~~~~~~~~~~~~~~~ | | | qsizetype {aka int} This amends ebdaf8ef9cea6f3669fc73bc3395acf2e497f7fc. Fixes: QTBUG-109610 Pick-to: 6.5 6.4 6.2 5.15 Change-Id: I2c9b5ad27881658463dd0870639c42d3ea8e7aba Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
* Set geometry property in QXcbWindow after checking minimum sizeAxel Spoerl2022-12-121-5/+5
| | | | | | | | | | | | | | | | | | | | | | QXcbWindow::create() bound the window's size to windowMinimumSize(), after its size had been inherited from parent(). QPlatformWindow::setGeometry() was called before that sanity check. When a fullscreen window is re-mapped from a deactivated screen to the remaining screen, the call to QPlatformWindow::setGeometry() assigns an invalid QRect to QPlatformWindowPrivate::rect The negative int values x2 and/or y2 cause QXcbBackingStoreImage::flushPixmap to address unmapped memory and crash. This patch moves the call to QPlatformWindow::setGeometry() from before to after bounding to a minimum value. That assures a valid rectangle to be assigned in all cases. Fixes: QTBUG-109226 Pick-to: 6.4 6.2 5.15 Change-Id: I349a0f3c721059a9013a275de5b4cb147fbdd7a1 Reviewed-by: Liang Qi <liang.qi@qt.io>
* Port from container.count()/length() to size()Marc Mutz2022-10-041-5/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is semantic patch using ClangTidyTransformator: auto QtContainerClass = expr(hasType(namedDecl(hasAnyName(<classes>)))).bind(o) makeRule(cxxMemberCallExpr(on(QtContainerClass), callee(cxxMethodDecl(hasAnyName({"count", "length"), parameterCountIs(0))))), changeTo(cat(access(o, cat("size"), "()"))), cat("use 'size()' instead of 'count()/length()'")) a.k.a qt-port-to-std-compatible-api with config Scope: 'Container'. <classes> are: // sequential: "QByteArray", "QList", "QQueue", "QStack", "QString", "QVarLengthArray", "QVector", // associative: "QHash", "QMultiHash", "QMap", "QMultiMap", "QSet", // Qt has no QMultiSet Change-Id: Ibe8837be96e8d30d1846881ecd65180c1bc459af Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* Move QPlatformScreen::deviceIndependentGeometry() logic to QScreenTor Arne Vestbø2022-09-081-1/+3
| | | | | | | | | | Having the logic in QPlatformScreen was inconsistent with how the high-DPI scaling logic sits on top of the platform layer, and also made the implementation of QScreenPrivate::updateHighDpi() a bit inconsistent in how the geometry vs available geometry was resolved. Change-Id: I683ab34dfc8579e2c887cb8fe3059c9c9fdb71a7 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* xcb: Port XSync call in QXcbWindow::create to xcbIlya Fedin2022-06-211-3/+1
| | | | | | | | | QXcbConnection::sync is a full equivalent of calling XSync with false, they both are sending GetInputFocus request and getting its reply Pick-to: 6.4 Change-Id: I4f91b9447a02def41a8693a54312856b56e74811 Reviewed-by: Liang Qi <liang.qi@qt.io>
* Update window state in QWindowsWindow and QXcbWindow geometry settersAxel Spoerl2022-06-171-0/+2
| | | | | | | | | | | | | | | | | When QWidget::resize() is called on a maximized or minimized QWidget, the window state of the widget and the corresponding QWindow is not updated (i.e. remains maximized or minimized). This patch updates the window state to Qt:WindowNoState when setGeometry() is called in QWindowsWindow or QXcbWindow. A test is added in tst_QWidget. Fixes: QTBUG-104201 Pick-to: 6.4 Change-Id: I07491fb9293d13509573fc403750da0a50f6a785 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io> Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* Use SPDX license identifiersLucie Gérard2022-05-161-38/+2
| | | | | | | | | | | | | Replace the current license disclaimer in files by a SPDX-License-Identifier. Files that have to be modified by hand are modified. License files are organized under LICENSES directory. Task-number: QTBUG-67283 Change-Id: Id880c92784c40f3bbde861c0d93f58151c18b9f1 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Lars Knoll <lars.knoll@qt.io> Reviewed-by: Jörg Bornemann <joerg.bornemann@qt.io>
* Plugins: use _L1 for for creating Latin-1 string literalsSona Kurazyan2022-05-041-1/+3
| | | | | | | | | As a drive-by, fix qsizetype -> int narrowing conversion warnings for the touched lines. Task-number: QTBUG-98434 Change-Id: I7fadd3cf27ad099028d70f05956303e3af62c0f5 Reviewed-by: Marc Mutz <marc.mutz@qt.io>
* Ignore window icon in XCB when its size exceeds maximum request lengthAxel Spoerl2022-04-291-0/+6
| | | | | | | | | | | | | | When setting a window icon with its data size exceeding the value returned by xcb_get_maximum_request_length(), the application fails with XCB error code 4 (Maximum allowed requested length exceeded). This patch adds a check if icon_data.size() exceeds xcb_get_maximum_request_length(). If that is the case the icon is being ignored and a warning is logged. Fixes: QTBUG-102628 Pick-to: 6.3 6.2 5.15 Change-Id: Id47a0833efd16cd29b030e8c880acb416cbc500b Reviewed-by: Liang Qi <liang.qi@qt.io>
* xcb: recreate xcb window under some conditionsLiang Qi2022-04-191-0/+14
| | | | | | | | | | | | | | | | | | | | | | | | | Some netWmState needs to be set during unmap/hide(), which is too difficult to follow, and causes m_mapped status out of sync very easily sometimes, which we had tried in e946e6895a8517a887ac246905e0769edd766fcc . Destroy the xcb window and recreate new could make the thing much easier. This practice is also used in other platforms, such as cocoa plugin. In Qt 4, the platform window was destoryed and re-created in this situation on all platforms, which was not ported into Qt5. See also the code between setWinId(0) and createWinId() in QWidgetPrivate::setParent_sys() in qwidget_x11.cpp/qwidget_win.cpp/ qwidget_mac.mm. Fixes: QTBUG-69515 Fixes: QTBUG-73485 Fixes: QTBUG-81341 Pick-to: 6.3 6.2 5.15 Change-Id: If55c57a198bc785719b61b8748dabd8281c9639d Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* Revert "xcb: implement missing bits from ICCCM 4.1.4 WM_STATE handling"Liang Qi2022-04-191-103/+12
| | | | | | | | | | | | | | | | | | This reverts commit e946e6895a8517a887ac246905e0769edd766fcc. It clears the duplicate show() and hide() too aggressive in handleDeferredTasks() and can cause visible states out of sync between qt and system(x11) when user switches visible on and off very frequently. This change also reverts 28138aa80a14279a72af2818f5bbbaa670283964. Fixes: QTBUG-101347 Fixes: QTBUG-99810 Task-number: QTBUG-69515 Pick-to: 6.2 6.3 5.15 Change-Id: I419c324634be8ee6884e02032bb53a42738305ac Reviewed-by: Liang Qi <liang.qi@qt.io>
* xcb: fix a typo for WindowTypesLiang Qi2022-03-011-1/+1
| | | | | | | Pick-to: 6.3 6.2 5.15 Fixes: QTBUG-101306 Change-Id: If02fe4997d27b952886ce664133d1aafc2b41669 Reviewed-by: Liang Qi <liang.qi@qt.io>
* Remove XCB_EVENT_MASK_RESIZE_REDIRECT for Qt:WindowTransparentForInputInho Lee2021-12-031-1/+1
| | | | | | | | | | | | | In xcb plugin, XCB_EVENT_MASK_RESIZE_REDIRECT is set but it is not necessary. Mouse events are disabled by setTransparentForMouseEvents and there is no reason to have this event mask. Fixes: QTBUG-86372 Pick-to: 6.2 5.15 Change-Id: I2124b0684a0847d6705344bb5850bac178a292b6 Reviewed-by: Liang Qi <liang.qi@qt.io> Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
* xcb: Implement support for touchpad gesturesPovilas Kanapickas2021-11-151-0/+1
| | | | | | | | | | | | | | | | | | | | They map to the data exposed by libinput exactly the same way as touchpad gestures on Wayland. The implementation is functionally the same and follows the same patterns to preserve similar behavior across X11 and Wayland. For example, we use the last known pointer position as the position for gestures, even though on X11 this data is available as part of events. The new implementation is only enabled if the used xcb supports the required APIs. [ChangeLog][Platform Specific Changes][X11] Touchpads can now detect multi-finger gestures and send RotateNativeGesture, ZoomNativeGesture and PanNativeGesture events, since XInput 2.4 and X Server 21.1. Change-Id: If404dcf8385210deadeb7e7c6d29171e9abc9e50 Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
* Fix show()/hide() for child windows on xcbLars Knoll2021-11-011-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Change e946e6895a8517a887ac246905e0769edd766fcc implements proper support for ICCM 4.1.4 window state handling. One issue it addressed is that a show() after a hide() needs to be delayed until the window manager/X-server has processed the previous event. This was handled with a deferred task list to send the map/unmap events. According to ICCM, we should wait for the _NET_WM_STATE notification before processing the deferred events. But this is only true for top level windows, as child windows are not handled by the window manager and will never receive any _NET_WM_STATE notifications. For those, we should use the unmap notify event, which means that the X-server has processed the unmap and handle deferred events once that notification has been received. This fixes an issue in Qt Multimedia, where QVideoWidget would not show the video anymore after a minimize of the player or when making the QVideoWidget fullscreen. This is because QVideoWidget uses an embedded QWindow to render video using HW acceleration. Fixes: QTBUG-97257 Pick-to: 6.2 5.15 Change-Id: I5c47eba3276a1f243bdafd5346f353c7843403bb Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io> Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* xcb: Fix typos in source code commentsJonas Kvinge2021-10-141-1/+1
| | | | | Change-Id: I3a91f57d3c47d9e96215d5dc064664626a8f65e7 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* xcb: implement missing bits from ICCCM 4.1.4 WM_STATE handlingGatis Paeglis2021-08-101-12/+103
| | | | | | | | | | | | | | | | | | | | ICCCM 4.1.4 says: Clients that want to re-use a client window (e.g. by mapping it again) after withdrawing it must wait for the withdrawal to be complete before proceeding. The preferred method for doing this is for clients to wait for a windown manager to update or remove the WM_STATE property. This patch implements the required logic. Qt 4 had something similar. Without this patch we are calling various setter functions on a native window while it is in an undefined state. Fixes: QTBUG-69515 Pick-to: 6.2 5.15 Done-with: Liang Qi <liang.qi@qt.io> Change-Id: I377a66ad3d5e43f14465d0ea670b2f43f96ed7d3 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io> Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
* xcb: fix QWindow::startSystemMove()/Resize() triggered by touchLiang Qi2021-06-161-2/+4
| | | | | | | | | | Abort the system move/resise at XCB_INPUT_TOUCH_END. Limit the behavior only on supported platforms, such as KDE and OpenBox. Change-Id: I53c86979ca56f4de8c5cf2807f781abdad6987b2 Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
* xcb: fix QWindow::startSystemMove()/Resize() triggered by mouseLiang Qi2021-06-161-4/+4
| | | | | | | | | | | | | | | | We can't get mouse release event from master pointers after QXcbWindow::doStartSystemMoveResize() which calls xcb_ungrab_pointer(), it looks like most X11 WMs work as that. So we try to get mouse release event from slave pointers. Based on https://specifications.freedesktop.org/wm-spec/1.4/ar01s04.html , we need to send _NET_WM_MOVERESIZE_CANCEL when we get mouse release event. Task-number: QTBUG-91077 Change-Id: I01e74a01c87b381ee7cd6f20d51a1fa61c0e98fc Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* Remove Qt6 ifdef switches from pluginsAllan Sandfeld Jensen2021-05-071-4/+0
| | | | | | | Removing dead code Change-Id: I368fcec95d230e1face18062ff19704608354654 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
* xcb: unset old states and set new ones for windowLiang Qi2021-02-151-16/+33
| | | | | | | | | This partly reverts a02959bb5b43a3f9d881e5213ceedf535202b6a1. Pick-to: 6.1 6.0 5.15 5.12 Fixes: QTBUG-87078 Change-Id: I69e18ad3c0a8d142b2e1f5ab87990addc97d9df1 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* Build fixes for GCC 11Ville Voutilainen2021-01-191-1/+1
| | | | | | | Task-number: QTBUG-89977 Change-Id: Ic1b7ddbffb8a0a00f8c621d09a868f1d94a52c21 Reviewed-by: Lars Knoll <lars.knoll@qt.io> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* xcb: document QXcbEventQueue::PeekOption enumGatis Paeglis2021-01-011-1/+1
| | | | | | | | And renamed PeekRemove* to PeekConsumed to document better that nodes are not removed when peeking. Change-Id: I7349f57fcfc3287d1a1309a31ee7f481f8d18755 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* xcb: Avoid BadMatch error when creating non-OpenGL windowAlexander Volkov2020-09-251-13/+3
| | | | | | | | | | | The Xorg Server requires colormap when creating a window if the window's parent either has a different visual or has no colormap. To simplify logic and avoid extra requests, create a new window with colormap unconditionally. Pick-to: 5.15 Change-Id: I21a53f9146ae0a03b38bb3a07c8a478043a2eb89 Reviewed-by: Liang Qi <liang.qi@qt.io>
* xcb: Reduce number of created colormapsAlexander Volkov2020-09-161-11/+4
| | | | | | | | | | Create a colormap per visual, not per window. Pick-to: 5.15 Change-Id: I97d94618f159b4beaffd4a1afe0611233ced6676 Reviewed-by: Liang Qi <liang.qi@qt.io> Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io> Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* xcb: remove QT_XCB_NO_XI2_MOUSE code pathGatis Paeglis2020-08-231-8/+4
| | | | | | | | | | | | | | | This code path was deprecated in 5.12 and scheduled for removal in Qt 6. See 9184384bc9d9d71a146fff535021357258a0295e. According to the source comments from f48170b479df359f47af12b03a501d9d0c386e66, apperantly XInput2 had some issues when running on Xinerama screens and therefore there was a check for it in xi2MouseEventsDisabled(). We plan to remove Xinerama support, therefore Xinerama handling in xi2MouseEventsDisabled() is irrelevant. Task-number: QTBUG-69412 Change-Id: I384d7c46337358caecccf644acc8ffbd381dc69d Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* Use the factor() function for getting scale factorsMorten Johan Sørvig2020-08-191-2/+2
| | | | | | | | | Make the code less dependent on (changing) high-dpi internals. Change-Id: Ifc7cb4aab1c1c70016ca86639edf5c9630999f9e Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io> Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
* Add QXcbWindow platform interfaceTor Arne Vestbø2020-07-201-72/+44
| | | | | | Task-number: QTBUG-84220 Change-Id: I8bb4288f1ac06d77fb4f43ae091fa1712f694eeb Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
* Use QList instead of QVector in pluginsJarek Kobus2020-07-061-6/+6
| | | | | | Task-number: QTBUG-84469 Change-Id: Ic86f4a3000592a1c9ae62e4a83f4fe39832a6b24 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
* xcb: increase XCOORD_MAX to 32767Liang Qi2020-06-301-1/+1
| | | | | | | | | | Align with int16_t in xcb_create_window() and xcb_get_geometry_reply_t. Fixes: QTBUG-85275 Pick-to: 5.15 Change-Id: Ibbc0fab6b3d725a96ac4545857a4f04b026c4175 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io> Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
* xcb: Fix comments' indentationAlexander Volkov2020-05-251-1/+1
| | | | | Change-Id: Ic0a3e65dd1abc907f1941590ab042f785d90d91c Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
* Remove QTextCodec dependency from the xcb pluginLars Knoll2020-05-011-21/+9
| | | | | | | Change-Id: I4b6a7352ff86b40ac5c6b118f29f630a7f9e3a7e Reviewed-by: Alex Blasche <alexander.blasche@qt.io> Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Merge remote-tracking branch 'origin/5.14' into 5.15Qt Forward Merge Bot2020-03-111-2/+15
|\ | | | | | | | | | | | | | | | | Conflicts: src/corelib/plugin/qlibrary.cpp src/corelib/plugin/qlibrary_unix.cpp src/corelib/plugin/qpluginloader.cpp Change-Id: I866feaaa2a4936ee5389679724c8471a5b4b583d
| * xcb: Fix logic for minimized stateJiDe Zhang2020-03-031-2/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When _NET_WM_STATE_HIDDEN is not contains in the _NET_WM_STATE window property, the window should not be considered to be minimized According to https://specifications.freedesktop.org/wm-spec/1.3/ar01s05.html _NET_WM_STATE_HIDDEN should be set by the Window Manager to indicate that a window would not be visible on the screen if its desktop/viewport were active and its coordinates were within the screen bounds. The canonical example is that minimized windows should be in the _NET_WM_STATE_HIDDEN state. Pagers and similar applications should use _NET_WM_STATE_HIDDEN instead of WM_STATE to decide whether to display a window in miniature representations of the windows on a desktop. For mutter/GNOME Shell, without _NET_WM_STATE_HIDDEN, window manager will not reply XCB_ICCCM_WM_STATE_ICONIC settings in WM_CHANGE_STATE client message. Task-number: QTBUG-76147 Task-number: QTBUG-76354 Task-number: QTBUG-68864 Done-With: Liang Qi <liang.qi@qt.io> Change-Id: Ic9d26d963979b7f0ef4d1cf322c54ef8c40fa004 Reviewed-by: Uli Schlachter <psychon@znc.in> Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>