Author: kelnos
Date: 2006-07-11 22:23:36 +0000 (Tue, 11 Jul 2006)
New Revision: 22411
Modified:
xfdesktop/trunk/src/xfce-desktop.c
Log:
clear up the expose tearing of the backdrop image when dragging a window
across the desktop quickly. i feel like there's a reason i stopped using this
method, but it seems to work ok now, so let's see how it goes. the icons are
still drawn in the same way, so there's probably some amount of tearing on
slower machines. the only way i can think of to improve that would be to
double-buffer each icon, which maybe i'll look into doing later. (bug 1944)
Modified: xfdesktop/trunk/src/xfce-desktop.c
===================================================================
--- xfdesktop/trunk/src/xfce-desktop.c 2006-07-11 22:07:24 UTC (rev 22410)
+++ xfdesktop/trunk/src/xfce-desktop.c 2006-07-11 22:23:36 UTC (rev 22411)
@@ -349,6 +349,7 @@
/* set the new pixmap and tell gtk to redraw it */
desktop->priv->bg_pixmap = pmap;
+ gdk_window_set_back_pixmap(GTK_WIDGET(desktop)->window, pmap, FALSE);
gtk_widget_queue_draw_area(GTK_WIDGET(desktop), rect.x, rect.y,
rect.width, rect.height);
@@ -533,8 +534,6 @@
gtk_window_set_type_hint(GTK_WINDOW(desktop),
GDK_WINDOW_TYPE_HINT_DESKTOP);
gtk_window_set_accept_focus(GTK_WINDOW(desktop), FALSE);
-
- gtk_widget_set_app_paintable(GTK_WIDGET(desktop), TRUE);
}
static void
@@ -690,16 +689,8 @@
desktop = XFCE_DESKTOP(w);
- if(!desktop->priv->bg_pixmap && desktop->priv->nbackdrops > 0)
- backdrop_changed_cb(desktop->priv->backdrops[0], desktop);
-
- if(desktop->priv->bg_pixmap) {
- GtkStyle *style = gtk_widget_get_style(w);
- gdk_draw_drawable(GDK_DRAWABLE(w->window), style->black_gc,
- GDK_DRAWABLE(desktop->priv->bg_pixmap),
- evt->area.x, evt->area.y, evt->area.x, evt->area.y,
+ gdk_window_clear_area(w->window, evt->area.x, evt->area.y,
evt->area.width, evt->area.height);
- }
children = gtk_container_get_children(GTK_CONTAINER(w));
for(l = children; l; l = l->next) {
@@ -722,8 +713,21 @@
return TRUE;
}
+static void
+style_set_cb(GtkWidget *w,
+ GtkStyle *old_style,
+ gpointer user_data)
+{
+ XfceDesktop *desktop = XFCE_DESKTOP(w);
+
+ if(desktop->priv->bg_pixmap) {
+ gdk_window_set_back_pixmap(w->window, desktop->priv->bg_pixmap, FALSE);
+ gtk_widget_queue_draw(w);
+ }
+}
+
/* public api */
/**
@@ -745,6 +749,9 @@
GTK_WINDOW(desktop)->screen = gscreen;
desktop->priv->gscreen = gscreen;
+ g_signal_connect(G_OBJECT(desktop), "style-set",
+ G_CALLBACK(style_set_cb), NULL);
+
return GTK_WIDGET(desktop);
}
_______________________________________________
Xfce4-commits mailing list
[email protected]
http://foo-projects.org/mailman/listinfo/xfce4-commits