From 429b32fba6f5ad14db31fe2690974b57df858999 Mon Sep 17 00:00:00 2001 From: Alan Fitton Date: Fri, 7 Oct 2011 18:55:01 +0000 Subject: make connect button a menu button with other profiles, also add a connection serial used to discard requests issued before a disconnect which get their callback invoked after a new one is established. add an experimental "repeater" flag on exec commands (eg. %{name}[, ]). --- src/trg-menu-bar.c | 43 +++++++++++++++++++++++++++++++++++++++---- 1 file changed, 39 insertions(+), 4 deletions(-) (limited to 'src/trg-menu-bar.c') diff --git a/src/trg-menu-bar.c b/src/trg-menu-bar.c index 1aea8b3..abc4b5b 100644 --- a/src/trg-menu-bar.c +++ b/src/trg-menu-bar.c @@ -116,7 +116,7 @@ void trg_menu_bar_connected_change(TrgMenuBar * mb, gboolean connected) gtk_widget_set_sensitive(priv->mb_add, connected); gtk_widget_set_sensitive(priv->mb_add_url, connected); - gtk_widget_set_sensitive(priv->mb_connect, !connected); + //gtk_widget_set_sensitive(priv->mb_connect, !connected); gtk_widget_set_sensitive(priv->mb_disconnect, connected); gtk_widget_set_sensitive(priv->mb_remote_prefs, connected); gtk_widget_set_sensitive(priv->mb_view_stats, connected); @@ -275,8 +275,8 @@ trg_menu_bar_install_widget_prop(GObjectClass * class, guint propId, G_PARAM_STATIC_BLURB)); } -GtkWidget *trg_menu_bar_item_new(GtkMenuShell * shell, char *text, - char *stock_id, gboolean sensitive) +GtkWidget *trg_menu_bar_item_new(GtkMenuShell * shell, const gchar *text, + const gchar *stock_id, gboolean sensitive) { GtkWidget *item = gtk_image_menu_item_new_with_label(stock_id); gtk_image_menu_item_set_use_stock(GTK_IMAGE_MENU_ITEM(item), TRUE); @@ -389,6 +389,39 @@ GtkWidget *trg_menu_bar_options_menu_new(TrgMenuBarPrivate * priv) return opts; } +static void trg_menu_bar_file_connect_item_new(TrgMainWindow *win, GtkMenuShell *shell, const gchar *text, const gchar *stock, JsonObject *profile) +{ + GtkWidget *item = trg_menu_bar_item_new(shell, text, stock, TRUE); + g_object_set_data(G_OBJECT(item), "profile", profile); + g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(connect_cb), win); +} + +GtkWidget *trg_menu_bar_file_connect_menu_new(TrgMainWindow *win, TrgPrefs *p) +{ + GtkWidget *menu = gtk_menu_new(); + GList *profiles = json_array_get_elements(trg_prefs_get_profiles(p)); + JsonObject *currentProfile = trg_prefs_get_profile(p); + GList *li; + + for (li = profiles; li; li = g_list_next(li)) { + JsonObject *profile = json_node_get_object((JsonNode*) li->data); + const gchar *name_value; + + if (json_object_has_member(profile, TRG_PREFS_KEY_PROFILE_NAME)) { + name_value = json_object_get_string_member(profile, + TRG_PREFS_KEY_PROFILE_NAME); + } else { + name_value = _(TRG_PROFILE_NAME_DEFAULT); + } + + if (profile != currentProfile) + trg_menu_bar_file_connect_item_new(win, GTK_MENU_SHELL(menu), name_value, + GTK_STOCK_CONNECT, profile); + } + + return menu; +} + static GtkWidget *trg_menu_bar_file_file_menu_new(TrgMenuBarPrivate * priv) { @@ -629,5 +662,7 @@ static void trg_menu_bar_init(TrgMenuBar * self) TrgMenuBar *trg_menu_bar_new(TrgPrefs *prefs) { - return g_object_new(TRG_TYPE_MENU_BAR, "prefs", prefs, NULL); + return g_object_new(TRG_TYPE_MENU_BAR, + + "prefs", prefs, NULL); } -- cgit v1.2.3