summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Olav Tvete <paul.tvete@gmail.com>2016-08-26 19:14:40 +0200
committerPaul Olav Tvete <paul.tvete@gmail.com>2016-08-26 19:18:59 +0200
commitae9bfd29b42156fb8f04dfa60b9e48ce10ebacb8 (patch)
treec0412b8670fa3de5e608665b1028d3ff66a90192
parente23550aaa4336fcba125f81cd498f4a15e41f5b7 (diff)
parentf21246748ce20cd86346e192fe0c4c76a9b08a7c (diff)
Merge remote-tracking branch 'qt/5.6' into 5.7
-rw-r--r--src/client/qwaylanddisplay.cpp17
-rw-r--r--src/client/qwaylandwindow.cpp5
-rw-r--r--src/client/qwaylandwindow_p.h2
-rw-r--r--src/client/qwaylandwlshellsurface.cpp10
4 files changed, 26 insertions, 8 deletions
diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp
index 5687a750a..a5e61e28a 100644
--- a/src/client/qwaylanddisplay.cpp
+++ b/src/client/qwaylanddisplay.cpp
@@ -409,13 +409,16 @@ void QWaylandDisplay::handleKeyboardFocusChanged(QWaylandInputDevice *inputDevic
{
QWaylandWindow *keyboardFocus = inputDevice->keyboardFocus();
- if (!keyboardFocus->shellSurface()->shellManagesActiveState() && mLastKeyboardFocus != keyboardFocus) {
- if (keyboardFocus)
- handleWindowActivated(keyboardFocus);
- if (mLastKeyboardFocus)
- handleWindowDeactivated(mLastKeyboardFocus);
- }
- mLastKeyboardFocus = inputDevice->keyboardFocus();
+ if (mLastKeyboardFocus == keyboardFocus)
+ return;
+
+ if (keyboardFocus && !keyboardFocus->shellManagesActiveState())
+ handleWindowActivated(keyboardFocus);
+
+ if (mLastKeyboardFocus && !mLastKeyboardFocus->shellManagesActiveState())
+ handleWindowDeactivated(mLastKeyboardFocus);
+
+ mLastKeyboardFocus = keyboardFocus;
}
void QWaylandDisplay::handleWaylandSync()
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
index 51cf20a72..9cbc6e231 100644
--- a/src/client/qwaylandwindow.cpp
+++ b/src/client/qwaylandwindow.cpp
@@ -527,6 +527,11 @@ QWaylandSubSurface *QWaylandWindow::subSurfaceWindow() const
return mSubSurfaceWindow;
}
+bool QWaylandWindow::shellManagesActiveState() const
+{
+ return mShellSurface && mShellSurface->shellManagesActiveState();
+}
+
void QWaylandWindow::handleContentOrientationChange(Qt::ScreenOrientation orientation)
{
if (mDisplay->compositorVersion() < 2)
diff --git a/src/client/qwaylandwindow_p.h b/src/client/qwaylandwindow_p.h
index c2aa1a501..82898152c 100644
--- a/src/client/qwaylandwindow_p.h
+++ b/src/client/qwaylandwindow_p.h
@@ -142,6 +142,8 @@ public:
QWaylandSubSurface *subSurfaceWindow() const;
QWaylandScreen *screen() const { return mScreen; }
+ bool shellManagesActiveState() const;
+
void handleContentOrientationChange(Qt::ScreenOrientation orientation) Q_DECL_OVERRIDE;
void setOrientationMask(Qt::ScreenOrientations mask);
diff --git a/src/client/qwaylandwlshellsurface.cpp b/src/client/qwaylandwlshellsurface.cpp
index 5aae260ce..3527015c7 100644
--- a/src/client/qwaylandwlshellsurface.cpp
+++ b/src/client/qwaylandwlshellsurface.cpp
@@ -157,6 +157,13 @@ void QWaylandWlShellSurface::setTopLevel()
set_toplevel();
}
+static inline bool testShowWithoutActivating(const QWindow *window)
+{
+ // QWidget-attribute Qt::WA_ShowWithoutActivating.
+ const QVariant showWithoutActivating = window->property("_q_showWithoutActivating");
+ return showWithoutActivating.isValid() && showWithoutActivating.toBool();
+}
+
void QWaylandWlShellSurface::updateTransientParent(QWindow *parent)
{
QWaylandWindow *parent_wayland_window = static_cast<QWaylandWindow *>(parent->handle());
@@ -174,7 +181,8 @@ void QWaylandWlShellSurface::updateTransientParent(QWindow *parent)
uint32_t flags = 0;
Qt::WindowFlags wf = m_window->window()->flags();
if (wf.testFlag(Qt::ToolTip)
- || wf.testFlag(Qt::WindowTransparentForInput))
+ || wf.testFlag(Qt::WindowTransparentForInput)
+ || testShowWithoutActivating(m_window->window()))
flags |= WL_SHELL_SURFACE_TRANSIENT_INACTIVE;
set_transient(parent_wayland_window->object(),