summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAbdiel Janulgue <abdiel.janulgue@nokia.com>2010-07-23 16:26:52 +0300
committerAbdiel Janulgue <abdiel.janulgue@nokia.com>2010-07-23 16:26:52 +0300
commit23c9285aab8b72d6c36474067aae267699bceb17 (patch)
tree431570b297e1c67cf0771da36e47ffff69100f69 /src
parent1782ac74c69903222ffd5f526b8c720b605d60e5 (diff)
Fixes: NB#180870 - COREWEB: /usr/bin/mcompositor 'MCompositeManagerPrivate::getTopmostApp MCompositeManagerPrivate::checkStacking MCompositeManagerPrivate::enableRedirection MCompositeManagerPrivate::mapEvent MCompositeManagerPrivate::x11EventFilter'
Details: Windows in the list might have been removed. Return a default value if it does not exist anymore
Diffstat (limited to 'src')
-rw-r--r--src/mcompositemanager.cpp40
1 files changed, 25 insertions, 15 deletions
diff --git a/src/mcompositemanager.cpp b/src/mcompositemanager.cpp
index f24671f..1248d83 100644
--- a/src/mcompositemanager.cpp
+++ b/src/mcompositemanager.cpp
@@ -798,8 +798,11 @@ Window MCompositeManagerPrivate::getTopmostApp(int *index_in_stacking_list,
Window ignore_window)
{
for (int i = stacking_list.size() - 1; i >= 0; --i) {
- Window w = stacking_list.at(i);
- if (w == ignore_window) continue;
+
+ // return default value in case window got internally removed
+ Window w = stacking_list.value(i, 0);
+
+ if (w == ignore_window || !w) continue;
if (w == stack[DESKTOP_LAYER])
/* desktop is above all applications */
return 0;
@@ -2058,19 +2061,26 @@ void MCompositeManagerPrivate::clientMessageEvent(XClientMessageEvent *event)
// the desktop
int wi, lower_i = -1;
for (wi = stacking_list.size() - 1; wi >= 0; --wi) {
- Window w = stacking_list.at(wi);
- if (w == lower) {
- lower_i = wi;
- continue;
- }
- if (w == stack[DESKTOP_LAYER])
- break;
- MCompositeWindow *cw = COMPOSITE_WINDOW(w);
- if (cw && cw->isMapped() && cw->isAppWindow(true) &&
- // skip devicelock and screenlock windows
- (cw->propertyCache()->meegoStackingLayer() > 2 ||
- cw->propertyCache()->meegoStackingLayer() == 0))
- setWindowState(cw->window(), IconicState);
+
+ // return default value in case window got internally
+ // removed
+ Window w = stacking_list.value(wi, 0);
+
+ if (!w)
+ continue;
+
+ if (w == lower) {
+ lower_i = wi;
+ continue;
+ }
+ if (w == stack[DESKTOP_LAYER])
+ break;
+ MCompositeWindow *cw = COMPOSITE_WINDOW(w);
+ if (cw && cw->isMapped() && cw->isAppWindow(true) &&
+ // skip devicelock and screenlock windows
+ (cw->propertyCache()->meegoStackingLayer() > 2 ||
+ cw->propertyCache()->meegoStackingLayer() == 0))
+ setWindowState(cw->window(), IconicState);
}
Q_ASSERT(lower_i > 0);
stacking_list.move(stacking_list.indexOf(stack[DESKTOP_LAYER]),