summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIain Holmes <iain@src.gnome.org>2007-11-24 00:55:52 +0000
committerIain Holmes <iain@src.gnome.org>2007-11-24 00:55:52 +0000
commit586c5e621280e76640cf26ec0917e24493c732ad (patch)
tree96bb7c385bd8e30453d1c9013a005dc7d8f52b21
parent86420d37c9dadbb53fd335fcbe979d8f9c4e481a (diff)
downloadmetacity-586c5e621280e76640cf26ec0917e24493c732ad.tar.gz
Support screen resolution changes
svn path=/branches/iains-blingtastic-bucket-o-bling/; revision=3434
-rw-r--r--src/compositor.c57
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