From f2b400b82c679acf948618962cce71716e8f5207 Mon Sep 17 00:00:00 2001 From: Iain Holmes Date: Wed, 19 Mar 2008 00:47:01 +0000 Subject: [PATCH] Add a screen argument. (process_property_notify): Damage the whole screen 2008-03-19 Iain Holmes * src/core/compositor.c (meta_compositor_set_active_window): Add a screen argument. (process_property_notify): Damage the whole screen when the background changes. Fixes 522599 (add_repair): Use the idle instead of the timeout. Fixes 522166 (unmap_win): If the window is also focus window NULLify it. * src/core/window.c (meta_window_notify_focus): Notify when a window has lost focus, pass in screen as well. svn path=/trunk/; revision=3654 --- ChangeLog | 12 ++++++++++++ src/core/compositor.c | 20 +++++++++++++++----- src/core/compositor.h | 1 + src/core/window.c | 5 ++++- 4 files changed, 32 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index 002098300..3c25508c2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2008-03-19 Iain Holmes + + * src/core/compositor.c (meta_compositor_set_active_window): Add a + screen argument. + (process_property_notify): Damage the whole screen when the background + changes. Fixes 522599 + (add_repair): Use the idle instead of the timeout. Fixes 522166 + (unmap_win): If the window is also focus window NULLify it. + + * src/core/window.c (meta_window_notify_focus): Notify when a window + has lost focus, pass in screen as well. + 2008-03-18 Iain Holmes * src/core/compositor.c (window_has_shadow): Allow shaped windows diff --git a/src/core/compositor.c b/src/core/compositor.c index bc82d0526..425f9c8ef 100644 --- a/src/core/compositor.c +++ b/src/core/compositor.c @@ -1354,7 +1354,7 @@ add_repair (MetaDisplay *display) if (compositor->repaint_id > 0) return; -#if 0 +#if 1 compositor->repaint_id = g_idle_add_full (G_PRIORITY_HIGH_IDLE, compositor_idle_cb, compositor, NULL); @@ -1566,6 +1566,9 @@ unmap_win (MetaDisplay *display, return; } + if (cw->window && cw->window == info->focus_window) + info->focus_window = NULL; + cw->attrs.map_state = IsUnmapped; cw->damaged = FALSE; @@ -2094,6 +2097,10 @@ process_property_notify (MetaCompositor *compositor, 0, 0, 0, 0, TRUE); XRenderFreePicture (display->xdisplay, info->root_tile); info->root_tile = None; + + /* Damage the whole screen as we may need to redraw the + background ourselves */ + damage_screen (screen); #ifdef USE_IDLE_REPAINT add_repair (display); #endif @@ -2733,12 +2740,12 @@ meta_compositor_get_window_pixmap (MetaCompositor *compositor, void meta_compositor_set_active_window (MetaCompositor *compositor, + MetaScreen *screen, MetaWindow *window) { #ifdef HAVE_COMPOSITE_EXTENSIONS MetaDisplay *display = compositor->display; Display *xdisplay = display->xdisplay; - MetaScreen *screen = window->screen; MetaCompWindow *old_focus = NULL, *new_focus = NULL; MetaCompScreen *info = screen->compositor_data; MetaWindow *old_focus_win = info->focus_window; @@ -2749,9 +2756,12 @@ meta_compositor_set_active_window (MetaCompositor *compositor, old_focus_win->frame ? old_focus_win->frame->xwindow : old_focus_win->xwindow); } - new_focus = find_window_for_screen (screen, - window->frame ? window->frame->xwindow : - window->xwindow); + if (window) + { + new_focus = find_window_for_screen (screen, + window->frame ? window->frame->xwindow : + window->xwindow); + } info->focus_window = window; if (old_focus) diff --git a/src/core/compositor.h b/src/core/compositor.h index b799c41c0..7c6e7408f 100644 --- a/src/core/compositor.h +++ b/src/core/compositor.h @@ -65,6 +65,7 @@ void meta_compositor_free_window (MetaCompositor *compositor, Pixmap meta_compositor_get_window_pixmap (MetaCompositor *compositor, MetaWindow *window); void meta_compositor_set_active_window (MetaCompositor *compositor, + MetaScreen *screen, MetaWindow *window); #endif /* META_COMPOSITOR_H */ diff --git a/src/core/window.c b/src/core/window.c index 765987950..3e6eb58e6 100644 --- a/src/core/window.c +++ b/src/core/window.c @@ -5204,7 +5204,7 @@ meta_window_notify_focus (MetaWindow *window, window->display->focus_window = window; window->has_focus = TRUE; meta_compositor_set_active_window (window->display->compositor, - window); + window->screen, window); /* Move to the front of the focusing workspace's MRU list. * We should only be "removing" it from the MRU list if it's @@ -5289,6 +5289,9 @@ meta_window_notify_focus (MetaWindow *window, if (window->frame) meta_frame_queue_draw (window->frame); + meta_compositor_set_active_window (window->display->compositor, + window->screen, NULL); + meta_error_trap_push (window->display); XUninstallColormap (window->display->xdisplay, window->colormap);