summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Thurman <tthurman@gnome.org>2008-07-11 02:31:18 +0000
committerThomas James Alexander Thurman <tthurman@src.gnome.org>2008-07-11 02:31:18 +0000
commit54efcb38432615aa827613a8a3b7dae59d3ff581 (patch)
tree7aa946c03fc8636a3bbc5f520771b31c57389021
parent5d3d4b9af57c24a57ffa77aa199b82184b30a839 (diff)
downloadmetacity-54efcb38432615aa827613a8a3b7dae59d3ff581.tar.gz
Add checks for the compositor being null. Backporting r3751 from 2.23.
2008-07-10 Thomas Thurman <tthurman@gnome.org> * src/core/compositor.c: Add checks for the compositor being null. Backporting r3751 from 2.23. Closes #530702. svn path=/branches/gnome-2-22/; revision=3784
-rw-r--r--ChangeLog19
-rw-r--r--src/core/compositor.c82
2 files changed, 74 insertions, 27 deletions
diff --git a/ChangeLog b/ChangeLog
index 9686b9c8..d7be2e4c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,19 +1,8 @@
-2008-05-27 Thomas Thurman <tthurman@gnome.org>
-
- * NEWS: 2.22.1 release.
-
-2008-05-26 Thomas Thurman <tthurman@gnome.org>
-
- * NEWS: 2.22.1 release.
-
-2008-05-26 Thomas Thurman <tthurman@gnome.org>
-
- * NEWS: 2.22.1 release.
-
-2008-05-26 Thomas Thurman <tthurman@gnome.org>
-
- * NEWS: 2.22.1 release.
+2008-07-10 Thomas Thurman <tthurman@gnome.org>
+ * src/core/compositor.c: Add checks for the compositor being null.
+ Backporting r3751 from 2.23. Closes #530702.
+
2008-05-26 Thomas Thurman <tthurman@gnome.org>
* NEWS: 2.22.1 release.
diff --git a/src/core/compositor.c b/src/core/compositor.c
index 588cc6ac..6954f536 100644
--- a/src/core/compositor.c
+++ b/src/core/compositor.c
@@ -406,16 +406,23 @@ make_shadow (MetaDisplay *display,
MetaCompScreen *info = screen->compositor_data;
XImage *ximage;
guchar *data;
- int msize = info->gaussian_map->size;
+ int msize, swidth, sheight, centre;
int ylimit, xlimit;
- int swidth = width + msize;
- int sheight = height + msize;
- int centre = msize / 2;
int x, y;
guchar d;
int x_diff;
int opacity_int = (int)(opacity * 25);
+ if (info==NULL)
+ {
+ return NULL;
+ }
+
+ msize = info->gaussian_map->size;
+ swidth = width + msize;
+ sheight = height + msize;
+ centre = msize/2;
+
data = g_malloc (swidth * sheight * sizeof (guchar));
ximage = XCreateImage (display->xdisplay,
@@ -727,6 +734,11 @@ create_root_buffer (MetaScreen *screen)
Visual *visual;
int depth, screen_width, screen_height, screen_number;
+ if (info==NULL)
+ {
+ return None;
+ }
+
screen_width = screen->rect.width;
screen_height = screen->rect.height;
screen_number = screen->number;
@@ -771,6 +783,11 @@ paint_root (MetaScreen *screen,
static gboolean
window_has_shadow (MetaCompWindow *cw)
{
+ if ((MetaCompScreen *)cw->screen->compositor_data==NULL)
+ {
+ return FALSE;
+ }
+
if (((MetaCompScreen *)cw->screen->compositor_data)->have_shadows == FALSE)
return FALSE;
@@ -948,6 +965,11 @@ paint_dock_shadows (MetaScreen *screen,
MetaCompScreen *info = screen->compositor_data;
GSList *d;
+ if (info==NULL)
+ {
+ return;
+ }
+
for (d = info->dock_windows; d; d = d->next)
{
MetaCompWindow *cw = d->data;
@@ -987,6 +1009,11 @@ paint_windows (MetaScreen *screen,
MetaCompWindow *cw;
XserverRegion paint_region, desktop_region;
+ if (info==NULL)
+ {
+ return;
+ }
+
screen_width = screen->rect.width;
screen_height = screen->rect.height;
screen_number = screen->number;
@@ -1242,6 +1269,11 @@ repair_screen (MetaScreen *screen)
MetaCompScreen *info = screen->compositor_data;
MetaDisplay *display = screen->display;
+ if (info==NULL)
+ {
+ return;
+ }
+
if (info->all_damage != None)
{
meta_error_trap_push (display);
@@ -1310,6 +1342,11 @@ add_damage (MetaScreen *screen,
MetaDisplay *display = screen->display;
MetaCompScreen *info = screen->compositor_data;
+ if (info==NULL)
+ {
+ return;
+ }
+
// dump_xserver_region ("add_damage", display, damage);
if (info->all_damage)
@@ -1451,7 +1488,7 @@ free_win (MetaCompWindow *cw,
/* The window may not have been added to the list in this case,
but we can check anyway */
- if (cw->type == META_COMP_WINDOW_DOCK)
+ if (info!=NULL && cw->type == META_COMP_WINDOW_DOCK)
info->dock_windows = g_slist_remove (info->dock_windows, cw);
g_free (cw);
@@ -1497,7 +1534,7 @@ unmap_win (MetaDisplay *display,
MetaCompWindow *cw = find_window_for_screen (screen, id);
MetaCompScreen *info = screen->compositor_data;
- if (cw == NULL)
+ if (cw == NULL || info == NULL)
{
return;
}
@@ -1730,9 +1767,13 @@ destroy_win (MetaDisplay *display,
}
info = screen->compositor_data;
- info->windows = g_list_remove (info->windows, (gconstpointer) cw);
- g_hash_table_remove (info->windows_by_xid, (gpointer) xwindow);
-
+
+ if (info!=NULL)
+ {
+ info->windows = g_list_remove (info->windows, (gconstpointer) cw);
+ g_hash_table_remove (info->windows_by_xid, (gpointer) xwindow);
+ }
+
free_win (cw, TRUE);
}
@@ -1748,6 +1789,11 @@ restack_win (MetaCompWindow *cw,
screen = cw->screen;
info = screen->compositor_data;
+ if (info==NULL)
+ {
+ return;
+ }
+
sibling = g_list_find (info->windows, (gconstpointer) cw);
next = g_list_next (sibling);
previous_above = None;
@@ -1903,7 +1949,10 @@ resize_win (MetaCompWindow *cw,
dump_xserver_region ("resize_win", display, damage);
add_damage (screen, damage);
- info->clip_changed = TRUE;
+ if (info!=NULL)
+ {
+ info->clip_changed = TRUE;
+ }
}
/* event processors must all be called with an error trap in place */
@@ -1933,7 +1982,10 @@ process_circulate_notify (MetaCompositor *compositor,
above = None;
restack_win (cw, above);
- info->clip_changed = TRUE;
+ if (info!=NULL)
+ {
+ info->clip_changed = TRUE;
+ }
#ifdef USE_IDLE_REPAINT
add_repair (compositor->display);
@@ -1987,6 +2039,12 @@ process_configure_notify (MetaCompositor *compositor,
return;
info = screen->compositor_data;
+
+ if (info==NULL)
+ {
+ return;
+ }
+
if (info->root_buffer)
{
XRenderFreePicture (display->xdisplay, info->root_buffer);
@@ -2018,7 +2076,7 @@ process_property_notify (MetaCompositor *compositor,
if (screen)
{
MetaCompScreen *info = screen->compositor_data;
- if (info->root_tile)
+ if (info!=NULL && info->root_tile)
{
XClearArea (display->xdisplay, screen->xroot,
0, 0, 0, 0, TRUE);