Commit 5e08cc14e6c7e9e41cf6fb51768096f2fc555021

Authored by Perry Werneck
1 parent da55a192

Fixing toolbar settings.

src/include/pw3270/toolbar.h
... ... @@ -61,7 +61,10 @@
61 61 GtkWidget * pw3270_toolbar_insert_action_by_name(GtkWidget *toolbar, const gchar *name, gint pos);
62 62  
63 63 void pw3270_toolbar_toolbar_set_style(GtkToolbar *toolbar, GtkToolbarStyle style);
  64 +// GtkToolbarStyle pw3270_toolbar_toolbar_get_style(GtkToolbar *toolbar);
  65 +
64 66 void pw3270_toolbar_set_icon_size(GtkToolbar *toolbar, GtkIconSize icon_size);
  67 +// GtkIconSize pw3270_toolbar_get_icon_size(GtkToolbar *toolbar);
65 68  
66 69 G_END_DECLS
67 70  
... ...
src/objects/toolbar/actions.c
... ... @@ -48,10 +48,12 @@
48 48 debug("%s - %s",icon_name,pw3270_action_get_label(action));
49 49  
50 50 GtkToolItem * item = gtk_tool_button_new(
51   - gtk_image_new_from_icon_name(icon_name,GTK_ICON_SIZE_LARGE_TOOLBAR),
  51 + NULL,
52 52 pw3270_action_get_label(action)
53 53 );
54 54  
  55 + gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(item),icon_name);
  56 +
55 57 const gchar * tooltip = pw3270_action_get_tooltip(action);
56 58 if(tooltip)
57 59 gtk_widget_set_tooltip_markup(GTK_WIDGET(item),tooltip);
... ...
src/objects/toolbar/toolbar.c
... ... @@ -89,7 +89,11 @@
89 89 GtkToolbar parent;
90 90  
91 91 /// @brief Popup Menu
92   - GtkWidget * popup_menu;
  92 + struct {
  93 + GtkWidget * menu;
  94 + GtkWidget * styles[G_N_ELEMENTS(styles)];
  95 + GtkWidget * icon_sizes[G_N_ELEMENTS(icon_sizes)];
  96 + } popup;
93 97  
94 98 };
95 99  
... ... @@ -115,47 +119,49 @@
115 119 static void detacher(GtkWidget *attach_widget, GtkMenu G_GNUC_UNUSED(*menu)) {
116 120  
117 121 pw3270ToolBar * toolbar = PW3270_TOOLBAR(attach_widget);
118   - toolbar->popup_menu = NULL;
  122 + toolbar->popup.menu = NULL;
119 123  
120 124 }
121 125  
122   - static void set_icon_size(GtkMenuItem *menuitem, GtkWidget *toolbar) {
  126 + static void set_icon_size(GtkCheckMenuItem *menuitem, GtkWidget *toolbar) {
123 127  
124   - const struct icon_size * size = g_object_get_data(G_OBJECT(menuitem),"icon_size");
125   -
126   - debug("%s(%d,%s)",__FUNCTION__,(int) size->icon_size, size->label);
127   - pw3270_toolbar_set_icon_size(GTK_TOOLBAR(toolbar), size->icon_size);
  128 + if(gtk_check_menu_item_get_active(menuitem)) {
  129 + const struct icon_size * size = g_object_get_data(G_OBJECT(menuitem),"icon_size");
  130 + pw3270_toolbar_set_icon_size(GTK_TOOLBAR(toolbar), size->icon_size);
  131 + }
128 132  
129 133 }
130 134  
131   - static void set_style(GtkMenuItem *menuitem, GtkWidget *toolbar) {
132   - struct toolbar_style * style = g_object_get_data(G_OBJECT(menuitem),"toolbar_style");
  135 + static void set_style(GtkCheckMenuItem *menuitem, GtkWidget *toolbar) {
133 136  
134   - debug("%s(%d,%s)",__FUNCTION__,(int) style->style, style->label);
135   - pw3270_toolbar_toolbar_set_style(GTK_TOOLBAR(toolbar), style->style);
  137 + if(gtk_check_menu_item_get_active(menuitem)) {
  138 + struct toolbar_style * style = g_object_get_data(G_OBJECT(menuitem),"toolbar_style");
  139 + pw3270_toolbar_toolbar_set_style(GTK_TOOLBAR(toolbar), style->style);
  140 + }
136 141  
137 142 }
138 143  
139 144 static void pw3270ToolBar_init(pw3270ToolBar *widget) {
140 145  
141   - widget->popup_menu = gtk_menu_new();
  146 + widget->popup.menu = gtk_menu_new();
142 147  
143 148 // Size options
144 149 {
145 150 size_t ix;
146 151  
147 152 GtkWidget * item = gtk_menu_item_new_with_mnemonic( _("Icon _size") );
148   - gtk_menu_shell_append(GTK_MENU_SHELL(widget->popup_menu),item);
  153 + gtk_menu_shell_append(GTK_MENU_SHELL(widget->popup.menu),item);
149 154  
150 155 GtkWidget * submenu = gtk_menu_new();
151 156 gtk_menu_item_set_submenu(GTK_MENU_ITEM(item),submenu);
152 157  
153 158 for(ix = 0; ix < G_N_ELEMENTS(icon_sizes); ix++) {
154 159  
155   - item = gtk_menu_item_new_with_mnemonic(gettext(icon_sizes[ix].label));
  160 + widget->popup.icon_sizes[ix] = item = gtk_check_menu_item_new_with_mnemonic(gettext(icon_sizes[ix].label));
  161 + gtk_check_menu_item_set_draw_as_radio(GTK_CHECK_MENU_ITEM(item),TRUE);
156 162  
157 163 g_object_set_data(G_OBJECT(item),"icon_size", (gpointer) &icon_sizes[ix]);
158   - g_signal_connect(item, "activate", G_CALLBACK(set_icon_size), widget);
  164 + g_signal_connect(item, "toggled", G_CALLBACK(set_icon_size), widget);
159 165  
160 166 gtk_menu_shell_append(GTK_MENU_SHELL(submenu),item);
161 167  
... ... @@ -168,17 +174,18 @@
168 174 size_t ix;
169 175  
170 176 GtkWidget * item = gtk_menu_item_new_with_mnemonic( _("S_tyle") );
171   - gtk_menu_shell_append(GTK_MENU_SHELL(widget->popup_menu),item);
  177 + gtk_menu_shell_append(GTK_MENU_SHELL(widget->popup.menu),item);
172 178  
173 179 GtkWidget * submenu = gtk_menu_new();
174 180 gtk_menu_item_set_submenu(GTK_MENU_ITEM(item),submenu);
175 181  
176 182 for(ix = 0; ix < G_N_ELEMENTS(styles); ix++) {
177 183  
178   - item = gtk_menu_item_new_with_mnemonic(gettext(styles[ix].label));
  184 + widget->popup.styles[ix] = item = gtk_check_menu_item_new_with_mnemonic(gettext(styles[ix].label));
  185 + gtk_check_menu_item_set_draw_as_radio(GTK_CHECK_MENU_ITEM(item),TRUE);
179 186  
180 187 g_object_set_data(G_OBJECT(item),"toolbar_style", (gpointer) &styles[ix]);
181   - g_signal_connect(item, "activate", G_CALLBACK(set_style), widget);
  188 + g_signal_connect(item, "toggled", G_CALLBACK(set_style), widget);
182 189  
183 190 gtk_menu_shell_append(GTK_MENU_SHELL(submenu),item);
184 191  
... ... @@ -186,9 +193,10 @@
186 193  
187 194 }
188 195  
  196 +
189 197 // gtk_container_set_border_width(GTK_CONTAINER(widget->popup_menu),6);
190   - gtk_widget_show_all(widget->popup_menu);
191   - gtk_menu_attach_to_widget(GTK_MENU(widget->popup_menu),GTK_WIDGET(widget),detacher);
  198 + gtk_widget_show_all(widget->popup.menu);
  199 + gtk_menu_attach_to_widget(GTK_MENU(widget->popup.menu),GTK_WIDGET(widget),detacher);
192 200  
193 201 // Bind settings
194 202 GSettings *settings = pw3270_application_get_settings(g_application_get_default());
... ... @@ -253,8 +261,8 @@
253 261  
254 262 debug("%s button_number=%d",__FUNCTION__,button_number);
255 263  
256   - if(toolbar->popup_menu) {
257   - gtk_menu_popup_at_pointer(GTK_MENU(toolbar->popup_menu),NULL);
  264 + if(toolbar->popup.menu) {
  265 + gtk_menu_popup_at_pointer(GTK_MENU(toolbar->popup.menu),NULL);
258 266 }
259 267  
260 268 return TRUE;
... ... @@ -270,10 +278,35 @@
270 278 else
271 279 gtk_toolbar_set_style(GTK_TOOLBAR(toolbar),style);
272 280  
  281 + // Store value
273 282 pw3270_settings_set_int("toolbar-style",(int) style);
274 283  
  284 + // Update menu
  285 + pw3270ToolBar * tb = PW3270_TOOLBAR(toolbar);
  286 + if(tb && tb->popup.menu) {
  287 + size_t ix;
  288 + for(ix = 0; ix < G_N_ELEMENTS(styles); ix++) {
  289 +
  290 + gtk_check_menu_item_set_active(
  291 + GTK_CHECK_MENU_ITEM(tb->popup.styles[ix]),
  292 + styles[ix].style == style
  293 + );
  294 + }
  295 + }
  296 +
275 297 }
276 298  
  299 + /*
  300 + static void update_child(GtkToolButton *item, GtkWidget *toolbar) {
  301 +
  302 + if(!GTK_IS_TOOL_BUTTON(item))
  303 + return;
  304 +
  305 + debug("[%s]", gtk_tool_button_get_icon_name(item));
  306 +
  307 + }
  308 + */
  309 +
277 310 void pw3270_toolbar_set_icon_size(GtkToolbar *toolbar, GtkIconSize icon_size) {
278 311  
279 312 debug("%s(%d)",__FUNCTION__,(int) icon_size);
... ... @@ -283,6 +316,22 @@
283 316 else
284 317 gtk_toolbar_set_icon_size(GTK_TOOLBAR(toolbar),icon_size);
285 318  
  319 + // Store value
286 320 pw3270_settings_set_int("toolbar-icon-size", (gint) icon_size);
287 321  
  322 + // Update menu
  323 + pw3270ToolBar * tb = PW3270_TOOLBAR(toolbar);
  324 + if(tb && tb->popup.menu) {
  325 + size_t ix;
  326 + for(ix = 0; ix < G_N_ELEMENTS(icon_sizes); ix++) {
  327 +
  328 + gtk_check_menu_item_set_active(
  329 + GTK_CHECK_MENU_ITEM(tb->popup.icon_sizes[ix]),
  330 + icon_sizes[ix].icon_size == icon_size
  331 + );
  332 + }
  333 + }
  334 +
  335 + // gtk_container_foreach(GTK_CONTAINER(toolbar),(GtkCallback) update_child, toolbar);
  336 +
288 337 }
... ...