diff options
author | Kimmo Hämäläinen <kimmo.hamalainen@nokia.com> | 2010-12-30 16:26:33 +0200 |
---|---|---|
committer | Kimmo Hämäläinen <kimmo.hamalainen@nokia.com> | 2010-12-30 16:26:33 +0200 |
commit | 73c995d7bc6ebc18a8a54d16f5fd3a5d1d2c0fb3 (patch) | |
tree | 7149048ce81404ddf3ba5021aaac4b3ace24be5f | |
parent | 8205153906ed68bf97f2d20cb9d6b822caa41d98 (diff) |
Fixes: NB#215389 - Fullscreen window sometimes stays in composited mode
- fullscreen_wm_state(): ignore decorator state when setting window's
decorated flag
-rw-r--r-- | src/mcompositemanager.cpp | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/mcompositemanager.cpp b/src/mcompositemanager.cpp index c795d87..fa97a60 100644 --- a/src/mcompositemanager.cpp +++ b/src/mcompositemanager.cpp @@ -468,9 +468,10 @@ static void fullscreen_wm_state(MCompositeManagerPrivate *priv, MCompositeWindow *win = MCompositeWindow::compositeWindow(window); if (win) win->propertyCache()->setNetWmState(states.toList()); - if (win && !MDecoratorFrame::instance()->managedWindow() - && priv->needDecoration(window, win->propertyCache())) { + if (win && priv->needDecoration(window, win->propertyCache())) win->setDecorated(true); + if (win && !MDecoratorFrame::instance()->managedWindow() + && win->needDecoration()) { MDecoratorFrame::instance()->setManagedWindow(win); MDecoratorFrame::instance()->setOnlyStatusbar(false); MDecoratorFrame::instance()->raise(); @@ -495,9 +496,10 @@ static void fullscreen_wm_state(MCompositeManagerPrivate *priv, win->propertyCache()->setRequestedGeometry(QRect(0, 0, xres, yres)); win->propertyCache()->setNetWmState(states.toList()); } + if (win && !priv->device_state->ongoingCall()) + win->setDecorated(false); if (!priv->device_state->ongoingCall() && MDecoratorFrame::instance()->managedWindow() == window) { - if (win) win->setDecorated(false); MDecoratorFrame::instance()->lower(); MDecoratorFrame::instance()->setManagedWindow(0); } @@ -2080,6 +2082,8 @@ void MCompositeManagerPrivate::checkStacking(bool force_visibility_check, && (!FULLSCREEN_WINDOW(highest_d) || highest_d->status() == MCompositeWindow::Hung || device_state->ongoingCall())) { + // TODO: would be more robust to set decorator's managed window here + // instead of in many different places in the code... Window deco_w = deco->decoratorItem()->window(); int deco_i = stacking_list.indexOf(deco_w); if (deco_i >= 0) { |