diff --git a/src/xfce-desktop.c b/src/xfce-desktop.c index 1ca426c9..666ed27e 100644 --- a/src/xfce-desktop.c +++ b/src/xfce-desktop.c @@ -1935,13 +1935,10 @@ xfce_desktop_refresh(XfceDesktop *desktop, gboolean advance_wallpaper) backdrop_changed_cb(backdrop, desktop); } } - - /* If we're only advancing the wallpaper we can exit here */ - if(advance_wallpaper) - return; } -void xfce_desktop_arrange_icons(XfceDesktop *desktop) +void +xfce_desktop_arrange_icons(XfceDesktop *desktop) { g_return_if_fail(XFCE_IS_DESKTOP(desktop)); @@ -1951,3 +1948,21 @@ void xfce_desktop_arrange_icons(XfceDesktop *desktop) xfdesktop_icon_view_sort_icons(XFDESKTOP_ICON_VIEW(desktop->priv->icon_view)); #endif } + +gboolean +xfce_desktop_get_cycle_backdrop(XfceDesktop *desktop) +{ + gint monitor, workspace; + XfceBackdrop *backdrop; + + g_return_val_if_fail(XFCE_IS_DESKTOP(desktop), FALSE); + + xfce_gdk_screen_get_active(&monitor); + if(&monitor == NULL) + return FALSE; + + workspace = xfce_desktop_get_current_workspace(desktop); + backdrop = xfce_workspace_get_backdrop(desktop->priv->workspaces[workspace], monitor); + + return xfce_backdrop_get_cycle_backdrop(backdrop); +} diff --git a/src/xfce-desktop.h b/src/xfce-desktop.h index a624fd8e..509ff6af 100644 --- a/src/xfce-desktop.h +++ b/src/xfce-desktop.h @@ -115,6 +115,8 @@ void xfce_desktop_refresh(XfceDesktop *desktop, gboolean advance_wallpaper); void xfce_desktop_arrange_icons(XfceDesktop *desktop); +gboolean xfce_desktop_get_cycle_backdrop(XfceDesktop *desktop); + G_END_DECLS #endif diff --git a/src/xfdesktop-file-icon-manager.c b/src/xfdesktop-file-icon-manager.c index 36052585..fcb0915b 100644 --- a/src/xfdesktop-file-icon-manager.c +++ b/src/xfdesktop-file-icon-manager.c @@ -966,6 +966,14 @@ xfdesktop_file_icon_menu_arrange_icons(GtkWidget *widget, xfdesktop_icon_view_sort_icons(fmanager->priv->icon_view); } +static void +xfdesktop_file_icon_menu_next_background(GtkWidget *widget, + gpointer user_data) +{ + XfdesktopFileIconManager *fmanager = XFDESKTOP_FILE_ICON_MANAGER(user_data); + xfce_desktop_refresh(XFCE_DESKTOP(fmanager->priv->desktop), TRUE); +} + static void xfdesktop_file_icon_menu_properties(GtkWidget *widget, gpointer user_data) @@ -1844,6 +1852,17 @@ xfdesktop_file_icon_manager_populate_context_menu(XfceDesktop *desktop, G_CALLBACK(xfdesktop_file_icon_menu_arrange_icons), fmanager); + if(xfce_desktop_get_cycle_backdrop(XFCE_DESKTOP(fmanager->priv->desktop))) { + /* show next background option */ + img = gtk_image_new_from_icon_name("go-next", GTK_ICON_SIZE_MENU); + mi = xfdesktop_menu_create_menu_item_with_mnemonic(_("_Next Background"), img); + gtk_widget_show(mi); + gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi); + g_signal_connect(G_OBJECT(mi), "activate", + G_CALLBACK(xfdesktop_file_icon_menu_next_background), + fmanager); + } + /* Desktop settings window */ img = gtk_image_new_from_icon_name("preferences-desktop-wallpaper", GTK_ICON_SIZE_MENU); mi = xfdesktop_menu_create_menu_item_with_mnemonic(_("Desktop _Settings..."), img); @@ -1851,6 +1870,11 @@ xfdesktop_file_icon_manager_populate_context_menu(XfceDesktop *desktop, gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi); g_signal_connect(G_OBJECT(mi), "activate", G_CALLBACK(xfdesktop_settings_launch), fmanager); + + /* Separator */ + mi = gtk_separator_menu_item_new(); + gtk_widget_show(mi); + gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi); } /* Properties - applies to desktop window or an icon on the desktop */