From 8e3e419c89f621ee53b52b425d9124eb8b924b37 Mon Sep 17 00:00:00 2001 From: Perry Werneck Date: Thu, 2 Jan 2020 15:39:00 -0300 Subject: [PATCH] Adding toolbar options in the settings dialog. --- src/include/pw3270/application.h | 2 +- src/include/pw3270/toolbar.h | 3 +++ src/objects/toolbar/toolbar.c | 95 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------- src/objects/window/tools.c | 3 ++- src/objects/window/window.c | 16 ++++++++++++++++ 5 files changed, 104 insertions(+), 15 deletions(-) diff --git a/src/include/pw3270/application.h b/src/include/pw3270/application.h index 4c69e97..e348c6d 100644 --- a/src/include/pw3270/application.h +++ b/src/include/pw3270/application.h @@ -69,7 +69,7 @@ void pw3270_application_set_ui_style(GApplication *app, PW3270_UI_STYLE type); PW3270_UI_STYLE pw3270_application_get_ui_style(GApplication *app); - gboolean pw3270_settings_set_int(const gchar *key, gint value); +// gboolean pw3270_settings_set_int(const gchar *key, gint value); // Tools diff --git a/src/include/pw3270/toolbar.h b/src/include/pw3270/toolbar.h index cb44db9..f34e6cd 100644 --- a/src/include/pw3270/toolbar.h +++ b/src/include/pw3270/toolbar.h @@ -66,6 +66,9 @@ void pw3270_toolbar_set_style(GtkToolbar *toolbar, GtkToolbarStyle style); void pw3270_toolbar_set_icon_size(GtkToolbar *toolbar, GtkIconSize icon_size); + GtkToolbarStyle pw3270_toolbar_get_style(GtkToolbar *toolbar); + GtkIconSize pw3270_toolbar_get_icon_size(GtkToolbar *toolbar); + G_END_DECLS #endif // PW3270_TOOLBAR_H_INCLUDED diff --git a/src/objects/toolbar/toolbar.c b/src/objects/toolbar/toolbar.c index 50bb9d9..893ccd3 100644 --- a/src/objects/toolbar/toolbar.c +++ b/src/objects/toolbar/toolbar.c @@ -34,7 +34,6 @@ 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); @@ -89,10 +88,13 @@ enum { PROP_NONE, PROP_ACTION_NAMES, + PROP_ICON_SIZE, + PROP_STYLE }; struct _pw3270ToolBar { GtkToolbar parent; + GtkToolbarStyle style; /// @brief Popup Menu struct { @@ -127,13 +129,39 @@ g_object_class_install_property( object_class, PROP_ACTION_NAMES, - g_param_spec_string ("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) ); + g_object_class_install_property( + object_class, + PROP_ICON_SIZE, + g_param_spec_int( + "icon-size", + "icon-size", + _("The toolbar icon size"), + INT_MIN, + INT_MAX, + 0, + G_PARAM_READABLE|G_PARAM_WRITABLE) + ); + + g_object_class_install_property( + object_class, + PROP_STYLE, + g_param_spec_int( + "style", + "style", + _("The toolbar style"), + INT_MIN, + INT_MAX, + 0, + G_PARAM_READABLE|G_PARAM_WRITABLE) + ); } @@ -144,6 +172,14 @@ g_value_take_string(value,pw3270_toolbar_get_actions(GTK_WIDGET(object))); break; + case PROP_ICON_SIZE: + g_value_set_int(value,pw3270_toolbar_get_icon_size(GTK_TOOLBAR(object))); + break; + + case PROP_STYLE: + g_value_set_int(value,pw3270_toolbar_get_style(GTK_TOOLBAR(object))); + break; + default: g_assert_not_reached (); } @@ -158,6 +194,14 @@ pw3270_toolbar_set_actions(GTK_WIDGET(object), g_value_get_string(value)); break; + case PROP_ICON_SIZE: + pw3270_toolbar_set_icon_size(GTK_TOOLBAR(object),(GtkIconSize) g_value_get_int(value)); + break; + + case PROP_STYLE: + pw3270_toolbar_set_style(GTK_TOOLBAR(object),(GtkToolbarStyle) g_value_get_int(value)); + break; + default: g_assert_not_reached (); } @@ -185,7 +229,7 @@ if(gtk_check_menu_item_get_active(menuitem)) { struct style * style = g_object_get_data(G_OBJECT(menuitem),"toolbar_style"); - pw3270_toolbar_toolbar_set_style(GTK_TOOLBAR(toolbar), style->style); + pw3270_toolbar_set_style(GTK_TOOLBAR(toolbar), style->style); } } @@ -247,13 +291,15 @@ gtk_widget_show_all(widget->popup.menu); gtk_menu_attach_to_widget(GTK_MENU(widget->popup.menu),GTK_WIDGET(widget),detacher); + /* // Bind settings GSettings *settings = pw3270_application_get_settings(g_application_get_default()); if(settings) { - pw3270_toolbar_toolbar_set_style(GTK_TOOLBAR(widget),g_settings_get_int(settings,"toolbar-style")); - pw3270_toolbar_set_icon_size(GTK_TOOLBAR(widget),g_settings_get_int(settings,"toolbar-icon-size")); +// pw3270_toolbar_set_style(GTK_TOOLBAR(widget),g_settings_get_int(settings,"toolbar-style")); +// pw3270_toolbar_set_icon_size(GTK_TOOLBAR(widget),g_settings_get_int(settings,"toolbar-icon-size")); } + */ } @@ -284,18 +330,17 @@ } - void pw3270_toolbar_toolbar_set_style(GtkToolbar *toolbar, GtkToolbarStyle style) { + void pw3270_toolbar_set_style(GtkToolbar *toolbar, GtkToolbarStyle style) { debug("%s(%d)",__FUNCTION__,(int) style); + PW3270_TOOLBAR(toolbar)->style = style; + if(style == GTK_TOOLBAR_DEFAULT_STYLE) gtk_toolbar_unset_style(GTK_TOOLBAR(toolbar)); else gtk_toolbar_set_style(GTK_TOOLBAR(toolbar),style); - // Store value - pw3270_settings_set_int("toolbar-style",(int) style); - // Update menu pw3270ToolBar * tb = PW3270_TOOLBAR(toolbar); if(tb && tb->popup.menu) { @@ -309,6 +354,15 @@ } } + // Store value +// pw3270_settings_set_int("toolbar-style",(int) style); + + g_object_notify(G_OBJECT(toolbar), "style"); + + } + + GtkToolbarStyle pw3270_toolbar_get_style(GtkToolbar *toolbar) { + return PW3270_TOOLBAR(toolbar)->style; } void pw3270_toolbar_set_icon_size(GtkToolbar *toolbar, GtkIconSize icon_size) { @@ -320,9 +374,6 @@ else gtk_toolbar_set_icon_size(GTK_TOOLBAR(toolbar),icon_size); - // Store value - pw3270_settings_set_int("toolbar-icon-size", (gint) icon_size); - // Update menu pw3270ToolBar * tb = PW3270_TOOLBAR(toolbar); if(tb && tb->popup.menu) { @@ -336,8 +387,26 @@ } } - // gtk_container_foreach(GTK_CONTAINER(toolbar),(GtkCallback) update_child, toolbar); + // Store value +// pw3270_settings_set_int("toolbar-icon-size", (gint) icon_size); + g_object_notify(G_OBJECT(toolbar), "icon-size"); + + } + + GtkIconSize pw3270_toolbar_get_icon_size(GtkToolbar *toolbar) { + + GValue value = G_VALUE_INIT; + g_value_init(&value, G_TYPE_BOOLEAN); + g_object_get_property(G_OBJECT(toolbar),"icon-size-set",&value); + + gboolean is_set = g_value_get_boolean(&value); + + g_value_unset(&value); + + if(is_set) + return gtk_toolbar_get_icon_size(GTK_TOOLBAR(toolbar)); + return GTK_ICON_SIZE_INVALID; } void pw3270_toolbar_set_actions(GtkWidget *toolbar, const gchar *action_names) { diff --git a/src/objects/window/tools.c b/src/objects/window/tools.c index 1c4e074..2645551 100644 --- a/src/objects/window/tools.c +++ b/src/objects/window/tools.c @@ -44,6 +44,7 @@ } */ +/* gboolean pw3270_settings_set_int(const gchar *key, gint value) { GSettings * settings = pw3270_application_get_settings(g_application_get_default()); @@ -51,4 +52,4 @@ return g_settings_set_int(settings,key,value); return FALSE; } - +*/ diff --git a/src/objects/window/window.c b/src/objects/window/window.c index c9f6c24..f16bdeb 100644 --- a/src/objects/window/window.c +++ b/src/objects/window/window.c @@ -298,6 +298,22 @@ G_SETTINGS_BIND_DEFAULT ); + g_settings_bind( + settings, + "toolbar-style", + window->toolbar, + "style", + G_SETTINGS_BIND_DEFAULT + ); + + g_settings_bind( + settings, + "toolbar-icon-size", + window->toolbar, + "icon-size", + 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