- Fix screen corruption around splash screen shape (bug 177502)
This commit is contained in:
parent
0db9051e60
commit
eccc98eef5
@ -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.h.shaped 2005-08-08 03:35:13.000000000 -0400
|
||||||
+++ gnome-session-2.12.0/gnome-session/splash-widget.c 2005-12-20 16:23:55.000000000 -0500
|
+++ gnome-session-2.12.0/gnome-session/splash-widget.h 2006-01-12 02:19:59.000000000 -0500
|
||||||
@@ -138,7 +138,7 @@
|
@@ -36,7 +36,6 @@
|
||||||
return FALSE;
|
GnomeIconTheme *icon_theme;
|
||||||
|
|
||||||
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 @@
|
|
||||||
|
|
||||||
GdkPixbuf *background;
|
GdkPixbuf *background;
|
||||||
GdkPixmap *bg_pixmap;
|
- GdkPixmap *bg_pixmap;
|
||||||
+ GdkBitmap *bg_mask;
|
|
||||||
GList *icons;
|
GList *icons;
|
||||||
PangoLayout *layout;
|
PangoLayout *layout;
|
||||||
PangoAttribute *font_size_attr;
|
PangoAttribute *font_size_attr;
|
||||||
@@ -66,13 +67,13 @@
|
@@ -66,13 +65,13 @@
|
||||||
#define SPLASH_BASE_HEIGHT 220
|
#define SPLASH_BASE_HEIGHT 220
|
||||||
|
|
||||||
/* offset from bottom of label & font */
|
/* offset from bottom of label & font */
|
||||||
@ -111,3 +25,96 @@
|
|||||||
#define SPLASH_BASE_ICON_SIZE 36
|
#define SPLASH_BASE_ICON_SIZE 36
|
||||||
#define SPLASH_BASE_ICON_ROWS 1
|
#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));
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -148,7 +148,7 @@ done
|
|||||||
%{_sysconfdir}/gconf/schemas/*.schemas
|
%{_sysconfdir}/gconf/schemas/*.schemas
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
* Thu Jan 12 2005 Ray Strode <rstrode@redhat.com> - 2.12.0-6
|
* Thu Jan 12 2006 Ray Strode <rstrode@redhat.com> - 2.12.0-6
|
||||||
- Fix screen corruption around splash screen shape (bug 177502)
|
- Fix screen corruption around splash screen shape (bug 177502)
|
||||||
|
|
||||||
* Tue Dec 20 2005 John (J5) Palmieri <johnp@redhat.com> - 2.12.0-5
|
* Tue Dec 20 2005 John (J5) Palmieri <johnp@redhat.com> - 2.12.0-5
|
||||||
|
Loading…
Reference in New Issue
Block a user