summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Sullivan <sullivan@src.gnome.org>2000-08-10 00:55:30 +0000
committerJohn Sullivan <sullivan@src.gnome.org>2000-08-10 00:55:30 +0000
commitaa69b270dbbda7d71ce23f9ba87f25a3535ecd9f (patch)
treebd150dd21300360cb43de8da2dc80b9ba8a869b8
parent179b1f3ed6cc3cad5fdd9d10ab1f87a82fe470dd (diff)
downloadnautilus-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--ChangeLog19
-rw-r--r--src/file-manager/fm-directory-view.c2
-rw-r--r--src/file-manager/fm-search-list-view.c145
3 files changed, 163 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 2bae886ab..6bc0e9bb6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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