diff options
author | Kimmo Hämäläinen <kimmo.hamalainen@nokia.com> | 2010-05-24 18:41:54 +0300 |
---|---|---|
committer | Kimmo Hämäläinen <kimmo.hamalainen@nokia.com> | 2010-05-24 18:41:54 +0300 |
commit | eff05f6440e4d7f8c599ebf5de7c504a1bec292b (patch) | |
tree | f824c4125a2606d427c86e8b105fbed0d911d19c | |
parent | fd25edb8bc4610d8e5bbcaec75428960cb02cc13 (diff) |
Fixes: NB#170360
New:
Changes:
- in mapEvent(), do not call saveBackingStore() before redirecting the window
(avoids some EGL errors)
- in mapEvent(), use possiblyUnredirectTopmostWindow() instead of
disableCompositing() to make it work when we have decorated fullscreen
window and we want to show status menu, for example
- in mapRequestEvent(): handle the case when decorator restarts during a call
and we have decorated fullscreen window
RevBy:
Details:
-rw-r--r-- | src/mcompositemanager.cpp | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/src/mcompositemanager.cpp b/src/mcompositemanager.cpp index 50c98ab..31f9f70 100644 --- a/src/mcompositemanager.cpp +++ b/src/mcompositemanager.cpp @@ -1093,9 +1093,13 @@ void MCompositeManagerPrivate::mapRequestEvent(XMapRequestEvent *e) Window w = getTopmostApp(); MCompositeWindow *cw; if (w && (cw = COMPOSITE_WINDOW(w))) { - if (cw->needDecoration()) - MDecoratorFrame::instance()->setManagedWindow(cw); - else if (cw->status() == MCompositeWindow::HUNG) + if (cw->needDecoration()) { + if (FULLSCREEN_WINDOW(cw) && device_state->ongoingCall()) { + MDecoratorFrame::instance()->setManagedWindow(cw, true); + MDecoratorFrame::instance()->setOnlyStatusbar(true); + } else + MDecoratorFrame::instance()->setManagedWindow(cw); + } else if (cw->status() == MCompositeWindow::HUNG) MDecoratorFrame::instance()->setManagedWindow(cw, true); } return; @@ -1531,15 +1535,18 @@ void MCompositeManagerPrivate::mapEvent(XMapEvent *e) item->setWindowTypeAtom(ATOM(_NET_WM_WINDOW_TYPE_NORMAL)); else item->setWindowTypeAtom(atom->getType(win)); - item->saveBackingStore(true); if (!device_state->displayOff() && !item->hasAlpha() && !item->needDecoration()) { item->setVisible(true); item->updateWindowPixmap(); - disableCompositing(); + // disableCompositing() does not work here because it ignores + // stacking order in its check for decorator + if (!possiblyUnredirectTopmostWindow()) + enableCompositing(true); } else if (!device_state->displayOff()) { ((MTexturePixmapItem *)item)->enableRedirectedRendering(); item->delayShow(100); + item->saveBackingStore(true); } /* do this after bindWindow() so that the window is in stacking_list */ activateWindow(win, CurrentTime, false); |