From 5421303d726094d50c7c648035ecaea1f05e541e Mon Sep 17 00:00:00 2001 From: Perry Werneck Date: Mon, 9 Dec 2019 11:46:43 -0300 Subject: [PATCH] Toolbar action list is now set from gsettings. --- schemas/application.gschema.xml.in | 6 ++++++ src/include/pw3270/toolbar.h | 2 ++ src/objects/application/application.c | 6 +++++- src/objects/toolbar/toolbar.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++------------ src/objects/window/window.c | 16 ++++++++++++++-- 5 files changed, 77 insertions(+), 15 deletions(-) diff --git a/schemas/application.gschema.xml.in b/schemas/application.gschema.xml.in index 23f2d1f..ec244a8 100644 --- a/schemas/application.gschema.xml.in +++ b/schemas/application.gschema.xml.in @@ -68,6 +68,12 @@ + + 'win.copy,win.paste,win.select-all,separator,win.connect,win.disconnect,separator,win.session.properties,win.file.transfer,win.print,app.quit' + The toolbar action list + + + diff --git a/src/include/pw3270/toolbar.h b/src/include/pw3270/toolbar.h index 7ed1b6c..594d265 100644 --- a/src/include/pw3270/toolbar.h +++ b/src/include/pw3270/toolbar.h @@ -60,6 +60,8 @@ GtkWidget * pw3270_toolbar_insert_action(GtkWidget *toolbar, const gchar *name, gint pos); void pw3270_toolbar_set_actions(GtkWidget *toolbar, const gchar *action_names); + gchar * pw3270_toolbar_get_actions(GtkWidget *toolbar); + 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/application/application.c b/src/objects/application/application.c index 0e85d25..0c65289 100644 --- a/src/objects/application/application.c +++ b/src/objects/application/application.c @@ -155,16 +155,20 @@ "br.com.bb." PACKAGE_NAME, TRUE); - g_settings_schema_source_unref(source); + debug("schema %s=%p","br.com.bb." PACKAGE_NAME,schema); app->settings = g_settings_new_full(schema, NULL, path); + g_settings_schema_source_unref(source); + #else app->settings = g_settings_new_with_path("br.com.bb." PACKAGE_NAME, path); #endif // DEBUG + debug("app->settings=%p",app->settings); + } // Bind properties diff --git a/src/objects/toolbar/toolbar.c b/src/objects/toolbar/toolbar.c index 125a77f..c218ecb 100644 --- a/src/objects/toolbar/toolbar.c +++ b/src/objects/toolbar/toolbar.c @@ -35,6 +35,8 @@ static gboolean popup_context_menu(GtkToolbar *toolbar, gint x, gint y, gint button_number); static void finalize(GObject *object); static void pw3270_toolbar_toolbar_set_style(GtkToolbar *toolbar, GtkToolbarStyle style); + static void get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); + static void set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); static const struct icon_size { const gchar * label; @@ -82,8 +84,12 @@ .label = N_( "Icons & text" ), .style = GTK_TOOLBAR_BOTH }, -}; + }; + enum { + PROP_NONE, + PROP_ACTION_NAMES, + }; struct _pw3270ToolBar { @@ -109,14 +115,57 @@ static void pw3270ToolBar_class_init(pw3270ToolBarClass *klass) { + GObjectClass *object_class = G_OBJECT_CLASS(klass); GtkToolbarClass * toolbar = GTK_TOOLBAR_CLASS(klass); toolbar->popup_context_menu = popup_context_menu; G_OBJECT_CLASS(klass)->finalize = finalize; + object_class->set_property = set_property; + object_class->get_property = get_property; + + g_object_class_install_property( + object_class, + PROP_ACTION_NAMES, + g_param_spec_string ("action-names", + N_("Action Names"), + N_("The name of the actions in the toolbar"), + NULL, + G_PARAM_READABLE|G_PARAM_WRITABLE) + ); + + } + void get_property(GObject *object, guint prop_id, GValue *value, GParamSpec G_GNUC_UNUSED(*pspec)) { + + switch (prop_id) { + case PROP_ACTION_NAMES: + g_value_take_string(value,pw3270_toolbar_get_actions(GTK_WIDGET(object))); + break; + + default: + g_assert_not_reached (); + } + + } + + void set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec G_GNUC_UNUSED(*pspec)) { + + switch (prop_id) + { + case PROP_ACTION_NAMES: + pw3270_toolbar_set_actions(GTK_WIDGET(object), g_value_get_string(value)); + break; + + default: + g_assert_not_reached (); + } + + } + + static void detacher(GtkWidget *attach_widget, GtkMenu G_GNUC_UNUSED(*menu)) { pw3270ToolBar * toolbar = PW3270_TOOLBAR(attach_widget); @@ -297,17 +346,6 @@ } - /* - static void update_child(GtkToolButton *item, GtkWidget *toolbar) { - - if(!GTK_IS_TOOL_BUTTON(item)) - return; - - debug("[%s]", gtk_tool_button_get_icon_name(item)); - - } - */ - void pw3270_toolbar_set_icon_size(GtkToolbar *toolbar, GtkIconSize icon_size) { debug("%s(%d)",__FUNCTION__,(int) icon_size); diff --git a/src/objects/window/window.c b/src/objects/window/window.c index d0e1402..6f33e7a 100644 --- a/src/objects/window/window.c +++ b/src/objects/window/window.c @@ -154,10 +154,12 @@ { + /* 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), @@ -169,8 +171,8 @@ 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); + //g_autofree gchar * action_names = pw3270_toolbar_get_actions(GTK_WIDGET(widget->toolbar)); + //debug("[%s]",action_names); } @@ -183,6 +185,8 @@ g_autoptr(GSettings) settings = pw3270_application_get_settings(G_APPLICATION(application)); + debug("*************** settings=%p",settings); + g_return_val_if_fail(GTK_IS_APPLICATION(application), NULL); pw3270ApplicationWindow * window = g_object_new( @@ -276,6 +280,14 @@ G_SETTINGS_BIND_DEFAULT ); + g_settings_bind( + settings, + "toolbar-action-names", + window->toolbar, + "action-names", + G_SETTINGS_BIND_DEFAULT + ); + gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER); gtk_window_set_default_size (GTK_WINDOW (window), 800, 500); -- libgit2 0.21.2