diff -Nur xfdesktop4-4.4.2/settings/behavior-settings.c xfdesktop4-4.4.2.new/settings/behavior-settings.c --- xfdesktop4-4.4.2/settings/behavior-settings.c 2007-11-17 20:31:41.000000000 +0100 +++ xfdesktop4-4.4.2.new/settings/behavior-settings.c 2008-03-02 17:39:34.000000000 +0100 @@ -22,6 +22,7 @@ #endif #include +#include #include "xfce-desktop.h" #include "xfdesktop-common.h" @@ -54,6 +55,10 @@ static gboolean desktop_icons_use_system_font = TRUE; static guint desktop_icons_font_size = 12; /* default, i guess */ static guint desktop_icons_icon_size = 32; /* default */ +static gboolean show_home = TRUE; +static gboolean show_filesystem = TRUE; +static gboolean show_trash = TRUE; +static gboolean show_removable = TRUE; #endif static void @@ -96,6 +101,43 @@ #ifdef ENABLE_DESKTOP_ICONS static void +set_show_option(GtkWidget *w, gpointer user_data) +{ + BackdropDialog *bd = (BackdropDialog *)user_data; + guint opt; + + opt = GPOINTER_TO_UINT(g_object_get_data(G_OBJECT(w), "xfce-shownum")); + switch (opt) + { + case XFCE_DESKTOP_SHOW_HOME: + show_home = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w)); + mcs_manager_set_int(bd->plugin->manager, + "showhome", BACKDROP_CHANNEL, + show_home ? 1 : 0); + break; + case XFCE_DESKTOP_SHOW_FILESYSTEM: + show_filesystem = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w)); + mcs_manager_set_int(bd->plugin->manager, + "showfilesystem", BACKDROP_CHANNEL, + show_filesystem ? 1 : 0); + break; + case XFCE_DESKTOP_SHOW_TRASH: + show_trash = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w)); + mcs_manager_set_int(bd->plugin->manager, + "showtrash", BACKDROP_CHANNEL, + show_trash ? 1 : 0); + break; + case XFCE_DESKTOP_SHOW_REMOVABLE: + show_removable = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w)); + mcs_manager_set_int(bd->plugin->manager, + "showremovable", BACKDROP_CHANNEL, + show_removable ? 1 : 0); + break; + } + mcs_manager_notify(bd->plugin->manager, BACKDROP_CHANNEL); +} + +static void set_sbtn_option(GtkSpinButton *sbtn, gpointer user_data) { @@ -138,7 +180,11 @@ } else gtk_widget_set_sensitive(bd->vbox_icon_settings, FALSE); - + if(desktop_icon_style == XFCE_DESKTOP_ICON_STYLE_FILES) + gtk_widget_set_sensitive(bd->hbox_show_icons, TRUE); + else + gtk_widget_set_sensitive(bd->hbox_show_icons, FALSE); + mcs_manager_set_int(bd->plugin->manager, "desktopiconstyle", BACKDROP_CHANNEL, desktop_icon_style); mcs_manager_notify(bd->plugin->manager, BACKDROP_CHANNEL); @@ -202,6 +248,47 @@ if(setting && setting->data.v_int > 0) desktop_icons_icon_size = setting->data.v_int; + /* special icons */ + gchar *filename; + XfceRc *rc; + + filename = xfce_resource_save_location (XFCE_RESOURCE_CONFIG, + "xfce4/desktop/xfdesktoprc", + FALSE); + rc = xfce_rc_simple_open (filename, FALSE); + g_free (filename); + if (rc) + { + if (xfce_rc_has_group (rc, "file-icons")) + { + xfce_rc_set_group (rc, "file-icons"); + show_home = xfce_rc_read_bool_entry (rc, "show-home", TRUE); + show_filesystem = xfce_rc_read_bool_entry (rc, "show-filesystem", TRUE); + show_trash = xfce_rc_read_bool_entry (rc, "show-trash", TRUE); + show_removable = xfce_rc_read_bool_entry (rc, "show-removable", TRUE); + } + xfce_rc_close (rc); + } + + setting = mcs_manager_setting_lookup(plugin->manager, "showhome", + BACKDROP_CHANNEL); + if(setting) + show_home = setting->data.v_int ? TRUE : FALSE; + + setting = mcs_manager_setting_lookup(plugin->manager, "showfilesystem", + BACKDROP_CHANNEL); + if(setting) + show_filesystem = setting->data.v_int ? TRUE : FALSE; + + setting = mcs_manager_setting_lookup(plugin->manager, "showtrash", + BACKDROP_CHANNEL); + if(setting) + show_trash = setting->data.v_int ? TRUE : FALSE; + + setting = mcs_manager_setting_lookup(plugin->manager, "showremovable", + BACKDROP_CHANNEL); + if(setting) + show_removable = setting->data.v_int ? TRUE : FALSE; #endif /* ENABLE_DESKTOP_ICONS */ } @@ -229,7 +316,7 @@ GtkWidget *btn; #endif #ifdef ENABLE_DESKTOP_ICONS - GtkWidget *combo, *sbtn, *lbl, *hbox; + GtkWidget *combo, *sbtn, *lbl, *hbox, *table; #endif kiosk = xfce_kiosk_new("xfdesktop"); @@ -350,11 +437,60 @@ gtk_widget_set_sensitive(bd->frame_sysfont, !desktop_icons_use_system_font); + if (desktop_icon_style != XFCE_DESKTOP_ICON_STYLE_FILES) + gtk_widget_set_sensitive(bd->vbox_icon_settings, FALSE); + + if(desktop_icon_style == XFCE_DESKTOP_ICON_STYLE_NONE) gtk_widget_set_sensitive(bd->vbox_icon_settings, FALSE); if(!xfce_kiosk_query(kiosk, "CustomizeDesktopIcons")) gtk_widget_set_sensitive(frame_bin, FALSE); + + bd->hbox_show_icons = gtk_hbox_new (FALSE, FALSE); + gtk_widget_show(bd->hbox_show_icons); + gtk_box_pack_start(GTK_BOX(bd->vbox_icon_settings),bd->hbox_show_icons, FALSE, FALSE, 0); + + table = gtk_table_new (3, 3, TRUE); + gtk_widget_show (table); + gtk_box_pack_start(GTK_BOX(bd->hbox_show_icons), table, FALSE, FALSE, 0); + + lbl = gtk_label_new_with_mnemonic(_("Show ic_ons for: ")); + gtk_widget_show(lbl); + gtk_table_attach(GTK_TABLE (table), lbl, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 0, 0); + + bd->chk_show_home = gtk_check_button_new_with_mnemonic(_("_home")); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (bd->chk_show_home), show_home); + gtk_widget_show (bd->chk_show_home); + g_object_set_data(G_OBJECT(bd->chk_show_home), "xfce-shownum", + GUINT_TO_POINTER(XFCE_DESKTOP_SHOW_HOME)); + gtk_table_attach(GTK_TABLE (table), bd->chk_show_home, 1, 2, 0, 1, GTK_FILL, GTK_FILL, 0, 0); + + bd->chk_show_filesystem = gtk_check_button_new_with_mnemonic(_("_file system")); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (bd->chk_show_filesystem), show_filesystem); + gtk_widget_show (bd->chk_show_filesystem); + g_object_set_data(G_OBJECT(bd->chk_show_filesystem), "xfce-shownum", + GUINT_TO_POINTER(XFCE_DESKTOP_SHOW_FILESYSTEM)); + gtk_table_attach(GTK_TABLE (table), bd->chk_show_filesystem, 1, 3, 1, 2, GTK_FILL, GTK_FILL, 0, 0); + + bd->chk_show_trash = gtk_check_button_new_with_mnemonic(_("_trash")); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (bd->chk_show_trash), show_trash); + gtk_widget_show (bd->chk_show_trash); + g_object_set_data(G_OBJECT(bd->chk_show_trash), "xfce-shownum", + GUINT_TO_POINTER(XFCE_DESKTOP_SHOW_TRASH)); + gtk_table_attach(GTK_TABLE (table), bd->chk_show_trash, 2, 3, 0, 1, GTK_FILL, GTK_FILL, 0, 0); + + bd->chk_show_removable = gtk_check_button_new_with_mnemonic(_("_removable devices")); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (bd->chk_show_removable), show_removable); + gtk_widget_show (bd->chk_show_removable); + g_object_set_data(G_OBJECT(bd->chk_show_removable), "xfce-shownum", + GUINT_TO_POINTER(XFCE_DESKTOP_SHOW_REMOVABLE)); + gtk_table_attach(GTK_TABLE (table), bd->chk_show_removable, 1, 3, 2, 3, GTK_FILL, GTK_FILL, 0, 0); + + g_signal_connect(G_OBJECT(bd->chk_show_home), "toggled", G_CALLBACK(set_show_option), bd); + g_signal_connect(G_OBJECT(bd->chk_show_filesystem), "toggled", G_CALLBACK(set_show_option), bd); + g_signal_connect(G_OBJECT(bd->chk_show_trash), "toggled", G_CALLBACK(set_show_option), bd); + g_signal_connect(G_OBJECT(bd->chk_show_removable), "toggled", G_CALLBACK(set_show_option), bd); #endif xfce_kiosk_free(kiosk); diff -Nur xfdesktop4-4.4.2/settings/settings-common.h xfdesktop4-4.4.2.new/settings/settings-common.h --- xfdesktop4-4.4.2/settings/settings-common.h 2007-11-17 20:31:41.000000000 +0100 +++ xfdesktop4-4.4.2.new/settings/settings-common.h 2008-03-02 17:39:34.000000000 +0100 @@ -45,6 +45,11 @@ #ifdef ENABLE_DESKTOP_ICONS GtkWidget *vbox_icon_settings; GtkWidget *frame_sysfont; + GtkWidget *chk_show_home; + GtkWidget *chk_show_filesystem; + GtkWidget *chk_show_trash; + GtkWidget *chk_show_removable; + GtkWidget *hbox_show_icons; #endif } BackdropDialog; diff -Nur xfdesktop4-4.4.2/src/xfce-desktop.c xfdesktop4-4.4.2.new/src/xfce-desktop.c --- xfdesktop4-4.4.2/src/xfce-desktop.c 2007-11-17 20:31:41.000000000 +0100 +++ xfdesktop4-4.4.2.new/src/xfce-desktop.c 2008-03-02 17:39:34.000000000 +0100 @@ -98,6 +98,10 @@ guint icons_size; GtkWidget *icon_view; gdouble system_font_size; + gboolean show_home; + gboolean show_filesystem; + gboolean show_trash; + gboolean show_removable; #endif }; @@ -173,51 +177,20 @@ path = thunar_vfs_path_new(desktop_path, NULL); if(path) { - XfceRc *rcfile; - /* defaults */ - gboolean show_removable = TRUE, show_filesystem = TRUE; - gboolean show_home = TRUE, show_trash = TRUE; - manager = xfdesktop_file_icon_manager_new(path); thunar_vfs_path_unref(path); - rcfile = xfce_rc_config_open(XFCE_RESOURCE_CONFIG, - "xfce4/desktop/xfdesktoprc", - TRUE); - if(rcfile) { - if(xfce_rc_has_group(rcfile, "file-icons")) { - xfce_rc_set_group(rcfile, "file-icons"); - show_filesystem = xfce_rc_read_bool_entry(rcfile, - "show-filesystem", - show_filesystem); - show_home = xfce_rc_read_bool_entry(rcfile, - "show-home", - show_home); - show_trash = xfce_rc_read_bool_entry(rcfile, - "show-trash", - show_trash); - show_removable = xfce_rc_read_bool_entry(rcfile, - "show-removable", - show_removable); - } - - xfce_rc_close(rcfile); - } - xfdesktop_file_icon_manager_set_show_special_file(XFDESKTOP_FILE_ICON_MANAGER(manager), XFDESKTOP_SPECIAL_FILE_ICON_FILESYSTEM, - show_filesystem); + desktop->priv->show_filesystem); xfdesktop_file_icon_manager_set_show_special_file(XFDESKTOP_FILE_ICON_MANAGER(manager), XFDESKTOP_SPECIAL_FILE_ICON_HOME, - show_home); + desktop->priv->show_home); xfdesktop_file_icon_manager_set_show_special_file(XFDESKTOP_FILE_ICON_MANAGER(manager), XFDESKTOP_SPECIAL_FILE_ICON_TRASH, - show_trash); + desktop->priv->show_trash); xfdesktop_file_icon_manager_set_show_removable_media(XFDESKTOP_FILE_ICON_MANAGER(manager), - show_removable); - } else { - g_critical("Unable to create ThunarVfsPath for '%s'", - desktop_path); + desktop->priv->show_removable); } g_free(desktop_path); } @@ -859,6 +832,38 @@ #endif } +#ifdef ENABLE_DESKTOP_ICONS +void +xfce_desktop_set_show_special (XfceDesktop *desktop, + int what, + guint value) +{ + g_return_if_fail(XFCE_IS_DESKTOP(desktop)); + + if(desktop->priv->icon_view) { + gtk_widget_destroy(desktop->priv->icon_view); + desktop->priv->icon_view = NULL; + } + + switch (what) + { + case XFCE_DESKTOP_SHOW_HOME: + desktop->priv->show_home = value ? TRUE : FALSE; + break; + case XFCE_DESKTOP_SHOW_FILESYSTEM: + desktop->priv->show_filesystem = value ? TRUE : FALSE; + break; + case XFCE_DESKTOP_SHOW_TRASH: + desktop->priv->show_trash = value ? TRUE : FALSE; + break; + case XFCE_DESKTOP_SHOW_REMOVABLE: + desktop->priv->show_removable = value ? TRUE : FALSE; + break; + } + xfce_desktop_setup_icon_view(desktop); +} +#endif + void xfce_desktop_set_icon_size(XfceDesktop *desktop, guint icon_size) diff -Nur xfdesktop4-4.4.2/src/xfce-desktop.h xfdesktop4-4.4.2.new/src/xfce-desktop.h --- xfdesktop4-4.4.2/src/xfce-desktop.h 2007-11-17 20:31:41.000000000 +0100 +++ xfdesktop4-4.4.2.new/src/xfce-desktop.h 2008-03-02 17:39:47.000000000 +0100 @@ -49,6 +49,14 @@ XFCE_DESKTOP_ICON_STYLE_FILES, } XfceDesktopIconStyle; +typedef enum +{ + XFCE_DESKTOP_SHOW_HOME = 0, + XFCE_DESKTOP_SHOW_FILESYSTEM, + XFCE_DESKTOP_SHOW_TRASH, + XFCE_DESKTOP_SHOW_REMOVABLE, +} XfceDesktopShowSpecial; + struct _XfceDesktop { GtkWindow window; @@ -86,7 +94,9 @@ gboolean use_system); void xfce_desktop_set_icon_font_size(XfceDesktop *desktop, guint font_size_points); - +void xfce_desktop_set_show_special (XfceDesktop *desktop, + int what, + guint value); void xfce_desktop_set_session_logout_func(XfceDesktop *desktop, SessionLogoutFunc logout_func); diff -Nur xfdesktop4-4.4.2/src/xfce-desktop-settings.c xfdesktop4-4.4.2.new/src/xfce-desktop-settings.c --- xfdesktop4-4.4.2/src/xfce-desktop-settings.c 2007-11-17 20:31:41.000000000 +0100 +++ xfdesktop4-4.4.2.new/src/xfce-desktop-settings.c 2008-03-02 17:39:34.000000000 +0100 @@ -59,6 +59,8 @@ #include "xfdesktop-common.h" #include "xfce-desktop-settings.h" +#include "xfdesktop-special-file-icon.h" +#include "xfdesktop-icon-view-manager.h" static void save_list_file_minus_one(const gchar *filename, const gchar **files, gint badi) @@ -269,6 +271,76 @@ mcs_setting_free(setting); setting = NULL; } + + /* special icons */ + gchar *filename; + XfceRc *rc; + gboolean showhome = TRUE; + gboolean showfilesystem = TRUE; + gboolean showtrash = TRUE; + gboolean showremovable = TRUE; + + filename = xfce_resource_save_location (XFCE_RESOURCE_CONFIG, + "xfce4/desktop/xfdesktoprc", + FALSE); + rc = xfce_rc_simple_open (filename, FALSE); + g_free (filename); + if (rc) + { + if (xfce_rc_has_group (rc, "file-icons")) + { + xfce_rc_set_group (rc, "file-icons"); + showhome = xfce_rc_read_bool_entry (rc, "show-home", TRUE); + showfilesystem = xfce_rc_read_bool_entry (rc, "show-filesystem", TRUE); + showtrash = xfce_rc_read_bool_entry (rc, "show-trash", TRUE); + showremovable = xfce_rc_read_bool_entry (rc, "show-removable", TRUE); + } + xfce_rc_close (rc); + } + + if(MCS_SUCCESS == mcs_client_get_setting(mcs_client, "showhome", + BACKDROP_CHANNEL, &setting)) + { + xfce_desktop_set_show_special (desktop, XFCE_DESKTOP_SHOW_HOME, + setting->data.v_int); + mcs_setting_free(setting); + setting = NULL; + } else + xfce_desktop_set_show_special (desktop, XFCE_DESKTOP_SHOW_HOME, + showhome ? 1 : 0); + + if(MCS_SUCCESS == mcs_client_get_setting(mcs_client, "showfilesystem", + BACKDROP_CHANNEL, &setting)) + { + xfce_desktop_set_show_special (desktop, XFCE_DESKTOP_SHOW_FILESYSTEM, + setting->data.v_int); + mcs_setting_free(setting); + setting = NULL; + } else + xfce_desktop_set_show_special (desktop, XFCE_DESKTOP_SHOW_FILESYSTEM, + showfilesystem ? 1 : 0); + + if(MCS_SUCCESS == mcs_client_get_setting(mcs_client, "showtrash", + BACKDROP_CHANNEL, &setting)) + { + xfce_desktop_set_show_special (desktop, XFCE_DESKTOP_SHOW_TRASH, + setting->data.v_int); + mcs_setting_free(setting); + setting = NULL; + } else + xfce_desktop_set_show_special (desktop, XFCE_DESKTOP_SHOW_TRASH, + showtrash ? 1 : 0); + + if(MCS_SUCCESS == mcs_client_get_setting(mcs_client, "showremovable", + BACKDROP_CHANNEL, &setting)) + { + xfce_desktop_set_show_special (desktop, XFCE_DESKTOP_SHOW_REMOVABLE, + setting->data.v_int); + mcs_setting_free(setting); + setting = NULL; + } else + xfce_desktop_set_show_special (desktop, XFCE_DESKTOP_SHOW_REMOVABLE, + showremovable ? 1 : 0); #endif for(i = 0; i < nmonitors; i++) { @@ -414,6 +486,30 @@ xfce_desktop_set_icon_font_size(desktop, setting->data.v_int); return TRUE; } + + if(!strcmp(setting->name, "showhome")) { + xfce_desktop_set_show_special(desktop, XFCE_DESKTOP_SHOW_HOME, + setting->data.v_int); + return TRUE; + } + + if(!strcmp(setting->name, "showfilesystem")) { + xfce_desktop_set_show_special(desktop, XFCE_DESKTOP_SHOW_FILESYSTEM, + setting->data.v_int); + return TRUE; + } + + if(!strcmp(setting->name, "showtrash")) { + xfce_desktop_set_show_special(desktop, XFCE_DESKTOP_SHOW_TRASH, + setting->data.v_int); + return TRUE; + } + + if(!strcmp(setting->name, "showremovable")) { + xfce_desktop_set_show_special(desktop, XFCE_DESKTOP_SHOW_REMOVABLE, + setting->data.v_int); + return TRUE; + } #endif /* get the screen and monitor number */