Remove deprecation warnings for the toolbar when using GTK 3. My goal
here is to move off of the deprecated UIManager code on a step-by-step
basis. Just starting this process with the toolbar.
---
gtkgame.h | 6 +
gtktoolbar.c | 443 +++++++++++++++++++++++++++++++++++++++++++++++++--
2 files changed, 436 insertions(+), 13 deletions(-)
diff --git a/gtkgame.h b/gtkgame.h
index f9bf06b8..4c4dce9d 100644
--- a/gtkgame.h
+++ b/gtkgame.h
@@ -165,7 +165,13 @@ extern void DoHideAllPanels(int updateEvents);
#if defined(USE_GTKITEMFACTORY)
extern void ToggleDockPanels(gpointer p, guint n, GtkWidget * pw);
#else
+
+#if GTK_CHECK_VERSION(3, 0, 0)
+extern void ToggleEdit(GtkToggleButton *widget, gpointer user_data);
+#else
extern void ToggleEdit(GtkToggleAction * action, gpointer user_data);
+#endif
+
extern void ToggleClockwise(GtkToggleAction * action, gpointer user_data);
extern void ToggleDockPanels(GtkToggleAction * action, gpointer user_data);
#endif
diff --git a/gtktoolbar.c b/gtktoolbar.c
index 4ce8e260..a63b64fa 100644
--- a/gtktoolbar.c
+++ b/gtktoolbar.c
@@ -64,7 +64,85 @@ typedef struct {
} toolbarwidget;
-#if defined(USE_GTKITEMFACTORY)
+#if GTK_CHECK_VERSION(3, 0, 0)
+static void
+ButtonClicked(GtkWidget * UNUSED(pw), char *sz)
+{
+
+ UserCommand(sz);
+}
+
+static void
+ButtonClickedYesNo(GtkWidget * UNUSED(pw), char *sz)
+{
+
+ if (ms.fResigned) {
+ UserCommand(!strcmp(sz, "yes") ? "accept" : "decline");
+ return;
+ }
+
+ if (ms.fDoubled) {
+ UserCommand(!strcmp(sz, "yes") ? "take" : "drop");
+ return;
+ }
+
+}
+
+void
+toolbar_toggle_set_style(GtkToggleButton *pw, int style)
+{
+ GtkWidget *stack = g_object_get_data(G_OBJECT(pw), "toggle_stack");
+ GtkWidget *lbl = g_object_get_data(G_OBJECT(pw), "toggle_label");
+
+ if (style == 0) {
+ gtk_widget_show(stack);
+ gtk_widget_hide(lbl);
+ } else if (style == 1) {
+ gtk_widget_hide(stack);
+ gtk_widget_show(lbl);
+ } else {
+ gtk_widget_show(stack);
+ gtk_widget_show(lbl);
+ }
+}
+
+static GtkToggleButton *
+toggle_button_from_images(GtkWidget *pwImageOff, GtkWidget *pwImageOn, const
char *label)
+{
+ g_return_val_if_fail(GTK_IS_WIDGET(pwImageOff), NULL);
+ g_return_val_if_fail(GTK_IS_WIDGET(pwImageOn), NULL);
+
+ GtkWidget **aapw = g_malloc(3 * sizeof(GtkWidget *));
+ GtkWidget *pwm = gtk_stack_new(); // Assumed to be your own container
widget
+ GtkToggleButton *pw = gtk_toggle_button_new();
+ GtkWidget *pwvbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
+ GtkWidget *pwlabel = gtk_label_new(label);
+
+ g_object_set_data(G_OBJECT(pw), "toggle_label", pwlabel);
+ g_object_set_data(G_OBJECT(pw), "toggle_stack", pwm);
+
+ // Pack images into the multiview container
+ gtk_stack_add_named(GTK_STACK(pwm), pwImageOff, "off");
+ gtk_stack_add_named(GTK_STACK(pwm), pwImageOn, "on");
+
+ gtk_stack_set_visible_child_name(GTK_STACK(pwm), "off");
+
+ // Compose vbox with image switcher and label
+ gtk_box_pack_start(GTK_BOX(pwvbox), pwm, FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(pwvbox), pwlabel, FALSE, FALSE, 0);
+
+ gtk_container_add(GTK_CONTAINER(pw), pwvbox);
+
+ // Set up toggle image array for later state switching
+ aapw[0] = pwImageOff;
+ aapw[1] = pwImageOn;
+ aapw[2] = pwm;
+
+ g_object_set_data_full(G_OBJECT(pw), "toggle_images", aapw, g_free);
+
+ return pw;
+}
+#elif defined(USE_GTKITEMFACTORY)
static void
ButtonClicked(GtkWidget * UNUSED(pw), char *sz)
{
@@ -156,14 +234,62 @@ ToolbarSetClockwise(GtkWidget * pwToolbar, const int f)
toolbarwidget *ptw = g_object_get_data(G_OBJECT(pwToolbar),
"toolbarwidget");
-#if !defined(USE_GTKITEMFACTORY)
-
gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(ptw->pwButtonClockwise),
f);
+#if GTK_CHECK_VERSION(3, 0, 0) || defined(USE_GTKITEMFACTORY)
+ if (ptw && ptw->pwButtonClockwise)
+
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ptw->pwButtonClockwise), f);
#else
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ptw->pwButtonClockwise), f);
+
gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(ptw->pwButtonClockwise),
f);
#endif
}
-#if !defined(USE_GTKITEMFACTORY)
+#if GTK_CHECK_VERSION(3, 0, 0)
+extern void
+ToggleClockwise(GtkToggleAction * action, gpointer UNUSED(user_data))
+{
+ int f = gtk_toggle_action_get_active(action);
+ toolbarwidget *ptw = g_object_get_data(G_OBJECT(pwToolbar),
"toolbarwidget");
+ GtkWidget *img =
+ gtk_image_new_from_stock(f ? GNUBG_STOCK_CLOCKWISE :
GNUBG_STOCK_ANTI_CLOCKWISE, GTK_ICON_SIZE_SMALL_TOOLBAR);
+ gtk_widget_show(img);
+
+ if (fClockwise != f) {
+ gchar *sz = g_strdup_printf("set clockwise %s", f ? "on" : "off");
+ UserCommand(sz);
+ g_free(sz);
+ UserCommand("save settings");
+ }
+}
+
+static void
+ToolbarToggleClockwise(GtkWidget * pw, toolbarwidget * UNUSED(ptw))
+{
+ GtkWidget **aapw = (GtkWidget **) g_object_get_data(G_OBJECT(pw),
"toggle_images");
+ gboolean f = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(pw));
+
+ // Show the right image
+ if (aapw) {
+ gtk_widget_set_visible(aapw[0], !f); // OFF (anti-clockwise)
+ gtk_widget_set_visible(aapw[1], f); // ON (clockwise)
+ }
+
+ inCallback = TRUE;
+
+ GtkWidget *menu_item = gtk_ui_manager_get_widget(puim,
"/MainMenu/ViewMenu/PlayClockwise");
+ if (GTK_IS_CHECK_MENU_ITEM(menu_item))
+ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu_item), f);
+
+ inCallback = FALSE;
+
+ if (fClockwise != f) {
+ gchar *sz = g_strdup_printf("set clockwise %s", f ? "on" : "off");
+ UserCommand(sz);
+ g_free(sz);
+ UserCommand("save settings");
+ }
+
+ fClockwise = f; // <- be sure to store the new state
+}
+#elif !defined(USE_GTKITEMFACTORY)
extern void
ToggleClockwise(GtkToggleAction * action, gpointer UNUSED(user_data))
{
@@ -230,7 +356,54 @@ click_edit(void)
}
}
-#if !defined(USE_GTKITEMFACTORY)
+#if GTK_CHECK_VERSION(3, 0, 0)
+extern void
+ToggleEdit(GtkToggleButton *widget, gpointer UNUSED(user_data))
+{
+ BoardData *pbd = BOARD(pwBoard)->board_data;
+ gboolean active = FALSE;
+
+ if (GTK_IS_TOGGLE_BUTTON(widget))
+ active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
+ else if (GTK_IS_CHECK_MENU_ITEM(widget))
+ active = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget));
+
+ if (active) {
+ if (ms.gs == GAME_NONE)
+ edit_new(nDefaultLength);
+ GTKUndo();
+ editing = TRUE;
+ } else {
+ editing = FALSE;
+ }
+
+ board_edit(pbd);
+}
+static void
+ToolbarToggleEdit(GtkWidget *pw)
+{
+ BoardData *pbd = BOARD(pwBoard)->board_data;
+
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(pw))) {
+ if (ms.gs == GAME_NONE)
+ edit_new(nDefaultLength);
+ GTKUndo();
+ editing = TRUE;
+ } else {
+ editing = FALSE;
+ }
+
+ inCallback = TRUE;
+
+ GtkWidget *menu_item = gtk_ui_manager_get_widget(puim,
"/MainMenu/EditMenu/EditPosition");
+ if (GTK_IS_CHECK_MENU_ITEM(menu_item))
+ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu_item),
editing);
+
+ inCallback = FALSE;
+
+ board_edit(pbd);
+}
+#elif !defined(USE_GTKITEMFACTORY)
extern void
ToggleEdit(GtkToggleAction * action, gpointer UNUSED(user_data))
{
@@ -239,7 +412,7 @@ ToggleEdit(GtkToggleAction * action, gpointer
UNUSED(user_data))
if (gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(action))) {
if (ms.gs == GAME_NONE)
edit_new(nDefaultLength);
- /* Undo any partial move that may have been made when
+ /* Undo any partial move that may have been made when
* entering edit mode, should be done before editing is true */
GTKUndo();
editing = TRUE;
@@ -257,7 +430,7 @@ ToolbarToggleEdit(GtkWidget * pw)
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(pw))) {
if (ms.gs == GAME_NONE)
edit_new(nDefaultLength);
- /* Undo any partial move that may have been made when
+ /* Undo any partial move that may have been made when
* entering edit mode, should be done before editing is true */
GTKUndo();
editing = TRUE;
@@ -335,7 +508,61 @@ ToolbarUpdate(GtkWidget * pwToolbar,
return c;
}
-#if defined(USE_GTKITEMFACTORY)
+#if GTK_CHECK_VERSION(3, 0, 0)
+static GtkWidget *
+ToolbarAddButton(GtkToolbar *pwToolbar, const char *icon_name, const char
*label, const char *tooltip,
+ GCallback callback, void *data)
+{
+ GtkToolItem *btn = gtk_tool_button_new(NULL, label);
+ g_object_set_data(G_OBJECT(btn), "stored_label", (gpointer)label);
+ g_object_set_data(G_OBJECT(btn), "stored_icon", (gpointer)icon_name);
+
+
+ if (!GTK_IS_TOOL_BUTTON(btn)) {
+ g_warning("Failed to create GtkToolButton");
+ return NULL;
+ }
+
+ if (icon_name)
+ gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(btn), icon_name);
+
+ gtk_tool_item_set_is_important(btn, TRUE);
+
+ gtk_widget_set_tooltip_text(GTK_WIDGET(btn), tooltip);
+ gtk_toolbar_insert(GTK_TOOLBAR(pwToolbar), btn, -1);
+
+ if (callback)
+ g_signal_connect(G_OBJECT(btn), "clicked", callback, data);
+
+ return GTK_WIDGET(btn);
+}
+
+static GtkWidget *
+ToolbarAddWidget(GtkToolbar *pwToolbar, GtkWidget *pWidget, const char
*tooltip)
+{
+ if (!GTK_IS_WIDGET(pWidget)) {
+ g_warning("Invalid widget passed to ToolbarAddWidget");
+ return NULL;
+ }
+
+ GtkToolItem *tool_item = gtk_tool_item_new();
+ gtk_container_add(GTK_CONTAINER(tool_item), pWidget);
+ gtk_widget_set_tooltip_text(pWidget, tooltip);
+ gtk_toolbar_insert(pwToolbar, tool_item, -1);
+
+ return GTK_WIDGET(tool_item);
+}
+
+static void
+ToolbarAddSeparator(GtkToolbar * pwToolbar)
+{
+ GtkToolItem *sep = gtk_separator_tool_item_new();
+ gtk_separator_tool_item_set_draw(GTK_SEPARATOR_TOOL_ITEM(sep), TRUE);
+ gtk_tool_item_set_expand(sep, FALSE);
+ gtk_toolbar_insert(GTK_TOOLBAR(pwToolbar), sep, -1);
+ gtk_widget_show(GTK_WIDGET(sep));
+}
+#elif defined(USE_GTKITEMFACTORY)
static GtkWidget *
ToolbarAddButton(GtkToolbar * pwToolbar, const char *stockID, const char
*label, const char *tooltip,
GCallback callback, void *data)
@@ -374,7 +601,135 @@ ToolbarAddSeparator(GtkToolbar * pwToolbar)
extern GtkWidget *
ToolbarNew(void)
{
-#if !defined(USE_GTKITEMFACTORY)
+#if GTK_CHECK_VERSION(3, 0, 0)
+ GtkWidget *vbox_toolbar;
+ GtkToolItem *ti;
+ GtkWidget *pwtb, *pwvbox;
+ toolbarwidget *ptw = g_malloc(sizeof(toolbarwidget));
+
+ vbox_toolbar = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
+ g_object_set_data_full(G_OBJECT(vbox_toolbar), "toolbarwidget", ptw,
g_free);
+
+ pwtb = gtk_toolbar_new();
+ gtk_toolbar_set_icon_size(GTK_TOOLBAR(pwtb), GTK_ICON_SIZE_LARGE_TOOLBAR);
+
+ g_object_set(gtk_settings_get_default(), "gtk-toolbar-style",
GTK_TOOLBAR_BOTH, NULL);
+ gtk_box_pack_start(GTK_BOX(vbox_toolbar), pwtb, FALSE, FALSE, 0);
+
+ GtkIconTheme *theme = gtk_icon_theme_get_default();
+ gtk_icon_theme_add_resource_path(theme, "/pixmaps/24x24/actions");
+
+ ptw->pwNew = ToolbarAddButton(GTK_TOOLBAR(pwtb), "document-new", _("New"),
+ _("Start new game, match, session or
position"),
+ G_CALLBACK(GTKNew), NULL);
+
+ ptw->pwOpen = ToolbarAddButton(GTK_TOOLBAR(pwtb), "document-open",
_("Open"),
+ _("Open game, match, session or position"),
+ G_CALLBACK(GTKOpen), NULL);
+
+ ptw->pwSave = ToolbarAddButton(GTK_TOOLBAR(pwtb), "document-save",
_("Save"),
+ _("Save match, session, game or position"),
+ G_CALLBACK(GTKSave), NULL);
+
+ ToolbarAddSeparator(GTK_TOOLBAR(pwtb));
+
+ ptw->pwTake = ToolbarAddButton(GTK_TOOLBAR(pwtb), "ok_24", _("Accept"),
+ _("Take the offered cube or accept the
offered resignation"),
+ G_CALLBACK(ButtonClickedYesNo), "yes");
+
+ ptw->pwDrop = ToolbarAddButton(GTK_TOOLBAR(pwtb), "cancel_24", _("Reject"),
+ _("Drop the offered cube or decline the
offered resignation"),
+ G_CALLBACK(ButtonClickedYesNo), "no");
+
+ ptw->pwDouble = ToolbarAddButton(GTK_TOOLBAR(pwtb), "double_24",
_("Double"),
+ _("Double or redouble(beaver)"),
+ G_CALLBACK(ButtonClicked), "double");
+
+ ptw->pwResign = ToolbarAddButton(GTK_TOOLBAR(pwtb), "resign_24",
_("Resign"),
+ _("Resign the current game"),
+ G_CALLBACK(GTKResign), NULL);
+
+ ptw->pwEndGame = ToolbarAddButton(GTK_TOOLBAR(pwtb), "runit_24", _("End
Game"),
+ _("Let the computer end the game"),
+ G_CALLBACK(ButtonClicked), "end game");
+ gtk_tool_item_set_homogeneous(GTK_TOOL_ITEM(ptw->pwEndGame), FALSE);
+
+ ToolbarAddSeparator(GTK_TOOLBAR(pwtb));
+
+ ptw->pwReset = ToolbarAddButton(GTK_TOOLBAR(pwtb), "edit-undo", _("Undo"),
+ _("Undo moves"), G_CALLBACK(GTKUndo),
NULL);
+
+ ptw->pwHint = ToolbarAddButton(GTK_TOOLBAR(pwtb), "hint_24", _("Hint"),
+ _("Show the best moves or cube action"),
+ G_CALLBACK(ButtonClicked), "hint");
+
+ ptw->pwEdit =
+
toggle_button_from_images(gtk_image_new_from_icon_name("document-edit",
GTK_ICON_SIZE_LARGE_TOOLBAR),
+
gtk_image_new_from_icon_name("document-edit", GTK_ICON_SIZE_LARGE_TOOLBAR),
+ _("Edit"));
+ g_signal_connect(G_OBJECT(ptw->pwEdit), "toggled",
G_CALLBACK(ToolbarToggleEdit), NULL);
+ ti = GTK_TOOL_ITEM(ToolbarAddWidget(GTK_TOOLBAR(pwtb), ptw->pwEdit,
_("Toggle Edit Mode")));
+
+ ptw->pwButtonClockwise =
+ toggle_button_from_images(
+ gtk_image_new_from_icon_name("anti_clockwise_24",
GTK_ICON_SIZE_LARGE_TOOLBAR),
+ gtk_image_new_from_icon_name("clockwise_24",
GTK_ICON_SIZE_LARGE_TOOLBAR),
+ _("Direction"));
+ g_signal_connect(G_OBJECT(ptw->pwButtonClockwise), "toggled",
+ G_CALLBACK(ToolbarToggleClockwise), ptw);
+ ToolbarAddWidget(GTK_TOOLBAR(pwtb), ptw->pwButtonClockwise, _("Reverse
direction of play"));
+
+ ToolbarAddSeparator(GTK_TOOLBAR(pwtb));
+
+ ptw->pwAnalyzeCurrent = ToolbarAddButton(GTK_TOOLBAR(pwtb), "system-run",
_("Analyse"),
+ _("Analyse current match (set default behaviour in Settings ->
Analysis)"),
+ G_CALLBACK(GTKAnalyzeCurrent), NULL);
+
+ ptw->pwAnalyzeFile = ToolbarAddButton(GTK_TOOLBAR(pwtb), "folder",
_("Analyse File"),
+ _("Analyze match from file (set default behaviour in Settings ->
Analysis -> Analysis Buttons)"),
+ G_CALLBACK(GTKAnalyzeFile), NULL);
+
+ ti = gtk_separator_tool_item_new();
+ gtk_tool_item_set_expand(GTK_TOOL_ITEM(ti), TRUE);
+ gtk_separator_tool_item_set_draw(GTK_SEPARATOR_TOOL_ITEM(ti), FALSE);
+ gtk_toolbar_insert(GTK_TOOLBAR(pwtb), ti, -1);
+
+ ptw->pwPrevCMarked = ToolbarAddButton(GTK_TOOLBAR(pwtb),
"go_prev_marked_24", "", _("Go to Previous Marked"),
+ G_CALLBACK(ButtonClicked), "previous
marked");
+ gtk_tool_item_set_homogeneous(GTK_TOOL_ITEM(ptw->pwPrevCMarked), FALSE);
+ ptw->pwPrevMarked = ToolbarAddButton(GTK_TOOLBAR(pwtb),
"go_prev_cmarked_24", "", _("Go to Previous CMarked"),
+ G_CALLBACK(ButtonClicked), "previous
cmarked");
+ gtk_tool_item_set_homogeneous(GTK_TOOL_ITEM(ptw->pwPrevMarked), FALSE);
+ ptw->pwPrev = ToolbarAddButton(GTK_TOOLBAR(pwtb), "go_prev_24", "", _("Go
to Previous Roll"),
+ G_CALLBACK(ButtonClicked), "previous roll");
+ gtk_tool_item_set_homogeneous(GTK_TOOL_ITEM(ptw->pwPrev), FALSE);
+ ptw->pwPrevGame = ToolbarAddButton(GTK_TOOLBAR(pwtb), "go_prev_game_24",
"", _("Go to Previous Game"),
+ G_CALLBACK(ButtonClicked), "previous
game");
+ gtk_tool_item_set_homogeneous(GTK_TOOL_ITEM(ptw->pwPrevGame), FALSE);
+ ptw->pwNextGame = ToolbarAddButton(GTK_TOOLBAR(pwtb), "go_next_game_24",
"", _("Go to Next Game"),
+ G_CALLBACK(ButtonClicked), "next game");
+ gtk_tool_item_set_homogeneous(GTK_TOOL_ITEM(ptw->pwNextGame), FALSE);
+ ptw->pwNext = ToolbarAddButton(GTK_TOOLBAR(pwtb), "go_next_24", "", _("Go
to Next Roll"),
+ G_CALLBACK(ButtonClicked), "next roll");
+ gtk_tool_item_set_homogeneous(GTK_TOOL_ITEM(ptw->pwNext), FALSE);
+ ptw->pwNextCMarked = ToolbarAddButton(GTK_TOOLBAR(pwtb),
"go_next_cmarked_24", "", _("Go to Next CMarked"),
+ G_CALLBACK(ButtonClicked), "next
cmarked");
+ gtk_tool_item_set_homogeneous(GTK_TOOL_ITEM(ptw->pwNextCMarked), FALSE);
+ ptw->pwNextMarked = ToolbarAddButton(GTK_TOOLBAR(pwtb),
"go_next_marked_24", "", _("Go to Next Marked"),
+ G_CALLBACK(ButtonClicked), "next
marked");
+ gtk_tool_item_set_homogeneous(GTK_TOOL_ITEM(ptw->pwNextMarked), FALSE);
+
+ g_object_set_data(G_OBJECT(pwtb), "toolbarwidget", ptw);
+ g_object_set_data(G_OBJECT(pwtb), "vbox", vbox_toolbar);
+ g_object_set_data(G_OBJECT(vbox_toolbar), "real_toolbar", pwtb);
+
+ SetToolbarStyle(nToolbarStyle);
+
+ gtk_widget_show(vbox_toolbar);
+ gtk_widget_show(pwtb);
+
+ return vbox_toolbar;
+#elif !defined(USE_GTKITEMFACTORY)
GtkWidget *pwtb;
toolbarwidget *ptw = (toolbarwidget *) g_malloc(sizeof(toolbarwidget));
@@ -448,8 +803,8 @@ ToolbarNew(void)
toolbarwidget *ptw;
- /*
- * Create toolbar
+ /*
+ * Create toolbar
*/
ptw = (toolbarwidget *) g_malloc(sizeof(toolbarwidget));
@@ -541,7 +896,7 @@ ToolbarNew(void)
ToolbarAddWidget(GTK_TOOLBAR(pwtb), ptw->pwButtonClockwise, _("Reverse
direction of play"));
ToolbarAddSeparator(GTK_TOOLBAR(pwtb));
-
+
/* Analyze current match button */
ptw->pwAnalyzeCurrent =
@@ -641,6 +996,67 @@ SetToolbarItemStyle(gpointer data, gpointer user_data)
extern void
SetToolbarStyle(int value)
{
+#if GTK_CHECK_VERSION(3, 0, 0)
+ toolbarwidget *ptw = g_object_get_data(G_OBJECT(pwToolbar),
"toolbarwidget");
+
+ // Update toggle button image manually
+ if (ptw && ptw->pwButtonClockwise) {
+ GtkWidget **aapw = g_object_get_data(G_OBJECT(ptw->pwButtonClockwise),
"toggle_images");
+ if (aapw) {
+ gtk_widget_set_visible(aapw[1], fClockwise); // ON image
+ gtk_widget_set_visible(aapw[0], !fClockwise); // OFF image
+ }
+ }
+
+ GtkWidget *pwtb = g_object_get_data(G_OBJECT(pwToolbar), "real_toolbar");
+ if (!GTK_IS_TOOLBAR(pwtb)) {
+ g_warning("pwToolbar doesn't contain a GtkToolbar!");
+ return;
+ }
+
+ int num = gtk_toolbar_get_n_items(GTK_TOOLBAR(pwtb));
+ for (int i = 0; i < num; ++i) {
+ GtkToolItem *child = gtk_toolbar_get_nth_item(GTK_TOOLBAR(pwtb), i);
+
+ if (GTK_IS_TOOL_BUTTON(child)) {
+ GtkToolButton *btn = GTK_TOOL_BUTTON(child);
+
+ const gchar *label = g_object_get_data(G_OBJECT(btn),
"stored_label");
+ const gchar *icon = g_object_get_data(G_OBJECT(btn),
"stored_icon");
+
+ if (value == 0) {
+ gtk_tool_button_set_label(btn, NULL);
+ gtk_tool_button_set_icon_name(btn, icon);
+ } else if (value == 1) {
+ gtk_tool_button_set_icon_name(btn, NULL);
+ gtk_tool_button_set_label(btn, label);
+ } else if (value == 2) {
+ gtk_tool_button_set_icon_name(btn, icon);
+ gtk_tool_button_set_label(btn, label);
+ }
+
+ gtk_tool_item_set_is_important(GTK_TOOL_ITEM(btn), TRUE);
+ } else if (GTK_IS_TOOL_ITEM(child)) {
+ GtkWidget *custom = gtk_bin_get_child(GTK_BIN(child));
+ if (GTK_IS_TOGGLE_BUTTON(custom)) {
+ toolbar_toggle_set_style(custom, value);
+ }
+ }
+ }
+
+ if (value != nToolbarStyle) {
+ nToolbarStyle = value;
+ UserCommand("save settings");
+ }
+
+
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gtk_ui_manager_get_widget(puim,
"/MainMenu/ViewMenu/ToolBarMenu/IconsOnly")),
+ (value == 0));
+
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gtk_ui_manager_get_widget(puim,
"/MainMenu/ViewMenu/ToolBarMenu/TextOnly")),
+ (value == 1));
+
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gtk_ui_manager_get_widget(puim,
"/MainMenu/ViewMenu/ToolBarMenu/Both")),
+ (value == 2));
+#else
+
#if !defined(USE_GTKITEMFACTORY)
toolbarwidget *ptw = g_object_get_data(G_OBJECT(pwToolbar),
"toolbarwidget");
GtkWidget *img = gtk_image_new_from_stock(fClockwise ?
GNUBG_STOCK_CLOCKWISE : GNUBG_STOCK_ANTI_CLOCKWISE,
@@ -675,4 +1091,5 @@ SetToolbarStyle(int value)
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gtk_ui_manager_get_widget(puim,
"/MainMenu/ViewMenu/ToolBarMenu/TextOnly")), (value == 1));
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gtk_ui_manager_get_widget(puim,
"/MainMenu/ViewMenu/ToolBarMenu/Both")), (value == 2));
#endif
+#endif
}
--
2.43.0