diff options
author | Tomas Frydrych <tf@linux.intel.com> | 2009-02-18 12:13:36 +0000 |
---|---|---|
committer | Tomas Frydrych <tf@linux.intel.com> | 2009-02-18 12:13:36 +0000 |
commit | 7afc4310f6561db90a9dfd764cefe642d737dd45 (patch) | |
tree | e826c97437af3a28afda8f145d9d2f73096a3127 | |
parent | 39a3bb2c7d7f85d16b8ad0822a768c38e55a8bfc (diff) | |
download | mutter-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.c | 16 |
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, |