Commit 34dc0b375065d839dea1e24f8e0f18cdfe34b48d
1 parent
8eb32755
Exists in
master
and in
4 other branches
Buttons on the header bar are now configurable.
Showing
6 changed files
with
220 additions
and
138 deletions
Show diff stats
src/include/pw3270/application.h
@@ -72,6 +72,10 @@ | @@ -72,6 +72,10 @@ | ||
72 | gboolean pw3270_settings_set_int(const gchar *key, gint value); | 72 | gboolean pw3270_settings_set_int(const gchar *key, gint value); |
73 | 73 | ||
74 | 74 | ||
75 | + // Tools | ||
76 | + GtkBuilder * pw3270_application_get_builder(const gchar *name); | ||
77 | + void gtk_container_remove_all(GtkContainer *container); | ||
78 | + | ||
75 | // Actions | 79 | // Actions |
76 | void pw3270_application_print_copy_activated(GAction *action, GVariant *parameter, GtkWidget *terminal); | 80 | void pw3270_application_print_copy_activated(GAction *action, GVariant *parameter, GtkWidget *terminal); |
77 | void pw3270_application_save_copy_activated(GAction *action, GVariant *parameter, GtkWidget *terminal); | 81 | void pw3270_application_save_copy_activated(GAction *action, GVariant *parameter, GtkWidget *terminal); |
src/main/tools.c
@@ -38,4 +38,28 @@ | @@ -38,4 +38,28 @@ | ||
38 | 38 | ||
39 | /*---[ Implement ]----------------------------------------------------------------------------------*/ | 39 | /*---[ Implement ]----------------------------------------------------------------------------------*/ |
40 | 40 | ||
41 | + GtkBuilder * pw3270_application_get_builder(const gchar *name) { | ||
42 | + | ||
43 | +#ifdef DEBUG | ||
44 | + g_autofree gchar * filename = g_build_filename("ui",name,NULL); | ||
45 | +#else | ||
46 | + lib3270_autoptr(char) filename = lib3270_build_data_filename("ui",name,NULL); | ||
47 | +#endif // DEBUG | ||
48 | + | ||
49 | + return gtk_builder_new_from_file(filename); | ||
50 | + } | ||
51 | + | ||
52 | + void gtk_container_remove_all(GtkContainer *container) { | ||
53 | + | ||
54 | + GList * children = gtk_container_get_children(container); | ||
55 | + GList * item; | ||
56 | + | ||
57 | + for(item = children;item;item = g_list_next(item)) { | ||
58 | + gtk_container_remove(container,GTK_WIDGET(item->data)); | ||
59 | + } | ||
60 | + | ||
61 | + g_list_free(children); | ||
62 | + | ||
63 | + } | ||
64 | + | ||
41 | 65 |
src/objects/toolbar/toolbar.c
@@ -91,7 +91,6 @@ | @@ -91,7 +91,6 @@ | ||
91 | PROP_ACTION_NAMES, | 91 | PROP_ACTION_NAMES, |
92 | }; | 92 | }; |
93 | 93 | ||
94 | - | ||
95 | struct _pw3270ToolBar { | 94 | struct _pw3270ToolBar { |
96 | GtkToolbar parent; | 95 | GtkToolbar parent; |
97 | 96 | ||
@@ -375,24 +374,12 @@ | @@ -375,24 +374,12 @@ | ||
375 | 374 | ||
376 | } | 375 | } |
377 | 376 | ||
378 | - void pw3270_toolbar_clear(GtkWidget *toolbar) { | ||
379 | - | ||
380 | - GList * children = gtk_container_get_children(GTK_CONTAINER(toolbar)); | ||
381 | - GList * item; | ||
382 | - | ||
383 | - for(item = children;item;item = g_list_next(item)) { | ||
384 | - gtk_container_remove(GTK_CONTAINER(toolbar),GTK_WIDGET(item->data)); | ||
385 | - } | ||
386 | - | ||
387 | - g_list_free(children); | ||
388 | - } | ||
389 | - | ||
390 | void pw3270_toolbar_set_actions(GtkWidget *toolbar, const gchar *action_names) { | 377 | void pw3270_toolbar_set_actions(GtkWidget *toolbar, const gchar *action_names) { |
391 | 378 | ||
392 | gchar ** actions = g_strsplit(action_names,",",-1); | 379 | gchar ** actions = g_strsplit(action_names,",",-1); |
393 | size_t ix; | 380 | size_t ix; |
394 | 381 | ||
395 | - pw3270_toolbar_clear(toolbar); | 382 | + gtk_container_remove_all(GTK_CONTAINER(toolbar)); |
396 | 383 | ||
397 | for(ix = 0; actions[ix]; ix++) { | 384 | for(ix = 0; actions[ix]; ix++) { |
398 | pw3270_toolbar_insert_action(toolbar,actions[ix],-1); | 385 | pw3270_toolbar_insert_action(toolbar,actions[ix],-1); |
@@ -426,6 +413,5 @@ | @@ -426,6 +413,5 @@ | ||
426 | 413 | ||
427 | g_list_free(children); | 414 | g_list_free(children); |
428 | 415 | ||
429 | - | ||
430 | return g_string_free(str,FALSE); | 416 | return g_string_free(str,FALSE); |
431 | } | 417 | } |
src/objects/window/header.c
@@ -33,6 +33,53 @@ | @@ -33,6 +33,53 @@ | ||
33 | #include <pw3270/application.h> | 33 | #include <pw3270/application.h> |
34 | #include <pw3270/actions.h> | 34 | #include <pw3270/actions.h> |
35 | 35 | ||
36 | + void pw3270_window_set_header_action_names(GtkWidget *window, const gchar *action_names) { | ||
37 | + | ||
38 | + GtkWidget * header = gtk_window_get_titlebar(GTK_WINDOW(window)); | ||
39 | + | ||
40 | + if(!(header && GTK_IS_HEADER_BAR(header))) | ||
41 | + return; | ||
42 | + | ||
43 | + gtk_container_remove_all(GTK_CONTAINER(header)); | ||
44 | + | ||
45 | + if(action_names && *action_names) { | ||
46 | + | ||
47 | + size_t ix; | ||
48 | + gchar ** header_blocks = g_strsplit(action_names,":",-1); | ||
49 | + | ||
50 | + g_autoptr(GtkBuilder) builder = pw3270_application_get_builder("window.xml"); | ||
51 | + | ||
52 | + if(g_strv_length(header_blocks) >= 2) { | ||
53 | + | ||
54 | + gchar ** elements; | ||
55 | + GtkWidget * button; | ||
56 | + | ||
57 | + // First the left side actions. | ||
58 | + elements = g_strsplit(header_blocks[0],",",-1); | ||
59 | + for(ix=0;elements[ix];ix++) { | ||
60 | + button = pw3270_header_button_new_from_builder(GTK_WIDGET(window),builder,elements[ix]); | ||
61 | + g_object_set_data(G_OBJECT(button),"header-position-id",GINT_TO_POINTER(0)); | ||
62 | + gtk_header_bar_pack_start(GTK_HEADER_BAR(header), button); | ||
63 | + } | ||
64 | + g_strfreev(elements); | ||
65 | + | ||
66 | + // And then, the right side actions; | ||
67 | + elements = g_strsplit(header_blocks[1],",",-1); | ||
68 | + for(ix=0;elements[ix];ix++) { | ||
69 | + button = pw3270_header_button_new_from_builder(GTK_WIDGET(window),builder,elements[ix]); | ||
70 | + g_object_set_data(G_OBJECT(button),"header-position-id",GINT_TO_POINTER(1)); | ||
71 | + gtk_header_bar_pack_end(GTK_HEADER_BAR(header), button); | ||
72 | + } | ||
73 | + g_strfreev(elements); | ||
74 | + | ||
75 | + } | ||
76 | + | ||
77 | + g_strfreev(header_blocks); | ||
78 | + | ||
79 | + } | ||
80 | + | ||
81 | + } | ||
82 | + | ||
36 | static void on_sensitive(GtkWidget *button, GParamSpec *spec, GtkWidget *widget) { | 83 | static void on_sensitive(GtkWidget *button, GParamSpec *spec, GtkWidget *widget) { |
37 | 84 | ||
38 | gboolean sensitive; | 85 | gboolean sensitive; |
@@ -73,8 +120,53 @@ | @@ -73,8 +120,53 @@ | ||
73 | gtk_widget_set_focus_on_click(button,FALSE); | 120 | gtk_widget_set_focus_on_click(button,FALSE); |
74 | gtk_widget_set_can_focus(button,FALSE); | 121 | gtk_widget_set_can_focus(button,FALSE); |
75 | gtk_widget_set_can_default(button,FALSE); | 122 | gtk_widget_set_can_default(button,FALSE); |
123 | + gtk_widget_set_name(button,action_name); | ||
76 | 124 | ||
77 | } | 125 | } |
78 | 126 | ||
79 | return button; | 127 | return button; |
80 | } | 128 | } |
129 | + | ||
130 | + gchar * pw3270_window_get_action_names(GtkWidget *window) { | ||
131 | + | ||
132 | + GtkWidget * header = gtk_window_get_titlebar(GTK_WINDOW(window)); | ||
133 | + | ||
134 | + if(!(header && GTK_IS_HEADER_BAR(header))) | ||
135 | + return g_strdup("win.disconnect,win.reconnect,win.file.transfer,win.print:menu.open-menu"); | ||
136 | + | ||
137 | + GString * str = g_string_new(""); | ||
138 | + | ||
139 | + GList * children = gtk_container_get_children(GTK_CONTAINER(header)); | ||
140 | + GList * item; | ||
141 | + | ||
142 | + int id; | ||
143 | + for(id = 0; id < 2; id++) { | ||
144 | + | ||
145 | + gboolean sep = FALSE; | ||
146 | + | ||
147 | + for(item = children;item;item = g_list_next(item)) { | ||
148 | + | ||
149 | + if(GPOINTER_TO_INT(g_object_get_data(G_OBJECT(item->data),"header-position-id") != id)) | ||
150 | + continue; | ||
151 | + | ||
152 | + if(sep) | ||
153 | + g_string_append(str,","); | ||
154 | + | ||
155 | + if(GTK_IS_MENU_BUTTON(item->data)) { | ||
156 | + g_string_append(str,gtk_widget_get_name(GTK_WIDGET(item->data))); | ||
157 | + } else if(GTK_IS_ACTIONABLE(item->data)) { | ||
158 | + g_string_append(str,gtk_actionable_get_action_name(GTK_ACTIONABLE(item->data))); | ||
159 | + } | ||
160 | + | ||
161 | + sep = TRUE; | ||
162 | + } | ||
163 | + | ||
164 | + if(!id) | ||
165 | + g_string_append(str,":"); | ||
166 | + | ||
167 | + } | ||
168 | + | ||
169 | + g_list_free(children); | ||
170 | + | ||
171 | + return g_string_free(str,FALSE); | ||
172 | + } |
src/objects/window/private.h
@@ -77,14 +77,18 @@ | @@ -77,14 +77,18 @@ | ||
77 | G_GNUC_INTERNAL GtkWidget * pw3270_setup_image_button(GtkWidget *button, const gchar *image_name); | 77 | G_GNUC_INTERNAL GtkWidget * pw3270_setup_image_button(GtkWidget *button, const gchar *image_name); |
78 | 78 | ||
79 | // Actions | 79 | // Actions |
80 | - GAction * pw3270_action_host_properties_new(void); | ||
81 | - GAction * pw3270_set_color_action_new(void); | ||
82 | - GAction * pw3270_file_transfer_action_new(void); | 80 | + G_GNUC_INTERNAL GAction * pw3270_action_host_properties_new(void); |
81 | + G_GNUC_INTERNAL GAction * pw3270_set_color_action_new(void); | ||
82 | + G_GNUC_INTERNAL GAction * pw3270_file_transfer_action_new(void); | ||
83 | 83 | ||
84 | GAction * pw3270_action_session_properties_new(void); | 84 | GAction * pw3270_action_session_properties_new(void); |
85 | 85 | ||
86 | + // Header bar | ||
87 | + G_GNUC_INTERNAL void pw3270_window_set_header_action_names(GtkWidget *window, const gchar *action_names); | ||
88 | + G_GNUC_INTERNAL gchar * pw3270_window_get_action_names(GtkWidget *window); | ||
89 | + | ||
86 | // Terminal actions. | 90 | // Terminal actions. |
87 | - GAction * pw3270_model_number_action_new(GtkWidget *terminal); | 91 | + G_GNUC_INTERNAL GAction * pw3270_model_number_action_new(GtkWidget *terminal); |
88 | 92 | ||
89 | G_GNUC_INTERNAL void pw3270_window_open_activated(GSimpleAction * action, GVariant *parameter, gpointer window); | 93 | G_GNUC_INTERNAL void pw3270_window_open_activated(GSimpleAction * action, GVariant *parameter, gpointer window); |
90 | G_GNUC_INTERNAL void pw3270_window_close_activated(GSimpleAction * action, GVariant *parameter, gpointer window); | 94 | G_GNUC_INTERNAL void pw3270_window_close_activated(GSimpleAction * action, GVariant *parameter, gpointer window); |
src/objects/window/window.c
@@ -33,8 +33,16 @@ | @@ -33,8 +33,16 @@ | ||
33 | #include <pw3270/application.h> | 33 | #include <pw3270/application.h> |
34 | #include <pw3270/actions.h> | 34 | #include <pw3270/actions.h> |
35 | 35 | ||
36 | + static void get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); | ||
37 | + static void set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); | ||
38 | + | ||
36 | G_DEFINE_TYPE(pw3270ApplicationWindow, pw3270ApplicationWindow, GTK_TYPE_APPLICATION_WINDOW); | 39 | G_DEFINE_TYPE(pw3270ApplicationWindow, pw3270ApplicationWindow, GTK_TYPE_APPLICATION_WINDOW); |
37 | 40 | ||
41 | + enum { | ||
42 | + PROP_NONE, | ||
43 | + PROP_ACTION_NAMES, | ||
44 | + }; | ||
45 | + | ||
38 | static void destroy(GtkWidget *widget) { | 46 | static void destroy(GtkWidget *widget) { |
39 | 47 | ||
40 | size_t ix; | 48 | size_t ix; |
@@ -70,9 +78,39 @@ | @@ -70,9 +78,39 @@ | ||
70 | 78 | ||
71 | static void pw3270ApplicationWindow_class_init(pw3270ApplicationWindowClass *klass) { | 79 | static void pw3270ApplicationWindow_class_init(pw3270ApplicationWindowClass *klass) { |
72 | 80 | ||
73 | - GtkWidgetClass * widget = GTK_WIDGET_CLASS(klass); | ||
74 | - widget->destroy = destroy; | 81 | + GTK_WIDGET_CLASS(klass)->destroy = destroy; |
82 | + | ||
83 | + GObjectClass *object_class = G_OBJECT_CLASS(klass); | ||
84 | + | ||
85 | + object_class->set_property = set_property; | ||
86 | + object_class->get_property = get_property; | ||
87 | + | ||
88 | + g_object_class_install_property( | ||
89 | + object_class, | ||
90 | + PROP_ACTION_NAMES, | ||
91 | + g_param_spec_string ("action-names", | ||
92 | + N_("Action Names"), | ||
93 | + N_("The name of the actions in the header bar"), | ||
94 | + NULL, | ||
95 | + G_PARAM_WRITABLE|G_PARAM_READABLE) | ||
96 | + ); | ||
97 | + | ||
98 | + | ||
99 | + } | ||
100 | + | ||
101 | + void set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec G_GNUC_UNUSED(*pspec)) { | ||
102 | + | ||
103 | + if(prop_id == PROP_ACTION_NAMES) { | ||
104 | + pw3270_window_set_header_action_names(GTK_WIDGET(object), g_value_get_string(value)); | ||
105 | + } | ||
106 | + | ||
107 | + } | ||
108 | + | ||
109 | + void get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { | ||
75 | 110 | ||
111 | + if(prop_id == PROP_ACTION_NAMES) { | ||
112 | + g_value_take_string(value,pw3270_window_get_action_names(GTK_WIDGET(object))); | ||
113 | + } | ||
76 | 114 | ||
77 | } | 115 | } |
78 | 116 | ||
@@ -178,8 +216,11 @@ | @@ -178,8 +216,11 @@ | ||
178 | 216 | ||
179 | GtkWidget * pw3270_application_window_new(GtkApplication * application) { | 217 | GtkWidget * pw3270_application_window_new(GtkApplication * application) { |
180 | 218 | ||
219 | + gchar *title = _( "IBM 3270 Terminal emulator" ); | ||
220 | + | ||
221 | + g_return_val_if_fail(PW3270_IS_APPLICATION(application),NULL); | ||
222 | + | ||
181 | size_t ix; | 223 | size_t ix; |
182 | - const gchar * title = _( "IBM 3270 Terminal emulator" ); | ||
183 | 224 | ||
184 | g_autoptr(GSettings) settings = pw3270_application_get_settings(G_APPLICATION(application)); | 225 | g_autoptr(GSettings) settings = pw3270_application_get_settings(G_APPLICATION(application)); |
185 | 226 | ||
@@ -190,138 +231,69 @@ | @@ -190,138 +231,69 @@ | ||
190 | "application", application, | 231 | "application", application, |
191 | NULL); | 232 | NULL); |
192 | 233 | ||
193 | - if(PW3270_IS_APPLICATION(gtk_window_get_application(GTK_WINDOW(window)))) { | ||
194 | - | ||
195 | - GtkBuilder * builder; | ||
196 | -#ifdef DEBUG | ||
197 | - builder = gtk_builder_new_from_file("ui/window.xml"); | ||
198 | -#else | ||
199 | - { | ||
200 | - lib3270_autoptr(char) build_file = lib3270_build_data_filename("ui","window.xml",NULL); | ||
201 | - builder = gtk_builder_new_from_file(build_file); | ||
202 | - } | ||
203 | -#endif // DEBUG | ||
204 | - | ||
205 | - switch(pw3270_application_get_ui_style(G_APPLICATION(application))) { | ||
206 | - case PW3270_UI_STYLE_CLASSICAL: | ||
207 | - { | ||
208 | - gtk_window_set_title(GTK_WINDOW(window), title); | ||
209 | - | ||
210 | - } | ||
211 | - break; | ||
212 | - | ||
213 | - case PW3270_UI_STYLE_GNOME: | ||
214 | - { | ||
215 | - // Create header bar | ||
216 | - GtkHeaderBar * header = GTK_HEADER_BAR(gtk_header_bar_new()); | ||
217 | - gtk_window_set_titlebar(GTK_WINDOW(window), GTK_WIDGET(header)); | ||
218 | - gtk_header_bar_set_show_close_button(header,TRUE); | ||
219 | - | ||
220 | - gtk_header_bar_set_title(header,title); | ||
221 | - if(settings) | ||
222 | - g_settings_bind(settings, "has-subtitle", header, "has-subtitle", G_SETTINGS_BIND_DEFAULT); | ||
223 | - else | ||
224 | - gtk_header_bar_set_has_subtitle(header,TRUE); | ||
225 | - | ||
226 | - // Show the new header | ||
227 | - gtk_widget_show_all(GTK_WIDGET(header)); | ||
228 | - | ||
229 | - // Create header's action buttons | ||
230 | - // https://wiki.gnome.org/Initiatives/GnomeGoals/GearIcons | ||
231 | - { | ||
232 | - g_autofree gchar * header_actions = g_settings_get_string(settings, "header-action-names"); | ||
233 | - gchar ** header_blocks = g_strsplit(header_actions,":",-1); | ||
234 | - | ||
235 | - if(g_strv_length(header_blocks) >= 2) { | ||
236 | - | ||
237 | - gchar ** elements; | ||
238 | - | ||
239 | - // First the left side actions. | ||
240 | - elements = g_strsplit(header_blocks[0],",",-1); | ||
241 | - for(ix=0;elements[ix];ix++) { | ||
242 | - gtk_header_bar_pack_start(header, pw3270_header_button_new_from_builder(GTK_WIDGET(window),builder,elements[ix])); | ||
243 | - } | ||
244 | - g_strfreev(elements); | ||
245 | - | ||
246 | - // And then, the right side actions; | ||
247 | - elements = g_strsplit(header_blocks[1],",",-1); | ||
248 | - for(ix=0;elements[ix];ix++) { | ||
249 | - gtk_header_bar_pack_end(header, pw3270_header_button_new_from_builder(GTK_WIDGET(window),builder,elements[ix])); | ||
250 | - } | ||
251 | - g_strfreev(elements); | ||
252 | - | ||
253 | - } | ||
254 | - | ||
255 | - g_strfreev(header_blocks); | ||
256 | - | ||
257 | - } | 234 | + // |
235 | + // Get builder | ||
236 | + // | ||
237 | + g_autoptr(GtkBuilder) builder = pw3270_application_get_builder("window.xml"); | ||
258 | 238 | ||
259 | - /* | ||
260 | - { | ||
261 | - g_autofree gchar * left = g_settings_get_string(settings, "header-start-action-names"); | ||
262 | - g_autofree gchar * right = g_settings_get_string(settings, "header-end-action-names"); | 239 | + // Load popup menus. |
240 | + const gchar * popup_menus[G_N_ELEMENTS(window->popups)] = { | ||
241 | + "popup-over-selected-area", | ||
242 | + "popup-over-unselected-area", | ||
243 | + "popup-when-offline" | ||
244 | + }; | ||
263 | 245 | ||
246 | + for(ix = 0; ix < G_N_ELEMENTS(popup_menus); ix++) { | ||
264 | 247 | ||
265 | - } | ||
266 | - */ | 248 | + GObject * model = gtk_builder_get_object(builder, popup_menus[ix]); |
249 | + if(model) { | ||
250 | + window->popups[ix] = gtk_menu_new_from_model(G_MENU_MODEL(model)); | ||
251 | + gtk_menu_attach_to_widget(GTK_MENU(window->popups[ix]),GTK_WIDGET(window),NULL); | ||
252 | + } | ||
267 | 253 | ||
268 | - /* | ||
269 | - static const gchar * end_actions[] = { | ||
270 | - "menu.open-menu", | ||
271 | - }; | 254 | + } |
272 | 255 | ||
273 | - for(ix = 0; ix < G_N_ELEMENTS(end_actions); ix++) { | ||
274 | - gtk_header_bar_pack_end(header, pw3270_header_button_new_from_builder(GTK_WIDGET(window),builder,end_actions[ix])); | ||
275 | - } | 256 | + if(pw3270_application_get_ui_style(G_APPLICATION(application)) == PW3270_UI_STYLE_GNOME) { |
276 | 257 | ||
258 | + // Create header bar | ||
277 | 259 | ||
278 | - static const gchar * start_actions[] = { | ||
279 | - "win.disconnect", | ||
280 | - "win.reconnect", | ||
281 | - "win.file.transfer", | ||
282 | - "win.print" | ||
283 | - }; | 260 | + GtkHeaderBar * header = GTK_HEADER_BAR(gtk_header_bar_new()); |
261 | + gtk_window_set_titlebar(GTK_WINDOW(window), GTK_WIDGET(header)); | ||
262 | + gtk_header_bar_set_show_close_button(header,TRUE); | ||
284 | 263 | ||
285 | - for(ix = 0; ix < G_N_ELEMENTS(start_actions); ix++) { | ||
286 | - gtk_header_bar_pack_start(header, pw3270_header_button_new_from_builder(GTK_WIDGET(window),builder,start_actions[ix])); | ||
287 | - } | ||
288 | - */ | 264 | + gtk_header_bar_set_title(header,title); |
265 | + g_settings_bind( | ||
266 | + settings, | ||
267 | + "has-subtitle", | ||
268 | + header, | ||
269 | + "has-subtitle", | ||
270 | + G_SETTINGS_BIND_DEFAULT | ||
271 | + ); | ||
289 | 272 | ||
273 | + // Show the new header | ||
274 | + gtk_widget_show_all(GTK_WIDGET(header)); | ||
290 | 275 | ||
291 | - /* | ||
292 | - // Create "new tab" bar | ||
293 | - GtkWidget * new_tab_button = pw3270_setup_image_button(gtk_button_new(),"tab-new-symbolic"); | ||
294 | - gtk_actionable_set_action_name(GTK_ACTIONABLE(new_tab_button),"app.new.tab"); | ||
295 | - gtk_header_bar_pack_start(header, new_tab_button); | ||
296 | - gtk_widget_show(new_tab_button); | ||
297 | - */ | 276 | + // g_autofree gchar * header_actions = g_settings_get_string(settings, "header-action-names"); |
277 | + // pw3270_window_set_header_action_names(GTK_WIDGET(window), header_actions); | ||
298 | 278 | ||
299 | - } | ||
300 | - break; | 279 | + g_settings_bind( |
280 | + settings, | ||
281 | + "header-action-names", | ||
282 | + window, | ||
283 | + "action-names", | ||
284 | + G_SETTINGS_BIND_DEFAULT | ||
285 | + ); | ||
301 | 286 | ||
302 | - default: | ||
303 | - g_warning("Unexpected UI"); | 287 | +#ifdef DEBUG |
288 | + { | ||
289 | + g_autofree gchar * an = pw3270_window_get_action_names(window); | ||
304 | 290 | ||
305 | } | 291 | } |
292 | +#endif // DEBUG | ||
306 | 293 | ||
307 | - // Load popup menus. | ||
308 | - const gchar * popup_menus[G_N_ELEMENTS(window->popups)] = { | ||
309 | - "popup-over-selected-area", | ||
310 | - "popup-over-unselected-area", | ||
311 | - "popup-when-offline" | ||
312 | - }; | ||
313 | - | ||
314 | - for(ix = 0; ix < G_N_ELEMENTS(popup_menus); ix++) { | ||
315 | - | ||
316 | - GObject * model = gtk_builder_get_object(builder, popup_menus[ix]); | ||
317 | - if(model) { | ||
318 | - window->popups[ix] = gtk_menu_new_from_model(G_MENU_MODEL(model)); | ||
319 | - gtk_menu_attach_to_widget(GTK_MENU(window->popups[ix]),GTK_WIDGET(window),NULL); | ||
320 | - } | ||
321 | - | ||
322 | - } | 294 | + } else { |
323 | 295 | ||
324 | - g_object_unref(builder); | 296 | + gtk_window_set_title(GTK_WINDOW(window), title); |
325 | 297 | ||
326 | } | 298 | } |
327 | 299 |