summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCosimo Cecchi <cosimoc@gnome.org>2015-01-26 15:43:01 +0000
committerCosimo Cecchi <cosimoc@gnome.org>2015-01-26 15:43:01 +0000
commit67611448570a4575ca1b17c5061905b5b0a7030d (patch)
treeeba817f8cdecbdcdbeb8af4957c5717368e121f4
parent9ca3aeb336bf9699a23d3b34ade4421411de643c (diff)
downloadnautilus-67611448570a4575ca1b17c5061905b5b0a7030d.tar.gz
toolbar: cleanup handling of zoom actions
Store the entire state in the action. The toolbar will be called to update the state anyway...
-rw-r--r--src/nautilus-canvas-view.c26
-rw-r--r--src/nautilus-list-view.c24
-rw-r--r--src/nautilus-toolbar-view-menu.xml13
-rw-r--r--src/nautilus-toolbar.c50
-rw-r--r--src/nautilus-toolbar.h3
-rw-r--r--src/nautilus-view.c27
-rw-r--r--src/nautilus-view.h2
7 files changed, 38 insertions, 107 deletions
diff --git a/src/nautilus-canvas-view.c b/src/nautilus-canvas-view.c
index 98e2c2c67..3604acaa2 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 4192c79a8..445b986ef 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 42249aa42..9f0ad9908 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 66a760087..06dd740fd 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 10b77e52d..51a1d248d 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 d1f1778c6..02a9c383e 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 a2dc10c09..c8e0c26bf 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