[nautilus/wip/gaction] f



commit 463c5f57c33b5913636ea62bdf8c4e2baa74752b
Author: Work <Carlos Soriano>
Date:   Wed Nov 12 11:29:18 2014 +0100

    f

 src/nautilus-view.c |  636 ++++++++++++++++++++++++++++++---------------------
 1 files changed, 381 insertions(+), 255 deletions(-)
---
diff --git a/src/nautilus-view.c b/src/nautilus-view.c
old mode 100644
new mode 100755
index a70c05d..120c81d
--- a/src/nautilus-view.c
+++ b/src/nautilus-view.c
@@ -1118,6 +1118,8 @@ nautilus_view_activate_file (NautilusView *view,
        g_free (path);
 }
 
+/********* ACTIONS *********/
+
 static void
 action_open_callback (GtkAction *action,
                      gpointer callback_data)
@@ -1129,6 +1131,17 @@ action_open_callback (GtkAction *action,
 }
 
 static void
+action_open_item (GSimpleAction *action,
+               GVariant      *state,
+               gpointer       user_data)
+{
+       NautilusView *view;
+
+       view = NAUTILUS_VIEW (user_data);
+       nautilus_view_activate_selection (view);
+}
+
+static void
 action_open_close_parent_callback (GtkAction *action,
                                   gpointer callback_data)
 {
@@ -1175,6 +1188,36 @@ action_open_item_location_callback (GtkAction *action,
        nautilus_file_list_free (selection);
 }
 
+static void
+action_open_item_location (GSimpleAction *action,
+                       GVariant      *state,
+                       gpointer       user_data)
+{
+       NautilusView *view;
+       GList *selection;
+       NautilusFile *item;
+       GFile *activation_location;
+       NautilusFile *activation_file;
+       NautilusFile *location;
+
+       view = NAUTILUS_VIEW (user_data);
+       selection = nautilus_view_get_selection (view);
+
+       if (!selection)
+               return;
+
+       item = NAUTILUS_FILE (selection->data);
+       activation_location = nautilus_file_get_activation_location (item);
+       activation_file = nautilus_file_get (activation_location);
+       location = nautilus_file_get_parent (activation_file);
+
+       nautilus_view_activate_file (view, location, 0);
+
+       nautilus_file_unref (location);
+       nautilus_file_unref (activation_file);
+       g_object_unref (activation_location);
+       nautilus_file_list_free (selection);
+}
 
 static void
 action_open_alternate_callback (GtkAction *action,
@@ -1220,6 +1263,30 @@ action_open_new_tab_callback (GtkAction *action,
 }
 
 static void
+action_open_item_new_tab (GSimpleAction *action,
+                       GVariant      *state,
+                       gpointer       user_data)
+{
+       NautilusView *view;
+       GList *selection;
+       GtkWindow *window;
+
+       view = NAUTILUS_VIEW (user_data);
+       selection = nautilus_view_get_selection (view);
+
+       window = nautilus_view_get_containing_window (view);
+
+       if (nautilus_view_confirm_multiple (window, g_list_length (selection), TRUE)) {
+               nautilus_view_activate_files (view,
+                                             selection,
+                                             NAUTILUS_WINDOW_OPEN_FLAG_NEW_TAB,
+                                             FALSE);
+       }
+
+       nautilus_file_list_free (selection);
+}
+
+static void
 app_chooser_dialog_response_cb (GtkDialog *dialog,
                                gint response_id,
                                gpointer user_data)
@@ -1443,6 +1510,20 @@ action_select_all_callback (GtkAction *action,
 }
 
 static void
+action_select_all (GSimpleAction *action,
+               GVariant      *state,
+               gpointer       user_data)
+{
+       NautilusView *view;
+
+       g_assert (NAUTILUS_IS_VIEW (user_data));
+
+       view = NAUTILUS_VIEW (user_data);
+
+       nautilus_view_select_all (view);
+}
+
+static void
 action_invert_selection_callback (GtkAction *action,
                                  gpointer callback_data)
 {
@@ -2129,6 +2210,16 @@ action_new_folder_callback (GtkAction *action,
 }
 
 static void
+action_new_folder (GSimpleAction *action,
+               GVariant      *state,
+               gpointer       user_data)
+{
+       g_assert (NAUTILUS_IS_VIEW (user_data));
+
+       nautilus_view_new_folder (NAUTILUS_VIEW (user_data), FALSE);
+}
+
+static void
 action_new_folder_with_selection_callback (GtkAction *action,
                                           gpointer callback_data)
 {                
@@ -2241,6 +2332,262 @@ action_show_hidden_files_callback (GtkAction *action,
 }
 
 static void
+action_show_hidden_files (GSimpleAction *action,
+                       GVariant      *state,
+                       gpointer       user_data)
+{
+       gboolean show_hidden;
+       NautilusView *view;
+
+       g_assert (NAUTILUS_IS_VIEW (user_data));
+
+       view = NAUTILUS_VIEW (user_data);
+       show_hidden = g_variant_get_boolean (state);
+
+       nautilus_view_set_show_hidden_files (view, show_hidden);
+
+       g_simple_action_set_state (action, state);
+}
+
+static void
+action_new_tab (GSimpleAction *action,
+               GVariant      *state,
+               gpointer       user_data)
+{
+       GList *selection;
+       GtkWindow *window;
+
+       g_assert (NAUTILUS_IS_VIEW (user_data));
+
+
+       selection = nautilus_view_get_selection (user_data);
+
+       window = nautilus_view_get_containing_window (user_data);
+
+       if (nautilus_view_confirm_multiple (window, g_list_length (selection), TRUE)) {
+               nautilus_view_activate_files (user_data,
+                                             selection,
+                                             NAUTILUS_WINDOW_OPEN_FLAG_NEW_TAB,
+                                             FALSE);
+       }
+
+       nautilus_file_list_free (selection);
+}
+
+static void
+action_undo (GSimpleAction *action,
+               GVariant      *state,
+               gpointer       user_data)
+{
+       GtkWidget *toplevel;
+       NautilusView *view;
+
+       g_assert (NAUTILUS_IS_VIEW (user_data));
+
+       view = NAUTILUS_VIEW (user_data);
+       toplevel = gtk_widget_get_toplevel (GTK_WIDGET (view));
+       nautilus_file_undo_manager_undo (GTK_WINDOW (toplevel));
+}
+
+static void
+action_redo (GSimpleAction *action,
+               GVariant      *state,
+               gpointer       user_data)
+{
+       GtkWidget *toplevel;
+       NautilusView *view;
+
+       g_assert (NAUTILUS_IS_VIEW (user_data));
+
+       view = NAUTILUS_VIEW (user_data);
+       toplevel = gtk_widget_get_toplevel (GTK_WIDGET (view));
+       nautilus_file_undo_manager_redo (GTK_WINDOW (toplevel));
+}
+
+static void
+action_zoom_in (GSimpleAction *action,
+               GVariant      *state,
+               gpointer       user_data) 
+{
+       NautilusView *view;
+
+       g_assert (NAUTILUS_IS_VIEW (user_data));
+
+       view = NAUTILUS_VIEW (user_data);
+
+       nautilus_view_bump_zoom_level (view, 1);
+}
+
+static void
+action_zoom_out (GSimpleAction *action,
+               GVariant      *state,
+               gpointer       user_data) 
+{
+       NautilusView *view;
+
+       g_assert (NAUTILUS_IS_VIEW (user_data));
+
+       view = NAUTILUS_VIEW (user_data);
+
+       nautilus_view_bump_zoom_level (view, -1);
+}
+
+static void
+action_zoom_normal (GSimpleAction *action,
+               GVariant      *state,
+               gpointer       user_data) 
+{
+       NautilusView *view;
+
+       g_assert (NAUTILUS_IS_VIEW (user_data));
+
+       view = NAUTILUS_VIEW (user_data);
+
+       nautilus_view_restore_default_zoom_level (view);
+}
+
+static void
+action_zoom_to_level (GSimpleAction *action,
+               GVariant      *state,
+               gpointer       user_data)
+{
+       NautilusView *view;
+       gdouble zoom_value;
+
+       g_assert (NAUTILUS_IS_VIEW (user_data));
+
+       view = NAUTILUS_VIEW (user_data);
+       zoom_value = g_variant_get_int32 (state);
+
+       nautilus_view_zoom_to_level (view, zoom_value);
+}
+
+
+static void
+action_location_open_alternate_callback (GtkAction *action,
+                                        gpointer   callback_data)
+{
+       NautilusView *view;
+       NautilusFile *file;
+
+       view = NAUTILUS_VIEW (callback_data);
+
+       file = view->details->location_popup_directory_as_file;
+       if (file == NULL) {
+               return;
+       }
+       nautilus_view_activate_file (view,
+                                    file,
+                                    NAUTILUS_WINDOW_OPEN_FLAG_NEW_WINDOW);
+}
+
+static void
+action_open_item_new_window (GSimpleAction *action,
+                       GVariant      *state,
+                       gpointer       user_data)
+{
+       NautilusView *view;
+       GList *selection;
+       GtkWindow *window;
+
+       view = NAUTILUS_VIEW (user_data);
+       selection = nautilus_view_get_selection (view);
+
+       window = nautilus_view_get_containing_window (view);
+
+       if (nautilus_view_confirm_multiple (window, g_list_length (selection), TRUE)) {
+               nautilus_view_activate_files (view,
+                                             selection,
+                                             NAUTILUS_WINDOW_OPEN_FLAG_NEW_WINDOW,
+                                             FALSE);
+       }
+
+       nautilus_file_list_free (selection);
+}
+
+static void
+paste_clipboard_data (NautilusView *view,
+                     GtkSelectionData *selection_data,
+                     char *destination_uri)
+{
+       gboolean cut;
+       GList *item_uris;
+
+       cut = FALSE;
+       item_uris = nautilus_clipboard_get_uri_list_from_selection_data (selection_data, &cut,
+                                                                        copied_files_atom);
+
+       if (item_uris != NULL && destination_uri != NULL) {
+               nautilus_view_move_copy_items (view, item_uris, NULL, destination_uri,
+                                              cut ? GDK_ACTION_MOVE : GDK_ACTION_COPY,
+                                              0, 0);
+
+               /* If items are cut then remove from clipboard */
+               if (cut) {
+                       gtk_clipboard_clear (nautilus_clipboard_get (GTK_WIDGET (view)));
+               }
+
+               g_list_free_full (item_uris, g_free);
+       }
+}
+
+static void
+paste_clipboard_received_callback (GtkClipboard     *clipboard,
+                                  GtkSelectionData *selection_data,
+                                  gpointer          data)
+{
+       NautilusView *view;
+       char *view_uri;
+
+       view = NAUTILUS_VIEW (data);
+
+       view_uri = nautilus_view_get_backing_uri (view);
+
+       if (view->details->slot != NULL) {
+               paste_clipboard_data (view, selection_data, view_uri);
+       }
+
+       g_free (view_uri);
+
+       g_object_unref (view);
+}
+
+static void
+action_paste_files_callback (GtkAction *action,
+                            gpointer callback_data)
+{
+       NautilusView *view;
+
+       view = NAUTILUS_VIEW (callback_data);
+
+       g_object_ref (view);
+       gtk_clipboard_request_contents (nautilus_clipboard_get (GTK_WIDGET (view)),
+                                       copied_files_atom,
+                                       paste_clipboard_received_callback,
+                                       view);
+}
+
+static void
+action_paste_files (GSimpleAction *action,
+               GVariant      *state,
+               gpointer       user_data)
+{
+       NautilusView *view;
+
+       g_assert (NAUTILUS_IS_VIEW (user_data));
+
+       view = NAUTILUS_VIEW (user_data);
+
+       g_object_ref (view);
+       gtk_clipboard_request_contents (nautilus_clipboard_get (GTK_WIDGET (view)),
+                                       copied_files_atom,
+                                       paste_clipboard_received_callback,
+                                       view);
+}
+
+/*************** END ACTIONS **********************/
+
+static void
 click_policy_changed_callback (gpointer callback_data)
 {
        NautilusView *view;
@@ -6018,53 +6365,6 @@ action_move_to_callback (GtkAction *action,
        copy_or_move_selection (view, TRUE);
 }
 
-static void
-paste_clipboard_data (NautilusView *view,
-                     GtkSelectionData *selection_data,
-                     char *destination_uri)
-{
-       gboolean cut;
-       GList *item_uris;
-
-       cut = FALSE;
-       item_uris = nautilus_clipboard_get_uri_list_from_selection_data (selection_data, &cut,
-                                                                        copied_files_atom);
-
-       if (item_uris != NULL && destination_uri != NULL) {
-               nautilus_view_move_copy_items (view, item_uris, NULL, destination_uri,
-                                              cut ? GDK_ACTION_MOVE : GDK_ACTION_COPY,
-                                              0, 0);
-
-               /* If items are cut then remove from clipboard */
-               if (cut) {
-                       gtk_clipboard_clear (nautilus_clipboard_get (GTK_WIDGET (view)));
-               }
-
-               g_list_free_full (item_uris, g_free);
-       }
-}
-
-static void
-paste_clipboard_received_callback (GtkClipboard     *clipboard,
-                                  GtkSelectionData *selection_data,
-                                  gpointer          data)
-{
-       NautilusView *view;
-       char *view_uri;
-
-       view = NAUTILUS_VIEW (data);
-
-       view_uri = nautilus_view_get_backing_uri (view);
-
-       if (view->details->slot != NULL) {
-               paste_clipboard_data (view, selection_data, view_uri);
-       }
-
-       g_free (view_uri);
-
-       g_object_unref (view);
-}
-
 typedef struct {
        NautilusView *view;
        NautilusFile *target;
@@ -6097,21 +6397,6 @@ paste_into_clipboard_received_callback (GtkClipboard     *clipboard,
 }
 
 static void
-action_paste_files_callback (GtkAction *action,
-                            gpointer callback_data)
-{
-       NautilusView *view;
-
-       view = NAUTILUS_VIEW (callback_data);
-
-       g_object_ref (view);
-       gtk_clipboard_request_contents (nautilus_clipboard_get (GTK_WIDGET (view)),
-                                       copied_files_atom,
-                                       paste_clipboard_received_callback,
-                                       view);
-}
-
-static void
 paste_into (NautilusView *view,
            NautilusFile *target)
 {
@@ -6881,24 +7166,6 @@ action_location_detect_media_callback (GtkAction *action,
 }
 
 static void
-action_location_open_alternate_callback (GtkAction *action,
-                                        gpointer   callback_data)
-{
-       NautilusView *view;
-       NautilusFile *file;
-
-       view = NAUTILUS_VIEW (callback_data);
-
-       file = view->details->location_popup_directory_as_file;
-       if (file == NULL) {
-               return;
-       }
-       nautilus_view_activate_file (view,
-                                    file,
-                                    NAUTILUS_WINDOW_OPEN_FLAG_NEW_WINDOW);
-}
-
-static void
 action_location_open_in_new_tab_callback (GtkAction *action,
                                          gpointer   callback_data)
 {
@@ -7035,174 +7302,6 @@ nautilus_view_get_show_hidden_files (NautilusView *view)
        return view->details->show_hidden_files;
 }
 
-static void
-action_show_hidden_files (GSimpleAction *action,
-                       GVariant      *state,
-                       gpointer       user_data)
-{
-       gboolean show_hidden;
-       NautilusView *view;
-
-       g_assert (NAUTILUS_IS_VIEW (user_data));
-
-       view = NAUTILUS_VIEW (user_data);
-       show_hidden = g_variant_get_boolean (state);
-
-       nautilus_view_set_show_hidden_files (view, show_hidden);
-
-       g_simple_action_set_state (action, state);
-}
-
-static void
-action_new_folder (GSimpleAction *action,
-               GVariant      *state,
-               gpointer       user_data)
-{
-       NautilusView *view;
-
-       g_assert (NAUTILUS_IS_VIEW (user_data));
-
-       view = NAUTILUS_VIEW (user_data);
-
-       nautilus_view_new_folder (view, FALSE);
-}
-
-static void
-action_select_all (GSimpleAction *action,
-               GVariant      *state,
-               gpointer       user_data)
-{
-       NautilusView *view;
-
-       g_assert (NAUTILUS_IS_VIEW (user_data));
-
-       view = NAUTILUS_VIEW (user_data);
-
-       nautilus_view_select_all (view);
-}
-
-static void
-action_paste_files (GSimpleAction *action,
-               GVariant      *state,
-               gpointer       user_data)
-{
-       NautilusView *view;
-
-       g_assert (NAUTILUS_IS_VIEW (user_data));
-
-       view = NAUTILUS_VIEW (user_data);
-
-       g_object_ref (view);
-       gtk_clipboard_request_contents (nautilus_clipboard_get (GTK_WIDGET (view)),
-                                       copied_files_atom,
-                                       paste_clipboard_received_callback,
-                                       view);
-}
-
-
-static void
-action_new_tab (GSimpleAction *action,
-               GVariant      *state,
-               gpointer       user_data)
-{
-       GList *selection;
-       GtkWindow *window;
-
-       g_assert (NAUTILUS_IS_VIEW (user_data));
-
-
-       selection = nautilus_view_get_selection (user_data);
-
-       window = nautilus_view_get_containing_window (user_data);
-
-       if (nautilus_view_confirm_multiple (window, g_list_length (selection), TRUE)) {
-               nautilus_view_activate_files (user_data,
-                                             selection,
-                                             NAUTILUS_WINDOW_OPEN_FLAG_NEW_TAB,
-                                             FALSE);
-       }
-
-       nautilus_file_list_free (selection);
-}
-
-static void
-action_undo (GSimpleAction *action,
-               GVariant      *state,
-               gpointer       user_data)
-{
-       g_assert (NAUTILUS_IS_VIEW (user_data));
-
-       real_action_undo (user_data);
-}
-
-static void
-action_redo (GSimpleAction *action,
-               GVariant      *state,
-               gpointer       user_data)
-{
-       g_assert (NAUTILUS_IS_VIEW (user_data));
-
-       real_action_redo (user_data);
-}
-
-static void
-action_zoom_in (GSimpleAction *action,
-               GVariant      *state,
-               gpointer       user_data) 
-{
-       NautilusView *view;
-
-       g_assert (NAUTILUS_IS_VIEW (user_data));
-
-       view = NAUTILUS_VIEW (user_data);
-
-       nautilus_view_bump_zoom_level (view, 1);
-}
-
-static void
-action_zoom_out (GSimpleAction *action,
-               GVariant      *state,
-               gpointer       user_data) 
-{
-       NautilusView *view;
-
-       g_assert (NAUTILUS_IS_VIEW (user_data));
-
-       view = NAUTILUS_VIEW (user_data);
-
-       nautilus_view_bump_zoom_level (view, -1);
-}
-
-static void
-action_zoom_normal (GSimpleAction *action,
-               GVariant      *state,
-               gpointer       user_data) 
-{
-       NautilusView *view;
-
-       g_assert (NAUTILUS_IS_VIEW (user_data));
-
-       view = NAUTILUS_VIEW (user_data);
-
-       nautilus_view_restore_default_zoom_level (view);
-}
-
-static void
-action_zoom_to_level (GSimpleAction *action,
-               GVariant      *state,
-               gpointer       user_data)
-{
-       NautilusView *view;
-       gdouble zoom_value;
-
-       g_assert (NAUTILUS_IS_VIEW (user_data));
-
-       view = NAUTILUS_VIEW (user_data);
-       zoom_value = g_variant_get_int32 (state);
-
-       nautilus_view_zoom_to_level (view, zoom_value);
-}
-
 const GActionEntry view_entries[] = {
        { "new-folder", action_new_folder },
        { "select-all", action_select_all },
@@ -7214,6 +7313,11 @@ const GActionEntry view_entries[] = {
        { "undo", action_undo },
        { "redo", action_redo },
        { "show-hidden-files", NULL, NULL, "true", action_show_hidden_files },
+       /* Selection menu */
+       { "open-item-location", action_open_item_location },
+       { "open-item", action_open_item },
+       { "open-item-new-window", action_open_item_new_window },
+       { "open-item-new-tab", action_open_item_new_tab },
 };
 
 static const GtkActionEntry directory_view_entries[] = {
@@ -8923,6 +9027,11 @@ real_update_actions_state (NautilusView *view)
                                g_variant_new_boolean (view->details->show_hidden_files));
 }
 
+/* Convenience function to be called when updating menus,
+ * so children can subclass it and it will be called when
+ * they chain up to the parent in update_right_click_menus
+ * or update_toolbar_menus
+ */
 void
 nautilus_view_update_actions_state (NautilusView *view)
 {
@@ -8932,6 +9041,18 @@ nautilus_view_update_actions_state (NautilusView *view)
 }
 
 static void
+update_background_menu (NautilusView *view)
+{
+
+}
+
+static void
+update_selection_menu (NautilusView *view)
+{
+       
+}
+
+static void
 real_update_right_click_menus (NautilusView *view)
 {
        g_print ("view real_update_right_click_menus\n");
@@ -8941,14 +9062,25 @@ real_update_right_click_menus (NautilusView *view)
                g_object_unref (view->details->selection_menu);
        
        GtkBuilder *builder;
-       builder = gtk_builder_new_from_resource ("/org/gnome/nautilus/nautilus-main-menus.xml");
+       builder = gtk_builder_new_from_resource ("/org/gnome/nautilus/nautilus-view-right-click-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")));
        g_object_unref (builder);
 
+       update_background_menu (view);
+       update_selection_menu (view);
        nautilus_view_update_actions_state (view);
 }
 
+/* Convenience function to reset the menus owned
+ * by the view and update them with the current state.
+ * Children can subclass it and add items on the menu
+ * after chaining up to the parent, so menus are already
+ * reseted.
+ * It will also update the actions state, which will also
+ * update children actions state if the children subclass
+ * nautilus_view_update_actions_state
+ */
 void
 nautilus_view_update_right_click_menus (NautilusView *view)
 {
@@ -10183,12 +10315,6 @@ nautilus_view_init (NautilusView *view)
        atk_object = gtk_widget_get_accessible (GTK_WIDGET (view));
        atk_object_set_name (atk_object, _("Content View"));
        atk_object_set_description (atk_object, _("View of the current folder"));
-       
-       /* Background and selection menus */
-       /*builder = gtk_builder_new_from_resource ("/org/gnome/nautilus/nautilus-main-menus.xml");
-       view->details->background_menus = 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")));
-       g_object_unref (builder);*/
 
        view->details->view_action_group = G_ACTION_GROUP (g_simple_action_group_new ());
        g_action_map_add_action_entries (G_ACTION_MAP (view->details->view_action_group),


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]