summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomas Frydrych <tf@linux.intel.com>2009-02-18 12:13:36 +0000
committerTomas Frydrych <tf@linux.intel.com>2009-02-18 12:13:36 +0000
commit7afc4310f6561db90a9dfd764cefe642d737dd45 (patch)
treee826c97437af3a28afda8f145d9d2f73096a3127
parent39a3bb2c7d7f85d16b8ad0822a768c38e55a8bfc (diff)
downloadmutter-7afc4310f6561db90a9dfd764cefe642d737dd45.tar.gz
Added no_more_x_calls flag to MutterWindow.release-2.25.144_0.1
Once the window destruction is initiated, we can still manipulate our MutterWindow with clutter API, but we can not longer use any X-based API, or MetaWindow API to query it.
-rw-r--r--src/compositor/mutter/compositor-mutter.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/compositor/mutter/compositor-mutter.c b/src/compositor/mutter/compositor-mutter.c
index 977ac5bf4..a618b172b 100644
--- a/src/compositor/mutter/compositor-mutter.c
+++ b/src/compositor/mutter/compositor-mutter.c
@@ -202,6 +202,8 @@ struct _MutterWindowPrivate
guint needs_destroy : 1;
guint no_shadow : 1;
+
+ guint no_more_x_calls : 1;
};
enum
@@ -1027,7 +1029,7 @@ mutter_window_effect_completed (MutterWindow *cw, gulong event)
priv->map_in_progress = 0;
}
- if (!priv->map_in_progress && priv->window)
+ if (!priv->map_in_progress && priv->window && !priv->no_more_x_calls)
{
MetaRectangle rect;
meta_window_get_outer_rect (priv->window, &rect);
@@ -1061,7 +1063,7 @@ mutter_window_effect_completed (MutterWindow *cw, gulong event)
priv->unmaximize_in_progress = 0;
}
- if (!priv->unmaximize_in_progress && priv->window)
+ if (!priv->unmaximize_in_progress && priv->window && !priv->no_more_x_calls)
{
MetaRectangle rect;
meta_window_get_outer_rect (priv->window, &rect);
@@ -1079,7 +1081,7 @@ mutter_window_effect_completed (MutterWindow *cw, gulong event)
priv->maximize_in_progress = 0;
}
- if (!priv->maximize_in_progress && priv->window)
+ if (!priv->maximize_in_progress && priv->window && !priv->no_more_x_calls)
{
MetaRectangle rect;
meta_window_get_outer_rect (priv->window, &rect);
@@ -1215,6 +1217,14 @@ destroy_win (MutterWindow *cw)
*/
priv->destroy_in_progress++;
+ /*
+ * Once the window destruction is initiated we can no longer perform any
+ * furter X-based operations. For example, if we have a Map effect running,
+ * we cannot query the window geometry once the effect completes. So, flag
+ * this.
+ */
+ priv->no_more_x_calls = TRUE;
+
if (!info->plugin_mgr ||
!mutter_plugin_manager_event_simple (info->plugin_mgr,
cw,