Add a screen argument. (process_property_notify): Damage the whole screen

2008-03-19  Iain Holmes  <iain@gnome.org>

        * 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
This commit is contained in:
Iain Holmes 2008-03-19 00:47:01 +00:00 committed by Iain Holmes
parent e629364582
commit f2b400b82c
4 changed files with 32 additions and 6 deletions

View File

@ -1,3 +1,15 @@
2008-03-19 Iain Holmes <iain@gnome.org>
* 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 <iain@gnome.org> 2008-03-18 Iain Holmes <iain@gnome.org>
* src/core/compositor.c (window_has_shadow): Allow shaped windows * src/core/compositor.c (window_has_shadow): Allow shaped windows

View File

@ -1354,7 +1354,7 @@ add_repair (MetaDisplay *display)
if (compositor->repaint_id > 0) if (compositor->repaint_id > 0)
return; return;
#if 0 #if 1
compositor->repaint_id = g_idle_add_full (G_PRIORITY_HIGH_IDLE, compositor->repaint_id = g_idle_add_full (G_PRIORITY_HIGH_IDLE,
compositor_idle_cb, compositor, compositor_idle_cb, compositor,
NULL); NULL);
@ -1566,6 +1566,9 @@ unmap_win (MetaDisplay *display,
return; return;
} }
if (cw->window && cw->window == info->focus_window)
info->focus_window = NULL;
cw->attrs.map_state = IsUnmapped; cw->attrs.map_state = IsUnmapped;
cw->damaged = FALSE; cw->damaged = FALSE;
@ -2094,6 +2097,10 @@ process_property_notify (MetaCompositor *compositor,
0, 0, 0, 0, TRUE); 0, 0, 0, 0, TRUE);
XRenderFreePicture (display->xdisplay, info->root_tile); XRenderFreePicture (display->xdisplay, info->root_tile);
info->root_tile = None; info->root_tile = None;
/* Damage the whole screen as we may need to redraw the
background ourselves */
damage_screen (screen);
#ifdef USE_IDLE_REPAINT #ifdef USE_IDLE_REPAINT
add_repair (display); add_repair (display);
#endif #endif
@ -2733,12 +2740,12 @@ meta_compositor_get_window_pixmap (MetaCompositor *compositor,
void void
meta_compositor_set_active_window (MetaCompositor *compositor, meta_compositor_set_active_window (MetaCompositor *compositor,
MetaScreen *screen,
MetaWindow *window) MetaWindow *window)
{ {
#ifdef HAVE_COMPOSITE_EXTENSIONS #ifdef HAVE_COMPOSITE_EXTENSIONS
MetaDisplay *display = compositor->display; MetaDisplay *display = compositor->display;
Display *xdisplay = display->xdisplay; Display *xdisplay = display->xdisplay;
MetaScreen *screen = window->screen;
MetaCompWindow *old_focus = NULL, *new_focus = NULL; MetaCompWindow *old_focus = NULL, *new_focus = NULL;
MetaCompScreen *info = screen->compositor_data; MetaCompScreen *info = screen->compositor_data;
MetaWindow *old_focus_win = info->focus_window; 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->frame ? old_focus_win->frame->xwindow :
old_focus_win->xwindow); old_focus_win->xwindow);
} }
if (window)
{
new_focus = find_window_for_screen (screen, new_focus = find_window_for_screen (screen,
window->frame ? window->frame->xwindow : window->frame ? window->frame->xwindow :
window->xwindow); window->xwindow);
}
info->focus_window = window; info->focus_window = window;
if (old_focus) if (old_focus)

View File

@ -65,6 +65,7 @@ void meta_compositor_free_window (MetaCompositor *compositor,
Pixmap meta_compositor_get_window_pixmap (MetaCompositor *compositor, Pixmap meta_compositor_get_window_pixmap (MetaCompositor *compositor,
MetaWindow *window); MetaWindow *window);
void meta_compositor_set_active_window (MetaCompositor *compositor, void meta_compositor_set_active_window (MetaCompositor *compositor,
MetaScreen *screen,
MetaWindow *window); MetaWindow *window);
#endif /* META_COMPOSITOR_H */ #endif /* META_COMPOSITOR_H */

View File

@ -5204,7 +5204,7 @@ meta_window_notify_focus (MetaWindow *window,
window->display->focus_window = window; window->display->focus_window = window;
window->has_focus = TRUE; window->has_focus = TRUE;
meta_compositor_set_active_window (window->display->compositor, meta_compositor_set_active_window (window->display->compositor,
window); window->screen, window);
/* Move to the front of the focusing workspace's MRU list. /* Move to the front of the focusing workspace's MRU list.
* We should only be "removing" it from the MRU list if it's * 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) if (window->frame)
meta_frame_queue_draw (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); meta_error_trap_push (window->display);
XUninstallColormap (window->display->xdisplay, XUninstallColormap (window->display->xdisplay,
window->colormap); window->colormap);