summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKimmo Hämäläinen <kimmo.hamalainen@nokia.com>2010-12-30 16:26:33 +0200
committerKimmo Hämäläinen <kimmo.hamalainen@nokia.com>2010-12-30 16:26:33 +0200
commit73c995d7bc6ebc18a8a54d16f5fd3a5d1d2c0fb3 (patch)
tree7149048ce81404ddf3ba5021aaac4b3ace24be5f
parent8205153906ed68bf97f2d20cb9d6b822caa41d98 (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.cpp10
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) {