diff --git a/src/nemo-application.c b/src/nemo-application.c index 664749abc..8b30dd678 100644 --- a/src/nemo-application.c +++ b/src/nemo-application.c @@ -562,7 +562,6 @@ static void desktop_changed_callback (gpointer user_data) { NemoApplication *application; - application = NEMO_APPLICATION (user_data); if (g_settings_get_boolean (gnome_background_preferences, NEMO_PREFERENCES_SHOW_DESKTOP)) { nemo_application_open_desktop (application); @@ -571,6 +570,17 @@ desktop_changed_callback (gpointer user_data) } } +static void +monitors_changed_callback (GdkScreen *screen, NemoApplication *application) +{ + if (g_settings_get_boolean (gnome_background_preferences, NEMO_PREFERENCES_SHOW_DESKTOP)) { + nemo_application_close_desktop (); + nemo_application_open_desktop (application); + } else { + nemo_application_close_desktop (); + } +} + static gboolean window_can_be_closed (NemoWindow *window) { @@ -1046,6 +1056,8 @@ init_icons_and_styles (void) static void init_desktop (NemoApplication *self) { + GdkScreen *screen; + screen = gdk_display_get_screen (gdk_display_get_default (), 0); /* Initialize the desktop link monitor singleton */ nemo_desktop_link_monitor_get (); @@ -1063,6 +1075,10 @@ init_desktop (NemoApplication *self) g_signal_connect_swapped (gnome_background_preferences, "changed::" NEMO_PREFERENCES_SHOW_DESKTOP, G_CALLBACK (desktop_changed_callback), self); + + g_signal_connect (screen, "monitors-changed", + G_CALLBACK (monitors_changed_callback), + self); } static gboolean