diff --git a/src/xfce-desktop.c b/src/xfce-desktop.c index 1ca426c9..d902ce30 100644 --- a/src/xfce-desktop.c +++ b/src/xfce-desktop.c @@ -123,6 +123,8 @@ struct _XfceDesktopPrivate #endif gchar *last_filename; + + gboolean cycle_backdrop; }; enum @@ -754,7 +756,9 @@ workspace_changed_cb(WnckScreen *wnck_screen, current_workspace, new_workspace); for(i = 0; i < xfce_desktop_get_n_monitors(desktop); i++) { - backdrop = xfce_workspace_get_backdrop(desktop->priv->workspaces[new_workspace], i); + if(backdrop = xfce_workspace_get_backdrop(desktop->priv->workspaces[new_workspace], i)); + desktop->priv->cycle_backdrop = xfce_backdrop_get_cycle_backdrop(backdrop); + /* update it */ backdrop_changed_cb(backdrop, user_data); @@ -1579,6 +1583,8 @@ xfce_desktop_new(GdkScreen *gscreen, desktop->priv->last_filename = g_strdup(""); + desktop->priv->cycle_backdrop = FALSE; + return GTK_WIDGET(desktop); } @@ -1941,7 +1947,8 @@ xfce_desktop_refresh(XfceDesktop *desktop, gboolean 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 +1958,11 @@ void xfce_desktop_arrange_icons(XfceDesktop *desktop) xfdesktop_icon_view_sort_icons(XFDESKTOP_ICON_VIEW(desktop->priv->icon_view)); #endif } + +gboolean +xfce_desktop_get_backdrop_cycle(XfceDesktop *desktop) +{ + g_return_val_if_fail(XFCE_IS_DESKTOP(desktop), FALSE); + + return desktop->priv->cycle_backdrop; +} diff --git a/src/xfce-desktop.h b/src/xfce-desktop.h index a624fd8e..d96d717a 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_backdrop_cycle(XfceDesktop *desktop); + G_END_DECLS #endif diff --git a/src/xfdesktop-file-icon-manager.c b/src/xfdesktop-file-icon-manager.c index 36052585..6d4cecf8 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_backdrop_cycle(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 */