diff options
author | John Sullivan <sullivan@src.gnome.org> | 2000-08-10 00:55:30 +0000 |
---|---|---|
committer | John Sullivan <sullivan@src.gnome.org> | 2000-08-10 00:55:30 +0000 |
commit | aa69b270dbbda7d71ce23f9ba87f25a3535ecd9f (patch) | |
tree | bd150dd21300360cb43de8da2dc80b9ba8a869b8 | |
parent | 179b1f3ed6cc3cad5fdd9d10ab1f87a82fe470dd (diff) | |
download | nautilus-aa69b270dbbda7d71ce23f9ba87f25a3535ecd9f.tar.gz |
Work on 1750 (add Reveal command to show search result in
its "real" directory). I wired up the menu items, but they
don't do anything yet.
* src/file-manager/fm-directory-view.c: (compute_menu_item_info):
Noticed that a g_strdup_printf should have been just a g_strdup
* src/file-manager/fm-search-list-view.c:
(fm_search_list_view_initialize_class): connect up functions for
menu-merging stuff.
(compute_reveal_item_name_and_sensitivity): New function, determine
Reveal menu item title & sensitivity based on selection.
(real_create_selection_context_menu_items): Put Reveal menu item
in selection context menu.
(real_merge_menus): Put Reveal menu item in File menu
(real_update_menus): Update state of Reveal menu item in File menu
-rw-r--r-- | ChangeLog | 19 | ||||
-rw-r--r-- | src/file-manager/fm-directory-view.c | 2 | ||||
-rw-r--r-- | src/file-manager/fm-search-list-view.c | 145 |
3 files changed, 163 insertions, 3 deletions
@@ -1,3 +1,22 @@ +2000-08-09 John Sullivan <sullivan@eazel.com> + + Work on 1750 (add Reveal command to show search result in + its "real" directory). I wired up the menu items, but they + don't do anything yet. + + * src/file-manager/fm-directory-view.c: (compute_menu_item_info): + Noticed that a g_strdup_printf should have been just a g_strdup + + * src/file-manager/fm-search-list-view.c: + (fm_search_list_view_initialize_class): connect up functions for + menu-merging stuff. + (compute_reveal_item_name_and_sensitivity): New function, determine + Reveal menu item title & sensitivity based on selection. + (real_create_selection_context_menu_items): Put Reveal menu item + in selection context menu. + (real_merge_menus): Put Reveal menu item in File menu + (real_update_menus): Update state of Reveal menu item in File menu + 2000-08-09 Pavel Cisler <pavel@eazel.com> * src/file-manager/fm-directory-view.c: diff --git a/src/file-manager/fm-directory-view.c b/src/file-manager/fm-directory-view.c index 6d4c4ef6d..753a4a5ed 100644 --- a/src/file-manager/fm-directory-view.c +++ b/src/file-manager/fm-directory-view.c @@ -2129,7 +2129,7 @@ compute_menu_item_info (FMDirectoryView *directory_view, *return_sensitivity = TRUE; if (strcmp (path, FM_DIRECTORY_VIEW_MENU_PATH_OPEN) == 0) { - name = g_strdup_printf (_("_Open")); + name = g_strdup (_("_Open")); *return_sensitivity = nautilus_g_list_exactly_one_item (selection); } else if (strcmp (path, FM_DIRECTORY_VIEW_MENU_PATH_OPEN_WITH) == 0) { name = g_strdup (_("Open With")); diff --git a/src/file-manager/fm-search-list-view.c b/src/file-manager/fm-search-list-view.c index f1af74594..9f66fad64 100644 --- a/src/file-manager/fm-search-list-view.c +++ b/src/file-manager/fm-search-list-view.c @@ -32,20 +32,29 @@ #include "fm-directory-view.h" #include "fm-list-view-private.h" #include <libnautilus-extensions/nautilus-search-bar-criterion.h> +#include <libnautilus-extensions/nautilus-string.h> #include <libgnome/gnome-i18n.h> #include <libnautilus-extensions/nautilus-gtk-macros.h> +/* Paths to use when creating & referring to Bonobo menu items */ +#define MENU_PATH_REVEAL_IN_NEW_WINDOW "/File/Reveal" + static void fm_search_list_view_initialize (gpointer object, gpointer klass); static void fm_search_list_view_initialize_class (gpointer klass); +static void real_create_selection_context_menu_items (FMDirectoryView *view, + GtkMenu *menu, + GList *selection); static int real_get_number_of_columns (FMListView *list_view); static int real_get_link_column (FMListView *list_view); static char * real_get_default_sort_attribute (FMListView *view); static void real_get_column_specification (FMListView *list_view, int column_number, FMListViewColumn *specification); +static void real_merge_menus (FMDirectoryView *view); static gboolean real_supports_properties (FMDirectoryView *view); +static void real_update_menus (FMDirectoryView *view); static void begin_loading_callback (FMDirectoryView *view); NAUTILUS_DEFINE_CLASS_BOILERPLATE (FMSearchListView, @@ -78,8 +87,13 @@ fm_search_list_view_initialize_class (gpointer klass) fm_directory_view_class = FM_DIRECTORY_VIEW_CLASS (klass); fm_list_view_class = FM_LIST_VIEW_CLASS (klass); - - fm_directory_view_class->supports_properties = real_supports_properties; + + fm_directory_view_class->merge_menus = real_merge_menus; + fm_directory_view_class->update_menus = real_update_menus; + fm_directory_view_class->supports_properties = + real_supports_properties; + fm_directory_view_class->create_selection_context_menu_items = + real_create_selection_context_menu_items; fm_list_view_class->get_number_of_columns = real_get_number_of_columns; fm_list_view_class->get_link_column = real_get_link_column; @@ -213,6 +227,107 @@ real_get_column_specification (FMListView *view, } } +static void +compute_reveal_item_name_and_sensitivity (GList *selected_files, + gboolean include_accelerator_underbars, + char **return_name, + gboolean *return_sensitivity) +{ + char *name; + char *stripped; + int count; + + g_assert (*return_name != NULL); + g_assert (return_sensitivity != NULL); + + count = g_list_length (selected_files); + if (count <= 1) { + name = g_strdup (_("_Reveal in New Window")); + } else { + name = g_strdup_printf (_("Reveal in %d _New Windows"), count); + } + + *return_sensitivity = selected_files != NULL; + + if (!include_accelerator_underbars) { + stripped = nautilus_str_strip_chr (name, '_'); + g_free (name); + name = stripped; + } + + *return_name = name; +} + +static void +real_create_selection_context_menu_items (FMDirectoryView *view, + GtkMenu *menu, + GList *selection) +{ + GtkWidget *menu_item; + char *name; + gboolean sensitive; + gint position; + + g_assert (FM_IS_SEARCH_LIST_VIEW (view)); + g_assert (GTK_IS_MENU (menu)); + + NAUTILUS_CALL_PARENT_CLASS + (FM_DIRECTORY_VIEW_CLASS, + create_selection_context_menu_items, + (view, menu, selection)); + + /* The Reveal item is inserted directly after the + * existing Open With item. + */ + position = fm_directory_view_get_context_menu_index + (FM_DIRECTORY_VIEW_MENU_PATH_OPEN_WITH) + 1; + compute_reveal_item_name_and_sensitivity (selection, FALSE, &name, &sensitive); + menu_item = gtk_menu_item_new_with_label (name); + g_free (name); + gtk_widget_set_sensitive (menu_item, sensitive); + gtk_widget_show (menu_item); + + /* FIXME bugzilla.eazel.com 1750: need to connect callback */ + /* gtk_signal_connect (GTK_OBJECT (menu_item), "activate", callback, view); */ + gtk_menu_insert (menu, menu_item, position); +} + +static void +real_merge_menus (FMDirectoryView *view) +{ + BonoboUIHandler *ui_handler; + GList *selected_files; + char *name; + gboolean sensitive; + + g_assert (FM_IS_LIST_VIEW (view)); + + NAUTILUS_CALL_PARENT_CLASS (FM_DIRECTORY_VIEW_CLASS, merge_menus, (view)); + + ui_handler = fm_directory_view_get_bonobo_ui_handler (view); + selected_files = fm_directory_view_get_selection (view); + + compute_reveal_item_name_and_sensitivity (selected_files, TRUE, &name, &sensitive); + + /* FIXME bugzilla.eazel.com 1750: need to connect callback */ + bonobo_ui_handler_menu_new_item ( + ui_handler, + MENU_PATH_REVEAL_IN_NEW_WINDOW, name, + _("Reveal each selected item in its original folder"), + bonobo_ui_handler_menu_get_pos + (ui_handler, + FM_DIRECTORY_VIEW_MENU_PATH_OPEN_WITH) + 1, + BONOBO_UI_HANDLER_PIXMAP_NONE, NULL, + 0, 0, + NULL, NULL); + g_free (name); + bonobo_ui_handler_menu_set_sensitivity + (ui_handler, MENU_PATH_REVEAL_IN_NEW_WINDOW, sensitive); + + nautilus_file_list_free (selected_files); +} + + static gboolean real_supports_properties (FMDirectoryView *view) { @@ -225,3 +340,29 @@ real_supports_properties (FMDirectoryView *view) return FALSE; } +static void +real_update_menus (FMDirectoryView *view) +{ + BonoboUIHandler *ui_handler; + GList *selected_files; + char *name; + gboolean sensitive; + + g_assert (FM_IS_LIST_VIEW (view)); + + NAUTILUS_CALL_PARENT_CLASS (FM_DIRECTORY_VIEW_CLASS, update_menus, (view)); + + ui_handler = fm_directory_view_get_bonobo_ui_handler (view); + selected_files = fm_directory_view_get_selection (view); + + compute_reveal_item_name_and_sensitivity + (selected_files, TRUE, &name, &sensitive); + bonobo_ui_handler_menu_set_sensitivity + (ui_handler, MENU_PATH_REVEAL_IN_NEW_WINDOW, sensitive); + bonobo_ui_handler_menu_set_label + (ui_handler, MENU_PATH_REVEAL_IN_NEW_WINDOW, name); + + g_free (name); + + nautilus_file_list_free (selected_files); +}
\ No newline at end of file |