From 825ada0c63edf09cd9c773518a35cec0db9da81d Mon Sep 17 00:00:00 2001 From: Perry Werneck Date: Sat, 19 Sep 2020 11:12:19 -0300 Subject: [PATCH] Implementing use of symbolic icons in toolbar. --- schemas/linux/window.gschema.xml.in | 8 ++++---- schemas/windows/window.gschema.xml.in | 8 ++++---- src/include/pw3270/actions.h | 2 +- src/include/pw3270/toolbar.h | 2 ++ src/objects/actions/button.c | 10 +++++++--- src/objects/toolbar/actions.c | 7 +++++-- src/objects/toolbar/private.h | 3 +++ src/objects/toolbar/toolbar.c | 45 ++++++++++++++++++++++++++++++++++++++------- src/objects/window/window.c | 9 +++++++++ 9 files changed, 73 insertions(+), 21 deletions(-) diff --git a/schemas/linux/window.gschema.xml.in b/schemas/linux/window.gschema.xml.in index 4787d6a..262bc50 100644 --- a/schemas/linux/window.gschema.xml.in +++ b/schemas/linux/window.gschema.xml.in @@ -86,14 +86,14 @@ - - false + + 0 Use symbolic icons on toolbar - - false + + 0 Use symbolic icons on title bar diff --git a/schemas/windows/window.gschema.xml.in b/schemas/windows/window.gschema.xml.in index 4d8cc5f..b22edd1 100644 --- a/schemas/windows/window.gschema.xml.in +++ b/schemas/windows/window.gschema.xml.in @@ -86,14 +86,14 @@ - - false + + 0 Use symbolic icons on toolbar - - false + + 0 Use symbolic icons on title bar diff --git a/src/include/pw3270/actions.h b/src/include/pw3270/actions.h index 0c29b0e..3b78e71 100644 --- a/src/include/pw3270/actions.h +++ b/src/include/pw3270/actions.h @@ -121,7 +121,7 @@ GdkPixbuf * g_action_get_pixbuf(GAction *action, GtkIconSize icon_size, GtkIconLookupFlags flags); GtkWidget * gtk_button_new_from_action(GAction *action, GtkIconSize icon_size); - GtkToolItem * gtk_tool_button_new_from_action(GAction *action, GtkIconSize icon_size); + GtkToolItem * gtk_tool_button_new_from_action(GAction *action, GtkIconSize icon_size, gboolean symbolic); G_END_DECLS diff --git a/src/include/pw3270/toolbar.h b/src/include/pw3270/toolbar.h index ec78991..7d1d8a8 100644 --- a/src/include/pw3270/toolbar.h +++ b/src/include/pw3270/toolbar.h @@ -66,9 +66,11 @@ void pw3270_toolbar_set_style(GtkToolbar *toolbar, GtkToolbarStyle style); void pw3270_toolbar_set_icon_size(GtkToolbar *toolbar, GtkIconSize icon_size); + void pw3270_toolbar_set_icon_type(GtkToolbar *toolbar, gint icon_type); GtkToolbarStyle pw3270_toolbar_get_style(GtkToolbar *toolbar); GtkIconSize pw3270_toolbar_get_icon_size(GtkToolbar *toolbar); + gint pw3270_toolbar_get_icon_type(GtkToolbar *toolbar); G_END_DECLS diff --git a/src/objects/actions/button.c b/src/objects/actions/button.c index 5a9b6fa..e692826 100644 --- a/src/objects/actions/button.c +++ b/src/objects/actions/button.c @@ -62,7 +62,7 @@ return NULL; } - GtkToolItem * gtk_tool_button_new_from_action(GAction *action, GtkIconSize icon_size) { + GtkToolItem * gtk_tool_button_new_from_action(GAction *action, GtkIconSize icon_size, gboolean symbolic) { if(!action) return NULL; @@ -75,14 +75,18 @@ } g_autofree gchar * icon_name = g_action_get_icon_name(action); -// debug("%s(%s).icon_name=%s",__FUNCTION__,g_action_get_name(action),icon_name); if(icon_name) { // Has icon name GtkToolItem * item = gtk_tool_button_new(NULL,label); - gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(item),icon_name); + if(symbolic && !strstr(icon_name,"-symbolic")) { + g_autofree gchar * symbolic_name = g_strconcat(icon_name,"-symbolic",NULL); + gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(item),symbolic_name); + } else { + gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(item),icon_name); + } if(tooltip) gtk_widget_set_tooltip_markup(GTK_WIDGET(item),tooltip); diff --git a/src/objects/toolbar/actions.c b/src/objects/toolbar/actions.c index 1515023..0552858 100644 --- a/src/objects/toolbar/actions.c +++ b/src/objects/toolbar/actions.c @@ -68,7 +68,6 @@ if(ptr) { action = g_action_map_lookup_action(G_ACTION_MAP(window), ptr+1); - debug("action(%s)=%p",ptr+1,action); } } @@ -77,7 +76,11 @@ if(action) { debug("Creating button \"%s\" from action \"%s\"",name,g_action_get_name(G_ACTION(action))); - item = gtk_tool_button_new_from_action(action,GTK_ICON_SIZE_LARGE_TOOLBAR); + item = gtk_tool_button_new_from_action( + action, + GTK_ICON_SIZE_LARGE_TOOLBAR, + pw3270_toolbar_get_icon_type(GTK_TOOLBAR(toolbar)) == 1 + ); } if(item) { diff --git a/src/objects/toolbar/private.h b/src/objects/toolbar/private.h index 804d8c2..d933a9a 100644 --- a/src/objects/toolbar/private.h +++ b/src/objects/toolbar/private.h @@ -37,6 +37,9 @@ #define GETTEXT_PACKAGE PACKAGE_NAME #endif + /* not really I18N-related, but also a string marker macro */ + #define I_(string) g_intern_static_string (string) + #include #include #include diff --git a/src/objects/toolbar/toolbar.c b/src/objects/toolbar/toolbar.c index 861f16f..779bd68 100644 --- a/src/objects/toolbar/toolbar.c +++ b/src/objects/toolbar/toolbar.c @@ -90,12 +90,14 @@ PROP_NONE, PROP_ACTION_NAMES, PROP_ICON_SIZE, + PROP_ICON_TYPE, PROP_STYLE }; struct _pw3270ToolBar { GtkToolbar parent; GtkToolbarStyle style; + int icon_type; /// @brief Popup Menu struct { @@ -131,9 +133,9 @@ object_class, PROP_ACTION_NAMES, g_param_spec_string ( - "action-names", - N_("Action Names"), - N_("The name of the actions in the toolbar"), + I_("action-names"), + "Action Names", + _("The name of the actions in the toolbar"), NULL, G_PARAM_READABLE|G_PARAM_WRITABLE) ); @@ -142,8 +144,8 @@ object_class, PROP_ICON_SIZE, g_param_spec_int( - "icon-size", - "icon-size", + I_("icon-size"), + "icon size", _("The toolbar icon size"), INT_MIN, INT_MAX, @@ -155,7 +157,7 @@ object_class, PROP_STYLE, g_param_spec_int( - "style", + I_("style"), "style", _("The toolbar style"), INT_MIN, @@ -164,6 +166,19 @@ G_PARAM_READABLE|G_PARAM_WRITABLE) ); + g_object_class_install_property( + object_class, + PROP_ICON_TYPE, + g_param_spec_int( + I_("icon-type"), + I_("icon-type"), + _("The toolbar icon type"), + 0, + 1, + 0, + G_PARAM_READABLE|G_PARAM_WRITABLE) + ); + } void get_property(GObject *object, guint prop_id, GValue *value, GParamSpec G_GNUC_UNUSED(*pspec)) { @@ -181,6 +196,10 @@ g_value_set_int(value,pw3270_toolbar_get_style(GTK_TOOLBAR(object))); break; + case PROP_ICON_TYPE: + g_value_set_int(value,pw3270_toolbar_get_icon_type(GTK_TOOLBAR(object))); + break; + default: g_assert_not_reached (); } @@ -203,13 +222,16 @@ pw3270_toolbar_set_style(GTK_TOOLBAR(object),(GtkToolbarStyle) g_value_get_int(value)); break; + case PROP_ICON_TYPE: + pw3270_toolbar_set_icon_type(GTK_TOOLBAR(object),(GtkToolbarStyle) g_value_get_int(value)); + break; + default: g_assert_not_reached (); } } - static void detacher(GtkWidget *attach_widget, GtkMenu G_GNUC_UNUSED(*menu)) { pw3270ToolBar * toolbar = PW3270_TOOLBAR(attach_widget); @@ -379,6 +401,15 @@ return PW3270_TOOLBAR(toolbar)->style; } + gint pw3270_toolbar_get_icon_type(GtkToolbar *toolbar) { + return PW3270_TOOLBAR(toolbar)->icon_type; + } + + void pw3270_toolbar_set_icon_type(GtkToolbar *toolbar, gint icon_type) { + PW3270_TOOLBAR(toolbar)->icon_type = icon_type; + g_object_notify(G_OBJECT(toolbar), "icon-type"); + } + 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 1822d23..7fa1ffe 100644 --- a/src/objects/window/window.c +++ b/src/objects/window/window.c @@ -284,6 +284,7 @@ } widget->toolbar = GTK_TOOLBAR(pw3270_toolbar_new()); + gtk_box_pack_start(container,GTK_WIDGET(widget->toolbar),FALSE,TRUE,0); // @@ -578,6 +579,14 @@ g_settings_bind( settings, + "toolbar-icon-type", + window->toolbar, + "icon-type", + G_SETTINGS_BIND_DEFAULT + ); + + g_settings_bind( + settings, "toolbar-action-names", window->toolbar, "action-names", -- libgit2 0.21.2