[nautilus] toolbar: cleanup handling of zoom actions



commit 67611448570a4575ca1b17c5061905b5b0a7030d
Author: Cosimo Cecchi <cosimoc gnome org>
Date:   Mon Jan 26 15:43:01 2015 +0000

    toolbar: cleanup handling of zoom actions
    
    Store the entire state in the action. The toolbar will be called to
    update the state anyway...

 src/nautilus-canvas-view.c         |   26 +++---------------
 src/nautilus-list-view.c           |   24 ++++++-----------
 src/nautilus-toolbar-view-menu.xml |   13 ++-------
 src/nautilus-toolbar.c             |   50 +++++++++--------------------------
 src/nautilus-toolbar.h             |    3 --
 src/nautilus-view.c                |   27 ++++++-------------
 src/nautilus-view.h                |    2 -
 7 files changed, 38 insertions(+), 107 deletions(-)
---
diff --git a/src/nautilus-canvas-view.c b/src/nautilus-canvas-view.c
index 98e2c2c..3604aca 100644
--- a/src/nautilus-canvas-view.c
+++ b/src/nautilus-canvas-view.c
@@ -802,13 +802,15 @@ nautilus_canvas_view_zoom_to_level (NautilusView *view,
        g_return_if_fail (new_level >= NAUTILUS_CANVAS_ZOOM_LEVEL_SMALL &&
                          new_level <= NAUTILUS_CANVAS_ZOOM_LEVEL_LARGE);
 
-
        canvas_view = NAUTILUS_CANVAS_VIEW (view);
        canvas_container = get_canvas_container (canvas_view);
        if (nautilus_canvas_container_get_zoom_level (canvas_container) == new_level)
                return;
 
        nautilus_canvas_container_set_zoom_level (canvas_container, new_level);
+       g_action_group_change_action_state (nautilus_view_get_action_group (view),
+                                           "zoom-to-level", g_variant_new_int32 (new_level));
+
        nautilus_view_update_toolbar_menus (view);
 }
 
@@ -828,8 +830,6 @@ nautilus_canvas_view_bump_zoom_level (NautilusView *view, int zoom_increment)
            new_level <= NAUTILUS_CANVAS_ZOOM_LEVEL_LARGE) {
                nautilus_canvas_view_zoom_to_level (view, new_level);
        }
-
-       nautilus_view_update_toolbar_menus (view);
 }
 
 static void
@@ -966,6 +966,8 @@ action_zoom_to_level (GSimpleAction *action,
        view = NAUTILUS_VIEW (user_data);
        zoom_level = g_variant_get_int32 (state);
        nautilus_canvas_view_zoom_to_level (view, zoom_level);
+
+       g_simple_action_set_state (G_SIMPLE_ACTION (action), state);
 }
 
 static void
@@ -1090,23 +1092,6 @@ nautilus_canvas_view_update_actions_state (NautilusView *view)
 }
 
 static void
-nautilus_canvas_view_update_toolbar_menus (NautilusView *view)
-{
-       NautilusToolbar *toolbar;
-       NautilusCanvasContainer *canvas_container;
-       gint zoom_level;
-
-       NAUTILUS_VIEW_CLASS (nautilus_canvas_view_parent_class)->update_toolbar_menus (view);
-
-       toolbar = NAUTILUS_TOOLBAR (nautilus_window_get_toolbar (nautilus_view_get_window (view)));
-       canvas_container = get_canvas_container (NAUTILUS_CANVAS_VIEW (view));
-       zoom_level = nautilus_canvas_container_get_zoom_level (canvas_container);
-
-       nautilus_toolbar_view_menu_widget_set_zoom_level (toolbar,
-                                                         (gdouble) (zoom_level));
-}
-
-static void
 nautilus_canvas_view_select_all (NautilusView *view)
 {
        NautilusCanvasContainer *canvas_container;
@@ -1885,7 +1870,6 @@ nautilus_canvas_view_class_init (NautilusCanvasViewClass *klass)
        nautilus_view_class->invert_selection = nautilus_canvas_view_invert_selection;
        nautilus_view_class->compare_files = compare_files;
         nautilus_view_class->click_policy_changed = nautilus_canvas_view_click_policy_changed;
-       nautilus_view_class->update_toolbar_menus = nautilus_canvas_view_update_toolbar_menus;
        nautilus_view_class->update_actions_state = nautilus_canvas_view_update_actions_state;
         nautilus_view_class->sort_directories_first_changed = 
nautilus_canvas_view_sort_directories_first_changed;
         nautilus_view_class->start_renaming_file = nautilus_canvas_view_start_renaming_file;
diff --git a/src/nautilus-list-view.c b/src/nautilus-list-view.c
index 4192c79..445b986 100644
--- a/src/nautilus-list-view.c
+++ b/src/nautilus-list-view.c
@@ -2825,7 +2825,13 @@ nautilus_list_view_zoom_to_level (NautilusView *view,
 
        list_view = NAUTILUS_LIST_VIEW (view);
 
+       if (list_view->details->zoom_level == zoom_level) {
+               return;
+       }
+
        nautilus_list_view_set_zoom_level (list_view, zoom_level);
+       g_action_group_change_action_state (nautilus_view_get_action_group (view),
+                                           "zoom-to-level", g_variant_new_int32 (zoom_level));
 
        nautilus_view_update_toolbar_menus (view);
 }
@@ -2843,6 +2849,8 @@ action_zoom_to_level (GSimpleAction *action,
        view = NAUTILUS_VIEW (user_data);
        zoom_level = g_variant_get_int32 (state);
        nautilus_list_view_zoom_to_level (view, zoom_level);
+
+       g_simple_action_set_state (G_SIMPLE_ACTION (action), state);
 }
 
 static void
@@ -3052,21 +3060,6 @@ const GActionEntry list_view_entries[] = {
 };
 
 static void
-nautilus_list_view_update_toolbar_menus (NautilusView *view)
-{
-       NautilusListView *list_view;
-       NautilusToolbar *toolbar;
-
-        list_view = NAUTILUS_LIST_VIEW (view);
-
-       NAUTILUS_VIEW_CLASS (nautilus_list_view_parent_class)->update_toolbar_menus (view);
-
-       toolbar = NAUTILUS_TOOLBAR (nautilus_window_get_toolbar (nautilus_view_get_window (view)));
-       nautilus_toolbar_view_menu_widget_set_zoom_level (toolbar,
-                                                         (gdouble) list_view->details->zoom_level);
-}
-
-static void
 nautilus_list_view_set_zoom_level (NautilusListView *view,
                                   NautilusListZoomLevel new_level)
 {
@@ -3510,7 +3503,6 @@ nautilus_list_view_class_init (NautilusListViewClass *class)
        nautilus_view_class->is_empty = nautilus_list_view_is_empty;
        nautilus_view_class->remove_file = nautilus_list_view_remove_file;
        nautilus_view_class->restore_default_zoom_level = nautilus_list_view_restore_default_zoom_level;
-       nautilus_view_class->update_toolbar_menus = nautilus_list_view_update_toolbar_menus;
        nautilus_view_class->reveal_selection = nautilus_list_view_reveal_selection;
        nautilus_view_class->select_all = nautilus_list_view_select_all;
        nautilus_view_class->select_first = nautilus_list_view_select_first;
diff --git a/src/nautilus-toolbar-view-menu.xml b/src/nautilus-toolbar-view-menu.xml
index 42249aa..9f0ad99 100644
--- a/src/nautilus-toolbar-view-menu.xml
+++ b/src/nautilus-toolbar-view-menu.xml
@@ -56,7 +56,7 @@
             <property name="can_focus">True</property>
             <property name="draw_value">False</property>
             <property name="has_origin">False</property>
-            <property name="adjustment">zoom_adjustment_grid</property>
+            <property name="adjustment">zoom_adjustment</property>
             <property name="round_digits">0</property>
             <property name="restrict_to_fill_level">False</property>
             <marks>
@@ -210,18 +210,11 @@
   <object class="GThemedIcon" id="icon_list">
     <property name="name">view-list-symbolic</property>
   </object>
-  <object class="GtkAdjustment" id="zoom_adjustment_list">
+  <object class="GtkAdjustment" id="zoom_adjustment">
     <property name="lower">0</property>
     <property name="upper">2</property>
     <property name="step_increment">1</property>
     <property name="page_increment">1</property>
     <property name="value">1</property>
   </object>
-  <object class="GtkAdjustment" id="zoom_adjustment_grid">
-    <property name="lower">0</property>
-    <property name="upper">2</property>
-    <property name="step_increment">1</property>
-    <property name="page_increment">1</property>
-    <property name="value">1</property>
-  </object>
-</interface>
\ No newline at end of file
+</interface>
diff --git a/src/nautilus-toolbar.c b/src/nautilus-toolbar.c
index 66a7600..06dd740 100644
--- a/src/nautilus-toolbar.c
+++ b/src/nautilus-toolbar.c
@@ -53,8 +53,6 @@ struct _NautilusToolbarPrivate {
 
        guint popup_timeout_id;
 
-       gdouble scale_zoom_level;
-
        GtkWidget *view_button;
        GtkWidget *action_button;
 
@@ -65,9 +63,7 @@ struct _NautilusToolbarPrivate {
        GtkWidget *visible_columns;
        GtkWidget *stop;
        GtkWidget *reload;
-       GtkAdjustment *zoom_adjustment_grid;
-       GtkAdjustment *zoom_adjustment_list;
-       GtkAdjustment *active_zoom_adjustment;
+       GtkAdjustment *zoom_adjustment;
        GtkWidget *zoom_level_scale;
        GMenu *action_menu;
 
@@ -256,22 +252,17 @@ action_view_mode_state_changed (GActionGroup *action_group,
 {
        NautilusToolbar *self = user_data;
        const gchar *view_mode = g_variant_get_string (value, NULL);
-       gchar *name;
+       const gchar *name;
        GtkWidget *image;
 
        if (g_strcmp0 (view_mode, "list") == 0) {
                name = "view-list-symbolic";
-               self->priv->active_zoom_adjustment = self->priv->zoom_adjustment_list;
        } else if (g_strcmp0 (view_mode, "grid") == 0) {
                name = "view-grid-symbolic";
-               self->priv->active_zoom_adjustment = self->priv->zoom_adjustment_grid;
        } else {
                g_assert_not_reached ();
        }
 
-       gtk_range_set_adjustment (GTK_RANGE (self->priv->zoom_level_scale),
-                                 self->priv->active_zoom_adjustment);
-
        image = gtk_image_new ();
        gtk_button_set_image (GTK_BUTTON (self->priv->view_button), image);
        gtk_image_set_from_icon_name (GTK_IMAGE (image), name,
@@ -408,6 +399,7 @@ zoom_level_changed (GtkRange *range,
        slot = nautilus_window_get_active_slot (self->priv->window);
        view = nautilus_window_slot_get_current_view (slot);
 
+       g_print ("changing action state to %f in toolbar\n", zoom_level);
        g_action_group_change_action_state (nautilus_view_get_action_group (view),
                                            "zoom-to-level",
                                            g_variant_new_int32 ((gint) zoom_level));
@@ -432,8 +424,7 @@ nautilus_toolbar_init (NautilusToolbar *self)
        builder = gtk_builder_new_from_resource ("/org/gnome/nautilus/nautilus-toolbar-view-menu.xml");
        self->priv->view_menu_widget =  GTK_WIDGET (gtk_builder_get_object (builder, "view_menu_widget"));
        self->priv->zoom_level_scale = GTK_WIDGET (gtk_builder_get_object (builder, "zoom_level_scale"));
-       self->priv->zoom_adjustment_grid = g_object_ref (GTK_ADJUSTMENT (gtk_builder_get_object (builder, 
"zoom_adjustment_grid")));
-       self->priv->zoom_adjustment_list = g_object_ref (GTK_ADJUSTMENT (gtk_builder_get_object (builder, 
"zoom_adjustment_list")));
+       self->priv->zoom_adjustment = GTK_ADJUSTMENT (gtk_builder_get_object (builder, "zoom_adjustment"));
 
        self->priv->sort_menu =  GTK_WIDGET (gtk_builder_get_object (builder, "sort_menu"));
        self->priv->sort_trash_time =  GTK_WIDGET (gtk_builder_get_object (builder, "sort_trash_time"));
@@ -519,9 +510,6 @@ nautilus_toolbar_dispose (GObject *obj)
                                              toolbar_update_appearance, self);
        unschedule_menu_popup_timeout (self);
 
-       g_clear_object (&self->priv->zoom_adjustment_grid);
-       g_clear_object (&self->priv->zoom_adjustment_list);
-
        G_OBJECT_CLASS (nautilus_toolbar_parent_class)->dispose (obj);
 }
 
@@ -570,7 +558,7 @@ nautilus_toolbar_reset_menus (NautilusToolbar *self)
        NautilusWindowSlot *slot;
        NautilusView *view;
        GActionGroup *view_action_group;
-       GVariant *sort_hint;
+       GVariant *variant;
        GVariantIter iter;
        gboolean sort_trash, sort_search, has_sort;
        const gchar *hint;
@@ -592,8 +580,8 @@ nautilus_toolbar_reset_menus (NautilusToolbar *self)
        gtk_widget_set_visible (self->priv->sort_menu, has_sort);
 
        if (has_sort) {
-               sort_hint = g_action_group_get_action_state_hint (view_action_group, "sort");
-               g_variant_iter_init (&iter, sort_hint);
+               variant = g_action_group_get_action_state_hint (view_action_group, "sort");
+               g_variant_iter_init (&iter, variant);
 
                while (g_variant_iter_next (&iter, "&s", &hint)) {
                        if (g_strcmp0 (hint, "trash-time") == 0)
@@ -602,29 +590,17 @@ nautilus_toolbar_reset_menus (NautilusToolbar *self)
                                sort_search = TRUE;
                }
 
-               g_variant_unref (sort_hint);
+               g_variant_unref (variant);
        }
 
        gtk_widget_set_visible (self->priv->sort_trash_time, sort_trash);
        gtk_widget_set_visible (self->priv->sort_search_relevance, sort_search);
-}
 
-void
-nautilus_toolbar_view_menu_widget_set_zoom_level (NautilusToolbar *self,
-                                                 gdouble          level)
-{
-       g_return_if_fail (NAUTILUS_IS_TOOLBAR (self));
-
-       /* We only want to change the level when there's and actual view
-        * mode set, so skip all other calls to here. Those calls came from
-        * update_toolbar_menus in the natuilus-view after a parent is set, etc.
-        * We will receive eventually a mode change and another update here by nautilus view
-        * update_toolbar_menus */
-       if (self->priv->active_zoom_adjustment == NULL)
-               return;
-
-       gtk_adjustment_set_value (GTK_ADJUSTMENT (self->priv->active_zoom_adjustment),
-                                 level);
+       variant = g_action_group_get_action_state (view_action_group, "zoom-to-level");
+       g_print ("reading back %d in the update\n", g_variant_get_int32 (variant));
+       gtk_adjustment_set_value (self->priv->zoom_adjustment,
+                                 g_variant_get_int32 (variant));
+       g_variant_unref (variant);
 }
 
 GtkWidget *
diff --git a/src/nautilus-toolbar.h b/src/nautilus-toolbar.h
index 10b77e5..51a1d24 100644
--- a/src/nautilus-toolbar.h
+++ b/src/nautilus-toolbar.h
@@ -73,7 +73,4 @@ void nautilus_toolbar_set_show_location_entry (NautilusToolbar *self,
                                               gboolean show_location_entry);
 void nautilus_toolbar_reset_menus (NautilusToolbar *self);
 
-void nautilus_toolbar_view_menu_widget_set_zoom_level (NautilusToolbar *self,
-                                                      gdouble level);
-
 #endif /* __NAUTILUS_TOOLBAR_H__ */
diff --git a/src/nautilus-view.c b/src/nautilus-view.c
index d1f1778..02a9c38 100644
--- a/src/nautilus-view.c
+++ b/src/nautilus-view.c
@@ -6342,12 +6342,19 @@ nautilus_view_update_context_menus (NautilusView *view)
        NAUTILUS_VIEW_CLASS (G_OBJECT_GET_CLASS (view))->update_context_menus (view);
 }
 
-static void
-real_update_toolbar_menus (NautilusView *view)
+/* Convenience function to reset the menus owned by the but that are managed on
+ * the toolbar and update them with the current state.
+ * 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_toolbar_menus (NautilusView *view)
 {
        NautilusToolbar *toolbar;
        NautilusWindow *window;
 
+       g_assert (NAUTILUS_IS_VIEW (view));
+
        window = nautilus_view_get_window (view);
        toolbar = NAUTILUS_TOOLBAR (nautilus_window_get_toolbar (window));
        nautilus_toolbar_reset_menus (toolbar);
@@ -6356,21 +6363,6 @@ real_update_toolbar_menus (NautilusView *view)
        nautilus_view_update_actions_state (view);
 }
 
-/* Convenience function to reset the menus owned by the but that are managed on
- * the toolbar 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_toolbar_menus (NautilusView *view)
-{
-       g_assert(NAUTILUS_IS_VIEW (view));
-
-       NAUTILUS_VIEW_CLASS (G_OBJECT_GET_CLASS (view))->update_toolbar_menus (view);
-}
-
 /**
  * nautilus_view_pop_up_selection_context_menu
  *
@@ -7378,7 +7370,6 @@ nautilus_view_class_init (NautilusViewClass *klass)
        klass->get_window = nautilus_view_get_window;
        klass->update_context_menus = real_update_context_menus;
        klass->update_actions_state = real_update_actions_state;
-       klass->update_toolbar_menus = real_update_toolbar_menus;
 
        copied_files_atom = gdk_atom_intern ("x-special/gnome-copied-files", FALSE);
 
diff --git a/src/nautilus-view.h b/src/nautilus-view.h
index a2dc10c..c8e0c26 100644
--- a/src/nautilus-view.h
+++ b/src/nautilus-view.h
@@ -216,8 +216,6 @@ struct NautilusViewClass {
          */
         void    (* update_context_menus)               (NautilusView *view);
 
-        void    (* update_toolbar_menus)               (NautilusView *view);
-
         void    (* update_actions_state)               (NautilusView *view);
 
        /* sort_files is a function pointer that subclasses can override


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