From 76f249aaf275c60bddddc0c6325478cc231fb6b5 Mon Sep 17 00:00:00 2001 From: Gergely Polonkai Date: Fri, 26 Sep 2014 23:52:11 +0200 Subject: [PATCH] =?UTF-8?q?Fix=20AgWindow=E2=80=99s=20selection=20mode=20c?= =?UTF-8?q?ancel=20button?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ag-window.c | 66 ++++++++++++++++++++++++++++------- src/resources/ui/ag-window.ui | 3 +- 2 files changed, 55 insertions(+), 14 deletions(-) diff --git a/src/ag-window.c b/src/ag-window.c index bc212bf..e31d736 100644 --- a/src/ag-window.c +++ b/src/ag-window.c @@ -1661,24 +1661,14 @@ ag_window_refresh_action(GSimpleAction *action, } static void -ag_window_selection_mode_action(GSimpleAction *action, - GVariant *parameter, - gpointer user_data) +ag_window_set_selection_mode(AgWindow *window, gboolean state) { - GVariant *state; - gboolean new_state; GtkStyleContext *style; - AgWindow *window = AG_WINDOW(user_data); AgWindowPrivate *priv = ag_window_get_instance_private(window); - state = g_action_get_state(G_ACTION(action)); - new_state = !g_variant_get_boolean(state); - g_action_change_state(G_ACTION(action), g_variant_new_boolean(new_state)); - g_variant_unref(state); - style = gtk_widget_get_style_context(priv->header_bar); - if (new_state) { + if (state) { gtk_header_bar_set_show_close_button( GTK_HEADER_BAR(priv->header_bar), FALSE @@ -1711,6 +1701,42 @@ ag_window_selection_mode_action(GSimpleAction *action, } } +static void +ag_window_icon_view_mode_cb(AgIconView *icon_view, + GParamSpec *pspec, + AgWindow *window) +{ + AgIconViewMode mode = ag_icon_view_get_mode(icon_view); + GVariant *state_var = g_variant_new_boolean( + (mode == AG_ICON_VIEW_MODE_SELECTION) + ); + + g_action_group_activate_action( + G_ACTION_GROUP(window), + "selection", + state_var + ); +} + +static void +ag_window_selection_mode_action(GSimpleAction *action, + GVariant *parameter, + gpointer user_data) +{ + GVariant *state; + gboolean new_state; + AgWindow *window = AG_WINDOW(user_data); + + state = g_action_get_state(G_ACTION(action)); + new_state = !g_variant_get_boolean(state); + g_action_change_state(G_ACTION(action), g_variant_new_boolean(new_state)); + g_variant_unref(state); + + g_debug("Set selection mode: %d", new_state); + + ag_window_set_selection_mode(window, new_state); +} + static void ag_window_delete_action(GSimpleAction *action, GVariant *parameter, @@ -1823,7 +1849,7 @@ static GActionEntry win_entries[] = { { "new-chart", ag_window_new_chart_action, NULL, NULL, NULL }, { "back", ag_window_back_action, NULL, NULL, NULL }, { "refresh", ag_window_refresh_action, NULL, NULL, NULL }, - { "selection", ag_window_selection_mode_action, NULL, "false", NULL }, + { "selection", ag_window_selection_mode_action, "b", "false", NULL }, { "delete", ag_window_delete_action, NULL, NULL, NULL }, { "connection", ag_window_connection_action, "s", "'aspects'", NULL }, }; @@ -2393,6 +2419,12 @@ ag_window_destroy(GtkWidget *widget) GTK_WIDGET_CLASS(ag_window_parent_class)->destroy(widget); } +static void +ag_window_selection_mode_cancel_cb(GtkButton *button, AgWindow *window) +{ + ag_window_set_selection_mode(window, FALSE); +} + static void ag_window_class_init(AgWindowClass *klass) { @@ -2591,6 +2623,14 @@ ag_window_class_init(AgWindowClass *klass) widget_class, ag_window_list_selection_changed_cb ); + gtk_widget_class_bind_template_callback( + widget_class, + ag_window_icon_view_mode_cb + ); + gtk_widget_class_bind_template_callback( + widget_class, + ag_window_selection_mode_cancel_cb + ); } static gboolean diff --git a/src/resources/ui/ag-window.ui b/src/resources/ui/ag-window.ui index 620bb5f..e60b2b0 100644 --- a/src/resources/ui/ag-window.ui +++ b/src/resources/ui/ag-window.ui @@ -318,8 +318,8 @@ True False - win.selection Cancel + @@ -349,6 +349,7 @@ +