[frogr] Finally port the 'accounts' submenu to GMenu
- From: Mario Sanchez Prada <msanchez src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [frogr] Finally port the 'accounts' submenu to GMenu
- Date: Tue, 27 Nov 2012 10:50:07 +0000 (UTC)
commit 559ee1273aff8364ba30cea3275e973d384e2875
Author: Mario Sanchez Prada <msanchez gnome org>
Date: Mon Nov 26 12:19:19 2012 +0100
Finally port the 'accounts' submenu to GMenu
src/frogr-main-view.c | 174 +++++++++++++++---------------------------------
1 files changed, 55 insertions(+), 119 deletions(-)
---
diff --git a/src/frogr-main-view.c b/src/frogr-main-view.c
index 5fd23fd..61d60a4 100644
--- a/src/frogr-main-view.c
+++ b/src/frogr-main-view.c
@@ -56,6 +56,7 @@
/* Action names for menu items */
#define ACTION_AUTHORIZE "authorize"
+#define ACTION_LOGIN_AS "login-as"
#define ACTION_PREFERENCES "preferences"
#define ACTION_HELP "help"
#define ACTION_ABOUT "about"
@@ -107,8 +108,6 @@ typedef struct _FrogrMainViewPrivate {
GtkWidget *icon_view;
GtkWidget *status_bar;
- GtkWidget *accounts_menu_item;
- GtkWidget *accounts_menu;
GtkWidget *pictures_ctxt_menu;
@@ -122,6 +121,7 @@ typedef struct _FrogrMainViewPrivate {
guint sb_context_id;
GtkBuilder *builder;
+ GMenuModel *app_menu;
/* For the toolbar and the contextual menu */
GtkActionGroup *file_gtkactions;
@@ -150,7 +150,6 @@ static void _on_radio_menu_item_activated (GSimpleAction *action, GVariant *para
static void _on_radio_menu_item_changed (GSimpleAction *action, GVariant *parameter, gpointer data);
static void _on_toggle_menu_item_activated (GSimpleAction *action, GVariant *parameter, gpointer data);
static void _on_toggle_menu_item_changed (GSimpleAction *action, GVariant *parameter, gpointer data);
-static void _on_account_menu_item_toggled (GtkWidget *widget, gpointer self);
/* This needs to be non-static because of GtkBuilder UI definition file */
void _on_gtk_action_activated (GtkAction *action, gpointer data);
@@ -263,8 +262,6 @@ static void _model_changed (FrogrController *controller, gpointer data);
static void _model_deserialized (FrogrController *controller, gpointer data);
-static void _update_account_menu_items (FrogrMainView *mainview);
-
static void _update_state_description (FrogrMainView *mainview);
static gchar *_craft_state_description (FrogrMainView *mainview);
@@ -281,6 +278,7 @@ static void _update_ui (FrogrMainView *self);
static GActionEntry app_entries[] = {
{ ACTION_AUTHORIZE, _on_menu_item_activated, NULL, NULL, NULL },
+ { ACTION_LOGIN_AS, _on_radio_menu_item_activated, "s", "''", _on_radio_menu_item_changed },
{ ACTION_PREFERENCES, _on_menu_item_activated, NULL, NULL, NULL },
{ ACTION_HELP, _on_menu_item_activated, NULL, NULL, NULL },
{ ACTION_ABOUT, _on_menu_item_activated, NULL, NULL, NULL },
@@ -377,8 +375,8 @@ _initialize_ui (FrogrMainView *self)
g_action_map_add_action_entries (G_ACTION_MAP (gtk_app),
app_entries, G_N_ELEMENTS (app_entries),
self);
- gtk_application_set_app_menu (GTK_APPLICATION (gtk_app),
- G_MENU_MODEL (gtk_builder_get_object (builder, "app-menu")));
+ priv->app_menu = G_MENU_MODEL (gtk_builder_get_object (builder, "app-menu"));
+ gtk_application_set_app_menu (GTK_APPLICATION (gtk_app), priv->app_menu);
/* Menu bar */
full_path = g_strdup_printf ("%s/" UI_MENU_BAR_FILE, frogr_util_get_app_data_dir ());
@@ -433,10 +431,6 @@ _initialize_ui (FrogrMainView *self)
/* Initialize extra widgets */
- /* Accounts menu */
- priv->accounts_menu_item =
- GTK_WIDGET (gtk_builder_get_object (builder, "accounts_menu_item"));
-
/* Populate accounts submenu from model */
_populate_accounts_submenu (self);
@@ -686,12 +680,6 @@ _on_menu_item_activated (GSimpleAction *action, GVariant *parameter, gpointer da
static void
_on_radio_menu_item_activated (GSimpleAction *action, GVariant *parameter, gpointer data)
{
- const gchar *action_name = NULL;
-
- action_name = g_action_get_name (G_ACTION (action));
- if (g_strcmp0 (action_name, ACTION_SORT_BY))
- g_assert_not_reached ();
-
g_action_change_state (G_ACTION (action), parameter);
}
@@ -701,28 +689,37 @@ _on_radio_menu_item_changed (GSimpleAction *action, GVariant *parameter, gpointe
FrogrMainViewPrivate *priv = NULL;
const gchar *action_name = NULL;
const gchar *target = NULL;
- SortingCriteria criteria;
+ priv = FROGR_MAIN_VIEW_GET_PRIVATE (data);
action_name = g_action_get_name (G_ACTION (action));
- if (g_strcmp0 (action_name, ACTION_SORT_BY))
- g_assert_not_reached ();
-
target = g_variant_get_string (parameter, NULL);
- if (!g_strcmp0 (target, ACTION_SORT_BY_TARGET_AS_LOADED))
- criteria = SORT_AS_LOADED;
- else if (!g_strcmp0 (target, ACTION_SORT_BY_TARGET_DATE_TAKEN))
- criteria = SORT_BY_DATE;
- else if (!g_strcmp0 (target, ACTION_SORT_BY_TARGET_TITLE))
- criteria = SORT_BY_TITLE;
+
+ if (!g_strcmp0 (action_name, ACTION_LOGIN_AS))
+ {
+ DEBUG ("Selected account: %s", target);
+ frogr_controller_set_active_account (priv->controller, target);
+ }
+ else if (!g_strcmp0 (action_name, ACTION_SORT_BY))
+ {
+ SortingCriteria criteria;
+
+ if (!g_strcmp0 (target, ACTION_SORT_BY_TARGET_AS_LOADED))
+ criteria = SORT_AS_LOADED;
+ else if (!g_strcmp0 (target, ACTION_SORT_BY_TARGET_DATE_TAKEN))
+ criteria = SORT_BY_DATE;
+ else if (!g_strcmp0 (target, ACTION_SORT_BY_TARGET_TITLE))
+ criteria = SORT_BY_TITLE;
+ else
+ g_assert_not_reached ();
+
+ /* Update the UI and save settings */
+ _reorder_pictures (FROGR_MAIN_VIEW (data), criteria, priv->sorting_reversed);
+ frogr_config_set_mainview_sorting_criteria (priv->config, criteria);
+ frogr_config_save_settings (priv->config);
+ }
else
g_assert_not_reached ();
- /* Update the UI and save settings */
- priv = FROGR_MAIN_VIEW_GET_PRIVATE (data);
- _reorder_pictures (FROGR_MAIN_VIEW (data), criteria, priv->sorting_reversed);
- frogr_config_set_mainview_sorting_criteria (priv->config, criteria);
- frogr_config_save_settings (priv->config);
-
/* Update the action */
g_simple_action_set_state (action, parameter);
}
@@ -776,35 +773,6 @@ _quit_application (FrogrMainView *self)
g_application_quit (G_APPLICATION (gtk_app));
}
-static void
-_on_account_menu_item_toggled (GtkWidget *widget, gpointer self)
-{
- FrogrMainViewPrivate *priv = NULL;
- FrogrAccount *account = NULL;
- gboolean checked = FALSE;
-
- priv = FROGR_MAIN_VIEW_GET_PRIVATE (self);
- checked = gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (widget));
- account = g_object_get_data (G_OBJECT (widget), "frogr-account");
-
- /* Only set the account if checked */
- if (checked && account)
- {
- DEBUG ("Selected account %s (%s)",
- frogr_account_get_id (account),
- frogr_account_get_username (account));
-
- frogr_controller_set_active_account (priv->controller, account);
- }
- else if (account)
- {
- /* If manually unchecked the currently active account, set it again */
- FrogrAccount *active_account = frogr_controller_get_active_account (priv->controller);
- if (frogr_account_equal (active_account, account))
- gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (widget), TRUE);
- }
-}
-
void
_on_gtk_action_activated (GtkAction *action, gpointer data)
{
@@ -901,18 +869,21 @@ _populate_accounts_submenu (FrogrMainView *self)
{
FrogrMainViewPrivate *priv = NULL;
FrogrAccount *account = NULL;
- GtkWidget *menu_item = NULL;
+ GMenuItem *accounts_menu;
+ GMenuItem *menu_item = NULL;
+ GMenuModel *submenu = NULL;
+
GSList *accounts = NULL;
GSList *item = NULL;
- gchar *account_str = NULL;
+ const gchar *username = NULL;
+ gchar *action_str = NULL;
priv = FROGR_MAIN_VIEW_GET_PRIVATE (self);
- priv->accounts_menu = NULL;
-
accounts = frogr_controller_get_all_accounts (priv->controller);
- if (g_slist_length (accounts) > 0)
- priv->accounts_menu = gtk_menu_new ();
+ if (!g_slist_length (accounts))
+ return;
+ submenu = G_MENU_MODEL (g_menu_new ());
for (item = accounts; item; item = g_slist_next (item))
{
account = FROGR_ACCOUNT (item->data);
@@ -920,23 +891,26 @@ _populate_accounts_submenu (FrogrMainView *self)
/* Do not use the full name here since it could be the same for
different users, thus wouldn't be useful at all for the
matter of selecting one account or another. */
- account_str = g_strdup (frogr_account_get_username (account));
- menu_item = gtk_check_menu_item_new_with_label (account_str);
- g_free (account_str);
+ username = frogr_account_get_username (account);
+ action_str = g_strdup_printf ("app.login-as::%s", username);
+ menu_item = g_menu_item_new (username, action_str);;
+ g_menu_append_item (G_MENU (submenu), menu_item);
+ g_free (action_str);
- g_object_set_data (G_OBJECT (menu_item), "frogr-account", account);
+ if (frogr_account_is_active (account))
+ {
+ GtkApplication *gtk_app = NULL;
+ GAction *action = NULL;
- g_signal_connect (G_OBJECT (menu_item), "activate",
- G_CALLBACK (_on_account_menu_item_toggled),
- self);
- gtk_menu_shell_append (GTK_MENU_SHELL (priv->accounts_menu), menu_item);
- }
+ gtk_app = gtk_window_get_application (GTK_WINDOW (self));
+ action = g_action_map_lookup_action (G_ACTION_MAP (gtk_app), ACTION_LOGIN_AS);
+ g_action_activate (action, g_variant_new_string (username));
+ }
- /* TODO */
- /* gtk_menu_item_set_submenu (GTK_MENU_ITEM (priv->accounts_menu_item), priv->accounts_menu); */
- if (priv->accounts_menu)
- gtk_widget_show_all (priv->accounts_menu);
+ }
+ accounts_menu = g_menu_item_new_submenu (_("Accounts"), submenu);
+ g_menu_insert_item (G_MENU (priv->app_menu), 1, accounts_menu);
}
static void
@@ -1815,7 +1789,6 @@ _controller_active_account_changed (FrogrController *controller,
mainview = FROGR_MAIN_VIEW (data);
_update_state_description (mainview);
- _update_account_menu_items (mainview);
_update_ui (mainview);
}
@@ -1928,40 +1901,6 @@ _model_deserialized (FrogrController *controller, gpointer data)
}
static void
-_update_account_menu_items (FrogrMainView *mainview)
-{
- FrogrMainViewPrivate *priv = NULL;
-
- priv = FROGR_MAIN_VIEW_GET_PRIVATE (mainview);
- if (priv->accounts_menu && GTK_IS_CONTAINER (priv->accounts_menu))
- {
- FrogrAccount *active_account = NULL;
- FrogrAccount *account = NULL;
- GList *all_items = NULL;
- GList *item = NULL;
- GtkWidget *menu_item = NULL;
-
- active_account = frogr_controller_get_active_account (priv->controller);
- all_items = gtk_container_get_children (GTK_CONTAINER (priv->accounts_menu));
- for (item = all_items; item; item = g_list_next (item))
- {
- gboolean value;
-
- menu_item = GTK_WIDGET (item->data);
- account = g_object_get_data (G_OBJECT (menu_item), "frogr-account");
-
- if (account == active_account)
- value = TRUE;
- else
- value = FALSE;
-
- gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_item), value);
- }
- g_list_free (all_items);
- }
-}
-
-static void
_update_state_description (FrogrMainView *mainview)
{
FrogrMainViewPrivate *priv = NULL;
@@ -2121,11 +2060,9 @@ _update_sensitiveness (FrogrMainView *self)
gtk_action_group_set_sensitive (priv->file_gtkactions, FALSE);
gtk_action_group_set_sensitive (priv->pictures_gtkactions, FALSE);
gtk_action_group_set_sensitive (priv->selection_gtkactions, FALSE);
- /* gtk_widget_set_sensitive (priv->accounts_menu_item, FALSE); */
break;
case FROGR_STATE_IDLE:
- /* has_accounts = (priv->accounts_menu != NULL); */
has_pics = (_n_pictures (self) > 0);
n_selected_pics = priv->n_selected_pictures;
@@ -2145,7 +2082,6 @@ _update_sensitiveness (FrogrMainView *self)
gtk_action_group_set_sensitive (priv->file_gtkactions, TRUE);
gtk_action_group_set_sensitive (priv->pictures_gtkactions, has_pics);
gtk_action_group_set_sensitive (priv->selection_gtkactions, n_selected_pics);
- /* gtk_widget_set_sensitive (priv->accounts_menu_item, has_accounts); */
break;
default:
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]