Commit 5e08cc14e6c7e9e41cf6fb51768096f2fc555021

Authored by Perry Werneck
1 parent da55a192

Fixing toolbar settings.

src/include/pw3270/toolbar.h
@@ -61,7 +61,10 @@ @@ -61,7 +61,10 @@
61 GtkWidget * pw3270_toolbar_insert_action_by_name(GtkWidget *toolbar, const gchar *name, gint pos); 61 GtkWidget * pw3270_toolbar_insert_action_by_name(GtkWidget *toolbar, const gchar *name, gint pos);
62 62
63 void pw3270_toolbar_toolbar_set_style(GtkToolbar *toolbar, GtkToolbarStyle style); 63 void pw3270_toolbar_toolbar_set_style(GtkToolbar *toolbar, GtkToolbarStyle style);
  64 +// GtkToolbarStyle pw3270_toolbar_toolbar_get_style(GtkToolbar *toolbar);
  65 +
64 void pw3270_toolbar_set_icon_size(GtkToolbar *toolbar, GtkIconSize icon_size); 66 void pw3270_toolbar_set_icon_size(GtkToolbar *toolbar, GtkIconSize icon_size);
  67 +// GtkIconSize pw3270_toolbar_get_icon_size(GtkToolbar *toolbar);
65 68
66 G_END_DECLS 69 G_END_DECLS
67 70
src/objects/toolbar/actions.c
@@ -48,10 +48,12 @@ @@ -48,10 +48,12 @@
48 debug("%s - %s",icon_name,pw3270_action_get_label(action)); 48 debug("%s - %s",icon_name,pw3270_action_get_label(action));
49 49
50 GtkToolItem * item = gtk_tool_button_new( 50 GtkToolItem * item = gtk_tool_button_new(
51 - gtk_image_new_from_icon_name(icon_name,GTK_ICON_SIZE_LARGE_TOOLBAR), 51 + NULL,
52 pw3270_action_get_label(action) 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 const gchar * tooltip = pw3270_action_get_tooltip(action); 57 const gchar * tooltip = pw3270_action_get_tooltip(action);
56 if(tooltip) 58 if(tooltip)
57 gtk_widget_set_tooltip_markup(GTK_WIDGET(item),tooltip); 59 gtk_widget_set_tooltip_markup(GTK_WIDGET(item),tooltip);
src/objects/toolbar/toolbar.c
@@ -89,7 +89,11 @@ @@ -89,7 +89,11 @@
89 GtkToolbar parent; 89 GtkToolbar parent;
90 90
91 /// @brief Popup Menu 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,47 +119,49 @@
115 static void detacher(GtkWidget *attach_widget, GtkMenu G_GNUC_UNUSED(*menu)) { 119 static void detacher(GtkWidget *attach_widget, GtkMenu G_GNUC_UNUSED(*menu)) {
116 120
117 pw3270ToolBar * toolbar = PW3270_TOOLBAR(attach_widget); 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 static void pw3270ToolBar_init(pw3270ToolBar *widget) { 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 // Size options 148 // Size options
144 { 149 {
145 size_t ix; 150 size_t ix;
146 151
147 GtkWidget * item = gtk_menu_item_new_with_mnemonic( _("Icon _size") ); 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 GtkWidget * submenu = gtk_menu_new(); 155 GtkWidget * submenu = gtk_menu_new();
151 gtk_menu_item_set_submenu(GTK_MENU_ITEM(item),submenu); 156 gtk_menu_item_set_submenu(GTK_MENU_ITEM(item),submenu);
152 157
153 for(ix = 0; ix < G_N_ELEMENTS(icon_sizes); ix++) { 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 g_object_set_data(G_OBJECT(item),"icon_size", (gpointer) &icon_sizes[ix]); 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 gtk_menu_shell_append(GTK_MENU_SHELL(submenu),item); 166 gtk_menu_shell_append(GTK_MENU_SHELL(submenu),item);
161 167
@@ -168,17 +174,18 @@ @@ -168,17 +174,18 @@
168 size_t ix; 174 size_t ix;
169 175
170 GtkWidget * item = gtk_menu_item_new_with_mnemonic( _("S_tyle") ); 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 GtkWidget * submenu = gtk_menu_new(); 179 GtkWidget * submenu = gtk_menu_new();
174 gtk_menu_item_set_submenu(GTK_MENU_ITEM(item),submenu); 180 gtk_menu_item_set_submenu(GTK_MENU_ITEM(item),submenu);
175 181
176 for(ix = 0; ix < G_N_ELEMENTS(styles); ix++) { 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 g_object_set_data(G_OBJECT(item),"toolbar_style", (gpointer) &styles[ix]); 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 gtk_menu_shell_append(GTK_MENU_SHELL(submenu),item); 190 gtk_menu_shell_append(GTK_MENU_SHELL(submenu),item);
184 191
@@ -186,9 +193,10 @@ @@ -186,9 +193,10 @@
186 193
187 } 194 }
188 195
  196 +
189 // gtk_container_set_border_width(GTK_CONTAINER(widget->popup_menu),6); 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 // Bind settings 201 // Bind settings
194 GSettings *settings = pw3270_application_get_settings(g_application_get_default()); 202 GSettings *settings = pw3270_application_get_settings(g_application_get_default());
@@ -253,8 +261,8 @@ @@ -253,8 +261,8 @@
253 261
254 debug("%s button_number=%d",__FUNCTION__,button_number); 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 return TRUE; 268 return TRUE;
@@ -270,10 +278,35 @@ @@ -270,10 +278,35 @@
270 else 278 else
271 gtk_toolbar_set_style(GTK_TOOLBAR(toolbar),style); 279 gtk_toolbar_set_style(GTK_TOOLBAR(toolbar),style);
272 280
  281 + // Store value
273 pw3270_settings_set_int("toolbar-style",(int) style); 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 void pw3270_toolbar_set_icon_size(GtkToolbar *toolbar, GtkIconSize icon_size) { 310 void pw3270_toolbar_set_icon_size(GtkToolbar *toolbar, GtkIconSize icon_size) {
278 311
279 debug("%s(%d)",__FUNCTION__,(int) icon_size); 312 debug("%s(%d)",__FUNCTION__,(int) icon_size);
@@ -283,6 +316,22 @@ @@ -283,6 +316,22 @@
283 else 316 else
284 gtk_toolbar_set_icon_size(GTK_TOOLBAR(toolbar),icon_size); 317 gtk_toolbar_set_icon_size(GTK_TOOLBAR(toolbar),icon_size);
285 318
  319 + // Store value
286 pw3270_settings_set_int("toolbar-icon-size", (gint) icon_size); 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 }