summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nautilus-pathbar-context-menu.xml23
-rw-r--r--src/nautilus-pathbar.c248
-rw-r--r--src/nautilus-pathbar.h6
-rw-r--r--src/nautilus-view-context-menus.xml20
-rw-r--r--src/nautilus-view.c180
-rw-r--r--src/nautilus-view.h3
-rw-r--r--src/nautilus-window.c63
-rw-r--r--src/nautilus.gresource.xml1
8 files changed, 259 insertions, 285 deletions
diff --git a/src/nautilus-pathbar-context-menu.xml b/src/nautilus-pathbar-context-menu.xml
new file mode 100644
index 000000000..11b68857d
--- /dev/null
+++ b/src/nautilus-pathbar-context-menu.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <menu id="pathbar-menu">
+ <section>
+ <item>
+ <attribute name="label" translatable="yes">Open In New _Tab</attribute>
+ <attribute name="action">pathbar.open-item-new-tab</attribute>
+ <attribute name="hidden-when">action-disabled</attribute>
+ </item>
+ <item>
+ <attribute name="label" translatable="yes">Open In New _Window</attribute>
+ <attribute name="action">pathbar.open-item-new-window</attribute>
+ <attribute name="hidden-when">action-disabled</attribute>
+ </item>
+ </section>
+ <section>
+ <item>
+ <attribute name="label" translatable="yes">P_roperties</attribute>
+ <attribute name="action">pathbar.properties</attribute>
+ </item>
+ </section>
+ </menu>
+</interface>
diff --git a/src/nautilus-pathbar.c b/src/nautilus-pathbar.c
index a0eed276c..19ff073e8 100644
--- a/src/nautilus-pathbar.c
+++ b/src/nautilus-pathbar.c
@@ -24,18 +24,20 @@
#include <gio/gio.h>
#include "nautilus-pathbar.h"
+#include "nautilus-properties-window.h"
#include <libnautilus-private/nautilus-file.h>
#include <libnautilus-private/nautilus-file-utilities.h>
#include <libnautilus-private/nautilus-global-preferences.h>
#include <libnautilus-private/nautilus-icon-names.h>
#include <libnautilus-private/nautilus-trash-monitor.h>
+#include <libnautilus-private/nautilus-ui-utilities.h>
#include "nautilus-window-slot-dnd.h"
enum {
+ OPEN_LOCATION,
PATH_CLICKED,
- PATH_EVENT,
LAST_SIGNAL
};
@@ -91,6 +93,12 @@ struct _NautilusPathBarDetails {
unsigned int drag_slider_timeout;
gboolean drag_slider_timeout_for_up_button;
+
+ GActionGroup *action_group;
+
+ GMenu *context_menu;
+ NautilusFile *context_menu_file;
+ GdkEventButton *context_menu_event;
};
@@ -112,6 +120,85 @@ static void nautilus_path_bar_update_button_state (ButtonData *but
gboolean current_dir);
static void nautilus_path_bar_update_path (NautilusPathBar *path_bar,
GFile *file_path);
+static void unschedule_pop_up_context_menu (NautilusPathBar *path_bar);
+static void action_pathbar_open_item_new_window (GSimpleAction *action,
+ GVariant *state,
+ gpointer user_data);
+static void action_pathbar_open_item_new_tab (GSimpleAction *action,
+ GVariant *state,
+ gpointer user_data);
+static void action_pathbar_properties (GSimpleAction *action,
+ GVariant *state,
+ gpointer user_data);
+
+const GActionEntry path_bar_actions[] = {
+ { "open-item-new-tab", action_pathbar_open_item_new_tab },
+ { "open-item-new-window", action_pathbar_open_item_new_window },
+ { "properties", action_pathbar_properties}
+};
+
+
+static void
+action_pathbar_open_item_new_tab (GSimpleAction *action,
+ GVariant *state,
+ gpointer user_data)
+{
+ NautilusPathBar *path_bar;
+ GFile *location;
+
+ path_bar = NAUTILUS_PATH_BAR (user_data);
+
+ if (!path_bar->priv->context_menu_file) {
+ return;
+ }
+
+ location = nautilus_file_get_location (path_bar->priv->context_menu_file);
+
+ if (location) {
+ g_signal_emit (user_data, path_bar_signals[OPEN_LOCATION], 0, location, GTK_PLACES_OPEN_NEW_TAB);
+ g_object_unref (location);
+ }
+}
+
+static void
+action_pathbar_open_item_new_window (GSimpleAction *action,
+ GVariant *state,
+ gpointer user_data)
+{
+ NautilusPathBar *path_bar;
+ GFile *location;
+
+ path_bar = NAUTILUS_PATH_BAR (user_data);
+
+ if (!path_bar->priv->context_menu_file) {
+ return;
+ }
+
+ location = nautilus_file_get_location (path_bar->priv->context_menu_file);
+
+ if (location) {
+ g_signal_emit (user_data, path_bar_signals[OPEN_LOCATION], 0, location, GTK_PLACES_OPEN_NEW_WINDOW);
+ g_object_unref (location);
+ }
+}
+
+static void
+action_pathbar_properties (GSimpleAction *action,
+ GVariant *state,
+ gpointer user_data)
+{
+ NautilusPathBar *path_bar;
+ GList *files;
+
+ path_bar = NAUTILUS_PATH_BAR (user_data);
+ g_assert (NAUTILUS_IS_FILE (path_bar->priv->context_menu_file));
+
+ files = g_list_append (NULL, nautilus_file_ref (path_bar->priv->context_menu_file));
+
+ nautilus_properties_window_present (files, GTK_WIDGET (path_bar), NULL);
+
+ nautilus_file_list_free (files);
+}
static GtkWidget *
get_slider_button (NautilusPathBar *path_bar,
@@ -200,8 +287,25 @@ nautilus_path_bar_slider_drag_leave (GtkWidget *widget,
static void
nautilus_path_bar_init (NautilusPathBar *path_bar)
{
+ GtkBuilder *builder;
+
path_bar->priv = G_TYPE_INSTANCE_GET_PRIVATE (path_bar, NAUTILUS_TYPE_PATH_BAR, NautilusPathBarDetails);
+ /* Action group */
+ path_bar->priv->action_group = G_ACTION_GROUP (g_simple_action_group_new ());
+ g_action_map_add_action_entries (G_ACTION_MAP (path_bar->priv->action_group),
+ path_bar_actions,
+ G_N_ELEMENTS (path_bar_actions),
+ path_bar);
+ gtk_widget_insert_action_group (GTK_WIDGET (path_bar),
+ "pathbar",
+ G_ACTION_GROUP (path_bar->priv->action_group));
+
+ /* Context menu */
+ builder = gtk_builder_new_from_resource ("/org/gnome/nautilus/nautilus-pathbar-context-menu.xml");
+ path_bar->priv->context_menu = g_object_ref (G_MENU (gtk_builder_get_object (builder, "pathbar-menu")));
+ g_object_unref (builder);
+
gtk_widget_set_has_window (GTK_WIDGET (path_bar), FALSE);
gtk_widget_set_redraw_on_allocate (GTK_WIDGET (path_bar), FALSE);
@@ -262,6 +366,11 @@ nautilus_path_bar_finalize (GObject *object)
g_list_free (path_bar->priv->button_list);
+ unschedule_pop_up_context_menu (NAUTILUS_PATH_BAR (object));
+ if (path_bar->priv->context_menu_event) {
+ gdk_event_free ((GdkEvent *) path_bar->priv->context_menu_event);
+ }
+
G_OBJECT_CLASS (nautilus_path_bar_parent_class)->finalize (object);
}
@@ -1001,6 +1110,15 @@ nautilus_path_bar_class_init (NautilusPathBarClass *path_bar_class)
container_class->remove = nautilus_path_bar_remove;
container_class->get_path_for_child = nautilus_path_bar_get_path_for_child;
+ path_bar_signals [OPEN_LOCATION] =
+ g_signal_new ("open-location",
+ G_OBJECT_CLASS_TYPE (path_bar_class),
+ G_SIGNAL_RUN_FIRST | G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (NautilusPathBarClass, open_location),
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 2,
+ G_TYPE_FILE,
+ GTK_TYPE_PLACES_OPEN_FLAGS);
path_bar_signals [PATH_CLICKED] =
g_signal_new ("path-clicked",
G_OBJECT_CLASS_TYPE (path_bar_class),
@@ -1010,15 +1128,6 @@ nautilus_path_bar_class_init (NautilusPathBarClass *path_bar_class)
g_cclosure_marshal_VOID__OBJECT,
G_TYPE_NONE, 1,
G_TYPE_FILE);
- path_bar_signals [PATH_EVENT] =
- g_signal_new ("path-event",
- G_OBJECT_CLASS_TYPE (path_bar_class),
- G_SIGNAL_RUN_FIRST | G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (NautilusPathBarClass, path_event),
- NULL, NULL, NULL,
- G_TYPE_BOOLEAN, 2,
- G_TYPE_FILE,
- GDK_TYPE_EVENT);
gtk_container_class_handle_border_width (container_class);
g_type_class_add_private (path_bar_class, sizeof (NautilusPathBarDetails));
@@ -1282,36 +1391,127 @@ button_clicked_cb (GtkWidget *button,
g_signal_emit (path_bar, path_bar_signals [PATH_CLICKED], 0, button_data->path);
}
+
+static void
+real_pop_up_pathbar_context_menu (NautilusPathBar *path_bar)
+{
+ nautilus_pop_up_context_menu (GTK_WIDGET (path_bar),
+ path_bar->priv->context_menu,
+ path_bar->priv->context_menu_event);
+}
+
+static void
+pathbar_popup_file_attributes_ready (NautilusFile *file,
+ gpointer data)
+{
+ NautilusPathBar *path_bar;
+
+ path_bar = NAUTILUS_PATH_BAR (data);
+ g_assert (NAUTILUS_IS_PATH_BAR (path_bar));
+
+ g_assert (file == path_bar->priv->context_menu_file);
+
+ real_pop_up_pathbar_context_menu (path_bar);
+}
+
+static void
+unschedule_pop_up_context_menu (NautilusPathBar *path_bar)
+{
+ if (path_bar->priv->context_menu_file) {
+ g_assert (NAUTILUS_IS_FILE (path_bar->priv->context_menu_file));
+ nautilus_file_cancel_call_when_ready (path_bar->priv->context_menu_file,
+ pathbar_popup_file_attributes_ready,
+ path_bar);
+ g_clear_pointer (&path_bar->priv->context_menu_file, nautilus_file_unref);
+ }
+}
+
+static void
+schedule_pop_up_context_menu (NautilusPathBar *path_bar,
+ GdkEventButton *event,
+ NautilusFile *file)
+{
+ g_assert (NAUTILUS_IS_FILE (file));
+
+ if (path_bar->priv->context_menu_event != NULL) {
+ gdk_event_free ((GdkEvent *) path_bar->priv->context_menu_event);
+ }
+ path_bar->priv->context_menu_event = (GdkEventButton *) gdk_event_copy ((GdkEvent *)event);
+
+ if (file == path_bar->priv->context_menu_file) {
+ if (nautilus_file_check_if_ready (file,
+ NAUTILUS_FILE_ATTRIBUTE_INFO |
+ NAUTILUS_FILE_ATTRIBUTE_MOUNT |
+ NAUTILUS_FILE_ATTRIBUTE_FILESYSTEM_INFO)) {
+ real_pop_up_pathbar_context_menu (path_bar);
+ }
+ } else {
+ unschedule_pop_up_context_menu (path_bar);
+
+ path_bar->priv->context_menu_file = nautilus_file_ref (file);
+ nautilus_file_call_when_ready (path_bar->priv->context_menu_file,
+ NAUTILUS_FILE_ATTRIBUTE_INFO |
+ NAUTILUS_FILE_ATTRIBUTE_MOUNT |
+ NAUTILUS_FILE_ATTRIBUTE_FILESYSTEM_INFO,
+ pathbar_popup_file_attributes_ready,
+ path_bar);
+ }
+}
+
+static void
+pop_up_pathbar_context_menu (NautilusPathBar *path_bar,
+ GdkEventButton *event,
+ NautilusFile *file)
+{
+ if (file) {
+ schedule_pop_up_context_menu (path_bar, event, file);
+ nautilus_file_unref (file);
+ }
+}
+
static gboolean
button_event_cb (GtkWidget *button,
GdkEventButton *event,
gpointer data)
{
+ GtkPlacesOpenFlags flags;
ButtonData *button_data;
NautilusPathBar *path_bar;
- GList *button_list;
- gboolean retval;
+ int mask;
button_data = BUTTON_DATA (data);
path_bar = NAUTILUS_PATH_BAR (gtk_widget_get_parent (button));
if (event->type == GDK_BUTTON_PRESS) {
- g_object_set_data (G_OBJECT (button), "handle-button-release",
- GINT_TO_POINTER (TRUE));
- }
+ g_object_set_data (G_OBJECT (button), "handle-button-release", GINT_TO_POINTER (TRUE));
- if (event->type == GDK_BUTTON_RELEASE &&
- !GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (button),
- "handle-button-release"))) {
- return FALSE;
- }
+ if (event->button == 3) {
+ pop_up_pathbar_context_menu (path_bar, event, button_data->file);
+ return TRUE;
+ }
- button_list = g_list_find (path_bar->priv->button_list, button_data);
- g_assert (button_list != NULL);
+ } else if (event->type == GDK_BUTTON_RELEASE) {
+ mask = event->state & gtk_accelerator_get_default_mod_mask ();
+ flags = 0;
+
+ if (!GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (button), "handle-button-release"))) {
+ return FALSE;
+ }
- g_signal_emit (path_bar, path_bar_signals [PATH_EVENT], 0, button_data->path, event, &retval);
+ if (event->button == 2 && mask == 0) {
+ flags = GTK_PLACES_OPEN_NEW_TAB;
+ } else if (event->button == 1 && mask == GDK_CONTROL_MASK) {
+ flags = GTK_PLACES_OPEN_NEW_WINDOW;
+ }
- return retval;
+ if (flags != 0) {
+ g_signal_emit (path_bar, path_bar_signals[OPEN_LOCATION], 0, button_data->path, flags);
+ }
+
+ return FALSE;
+ }
+
+ return FALSE;
}
static void
diff --git a/src/nautilus-pathbar.h b/src/nautilus-pathbar.h
index 471c0e145..3f89785cc 100644
--- a/src/nautilus-pathbar.h
+++ b/src/nautilus-pathbar.h
@@ -47,9 +47,9 @@ struct _NautilusPathBarClass
void (* path_clicked) (NautilusPathBar *path_bar,
GFile *location);
- gboolean (* path_event) (NautilusPathBar *path_bar,
- GdkEventButton *event,
- GFile *location);
+ void (* open_location) (NautilusPathBar *path_bar,
+ GFile *location,
+ GtkPlacesOpenFlags flags);
};
GType nautilus_path_bar_get_type (void) G_GNUC_CONST;
diff --git a/src/nautilus-view-context-menus.xml b/src/nautilus-view-context-menus.xml
index 35fbe4d14..df91fb87a 100644
--- a/src/nautilus-view-context-menus.xml
+++ b/src/nautilus-view-context-menus.xml
@@ -223,24 +223,4 @@
</item>
</section>
</menu>
- <menu id="pathbar-menu">
- <section>
- <item>
- <attribute name="label" translatable="yes">Open In New _Window</attribute>
- <attribute name="action">view.pathbar-open-item-new-window</attribute>
- <attribute name="hidden-when">action-disabled</attribute>
- </item>
- <item>
- <attribute name="label" translatable="yes">Open In New _Tab</attribute>
- <attribute name="action">view.pathbar-open-item-new-tab</attribute>
- <attribute name="hidden-when">action-disabled</attribute>
- </item>
- </section>
- <section>
- <item>
- <attribute name="label" translatable="yes">P_roperties</attribute>
- <attribute name="action">view.pathbar-properties</attribute>
- </item>
- </section>
- </menu>
</interface>
diff --git a/src/nautilus-view.c b/src/nautilus-view.c
index 8aa68192d..aa64f461e 100644
--- a/src/nautilus-view.c
+++ b/src/nautilus-view.c
@@ -157,8 +157,6 @@ struct NautilusViewDetails
NautilusWindowSlot *slot;
NautilusDirectory *model;
NautilusFile *directory_as_file;
- NautilusFile *pathbar_popup_directory_as_file;
- GdkEventButton *pathbar_popup_event;
guint dir_merge_id;
gint dialog_duplicated_name_label_timeout_id;
@@ -227,7 +225,6 @@ struct NautilusViewDetails
GMenu *selection_menu;
GMenu *background_menu;
- GMenu *pathbar_menu;
GActionGroup *view_action_group;
@@ -283,8 +280,6 @@ static void update_templates_directory (NautilusView *vi
static void check_empty_states (NautilusView *view);
-static void unschedule_pop_up_pathbar_context_menu (NautilusView *view);
-
G_DEFINE_TYPE (NautilusView, nautilus_view, GTK_TYPE_OVERLAY);
static void
@@ -1224,26 +1219,6 @@ action_open_item_new_tab (GSimpleAction *action,
}
static void
-action_pathbar_open_item_new_tab (GSimpleAction *action,
- GVariant *state,
- gpointer user_data)
-{
- NautilusView *view;
- NautilusFile *file;
-
- view = NAUTILUS_VIEW (user_data);
-
- file = view->details->pathbar_popup_directory_as_file;
- if (file == NULL) {
- return;
- }
-
- nautilus_view_activate_file (view,
- file,
- NAUTILUS_WINDOW_OPEN_FLAG_NEW_TAB);
-}
-
-static void
app_chooser_dialog_response_cb (GtkDialog *dialog,
gint response_id,
gpointer user_data)
@@ -2235,26 +2210,6 @@ action_properties (GSimpleAction *action,
}
static void
-action_pathbar_properties (GSimpleAction *action,
- GVariant *state,
- gpointer user_data)
-{
- NautilusView *view;
- GList *files;
-
- g_assert (NAUTILUS_IS_VIEW (user_data));
-
- view = NAUTILUS_VIEW (user_data);
- g_assert (NAUTILUS_IS_FILE (view->details->pathbar_popup_directory_as_file));
-
- files = g_list_append (NULL, nautilus_file_ref (view->details->pathbar_popup_directory_as_file));
-
- nautilus_properties_window_present (files, GTK_WIDGET (view), NULL);
-
- nautilus_file_list_free (files);
-}
-
-static void
nautilus_view_set_show_hidden_files (NautilusView *view,
gboolean show_hidden)
{
@@ -2350,26 +2305,6 @@ action_open_item_new_window (GSimpleAction *action,
}
static void
-action_pathbar_open_item_new_window (GSimpleAction *action,
- GVariant *state,
- gpointer user_data)
-{
- NautilusView *view;
- NautilusFile *file;
-
- view = NAUTILUS_VIEW (user_data);
-
- file = view->details->pathbar_popup_directory_as_file;
- if (file == NULL) {
- return;
- }
-
- nautilus_view_activate_file (view,
- file,
- NAUTILUS_WINDOW_OPEN_FLAG_NEW_WINDOW);
-}
-
-static void
paste_clipboard_data (NautilusView *view,
GtkSelectionData *selection_data,
char *destination_uri)
@@ -2853,11 +2788,6 @@ nautilus_view_finalize (GObject *object)
g_signal_handlers_disconnect_by_func (gnome_lockdown_preferences,
schedule_update_context_menus, view);
- unschedule_pop_up_pathbar_context_menu (view);
- if (view->details->pathbar_popup_event != NULL) {
- gdk_event_free ((GdkEvent *) view->details->pathbar_popup_event);
- }
-
g_hash_table_destroy (view->details->non_ready_files);
G_OBJECT_CLASS (nautilus_view_parent_class)->finalize (object);
@@ -6010,10 +5940,6 @@ const GActionEntry view_entries[] = {
{ "start-volume", action_start_volume },
{ "stop-volume", action_stop_volume },
{ "detect-media", action_detect_media },
- /* Pathbar menu */
- { "pathbar-open-item-new-window", action_pathbar_open_item_new_window },
- { "pathbar-open-item-new-tab", action_pathbar_open_item_new_tab },
- { "pathbar-properties", action_pathbar_properties},
/* Only accesible by shorcuts */
{ "select-pattern", action_select_pattern },
{ "invert-selection", action_invert_selection },
@@ -6779,13 +6705,11 @@ real_update_context_menus (NautilusView *view)
{
g_clear_object (&view->details->background_menu);
g_clear_object (&view->details->selection_menu);
- g_clear_object (&view->details->pathbar_menu);
GtkBuilder *builder;
builder = gtk_builder_new_from_resource ("/org/gnome/nautilus/nautilus-view-context-menus.xml");
view->details->background_menu = g_object_ref (G_MENU (gtk_builder_get_object (builder, "background-menu")));
view->details->selection_menu = g_object_ref (G_MENU (gtk_builder_get_object (builder, "selection-menu")));
- view->details->pathbar_menu = g_object_ref (G_MENU (gtk_builder_get_object (builder, "pathbar-menu")));
g_object_unref (builder);
update_selection_menu (view);
@@ -6886,109 +6810,7 @@ nautilus_view_pop_up_background_context_menu (NautilusView *view,
}
static void
-real_pop_up_pathbar_context_menu (NautilusView *view)
-{
- /* Make the context menu items not flash as they update to proper disabled,
- * etc. states by forcing menus to update now.
- */
- update_context_menus_if_pending (view);
-
- update_context_menu_position_from_event (view, view->details->pathbar_popup_event);
-
- nautilus_pop_up_context_menu (GTK_WIDGET (view), view->details->pathbar_menu, view->details->pathbar_popup_event);
-}
-
-static void
-pathbar_popup_file_attributes_ready (NautilusFile *file,
- gpointer data)
-{
- NautilusView *view;
-
- view = NAUTILUS_VIEW (data);
- g_assert (NAUTILUS_IS_VIEW (view));
-
- g_assert (file == view->details->pathbar_popup_directory_as_file);
-
- real_pop_up_pathbar_context_menu (view);
-}
-
-static void
-unschedule_pop_up_pathbar_context_menu (NautilusView *view)
-{
- if (view->details->pathbar_popup_directory_as_file != NULL) {
- g_assert (NAUTILUS_IS_FILE (view->details->pathbar_popup_directory_as_file));
- nautilus_file_cancel_call_when_ready (view->details->pathbar_popup_directory_as_file,
- pathbar_popup_file_attributes_ready,
- view);
- nautilus_file_unref (view->details->pathbar_popup_directory_as_file);
- view->details->pathbar_popup_directory_as_file = NULL;
- }
-}
-
-static void
-schedule_pop_up_pathbar_context_menu (NautilusView *view,
- GdkEventButton *event,
- NautilusFile *file)
-{
- g_assert (NAUTILUS_IS_FILE (file));
-
- if (view->details->pathbar_popup_event != NULL) {
- gdk_event_free ((GdkEvent *) view->details->pathbar_popup_event);
- }
- view->details->pathbar_popup_event = (GdkEventButton *) gdk_event_copy ((GdkEvent *)event);
-
- if (file == view->details->pathbar_popup_directory_as_file) {
- if (nautilus_file_check_if_ready (file, NAUTILUS_FILE_ATTRIBUTE_INFO |
- NAUTILUS_FILE_ATTRIBUTE_MOUNT |
- NAUTILUS_FILE_ATTRIBUTE_FILESYSTEM_INFO)) {
- real_pop_up_pathbar_context_menu (view);
- }
- } else {
- unschedule_pop_up_pathbar_context_menu (view);
-
- view->details->pathbar_popup_directory_as_file = nautilus_file_ref (file);
- nautilus_file_call_when_ready (view->details->pathbar_popup_directory_as_file,
- NAUTILUS_FILE_ATTRIBUTE_INFO |
- NAUTILUS_FILE_ATTRIBUTE_MOUNT |
- NAUTILUS_FILE_ATTRIBUTE_FILESYSTEM_INFO,
- pathbar_popup_file_attributes_ready,
- view);
- }
-}
-
-/**
- * nautilus_view_pop_up_pathbar_context_menu
- *
- * Pop up a context menu appropriate to the view globally.
- * @view: NautilusView of interest.
- * @event: GdkEventButton triggering the popup.
- * @location: The location the popup-menu should be created for,
- * or NULL for the currently displayed location.
- *
- **/
-void
-nautilus_view_pop_up_pathbar_context_menu (NautilusView *view,
- GdkEventButton *event,
- const char *location)
-{
- NautilusFile *file;
-
- g_assert (NAUTILUS_IS_VIEW (view));
-
- if (location != NULL) {
- file = nautilus_file_get_by_uri (location);
- } else {
- file = nautilus_file_ref (view->details->directory_as_file);
- }
-
- if (file != NULL) {
- schedule_pop_up_pathbar_context_menu (view, event, file);
- nautilus_file_unref (file);
- }
-}
-
-static void
-schedule_update_context_menus (NautilusView *view)
+schedule_update_context_menus (NautilusView *view)
{
g_assert (NAUTILUS_IS_VIEW (view));
diff --git a/src/nautilus-view.h b/src/nautilus-view.h
index 5bd42d944..93fbc894d 100644
--- a/src/nautilus-view.h
+++ b/src/nautilus-view.h
@@ -377,9 +377,6 @@ void nautilus_view_zoom_to_level (NautilusView *v
void nautilus_view_restore_default_zoom_level (NautilusView *view);
gboolean nautilus_view_can_zoom_in (NautilusView *view);
gboolean nautilus_view_can_zoom_out (NautilusView *view);
-void nautilus_view_pop_up_pathbar_context_menu (NautilusView *view,
- GdkEventButton *event,
- const char *location);
void nautilus_view_update_menus (NautilusView *view);
void nautilus_view_update_context_menus (NautilusView *view);
diff --git a/src/nautilus-window.c b/src/nautilus-window.c
index 48c0c350e..f2459b5b1 100644
--- a/src/nautilus-window.c
+++ b/src/nautilus-window.c
@@ -937,12 +937,10 @@ nautilus_window_location_opened (NautilusWindow *window,
/* Callback used when the places sidebar changes location; we need to change the displayed folder */
static void
-places_sidebar_open_location_cb (GtkPlacesSidebar *sidebar,
- GFile *location,
- GtkPlacesOpenFlags open_flags,
- gpointer user_data)
+open_location_cb (NautilusWindow *window,
+ GFile *location,
+ GtkPlacesOpenFlags open_flags)
{
- NautilusWindow *window = NAUTILUS_WINDOW (user_data);
NautilusWindowOpenFlags flags;
switch (open_flags) {
@@ -1280,8 +1278,8 @@ nautilus_window_set_up_sidebar (NautilusWindow *window)
| GTK_PLACES_OPEN_NEW_WINDOW));
gtk_places_sidebar_set_show_connect_to_server (GTK_PLACES_SIDEBAR (window->priv->places_sidebar), TRUE);
- g_signal_connect (window->priv->places_sidebar, "open-location",
- G_CALLBACK (places_sidebar_open_location_cb), window);
+ g_signal_connect_swapped (window->priv->places_sidebar, "open-location",
+ G_CALLBACK (open_location_cb), window);
g_signal_connect (window->priv->places_sidebar, "show-error-message",
G_CALLBACK (places_sidebar_show_error_message_cb), window);
g_signal_connect (window->priv->places_sidebar, "show-connect-to-server",
@@ -1648,53 +1646,6 @@ path_bar_location_changed_callback (GtkWidget *widget,
}
}
-static gboolean
-path_bar_path_event_callback (NautilusPathBar *path_bar,
- GFile *location,
- GdkEventButton *event,
- NautilusWindow *window)
-{
- NautilusWindowSlot *slot;
- NautilusWindowOpenFlags flags;
- int mask;
- NautilusView *view;
- char *uri;
-
- if (event->type == GDK_BUTTON_RELEASE) {
- mask = event->state & gtk_accelerator_get_default_mod_mask ();
- flags = 0;
-
- if (event->button == 2 && mask == 0) {
- flags = NAUTILUS_WINDOW_OPEN_FLAG_NEW_TAB;
- } else if (event->button == 1 && mask == GDK_CONTROL_MASK) {
- flags = NAUTILUS_WINDOW_OPEN_FLAG_NEW_WINDOW;
- }
-
- if (flags != 0) {
- slot = nautilus_window_get_active_slot (window);
- nautilus_window_slot_open_location (slot, location, flags);
- }
-
- return FALSE;
- }
-
- if (event->button == 3) {
- slot = nautilus_window_get_active_slot (window);
- view = nautilus_window_slot_get_view (slot);
- if (view != NULL) {
- uri = g_file_get_uri (location);
- nautilus_view_pop_up_pathbar_context_menu (view, event, uri);
- g_free (uri);
- }
-
- return TRUE;
- } else if (event->button == 2) {
- return TRUE;
- }
-
- return FALSE;
-}
-
static void
notebook_popup_menu_new_tab_cb (GtkMenuItem *menuitem,
gpointer user_data)
@@ -1859,8 +1810,8 @@ setup_toolbar (NautilusWindow *window)
g_signal_connect_object (path_bar, "path-clicked",
G_CALLBACK (path_bar_location_changed_callback), window, 0);
- g_signal_connect_object (path_bar, "path-event",
- G_CALLBACK (path_bar_path_event_callback), window, 0);
+ g_signal_connect_swapped (path_bar, "open-location",
+ G_CALLBACK (open_location_cb), window);
/* connect to the location entry signals */
location_entry = nautilus_toolbar_get_location_entry (NAUTILUS_TOOLBAR (window->priv->toolbar));
diff --git a/src/nautilus.gresource.xml b/src/nautilus.gresource.xml
index 0eb49cb4b..acab5ff41 100644
--- a/src/nautilus.gresource.xml
+++ b/src/nautilus.gresource.xml
@@ -4,6 +4,7 @@
<file compressed="true">nautilus-bookmarks-window.ui</file>
<file compressed="true">nautilus-file-management-properties.ui</file>
<file>nautilus-app-menu.ui</file>
+ <file>nautilus-pathbar-context-menu.xml</file>
<file>nautilus-toolbar-ui.xml</file>
<file>nautilus-toolbar-view-menu.xml</file>
<file>nautilus-toolbar-action-menu.xml</file>