From 9306acb35298ee66b252826f577fdcb952904776 Mon Sep 17 00:00:00 2001 From: Perry Werneck Date: Mon, 9 Dec 2019 10:55:49 -0300 Subject: [PATCH] Adding methods to get/set toolbar action names. --- src/include/pw3270/toolbar.h | 2 ++ src/objects/toolbar/toolbar.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ src/objects/window/window.c | 29 ++++++++--------------------- 3 files changed, 63 insertions(+), 21 deletions(-) diff --git a/src/include/pw3270/toolbar.h b/src/include/pw3270/toolbar.h index ac3be1b..7ed1b6c 100644 --- a/src/include/pw3270/toolbar.h +++ b/src/include/pw3270/toolbar.h @@ -59,6 +59,8 @@ GtkWidget * pw3270_toolbar_insert_lib3270_action(GtkWidget *toolbar, const LIB3270_ACTION *action, gint pos); GtkWidget * pw3270_toolbar_insert_action(GtkWidget *toolbar, const gchar *name, gint pos); + void pw3270_toolbar_set_actions(GtkWidget *toolbar, const gchar *action_names); + void pw3270_toolbar_set_style(GtkToolbar *toolbar, GtkToolbarStyle style); void pw3270_toolbar_set_icon_size(GtkToolbar *toolbar, GtkIconSize icon_size); diff --git a/src/objects/toolbar/toolbar.c b/src/objects/toolbar/toolbar.c index ad2e7b5..125a77f 100644 --- a/src/objects/toolbar/toolbar.c +++ b/src/objects/toolbar/toolbar.c @@ -336,3 +336,56 @@ // gtk_container_foreach(GTK_CONTAINER(toolbar),(GtkCallback) update_child, toolbar); } + + void pw3270_toolbar_clear(GtkWidget *toolbar) { + + GList * children = gtk_container_get_children(GTK_CONTAINER(toolbar)); + GList * item; + + for(item = children;item;item = g_list_next(item)) { + gtk_container_remove(GTK_CONTAINER(toolbar),GTK_WIDGET(item->data)); + } + + g_list_free(children); + } + + void pw3270_toolbar_set_actions(GtkWidget *toolbar, const gchar *action_names) { + + gchar ** actions = g_strsplit(action_names,",",-1); + size_t ix; + + pw3270_toolbar_clear(toolbar); + + for(ix = 0; actions[ix]; ix++) { + pw3270_toolbar_insert_action(toolbar,actions[ix],-1); + } + + g_strfreev(actions); + + } + + gchar * pw3270_toolbar_get_actions(GtkWidget *toolbar) { + + GString * str = g_string_new(""); + + GList * children = gtk_container_get_children(GTK_CONTAINER(toolbar)); + GList * item; + + for(item = children;item;item = g_list_next(item)) { + + if(*str->str) + g_string_append(str,","); + + if(GTK_IS_SEPARATOR_TOOL_ITEM(item->data)) { + g_string_append(str,"separator"); + } else if(GTK_IS_TOOL_BUTTON(item->data)) { + g_string_append(str,gtk_actionable_get_action_name(GTK_ACTIONABLE(item->data))); + } + + } + + g_list_free(children); + + + return g_string_free(str,FALSE); + } diff --git a/src/objects/window/window.c b/src/objects/window/window.c index c5fd888..d0e1402 100644 --- a/src/objects/window/window.c +++ b/src/objects/window/window.c @@ -151,29 +151,13 @@ // // Setup toolbar // - { - static const gchar *actions[] = { - - "win.copy", - "win.paste", - "win.select-all", - "separator", - "win.connect", - "win.disconnect", - "separator", - "win.set.colors", - "win.session.properties", - "win.file.transfer", - "win.print", - "app.quit" - - }; - size_t ix; + { - for(ix = 0; ix < G_N_ELEMENTS(actions); ix++) { - pw3270_toolbar_insert_action(GTK_WIDGET(widget->toolbar),actions[ix],-1); - } + pw3270_toolbar_set_actions( + GTK_WIDGET(widget->toolbar), + "win.copy,win.paste,win.select-all,separator,win.connect,win.disconnect,separator,win.session.properties,win.file.transfer,win.print,app.quit" + ); g_action_map_add_action( G_ACTION_MAP(widget), @@ -185,6 +169,9 @@ G_ACTION(g_property_action_new("menubar", widget, "show-menubar")) ); + g_autofree gchar * action_names = pw3270_toolbar_get_actions(GTK_WIDGET(widget->toolbar)); + debug("[%s]",action_names); + } } -- libgit2 0.21.2