diff options
author | Alexander Larsson <alexl@redhat.com> | 2004-11-22 15:24:38 +0000 |
---|---|---|
committer | Alexander Larsson <alexl@src.gnome.org> | 2004-11-22 15:24:38 +0000 |
commit | 67e2a42fea65f2685580b119b98a058c8e81ac4e (patch) | |
tree | 19bc7c578c9f1a47f299d012ac4775010e06661e /src/file-manager/fm-desktop-icon-view.c | |
parent | 8dc115c33951754d75b57c67e4d918900a795468 (diff) | |
download | nautilus-67e2a42fea65f2685580b119b98a058c8e81ac4e.tar.gz |
Merge bonobo-slay-branch
2004-11-22 Alexander Larsson <alexl@redhat.com>
* Merge bonobo-slay-branch
Diffstat (limited to 'src/file-manager/fm-desktop-icon-view.c')
-rw-r--r-- | src/file-manager/fm-desktop-icon-view.c | 180 |
1 files changed, 109 insertions, 71 deletions
diff --git a/src/file-manager/fm-desktop-icon-view.c b/src/file-manager/fm-desktop-icon-view.c index 4922e6cd3..2e8ee237f 100644 --- a/src/file-manager/fm-desktop-icon-view.c +++ b/src/file-manager/fm-desktop-icon-view.c @@ -27,9 +27,9 @@ #include <config.h> #include "fm-icon-container.h" #include "fm-desktop-icon-view.h" +#include "fm-actions.h" #include <X11/Xatom.h> -#include <bonobo/bonobo-ui-util.h> #include <gtk/gtkmain.h> #include <dirent.h> #include <eel/eel-glib-extensions.h> @@ -45,14 +45,15 @@ #include <libgnome/gnome-i18n.h> #include <libgnome/gnome-util.h> #include <libgnomevfs/gnome-vfs.h> -#include <libnautilus-private/nautilus-bonobo-extensions.h> #include <libnautilus-private/nautilus-desktop-icon-file.h> #include <libnautilus-private/nautilus-directory-background.h> #include <libnautilus-private/nautilus-directory-notify.h> #include <libnautilus-private/nautilus-file-changes-queue.h> #include <libnautilus-private/nautilus-file-operations.h> #include <libnautilus-private/nautilus-file-utilities.h> +#include <libnautilus-private/nautilus-ui-utilities.h> #include <libnautilus-private/nautilus-global-preferences.h> +#include <libnautilus-private/nautilus-view-factory.h> #include <libnautilus-private/nautilus-link.h> #include <libnautilus-private/nautilus-metadata.h> #include <libnautilus-private/nautilus-monitor.h> @@ -67,23 +68,15 @@ #include <unistd.h> #include <gtk/gtkmessagedialog.h> -#define DESKTOP_COMMAND_EMPTY_TRASH_CONDITIONAL "/commands/Empty Trash Conditional" -#define DESKTOP_COMMAND_UNMOUNT_VOLUME_CONDITIONAL "/commands/Unmount Volume Conditional" -#define DESKTOP_COMMAND_PROTECT_VOLUME_CONDITIONAL "/commands/Protect Conditional" -#define DESKTOP_COMMAND_FORMAT_VOLUME_CONDITIONAL "/commands/Format Conditional" -#define DESKTOP_COMMAND_MEDIA_PROPERTIES_VOLUME_CONDITIONAL "/commands/Media Properties Conditional" - -#define DESKTOP_BACKGROUND_POPUP_PATH_DISKS "/popups/background/Before Zoom Items/Volume Items/Disks" -#define DESKTOP_BACKGROUND_POPUP_PATH_VOLUME_ITEMS "/popups/background/Before Zoom Items/Volume Items" - /* Timeout to check the desktop directory for updates */ #define RESCAN_TIMEOUT 4000 struct FMDesktopIconViewDetails { - BonoboUIComponent *ui; GdkWindow *root_window; - + GtkActionGroup *desktop_action_group; + guint desktop_merge_id; + /* For the desktop rescanning */ gulong delayed_init_signal; @@ -230,6 +223,7 @@ static void fm_desktop_icon_view_destroy (GtkObject *object) { FMDesktopIconView *icon_view; + GtkUIManager *ui_manager; icon_view = FM_DESKTOP_ICON_VIEW (object); @@ -243,11 +237,11 @@ fm_desktop_icon_view_destroy (GtkObject *object) default_zoom_level_changed, icon_view); - /* Clean up details */ - if (icon_view->details->ui != NULL) { - bonobo_ui_component_unset_container (icon_view->details->ui, NULL); - bonobo_object_unref (icon_view->details->ui); - icon_view->details->ui = NULL; + ui_manager = fm_directory_view_get_ui_manager (FM_DIRECTORY_VIEW (icon_view)); + if (ui_manager != NULL) { + nautilus_ui_unmerge_ui (ui_manager, + &icon_view->details->desktop_merge_id, + &icon_view->details->desktop_action_group); } GTK_OBJECT_CLASS (parent_class)->destroy (object); @@ -558,7 +552,7 @@ fm_desktop_icon_view_init (FMDesktopIconView *desktop_icon_view) } static void -new_terminal_callback (BonoboUIComponent *component, gpointer data, const char *verb) +action_new_terminal_callback (GtkAction *action, gpointer data) { g_assert (FM_DIRECTORY_VIEW (data)); @@ -566,7 +560,7 @@ new_terminal_callback (BonoboUIComponent *component, gpointer data, const char * } static void -new_launcher_callback (BonoboUIComponent *component, gpointer data, const char *verb) +action_new_launcher_callback (GtkAction *action, gpointer data) { char *desktop_directory; @@ -584,9 +578,8 @@ new_launcher_callback (BonoboUIComponent *component, gpointer data, const char * } static void -change_background_callback (BonoboUIComponent *component, - gpointer data, - const char *verb) +action_change_background_callback (GtkAction *action, + gpointer data) { g_assert (FM_DIRECTORY_VIEW (data)); @@ -598,25 +591,14 @@ change_background_callback (BonoboUIComponent *component, } static void -empty_trash_callback (BonoboUIComponent *component, - gpointer data, - const char *verb) +action_empty_trash_conditional_callback (GtkAction *action, + gpointer data) { g_assert (FM_IS_DIRECTORY_VIEW (data)); nautilus_file_operations_empty_trash (GTK_WIDGET (data)); } -static void -reset_background_callback (BonoboUIComponent *component, - gpointer data, - const char *verb) -{ - eel_background_reset - (fm_directory_view_get_background - (FM_DIRECTORY_VIEW (data))); -} - static gboolean trash_link_is_selection (FMDirectoryView *view) { @@ -648,6 +630,7 @@ real_update_menus (FMDirectoryView *view) FMDesktopIconView *desktop_view; char *label; gboolean include_empty_trash; + GtkAction *action; g_assert (FM_IS_DESKTOP_ICON_VIEW (view)); @@ -655,59 +638,74 @@ real_update_menus (FMDirectoryView *view) desktop_view = FM_DESKTOP_ICON_VIEW (view); - bonobo_ui_component_freeze (desktop_view->details->ui, NULL); - /* Empty Trash */ include_empty_trash = trash_link_is_selection (view); - nautilus_bonobo_set_hidden - (desktop_view->details->ui, - DESKTOP_COMMAND_EMPTY_TRASH_CONDITIONAL, - !include_empty_trash); + action = gtk_action_group_get_action (desktop_view->details->desktop_action_group, + FM_ACTION_EMPTY_TRASH_CONDITIONAL); + gtk_action_set_visible (action, + include_empty_trash); if (include_empty_trash) { label = g_strdup (_("Empty Trash")); - nautilus_bonobo_set_label - (desktop_view->details->ui, - DESKTOP_COMMAND_EMPTY_TRASH_CONDITIONAL, - label); - nautilus_bonobo_set_sensitive - (desktop_view->details->ui, - DESKTOP_COMMAND_EMPTY_TRASH_CONDITIONAL, - !nautilus_trash_monitor_is_empty ()); + g_object_set (action , "label", label, NULL); + gtk_action_set_sensitive (action, + !nautilus_trash_monitor_is_empty ()); g_free (label); } - - bonobo_ui_component_thaw (desktop_view->details->ui, NULL); } +static GtkActionEntry desktop_view_entries[] = { + { "New Terminal", NULL, /* name, stock id */ + N_("Open T_erminal"), NULL, /* label, accelerator */ + N_("Open a new GNOME terminal window"), /* tooltip */ + G_CALLBACK (action_new_terminal_callback) }, + { "New Launcher Desktop", NULL, /* name, stock id */ + N_("Create L_auncher"), NULL, /* label, accelerator */ + N_("Create a new launcher"), /* tooltip */ + G_CALLBACK (action_new_launcher_callback) }, + { "Change Background", NULL, /* name, stock id */ + N_("Change Desktop _Background"), NULL, /* label, accelerator */ + N_("Show a window that lets you set your desktop background's pattern or color"), /* tooltip */ + G_CALLBACK (action_change_background_callback) }, + { "Empty Trash Conditional", NULL, /* name, stock id */ + N_("Empty Trash"), NULL, /* label, accelerator */ + N_("Delete all items in the Trash"), /* tooltip */ + G_CALLBACK (action_empty_trash_conditional_callback) }, +}; + static void real_merge_menus (FMDirectoryView *view) { FMDesktopIconView *desktop_view; - Bonobo_UIContainer ui_container; - BonoboUIVerb verbs [] = { - BONOBO_UI_VERB ("Change Background", change_background_callback), - BONOBO_UI_VERB ("Empty Trash Conditional", empty_trash_callback), - BONOBO_UI_VERB ("New Terminal", new_terminal_callback), - BONOBO_UI_VERB ("New Launcher Desktop", new_launcher_callback), - BONOBO_UI_VERB ("Reset Background", reset_background_callback), - BONOBO_UI_VERB_END - }; + GtkUIManager *ui_manager; + GtkActionGroup *action_group; + GtkAction *action; + const char *ui; EEL_CALL_PARENT (FM_DIRECTORY_VIEW_CLASS, merge_menus, (view)); desktop_view = FM_DESKTOP_ICON_VIEW (view); - desktop_view->details->ui = bonobo_ui_component_new ("Desktop Icon View"); + ui_manager = fm_directory_view_get_ui_manager (view); - ui_container = fm_directory_view_get_bonobo_ui_container (view); - bonobo_ui_component_set_container (desktop_view->details->ui, - ui_container, NULL); - bonobo_object_release_unref (ui_container, NULL); - bonobo_ui_util_set_ui (desktop_view->details->ui, - DATADIR, - "nautilus-desktop-icon-view-ui.xml", - "nautilus", NULL); - bonobo_ui_component_add_verb_list_with_data (desktop_view->details->ui, verbs, view); + action_group = gtk_action_group_new ("DesktopViewActions"); + gtk_action_group_set_translation_domain (action_group, GETTEXT_PACKAGE); + desktop_view->details->desktop_action_group = action_group; + gtk_action_group_add_actions (action_group, + desktop_view_entries, G_N_ELEMENTS (desktop_view_entries), + view); + + gtk_ui_manager_insert_action_group (ui_manager, action_group, 0); + g_object_unref (action_group); /* owned by ui manager */ + + ui = nautilus_ui_string_get ("nautilus-desktop-icon-view-ui.xml"); + desktop_view->details->desktop_merge_id = + gtk_ui_manager_add_ui_from_string (ui_manager, ui, -1, NULL); + + /* We hide the reset background item on the desktop */ + action = gtk_ui_manager_get_action (ui_manager, + "/background/After Zoom Items/Background Items/Use Default Background"); + gtk_action_set_visible (action, + FALSE); } static gboolean @@ -740,3 +738,43 @@ real_supports_zooming (FMDirectoryView *view) */ return FALSE; } + +static NautilusView * +fm_desktop_icon_view_create (NautilusWindowInfo *window) +{ + FMIconView *view; + + view = g_object_new (FM_TYPE_DESKTOP_ICON_VIEW, "window", window, NULL); + g_object_ref (view); + gtk_object_sink (GTK_OBJECT (view)); + return NAUTILUS_VIEW (view); +} + +static gboolean +fm_desktop_icon_view_supports_uri (const char *uri, + GnomeVFSFileType file_type, + const char *mime_type) +{ + if (g_str_has_prefix (uri, "x-nautilus-desktop:")) { + return TRUE; + } + + return FALSE; +} + +static NautilusViewInfo fm_desktop_icon_view = { + FM_DESKTOP_ICON_VIEW_ID, + N_("Desktop"), + N_("_Desktop"), + fm_desktop_icon_view_create, + fm_desktop_icon_view_supports_uri +}; + +void +fm_desktop_icon_view_register (void) +{ + fm_desktop_icon_view.label = _(fm_desktop_icon_view.label); + fm_desktop_icon_view.label_with_mnemonic = _(fm_desktop_icon_view.label_with_mnemonic); + + nautilus_view_factory_register (&fm_desktop_icon_view); +} |