diff options
author | Iain Holmes <iain@src.gnome.org> | 2007-11-24 00:55:52 +0000 |
---|---|---|
committer | Iain Holmes <iain@src.gnome.org> | 2007-11-24 00:55:52 +0000 |
commit | 586c5e621280e76640cf26ec0917e24493c732ad (patch) | |
tree | 96bb7c385bd8e30453d1c9013a005dc7d8f52b21 | |
parent | 86420d37c9dadbb53fd335fcbe979d8f9c4e481a (diff) | |
download | metacity-586c5e621280e76640cf26ec0917e24493c732ad.tar.gz |
Support screen resolution changes
svn path=/branches/iains-blingtastic-bucket-o-bling/; revision=3434
-rw-r--r-- | src/compositor.c | 57 |
1 files changed, 46 insertions, 11 deletions
diff --git a/src/compositor.c b/src/compositor.c index 3ca4ed88..a7ff4660 100644 --- a/src/compositor.c +++ b/src/compositor.c @@ -671,7 +671,7 @@ paint_root (MetaScreen *screen, MetaDisplay *display = screen->display; MetaCompScreen *info = screen->compositor_data; - g_return_if_fail (info->root_buffer != None); + g_return_if_fail (root_buffer != None); if (info->root_tile == None) { @@ -1108,10 +1108,10 @@ add_repair (MetaDisplay *display) #endif static void -add_damage (MetaDisplay *display, - MetaScreen *screen, +add_damage (MetaScreen *screen, XserverRegion damage) { + MetaDisplay *display = screen->display; MetaCompScreen *info = screen->compositor_data; if (info->all_damage) @@ -1129,6 +1129,22 @@ add_damage (MetaDisplay *display, } static void +damage_screen (MetaScreen *screen) +{ + MetaDisplay *display = screen->display; + XserverRegion region; + XRectangle r; + + r.x = 0; + r.y = 0; + r.width = screen->rect.width; + r.height = screen->rect.height; + + region = XFixesCreateRegion (display->xdisplay, &r, 1); + add_damage (screen, region); +} + +static void repair_win (MetaCompWindow *cw) { MetaScreen *screen = cw->screen; @@ -1152,7 +1168,7 @@ repair_win (MetaCompWindow *cw) meta_error_trap_pop (display, FALSE); - add_damage (display, screen, parts); + add_damage (screen, parts); cw->damaged = TRUE; } @@ -1282,7 +1298,7 @@ unmap_win (MetaDisplay *display, if (cw->extents != None) { - add_damage (display, screen, cw->extents); + add_damage (screen, cw->extents); cw->extents = None; } @@ -1326,7 +1342,7 @@ determine_mode (MetaDisplay *display, damage = XFixesCreateRegion (display->xdisplay, NULL, 0); XFixesCopyRegion (display->xdisplay, damage, cw->extents); - add_damage (display, screen, damage); + add_damage (screen, damage); } } @@ -1441,7 +1457,7 @@ destroy_win (MetaDisplay *display, if (cw->extents != None) { - add_damage (display, screen, cw->extents); + add_damage (screen, cw->extents); cw->extents = None; } @@ -1577,7 +1593,7 @@ resize_win (MetaCompWindow *cw, XFixesUnionRegion (display->xdisplay, damage, damage, extents); XFixesDestroyRegion (display->xdisplay, extents); - add_damage (display, screen, damage); + add_damage (screen, damage); } info->clip_changed = TRUE; @@ -1621,8 +1637,8 @@ static void process_configure_notify (MetaCompositor *compositor, XConfigureEvent *event) { - MetaCompWindow *cw = find_window_in_display (compositor->display, - event->window); + MetaDisplay *display = compositor->display; + MetaCompWindow *cw = find_window_in_display (display, event->window); if (cw) { @@ -1630,6 +1646,25 @@ process_configure_notify (MetaCompositor *compositor, resize_win (cw, event->x, event->y, event->width, event->height, event->border_width, event->override_redirect); } + else + { + MetaScreen *screen; + MetaCompScreen *info; + + /* Might be the root window? */ + screen = meta_display_screen_for_root (display, event->window); + if (screen == NULL) + return; + + info = screen->compositor_data; + if (info->root_buffer) + { + XRenderFreePicture (display->xdisplay, info->root_buffer); + info->root_buffer = None; + } + + damage_screen (screen); + } } static void @@ -1715,7 +1750,7 @@ expose_area (MetaScreen *screen, display = screen->display; region = XFixesCreateRegion (display->xdisplay, rects, nrects); - add_damage (display, screen, region); + add_damage (screen, region); } static void |