Blob Blame History Raw
diff --git a/eel/eel-background.c b/eel/eel-background.c
index 9c40629..2854a07 100644
--- a/eel/eel-background.c
+++ b/eel/eel-background.c
@@ -94,6 +94,8 @@ struct EelBackgroundDetails {
 	gboolean is_desktop;
 	/* Desktop screen size watcher */
 	gulong screen_size_handler;
+	/* Desktop monitors configuration watcher */
+	gulong screen_monitors_handler;
 	/* Can we use common pixmap for root window and desktop window */
 	gboolean use_common_pixmap;
 	guint change_idle_id;
@@ -869,7 +871,6 @@ screen_size_changed (GdkScreen *screen, EelBackground *background)
 	g_signal_emit (background, signals[APPEARANCE_CHANGED], 0);
 }
 
-
 static void
 widget_realized_setup (GtkWidget *widget, gpointer data)
 {
@@ -891,6 +892,13 @@ widget_realized_setup (GtkWidget *widget, gpointer data)
 		background->details->screen_size_handler = 
 			g_signal_connect (screen, "size_changed",
             				  G_CALLBACK (screen_size_changed), background);
+		if (background->details->screen_monitors_handler > 0) {
+		        g_signal_handler_disconnect (screen,
+				                     background->details->screen_monitors_handler);
+		}
+		background->details->screen_monitors_handler =
+			g_signal_connect (screen, "monitors-changed",
+					  G_CALLBACK (screen_size_changed), background);
 
 		root_window = gdk_screen_get_root_window(screen);			
 		
@@ -928,6 +936,11 @@ widget_unrealize_cb (GtkWidget *widget, gpointer data)
 				                     background->details->screen_size_handler);
 			background->details->screen_size_handler = 0;
 	}
+	if (background->details->screen_monitors_handler > 0) {
+		        g_signal_handler_disconnect (gtk_widget_get_screen (GTK_WIDGET (widget)),
+				                     background->details->screen_monitors_handler);
+			background->details->screen_monitors_handler = 0;
+	}
 	background->details->use_common_pixmap = FALSE;
 }