diff --git a/gnome-session-2.12.0-shaped.patch b/gnome-session-2.12.0-shaped.patch index aca4f8f..4b0b0e7 100644 --- a/gnome-session-2.12.0-shaped.patch +++ b/gnome-session-2.12.0-shaped.patch @@ -1,100 +1,14 @@ ---- gnome-session-2.12.0/gnome-session/splash-widget.c.shaped 2005-12-20 15:45:53.000000000 -0500 -+++ gnome-session-2.12.0/gnome-session/splash-widget.c 2005-12-20 16:23:55.000000000 -0500 -@@ -138,7 +138,7 @@ - return FALSE; - - if (gdk_rectangle_intersect ( -- &event->area, &sw->image_bounds, &exposed)) -+ &event->area, &sw->image_bounds, &exposed)) { - gdk_draw_drawable ( - GDK_DRAWABLE (widget->window), - widget->style->black_gc, -@@ -147,6 +147,15 @@ - exposed.x, exposed.y, - exposed.width, exposed.height); - -+ if (sw->bg_mask) -+ gdk_window_shape_combine_mask ( -+ widget->window, -+ sw->bg_mask, -+ 0, -+ 0); -+ -+ } -+ - for (l = sw->icons; l; l = l->next) { - SplashIcon *si = l->data; - -@@ -228,7 +237,9 @@ - - if (sw->background && widget->window) { - int width, height; -- -+ GdkPixmap *mask; -+ mask = NULL; -+ - width = gdk_pixbuf_get_width (sw->background); - height = gdk_pixbuf_get_height (sw->background); - -@@ -237,6 +248,11 @@ - width, height, - gdk_drawable_get_visual (widget->window)->depth); - -+ mask = gdk_pixmap_new ( -+ widget->window, -+ width, height, -+ 1); -+ - if (pm) { - gdk_pixbuf_render_to_drawable ( - sw->background, GDK_DRAWABLE (pm), -@@ -247,6 +263,22 @@ - - gdk_window_set_back_pixmap ( - widget->window, pm, FALSE); -+ -+ if (mask) { -+ gdk_pixbuf_render_threshold_alpha ( -+ sw->background, (GdkBitmap *) mask, -+ 0, 0, 0, 0, width, height, -+ 125); -+ -+ gdk_window_shape_combine_mask ( -+ widget->window, -+ (GdkBitmap *) mask, -+ 0, -+ 0); -+ -+ } -+ -+ sw->bg_mask = (GdkBitmap *) mask; - sw->bg_pixmap = pm; - } - } -@@ -262,6 +294,12 @@ - sw->bg_pixmap = NULL; - } - -+ if (sw->bg_mask) { -+ g_object_unref (sw->bg_mask); -+ sw->bg_mask = NULL; -+ } -+ -+ - GNOME_CALL_PARENT (GTK_WIDGET_CLASS, unrealize, (widget)); - } - ---- gnome-session-2.12.0/gnome-session/splash-widget.h.shaped 2005-12-20 16:10:05.000000000 -0500 -+++ gnome-session-2.12.0/gnome-session/splash-widget.h 2005-12-20 16:18:02.000000000 -0500 -@@ -37,6 +37,7 @@ +--- gnome-session-2.12.0/gnome-session/splash-widget.h.shaped 2005-08-08 03:35:13.000000000 -0400 ++++ gnome-session-2.12.0/gnome-session/splash-widget.h 2006-01-12 02:19:59.000000000 -0500 +@@ -36,7 +36,6 @@ + GnomeIconTheme *icon_theme; GdkPixbuf *background; - GdkPixmap *bg_pixmap; -+ GdkBitmap *bg_mask; +- GdkPixmap *bg_pixmap; GList *icons; PangoLayout *layout; PangoAttribute *font_size_attr; -@@ -66,13 +67,13 @@ +@@ -66,13 +65,13 @@ #define SPLASH_BASE_HEIGHT 220 /* offset from bottom of label & font */ @@ -111,3 +25,96 @@ #define SPLASH_BASE_ICON_SIZE 36 #define SPLASH_BASE_ICON_ROWS 1 +--- gnome-session-2.12.0/gnome-session/splash-widget.c.shaped 2006-01-12 02:19:59.000000000 -0500 ++++ gnome-session-2.12.0/gnome-session/splash-widget.c 2006-01-12 02:22:28.000000000 -0500 +@@ -137,16 +137,6 @@ + if (!GTK_WIDGET_DRAWABLE (widget)) + return FALSE; + +- if (gdk_rectangle_intersect ( +- &event->area, &sw->image_bounds, &exposed)) +- gdk_draw_drawable ( +- GDK_DRAWABLE (widget->window), +- widget->style->black_gc, +- GDK_DRAWABLE (sw->bg_pixmap), +- exposed.x, exposed.y, +- exposed.x, exposed.y, +- exposed.width, exposed.height); +- + for (l = sw->icons; l; l = l->next) { + SplashIcon *si = l->data; + +@@ -221,33 +211,42 @@ + static void + splash_widget_realize (GtkWidget *widget) + { +- GdkPixmap *pm; + SplashWidget *sw = (SplashWidget *) widget; + + GNOME_CALL_PARENT (GTK_WIDGET_CLASS, realize, (widget)); + + if (sw->background && widget->window) { +- int width, height; ++ GdkPixmap *pixmap; ++ GdkBitmap *mask; ++ GdkColormap *colormap; + +- width = gdk_pixbuf_get_width (sw->background); +- height = gdk_pixbuf_get_height (sw->background); ++ pixmap = NULL; ++ mask = NULL; + +- pm = gdk_pixmap_new ( +- widget->window, +- width, height, +- gdk_drawable_get_visual (widget->window)->depth); ++ colormap = gtk_widget_get_colormap (widget); ++ gdk_pixbuf_render_pixmap_and_mask_for_colormap (sw->background, ++ colormap, ++ &pixmap, &mask, ++ 125); + +- if (pm) { +- gdk_pixbuf_render_to_drawable ( +- sw->background, GDK_DRAWABLE (pm), +- widget->style->black_gc, +- 0, 0, 0, 0, width, height, +- GDK_RGB_DITHER_MAX, +- 0, 0); +- +- gdk_window_set_back_pixmap ( +- widget->window, pm, FALSE); +- sw->bg_pixmap = pm; ++ if (pixmap) { ++ GtkStyle *style; ++ ++ style = gtk_style_copy (widget->style); ++ style->bg_pixmap[GTK_STATE_NORMAL] = pixmap; ++ ++ gtk_widget_set_style (widget, style); ++ g_object_unref (style); ++ ++ if (mask) { ++ gdk_window_shape_combine_mask (widget->window, ++ mask, 0, 0); ++ ++ g_object_unref (mask); ++ } ++ ++ gtk_style_set_background (widget->style, widget->window, ++ GTK_STATE_NORMAL); + } + } + } +@@ -257,11 +256,6 @@ + { + SplashWidget *sw = (SplashWidget *) widget; + +- if (sw->bg_pixmap) { +- g_object_unref (sw->bg_pixmap); +- sw->bg_pixmap = NULL; +- } +- + GNOME_CALL_PARENT (GTK_WIDGET_CLASS, unrealize, (widget)); + } + diff --git a/gnome-session.spec b/gnome-session.spec index a0a5d31..2b5adce 100644 --- a/gnome-session.spec +++ b/gnome-session.spec @@ -148,7 +148,7 @@ done %{_sysconfdir}/gconf/schemas/*.schemas %changelog -* Thu Jan 12 2005 Ray Strode - 2.12.0-6 +* Thu Jan 12 2006 Ray Strode - 2.12.0-6 - Fix screen corruption around splash screen shape (bug 177502) * Tue Dec 20 2005 John (J5) Palmieri - 2.12.0-5