summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIain Holmes <iain@gnome.org>2008-03-19 00:47:01 +0000
committerIain Holmes <iain@src.gnome.org>2008-03-19 00:47:01 +0000
commitf2b400b82c679acf948618962cce71716e8f5207 (patch)
tree26ff660762d4595641d3d83a244d6a97de20b5ea
parente6293645827bcbe4708a91cc72f6a2a6dd9728f6 (diff)
downloadmetacity-f2b400b82c679acf948618962cce71716e8f5207.tar.gz
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
-rw-r--r--ChangeLog12
-rw-r--r--src/core/compositor.c20
-rw-r--r--src/core/compositor.h1
-rw-r--r--src/core/window.c5
4 files changed, 32 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index 00209830..3c25508c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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>
* src/core/compositor.c (window_has_shadow): Allow shaped windows
diff --git a/src/core/compositor.c b/src/core/compositor.c
index bc82d052..425f9c8e 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 b799c41c..7c6e7408 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 76598795..3e6eb58e 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);