summaryrefslogtreecommitdiffstats
path: root/src/client/qwaylandxdgsurface.cpp
diff options
context:
space:
mode:
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 8852d2dfb..bbda03dc3 100644
--- a/src/client/qwaylandxdgsurface.cpp
+++ b/src/client/qwaylandxdgsurface.cpp
@@ -52,6 +52,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())
@@ -60,6 +61,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;
}
@@ -176,6 +180,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]) {
@@ -189,13 +194,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();