summaryrefslogtreecommitdiff
path: root/src/trg-menu-bar.c
diff options
context:
space:
mode:
authorGravatar Alan Fitton <ajf@eth0.org.uk>2011-10-07 18:55:01 +0000
committerGravatar Alan Fitton <ajf@eth0.org.uk>2011-10-07 18:55:01 +0000
commit429b32fba6f5ad14db31fe2690974b57df858999 (patch)
tree54970bd752b8dcf957d4a2db09be5678b79f9af4 /src/trg-menu-bar.c
parentc3bd3ac55162a88b308a6f700aad88d26cbd5f29 (diff)
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}[, ]).
Diffstat (limited to 'src/trg-menu-bar.c')
-rw-r--r--src/trg-menu-bar.c43
1 files changed, 39 insertions, 4 deletions
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);
}