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