diff options
| -rw-r--r-- | src/compositor/compositor-private.h | 3 | ||||
| -rw-r--r-- | src/compositor/compositor-xrender.c | 34 | ||||
| -rw-r--r-- | src/compositor/compositor.c | 4 | 
3 files changed, 32 insertions, 9 deletions
| diff --git a/src/compositor/compositor-private.h b/src/compositor/compositor-private.h index 93f3e05b..61e7ffb0 100644 --- a/src/compositor/compositor-private.h +++ b/src/compositor/compositor-private.h @@ -50,6 +50,9 @@ struct _MetaCompositor                               MetaScreen     *screen,                               MetaWindow     *window); +  void (*free_window) (MetaCompositor *compositor, +                       MetaWindow     *window); +    void (*maximize_window)   (MetaCompositor *compositor,                               MetaWindow     *window);    void (*unmaximize_window) (MetaCompositor *compositor, diff --git a/src/compositor/compositor-xrender.c b/src/compositor/compositor-xrender.c index 623d6ce8..c1218ebc 100644 --- a/src/compositor/compositor-xrender.c +++ b/src/compositor/compositor-xrender.c @@ -2681,23 +2681,38 @@ xrender_end_move (MetaCompositor *compositor,  #ifdef HAVE_COMPOSITE_EXTENSIONS  #endif  } +#endif /* 0 */  static void  xrender_free_window (MetaCompositor *compositor,                       MetaWindow     *window)  {  #ifdef HAVE_COMPOSITE_EXTENSIONS -  /* FIXME: When an undecorated window is hidden this is called, -     but the window does not get readded if it is subsequentally shown again -     See http://bugzilla.gnome.org/show_bug.cgi?id=504876 - -     I don't *think* theres any need for this call anyway, leaving it out -     does not seem to cause any side effects so far, but I should check with -     someone who understands more. */ -  /* destroy_win (compositor->display, window->xwindow, FALSE); */ +  MetaCompositorXRender *xrc; +  MetaFrame *frame; +  Window xwindow; + +  xrc = (MetaCompositorXRender *) compositor; +  frame = meta_window_get_frame (window); +  xwindow = None; + +  if (frame) +    { +      xwindow = meta_frame_get_xwindow (frame); +    } +  else +    { +      /* FIXME: When an undecorated window is hidden this is called, but the +       * window does not get readded if it is subsequentally shown again. See: +       * http://bugzilla.gnome.org/show_bug.cgi?id=504876 +       */ +      /* xwindow = meta_window_get_xwindow (window); */ +    } + +  if (xwindow != None) +    destroy_win (xrc->display, xwindow, FALSE);  #endif  } -#endif /* 0 */  static void  xrender_process_event (MetaCompositor *compositor, @@ -2979,6 +2994,7 @@ static MetaCompositor comp_info = {    xrender_process_event,    xrender_get_window_pixmap,    xrender_set_active_window, +  xrender_free_window,    xrender_maximize_window,    xrender_unmaximize_window,  }; diff --git a/src/compositor/compositor.c b/src/compositor/compositor.c index d23fe3f7..f7a28261 100644 --- a/src/compositor/compositor.c +++ b/src/compositor/compositor.c @@ -156,6 +156,10 @@ void meta_compositor_end_move (MetaCompositor *compositor,  void meta_compositor_free_window (MetaCompositor *compositor,                                    MetaWindow     *window)  { +#ifdef HAVE_COMPOSITE_EXTENSIONS +  if (compositor && compositor->free_window) +    compositor->free_window (compositor, window); +#endif  }  void | 
