Commit 5e08cc14e6c7e9e41cf6fb51768096f2fc555021
1 parent
da55a192
Exists in
master
and in
4 other branches
Fixing toolbar settings.
Showing
3 changed files
with
77 additions
and
23 deletions
Show diff stats
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 | } |