Author: kelnos
Date: 2008-04-30 06:10:36 +0000 (Wed, 30 Apr 2008)
New Revision: 26906
Modified:
xfdesktop/trunk/src/xfce-desktop.c
Log:
support GdkScreen::monitors-changed signal for gtk 2.13+
aka xrandr1.2 support
Modified: xfdesktop/trunk/src/xfce-desktop.c
===================================================================
--- xfdesktop/trunk/src/xfce-desktop.c 2008-04-30 06:10:16 UTC (rev 26905)
+++ xfdesktop/trunk/src/xfce-desktop.c 2008-04-30 06:10:36 UTC (rev 26906)
@@ -416,6 +416,34 @@
}
static void
+xfce_desktop_monitors_changed(GdkScreen *gscreen,
+ gpointer user_data)
+{
+ XfceDesktop *desktop = XFCE_DESKTOP(user_data);
+ guint n_monitors, i;
+
+ n_monitors = gdk_screen_get_n_monitors(gscreen);
+ if(n_monitors < desktop->priv->nbackdrops) {
+ for(i = n_monitors; i < desktop->priv->nbackdrops; ++i)
+ g_object_unref(G_OBJECT(desktop->priv->backdrops[i]));
+ }
+
+ if(n_monitors != desktop->priv->nbackdrops) {
+ desktop->priv->backdrops = g_realloc(desktop->priv->backdrops,
+ sizeof(XfceBackdrop *) *
n_monitors);
+ if(n_monitors > desktop->priv->nbackdrops) {
+ GdkVisual *vis = gtk_widget_get_visual(GTK_WIDGET(desktop));
+ for(i = desktop->priv->nbackdrops; i < n_monitors; ++i)
+ desktop->priv->backdrops[i] = xfce_backdrop_new(vis);
+ }
+ desktop->priv->nbackdrops = n_monitors;
+ }
+
+ /* update the total size of the screen and the size of each backdrop */
+ screen_size_changed_cb(gscreen, desktop);
+}
+
+static void
handle_xinerama_stretch(XfceDesktop *desktop)
{
XfceBackdrop *backdrop0;
@@ -599,6 +627,14 @@
gtk_window_set_screen(GTK_WINDOW(desktop), desktop->priv->gscreen);
sw = gdk_screen_get_width(desktop->priv->gscreen);
sh = gdk_screen_get_height(desktop->priv->gscreen);
+ if(gtk_major_version > 2
+ || (gtk_major_version == 2 && gtk_minor_version >= 13))
+ {
+ g_signal_connect(G_OBJECT(desktop->priv->gscreen),
+ "monitors-changed",
+ G_CALLBACK(xfce_desktop_monitors_changed),
+ desktop);
+ }
/* chain up */
GTK_WIDGET_CLASS(xfce_desktop_parent_class)->realize(widget);
@@ -682,6 +718,13 @@
g_signal_handlers_disconnect_by_func(G_OBJECT(desktop),
G_CALLBACK(style_set_cb), NULL);
+ if(gtk_major_version > 2
+ || (gtk_major_version == 2 && gtk_minor_version >= 13))
+ {
+ g_signal_handlers_disconnect_by_func(G_OBJECT(desktop->priv->gscreen),
+
G_CALLBACK(xfce_desktop_monitors_changed),
+ desktop);
+ }
if(GTK_WIDGET_MAPPED(widget))
gtk_widget_unmap(widget);
_______________________________________________
Xfce4-commits mailing list
[email protected]
http://foo-projects.org/mailman/listinfo/xfce4-commits