summaryrefslogtreecommitdiffstats
path: root/src/client/qwaylandxdgsurface.cpp
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@qt.io>2016-08-01 11:03:33 +0200
committerLiang Qi <liang.qi@qt.io>2016-08-01 11:03:38 +0200
commit6260c4376e598031e467416027703bd11012621d (patch)
tree993f83d4105f228f4cb6bed1da600dc671be2ed4 /src/client/qwaylandxdgsurface.cpp
parent45d43ca1d9c4edca378f21530f184433cc629431 (diff)
parentd8b4bef3ddff327598027c8f94a61e3d0b61a2dd (diff)
Merge remote-tracking branch 'origin/5.6' into 5.7
Diffstat (limited to 'src/client/qwaylandxdgsurface.cpp')
-rw-r--r--src/client/qwaylandxdgsurface.cpp15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/client/qwaylandxdgsurface.cpp b/src/client/qwaylandxdgsurface.cpp
index 69532b514..93263e0aa 100644
--- a/src/client/qwaylandxdgsurface.cpp
+++ b/src/client/qwaylandxdgsurface.cpp
@@ -58,6 +58,7 @@ QWaylandXdgSurface::QWaylandXdgSurface(struct ::xdg_surface *xdg_surface, QWayla
, m_maximized(false)
, m_minimized(false)
, m_fullscreen(false)
+ , m_active(false)
, m_extendedWindow(Q_NULLPTR)
{
if (window->display()->windowExtension())
@@ -66,6 +67,9 @@ QWaylandXdgSurface::QWaylandXdgSurface(struct ::xdg_surface *xdg_surface, QWayla
QWaylandXdgSurface::~QWaylandXdgSurface()
{
+ if (m_active)
+ window()->display()->handleWindowDeactivated(m_window);
+
xdg_surface_destroy(object());
delete m_extendedWindow;
}
@@ -182,6 +186,7 @@ void QWaylandXdgSurface::xdg_surface_configure(int32_t width, int32_t height, st
size_t numStates = states->size / sizeof(uint32_t);
bool aboutToMaximize = false;
bool aboutToFullScreen = false;
+ bool aboutToActivate = false;
for (size_t i = 0; i < numStates; i++) {
switch (state[i]) {
@@ -195,13 +200,21 @@ void QWaylandXdgSurface::xdg_surface_configure(int32_t width, int32_t height, st
m_normalSize = QSize(width, height);
break;
case XDG_SURFACE_STATE_ACTIVATED:
- // TODO: here about the missing window activation
+ aboutToActivate = true;
break;
default:
break;
}
}
+ if (!m_active && aboutToActivate) {
+ m_active = true;
+ window()->display()->handleWindowActivated(m_window);
+ } else if (m_active && !aboutToActivate) {
+ m_active = false;
+ window()->display()->handleWindowDeactivated(m_window);
+ }
+
if (!m_fullscreen && aboutToFullScreen) {
if (!m_maximized)
m_normalSize = m_window->window()->frameGeometry().size();