Commit 1b59e4072fda1bdba58ec6ad48b4174fe9b36e8e
1 parent
4984a67f
Exists in
master
and in
4 other branches
Using the V3270 terminal actions.
Showing
20 changed files
with
212 additions
and
30 deletions
Show diff stats
pw3270.cbp
@@ -49,6 +49,7 @@ | @@ -49,6 +49,7 @@ | ||
49 | <Unit filename="src/include/pw3270/settings.h" /> | 49 | <Unit filename="src/include/pw3270/settings.h" /> |
50 | <Unit filename="src/include/pw3270/toolbar.h" /> | 50 | <Unit filename="src/include/pw3270/toolbar.h" /> |
51 | <Unit filename="src/include/pw3270/window.h" /> | 51 | <Unit filename="src/include/pw3270/window.h" /> |
52 | + <Unit filename="src/include/v3270_actions.h" /> | ||
52 | <Unit filename="src/main/main.c"> | 53 | <Unit filename="src/main/main.c"> |
53 | <Option compilerVar="CC" /> | 54 | <Option compilerVar="CC" /> |
54 | </Unit> | 55 | </Unit> |
@@ -96,6 +97,9 @@ | @@ -96,6 +97,9 @@ | ||
96 | <Unit filename="src/objects/actions/simple.c"> | 97 | <Unit filename="src/objects/actions/simple.c"> |
97 | <Option compilerVar="CC" /> | 98 | <Option compilerVar="CC" /> |
98 | </Unit> | 99 | </Unit> |
100 | + <Unit filename="src/objects/actions/v3270/action.c"> | ||
101 | + <Option compilerVar="CC" /> | ||
102 | + </Unit> | ||
99 | <Unit filename="src/objects/actions/v3270/conditional.c"> | 103 | <Unit filename="src/objects/actions/v3270/conditional.c"> |
100 | <Option compilerVar="CC" /> | 104 | <Option compilerVar="CC" /> |
101 | </Unit> | 105 | </Unit> |
src/include/pw3270/actions.h
@@ -40,6 +40,7 @@ | @@ -40,6 +40,7 @@ | ||
40 | #include <gtk/gtk.h> | 40 | #include <gtk/gtk.h> |
41 | #include <lib3270.h> | 41 | #include <lib3270.h> |
42 | #include <lib3270/actions.h> | 42 | #include <lib3270/actions.h> |
43 | + #include <v3270/actions.h> | ||
43 | 44 | ||
44 | G_BEGIN_DECLS | 45 | G_BEGIN_DECLS |
45 | 46 | ||
@@ -121,7 +122,7 @@ | @@ -121,7 +122,7 @@ | ||
121 | const gchar * pw3270_action_get_tooltip(GAction *action); | 122 | const gchar * pw3270_action_get_tooltip(GAction *action); |
122 | 123 | ||
123 | /// @brief Create a button associated with the action. | 124 | /// @brief Create a button associated with the action. |
124 | - GtkWidget * pw3270_action_button_new(GAction *action, const gchar *action_name); | 125 | + //GtkWidget * pw3270_action_button_new(GAction *action, const gchar *action_name); |
125 | 126 | ||
126 | /// @brief Associate action with the terminal widget. | 127 | /// @brief Associate action with the terminal widget. |
127 | void pw3270_action_set_terminal_widget(GAction *action, GtkWidget *terminal); | 128 | void pw3270_action_set_terminal_widget(GAction *action, GtkWidget *terminal); |
@@ -252,6 +253,7 @@ | @@ -252,6 +253,7 @@ | ||
252 | GType v3270ConditionalAction_get_type(void) G_GNUC_CONST; | 253 | GType v3270ConditionalAction_get_type(void) G_GNUC_CONST; |
253 | 254 | ||
254 | GAction * v3270_conditional_action_new(GtkWidget *widget, const gchar *property_name); | 255 | GAction * v3270_conditional_action_new(GtkWidget *widget, const gchar *property_name); |
256 | + GAction * v3270_action_new(const V3270_ACTION *action_data); | ||
255 | 257 | ||
256 | // | 258 | // |
257 | // Action view | 259 | // Action view |
@@ -271,7 +273,14 @@ | @@ -271,7 +273,14 @@ | ||
271 | // | 273 | // |
272 | // Tools | 274 | // Tools |
273 | // | 275 | // |
274 | - GdkPixbuf * g_action_get_pixbuf(GAction *action, GtkIconSize icon_size); | 276 | + gchar * g_action_get_icon_name(GAction *action); |
277 | + gchar * g_action_get_tooltip(GAction *action); | ||
278 | + gchar * g_action_get_label(GAction *action); | ||
279 | + | ||
280 | + GdkPixbuf * g_action_get_pixbuf(GAction *action, GtkIconSize icon_size, GtkIconLookupFlags flags); | ||
281 | + | ||
282 | + GtkWidget * gtk_button_new_from_action(GAction *action, GtkIconSize icon_size); | ||
283 | + GtkToolItem * gtk_tool_button_new_from_action(GAction *action, GtkIconSize icon_size); | ||
275 | 284 | ||
276 | G_END_DECLS | 285 | G_END_DECLS |
277 | 286 |
src/include/pw3270/toolbar.h
@@ -56,7 +56,7 @@ | @@ -56,7 +56,7 @@ | ||
56 | 56 | ||
57 | GtkWidget * pw3270_toolbar_new(void); | 57 | GtkWidget * pw3270_toolbar_new(void); |
58 | 58 | ||
59 | - GtkWidget * pw3270_toolbar_insert_lib3270_action(GtkWidget *toolbar, const LIB3270_ACTION *action, gint pos); | 59 | +// GtkWidget * pw3270_toolbar_insert_lib3270_action(GtkWidget *toolbar, const LIB3270_ACTION *action, gint pos); |
60 | GtkWidget * pw3270_toolbar_insert_action(GtkWidget *toolbar, const gchar *name, gint pos); | 60 | GtkWidget * pw3270_toolbar_insert_action(GtkWidget *toolbar, const gchar *name, gint pos); |
61 | 61 | ||
62 | void pw3270_toolbar_set_actions(GtkWidget *toolbar, const gchar *action_names); | 62 | void pw3270_toolbar_set_actions(GtkWidget *toolbar, const gchar *action_names); |
src/objects/actions/abstract.c
@@ -362,6 +362,7 @@ | @@ -362,6 +362,7 @@ | ||
362 | } | 362 | } |
363 | 363 | ||
364 | static gboolean bg_notify_enabled(GObject *action) { | 364 | static gboolean bg_notify_enabled(GObject *action) { |
365 | + // debug("%s(%s,%s)",__FUNCTION__,g_action_get_name(G_ACTION(action)),(g_action_get_enabled(G_ACTION(action)) ? "enabled" : "disabled")); | ||
365 | g_object_notify(action, "enabled"); | 366 | g_object_notify(action, "enabled"); |
366 | return FALSE; | 367 | return FALSE; |
367 | } | 368 | } |
@@ -493,7 +494,7 @@ | @@ -493,7 +494,7 @@ | ||
493 | return G_ACTION(g_object_new(PW3270_TYPE_ACTION, NULL)); | 494 | return G_ACTION(g_object_new(PW3270_TYPE_ACTION, NULL)); |
494 | } | 495 | } |
495 | 496 | ||
496 | - static GdkPixbuf * pixbuf_from_icon_name(GValue *value, GtkIconSize icon_size) { | 497 | + static GdkPixbuf * pixbuf_from_icon_name(GValue *value, gint width, gint G_GNUC_UNUSED(height), GtkIconLookupFlags flags) { |
497 | 498 | ||
498 | const gchar * icon_name = g_value_get_string(value); | 499 | const gchar * icon_name = g_value_get_string(value); |
499 | 500 | ||
@@ -503,19 +504,48 @@ | @@ -503,19 +504,48 @@ | ||
503 | return gtk_icon_theme_load_icon( | 504 | return gtk_icon_theme_load_icon( |
504 | gtk_icon_theme_get_default(), | 505 | gtk_icon_theme_get_default(), |
505 | icon_name, | 506 | icon_name, |
506 | - icon_size, | ||
507 | - GTK_ICON_LOOKUP_GENERIC_FALLBACK, | 507 | + width, |
508 | + flags, // GTK_ICON_LOOKUP_GENERIC_FALLBACK, | ||
508 | NULL | 509 | NULL |
509 | ); | 510 | ); |
510 | 511 | ||
511 | } | 512 | } |
512 | 513 | ||
513 | - GdkPixbuf * g_action_get_pixbuf(GAction *action, GtkIconSize icon_size) { | 514 | + gchar * g_action_get_text(GAction *action, const gchar * property_name) { |
515 | + gchar *rc = NULL; | ||
516 | + | ||
517 | + GValue value = G_VALUE_INIT; | ||
518 | + g_value_init(&value, G_TYPE_STRING); | ||
519 | + g_object_get_property(G_OBJECT(action),property_name,&value); | ||
520 | + | ||
521 | + const gchar * text = g_value_get_string(&value); | ||
522 | + if(text) | ||
523 | + rc = g_strdup(text); | ||
524 | + | ||
525 | + g_value_unset(&value); | ||
526 | + | ||
527 | + return rc; | ||
528 | + | ||
529 | + } | ||
530 | + | ||
531 | + gchar * g_action_get_tooltip(GAction *action) { | ||
532 | + return g_action_get_text(action, "tooltip"); | ||
533 | + } | ||
534 | + | ||
535 | + gchar * g_action_get_label(GAction *action) { | ||
536 | + return g_action_get_text(action, "label"); | ||
537 | + } | ||
538 | + | ||
539 | + gchar * g_action_get_icon_name(GAction *action) { | ||
540 | + return g_action_get_text(action, "icon-name"); | ||
541 | + } | ||
542 | + | ||
543 | + GdkPixbuf * g_action_get_pixbuf(GAction *action, GtkIconSize icon_size, GtkIconLookupFlags flags) { | ||
514 | 544 | ||
515 | struct Properties { | 545 | struct Properties { |
516 | const gchar * name; | 546 | const gchar * name; |
517 | GType value_type; | 547 | GType value_type; |
518 | - GdkPixbuf * (*translate)(GValue *value, GtkIconSize icon_size); | 548 | + GdkPixbuf * (*translate)(GValue *value, gint width, gint height, GtkIconLookupFlags flags); |
519 | } properties[] = { | 549 | } properties[] = { |
520 | { | 550 | { |
521 | .name = "icon-name", | 551 | .name = "icon-name", |
@@ -526,6 +556,9 @@ | @@ -526,6 +556,9 @@ | ||
526 | 556 | ||
527 | size_t ix; | 557 | size_t ix; |
528 | GdkPixbuf * pixbuf = NULL; | 558 | GdkPixbuf * pixbuf = NULL; |
559 | + gint width, height; | ||
560 | + | ||
561 | + gtk_icon_size_lookup(icon_size,&width,&height); | ||
529 | 562 | ||
530 | for(ix = 0; ix < G_N_ELEMENTS(properties) && !pixbuf; ix++) { | 563 | for(ix = 0; ix < G_N_ELEMENTS(properties) && !pixbuf; ix++) { |
531 | 564 | ||
@@ -537,7 +570,7 @@ | @@ -537,7 +570,7 @@ | ||
537 | 570 | ||
538 | g_object_get_property(G_OBJECT(action),properties[ix].name,&value); | 571 | g_object_get_property(G_OBJECT(action),properties[ix].name,&value); |
539 | 572 | ||
540 | - pixbuf = properties[ix].translate(&value,icon_size); | 573 | + pixbuf = properties[ix].translate(&value,width,height,flags); |
541 | 574 | ||
542 | g_value_unset(&value); | 575 | g_value_unset(&value); |
543 | 576 |
src/objects/actions/button.c
@@ -35,6 +35,85 @@ | @@ -35,6 +35,85 @@ | ||
35 | #include "private.h" | 35 | #include "private.h" |
36 | #include <pw3270/actions.h> | 36 | #include <pw3270/actions.h> |
37 | 37 | ||
38 | + GtkWidget * gtk_button_new_from_action(GAction *action, GtkIconSize icon_size) { | ||
39 | + | ||
40 | + if(!action) | ||
41 | + return NULL; | ||
42 | + | ||
43 | + g_autofree gchar * icon_name = g_action_get_icon_name(action); | ||
44 | + if(icon_name) | ||
45 | + return gtk_button_new_from_icon_name(icon_name,icon_size); | ||
46 | + | ||
47 | + GdkPixbuf * pixbuf = g_action_get_pixbuf(action, GTK_ICON_SIZE_BUTTON, GTK_ICON_LOOKUP_GENERIC_FALLBACK); | ||
48 | + | ||
49 | + if(pixbuf) { | ||
50 | + | ||
51 | + GtkWidget * button = gtk_button_new(); | ||
52 | + | ||
53 | + GtkWidget * image = gtk_image_new_from_pixbuf(pixbuf); | ||
54 | + gtk_widget_show_all(image); | ||
55 | + | ||
56 | + gtk_button_set_image(GTK_BUTTON(button),image); | ||
57 | + | ||
58 | + return button; | ||
59 | + } | ||
60 | + | ||
61 | + | ||
62 | + return NULL; | ||
63 | + } | ||
64 | + | ||
65 | + GtkToolItem * gtk_tool_button_new_from_action(GAction *action, GtkIconSize icon_size) { | ||
66 | + | ||
67 | + if(!action) | ||
68 | + return NULL; | ||
69 | + | ||
70 | + g_autofree gchar * tooltip = g_action_get_tooltip(action); | ||
71 | + g_autofree gchar * label = g_action_get_label(action); | ||
72 | + debug("%s(%s).label=%s",__FUNCTION__,g_action_get_name(action),label); | ||
73 | + if(!label) | ||
74 | + return NULL; | ||
75 | + | ||
76 | + g_autofree gchar * icon_name = g_action_get_icon_name(action); | ||
77 | + debug("%s(%s).icon_name=%s",__FUNCTION__,g_action_get_name(action),icon_name); | ||
78 | + if(icon_name) { | ||
79 | + | ||
80 | + // Has icon name | ||
81 | + GtkToolItem * item = gtk_tool_button_new(NULL,label); | ||
82 | + | ||
83 | + gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(item),icon_name); | ||
84 | + | ||
85 | + if(tooltip) | ||
86 | + gtk_widget_set_tooltip_markup(GTK_WIDGET(item),tooltip); | ||
87 | + | ||
88 | + return item; | ||
89 | + } | ||
90 | + | ||
91 | + | ||
92 | + /// FIXME: Get size from icon_size | ||
93 | + GdkPixbuf * pixbuf = g_action_get_pixbuf(action, icon_size, GTK_ICON_LOOKUP_GENERIC_FALLBACK); | ||
94 | + | ||
95 | + if(pixbuf) { | ||
96 | + | ||
97 | + GtkToolItem * item = gtk_tool_button_new(NULL,label); | ||
98 | + | ||
99 | + GtkWidget * image = gtk_image_new_from_pixbuf(pixbuf); | ||
100 | + gtk_widget_show_all(image); | ||
101 | + | ||
102 | + gtk_tool_button_set_icon_widget(GTK_TOOL_BUTTON(item),image); | ||
103 | + | ||
104 | + if(tooltip) | ||
105 | + gtk_widget_set_tooltip_markup(GTK_WIDGET(item),tooltip); | ||
106 | + | ||
107 | + return item; | ||
108 | + } | ||
109 | + | ||
110 | + | ||
111 | + return NULL; | ||
112 | + | ||
113 | + } | ||
114 | + | ||
115 | + | ||
116 | + /* | ||
38 | /// @brief Create a button associated with the action. | 117 | /// @brief Create a button associated with the action. |
39 | GtkWidget * pw3270_action_button_new(GAction *action, const gchar *action_name) { | 118 | GtkWidget * pw3270_action_button_new(GAction *action, const gchar *action_name) { |
40 | 119 | ||
@@ -72,4 +151,5 @@ | @@ -72,4 +151,5 @@ | ||
72 | return button; | 151 | return button; |
73 | 152 | ||
74 | } | 153 | } |
154 | + */ | ||
75 | 155 |
src/objects/actions/print.c
@@ -36,6 +36,7 @@ | @@ -36,6 +36,7 @@ | ||
36 | #include <v3270.h> | 36 | #include <v3270.h> |
37 | #include <pw3270/application.h> | 37 | #include <pw3270/application.h> |
38 | 38 | ||
39 | + /* | ||
39 | static void activate_print_all(GAction G_GNUC_UNUSED(*action), GVariant G_GNUC_UNUSED(*parameter), GtkWidget *terminal) { | 40 | static void activate_print_all(GAction G_GNUC_UNUSED(*action), GVariant G_GNUC_UNUSED(*parameter), GtkWidget *terminal) { |
40 | debug("%s",__FUNCTION__); | 41 | debug("%s",__FUNCTION__); |
41 | v3270_print_all(terminal,NULL); | 42 | v3270_print_all(terminal,NULL); |
@@ -105,4 +106,5 @@ | @@ -105,4 +106,5 @@ | ||
105 | return G_ACTION(action); | 106 | return G_ACTION(action); |
106 | 107 | ||
107 | } | 108 | } |
109 | + */ | ||
108 | 110 |
src/objects/actions/private.h
@@ -66,6 +66,7 @@ | @@ -66,6 +66,7 @@ | ||
66 | G_GNUC_INTERNAL GAction * pw3270_action_cut_new(void); | 66 | G_GNUC_INTERNAL GAction * pw3270_action_cut_new(void); |
67 | G_GNUC_INTERNAL GAction * pw3270_action_paste_new(void); | 67 | G_GNUC_INTERNAL GAction * pw3270_action_paste_new(void); |
68 | 68 | ||
69 | + /* | ||
69 | G_GNUC_INTERNAL GAction * pw3270_action_save_new(void); | 70 | G_GNUC_INTERNAL GAction * pw3270_action_save_new(void); |
70 | G_GNUC_INTERNAL GAction * pw3270_action_save_screen_new(void); | 71 | G_GNUC_INTERNAL GAction * pw3270_action_save_screen_new(void); |
71 | G_GNUC_INTERNAL GAction * pw3270_action_save_selected_new(void); | 72 | G_GNUC_INTERNAL GAction * pw3270_action_save_selected_new(void); |
@@ -73,5 +74,6 @@ | @@ -73,5 +74,6 @@ | ||
73 | G_GNUC_INTERNAL GAction * pw3270_action_print_new(void); | 74 | G_GNUC_INTERNAL GAction * pw3270_action_print_new(void); |
74 | G_GNUC_INTERNAL GAction * pw3270_action_print_all_new(void); | 75 | G_GNUC_INTERNAL GAction * pw3270_action_print_all_new(void); |
75 | G_GNUC_INTERNAL GAction * pw3270_action_print_selected_new(void); | 76 | G_GNUC_INTERNAL GAction * pw3270_action_print_selected_new(void); |
77 | + */ | ||
76 | 78 | ||
77 | #endif // PRIVATE_H_INCLUDED | 79 | #endif // PRIVATE_H_INCLUDED |
src/objects/actions/save.c
@@ -36,6 +36,7 @@ | @@ -36,6 +36,7 @@ | ||
36 | #include <v3270.h> | 36 | #include <v3270.h> |
37 | #include <pw3270/application.h> | 37 | #include <pw3270/application.h> |
38 | 38 | ||
39 | + /* | ||
39 | static void activate_save_screen(GAction G_GNUC_UNUSED(*action), GVariant G_GNUC_UNUSED(*parameter), GtkWidget *terminal) { | 40 | static void activate_save_screen(GAction G_GNUC_UNUSED(*action), GVariant G_GNUC_UNUSED(*parameter), GtkWidget *terminal) { |
40 | debug("%s",__FUNCTION__); | 41 | debug("%s",__FUNCTION__); |
41 | v3270_save_all(terminal,NULL,NULL); | 42 | v3270_save_all(terminal,NULL,NULL); |
@@ -103,4 +104,4 @@ | @@ -103,4 +104,4 @@ | ||
103 | return G_ACTION(action); | 104 | return G_ACTION(action); |
104 | 105 | ||
105 | } | 106 | } |
106 | - | 107 | +*/ |
src/objects/actions/view.c
@@ -229,7 +229,7 @@ | @@ -229,7 +229,7 @@ | ||
229 | return list; | 229 | return list; |
230 | } | 230 | } |
231 | 231 | ||
232 | - GdkPixbuf * pixbuf = g_action_get_pixbuf(action, GTK_ICON_SIZE_MENU); | 232 | + GdkPixbuf * pixbuf = g_action_get_pixbuf(action, GTK_ICON_SIZE_MENU, GTK_ICON_LOOKUP_GENERIC_FALLBACK); |
233 | if(!pixbuf) { | 233 | if(!pixbuf) { |
234 | debug("Action \"%s\": Doesn't have a pixbuf",g_action_get_name(action)); | 234 | debug("Action \"%s\": Doesn't have a pixbuf",g_action_get_name(action)); |
235 | return list; | 235 | return list; |
src/objects/actions/window.c
@@ -34,6 +34,7 @@ | @@ -34,6 +34,7 @@ | ||
34 | 34 | ||
35 | #include "private.h" | 35 | #include "private.h" |
36 | #include <lib3270/actions.h> | 36 | #include <lib3270/actions.h> |
37 | + #include <v3270/actions.h> | ||
37 | #include <pw3270/window.h> | 38 | #include <pw3270/window.h> |
38 | 39 | ||
39 | void pw3270_window_add_actions(GtkWidget * appwindow) { | 40 | void pw3270_window_add_actions(GtkWidget * appwindow) { |
@@ -63,23 +64,34 @@ | @@ -63,23 +64,34 @@ | ||
63 | } | 64 | } |
64 | } | 65 | } |
65 | 66 | ||
67 | + // Map V3270 actions | ||
68 | + { | ||
69 | + const V3270_ACTION * actions = v3270_get_actions(); | ||
70 | + | ||
71 | + for(ix = 0; actions[ix].name; ix++) { | ||
72 | + GAction * action = v3270_action_new(&actions[ix]); | ||
73 | + g_action_map_add_action(map,action); | ||
74 | + } | ||
75 | + | ||
76 | + } | ||
77 | + | ||
66 | // Map special actions | 78 | // Map special actions |
67 | { | 79 | { |
68 | GAction * actions[] = { | 80 | GAction * actions[] = { |
69 | pw3270_action_new_pfkey(), | 81 | pw3270_action_new_pfkey(), |
70 | pw3270_action_new_pakey(), | 82 | pw3270_action_new_pakey(), |
71 | - pw3270_action_connect_new(), | ||
72 | - pw3270_action_copy_new(), | ||
73 | - pw3270_action_cut_new(), | ||
74 | - pw3270_action_paste_new(), | 83 | +// pw3270_action_connect_new(), |
84 | +// pw3270_action_copy_new(), | ||
85 | +// pw3270_action_cut_new(), | ||
86 | +// pw3270_action_paste_new(), | ||
75 | 87 | ||
76 | // pw3270_action_save_new(), | 88 | // pw3270_action_save_new(), |
77 | // pw3270_action_save_screen_new(), | 89 | // pw3270_action_save_screen_new(), |
78 | // pw3270_action_save_selected_new(), | 90 | // pw3270_action_save_selected_new(), |
79 | 91 | ||
80 | - pw3270_action_print_new(), | ||
81 | - pw3270_action_print_all_new(), | ||
82 | - pw3270_action_print_selected_new(), | 92 | +// pw3270_action_print_new(), |
93 | +// pw3270_action_print_all_new(), | ||
94 | +// pw3270_action_print_selected_new(), | ||
83 | 95 | ||
84 | }; | 96 | }; |
85 | 97 |
src/objects/application/application.c
@@ -310,6 +310,7 @@ | @@ -310,6 +310,7 @@ | ||
310 | 310 | ||
311 | } | 311 | } |
312 | 312 | ||
313 | + /* | ||
313 | // Create conditional actions. | 314 | // Create conditional actions. |
314 | static const struct { | 315 | static const struct { |
315 | const gchar * label; | 316 | const gchar * label; |
@@ -350,6 +351,7 @@ | @@ -350,6 +351,7 @@ | ||
350 | ); | 351 | ); |
351 | 352 | ||
352 | } | 353 | } |
354 | + */ | ||
353 | 355 | ||
354 | // Present the new window | 356 | // Present the new window |
355 | pw3270_window_set_current_page(window,0); | 357 | pw3270_window_set_current_page(window,0); |
src/objects/toolbar/actions.c
@@ -70,16 +70,23 @@ | @@ -70,16 +70,23 @@ | ||
70 | action = g_action_map_lookup_action(G_ACTION_MAP(window), ptr+1); | 70 | action = g_action_map_lookup_action(G_ACTION_MAP(window), ptr+1); |
71 | } | 71 | } |
72 | 72 | ||
73 | + debug("%s(%s)=%p",__FUNCTION__,name,action); | ||
74 | + | ||
73 | if(action) { | 75 | if(action) { |
74 | debug("Creating button \"%s\" from action \"%s\"",name,g_action_get_name(G_ACTION(action))); | 76 | debug("Creating button \"%s\" from action \"%s\"",name,g_action_get_name(G_ACTION(action))); |
75 | - item = GTK_TOOL_ITEM(pw3270_tool_button_new(action)); | ||
76 | - } else { | 77 | + item = gtk_tool_button_new_from_action(action,GTK_ICON_SIZE_LARGE_TOOLBAR); |
78 | + } | ||
79 | + /* | ||
80 | + else { | ||
77 | debug("Creating button \"%s\" from action name",name); | 81 | debug("Creating button \"%s\" from action name",name); |
78 | item = GTK_TOOL_ITEM(pw3270_tool_button_new_from_action_name(name)); | 82 | item = GTK_TOOL_ITEM(pw3270_tool_button_new_from_action_name(name)); |
79 | } | 83 | } |
84 | + */ | ||
80 | 85 | ||
81 | if(item) { | 86 | if(item) { |
82 | 87 | ||
88 | + gtk_widget_show_all(GTK_WIDGET(item)); | ||
89 | + | ||
83 | if(action && g_action_get_parameter_type(action) == G_VARIANT_TYPE_STRING) { | 90 | if(action && g_action_get_parameter_type(action) == G_VARIANT_TYPE_STRING) { |
84 | g_autofree gchar * detailed = g_strconcat(name,"::",NULL); | 91 | g_autofree gchar * detailed = g_strconcat(name,"::",NULL); |
85 | gtk_actionable_set_detailed_action_name(GTK_ACTIONABLE(item),detailed); | 92 | gtk_actionable_set_detailed_action_name(GTK_ACTIONABLE(item),detailed); |
@@ -89,6 +96,11 @@ | @@ -89,6 +96,11 @@ | ||
89 | 96 | ||
90 | gtk_toolbar_insert(GTK_TOOLBAR(toolbar),item,pos); | 97 | gtk_toolbar_insert(GTK_TOOLBAR(toolbar),item,pos); |
91 | return GTK_WIDGET(item); | 98 | return GTK_WIDGET(item); |
99 | + | ||
100 | + } else { | ||
101 | + | ||
102 | + g_warning("Can't create toolbar item for action \"%s\"",name); | ||
103 | + | ||
92 | } | 104 | } |
93 | 105 | ||
94 | } | 106 | } |
src/objects/toolbar/toolbar.c
@@ -270,6 +270,7 @@ | @@ -270,6 +270,7 @@ | ||
270 | return g_object_new(PW3270_TYPE_TOOLBAR, NULL); | 270 | return g_object_new(PW3270_TYPE_TOOLBAR, NULL); |
271 | } | 271 | } |
272 | 272 | ||
273 | + /* | ||
273 | GtkWidget * pw3270_toolbar_insert_lib3270_action(GtkWidget *toolbar, const LIB3270_ACTION *action, gint pos) { | 274 | GtkWidget * pw3270_toolbar_insert_lib3270_action(GtkWidget *toolbar, const LIB3270_ACTION *action, gint pos) { |
274 | 275 | ||
275 | g_return_val_if_fail(GTK_IS_TOOLBAR(toolbar),NULL); | 276 | g_return_val_if_fail(GTK_IS_TOOLBAR(toolbar),NULL); |
@@ -303,6 +304,7 @@ | @@ -303,6 +304,7 @@ | ||
303 | 304 | ||
304 | return GTK_WIDGET(item); | 305 | return GTK_WIDGET(item); |
305 | } | 306 | } |
307 | + */ | ||
306 | 308 | ||
307 | gboolean popup_context_menu(GtkToolbar *widget, gint G_GNUC_UNUSED(x), gint G_GNUC_UNUSED(y), gint button_number) { | 309 | gboolean popup_context_menu(GtkToolbar *widget, gint G_GNUC_UNUSED(x), gint G_GNUC_UNUSED(y), gint button_number) { |
308 | 310 |
src/objects/toolbar/toolbutton.c
@@ -30,6 +30,7 @@ | @@ -30,6 +30,7 @@ | ||
30 | #include "private.h" | 30 | #include "private.h" |
31 | #include <pw3270/actions.h> | 31 | #include <pw3270/actions.h> |
32 | 32 | ||
33 | + /* | ||
33 | static const struct Button { | 34 | static const struct Button { |
34 | const gchar * name; | 35 | const gchar * name; |
35 | const gchar * icon_name; | 36 | const gchar * icon_name; |
@@ -162,4 +163,5 @@ | @@ -162,4 +163,5 @@ | ||
162 | return pw3270_tool_button_new_from_action_name(action_name); | 163 | return pw3270_tool_button_new_from_action_name(action_name); |
163 | 164 | ||
164 | } | 165 | } |
166 | + */ | ||
165 | 167 |
src/objects/window/actions/hostproperties.c
@@ -50,7 +50,7 @@ | @@ -50,7 +50,7 @@ | ||
50 | GtkWidget * factory(GtkWidget *terminal) { | 50 | GtkWidget * factory(GtkWidget *terminal) { |
51 | 51 | ||
52 | GtkWidget * dialog = v3270_settings_dialog_new(); | 52 | GtkWidget * dialog = v3270_settings_dialog_new(); |
53 | - V3270Settings * settings = GTK_V3270_SETTINGS(v3270_host_select_new()); | 53 | + V3270Settings * settings = GTK_V3270_SETTINGS(v3270_host_settings_new()); |
54 | 54 | ||
55 | if(settings->title) | 55 | if(settings->title) |
56 | gtk_window_set_title(GTK_WINDOW(dialog), settings->title); | 56 | gtk_window_set_title(GTK_WINDOW(dialog), settings->title); |
src/objects/window/header.c
@@ -84,7 +84,7 @@ | @@ -84,7 +84,7 @@ | ||
84 | 84 | ||
85 | } | 85 | } |
86 | 86 | ||
87 | - static void on_sensitive(GtkWidget *button, GParamSpec *spec, GtkWidget *widget) { | 87 | + static void on_sensitive(GtkWidget G_GNUC_UNUSED(*button), GParamSpec G_GNUC_UNUSED(*spec), GtkWidget *widget) { |
88 | 88 | ||
89 | gboolean sensitive; | 89 | gboolean sensitive; |
90 | g_object_get(button, "sensitive", &sensitive, NULL); | 90 | g_object_get(button, "sensitive", &sensitive, NULL); |
@@ -100,7 +100,10 @@ | @@ -100,7 +100,10 @@ | ||
100 | 100 | ||
101 | // It's a menu | 101 | // It's a menu |
102 | g_autofree gchar * icon_name = g_strconcat(action_name+5,"-symbolic",NULL); | 102 | g_autofree gchar * icon_name = g_strconcat(action_name+5,"-symbolic",NULL); |
103 | - button = pw3270_setup_image_button(gtk_menu_button_new(),icon_name); | 103 | + |
104 | + button = gtk_menu_button_new(); | ||
105 | + gtk_button_set_image(GTK_BUTTON(button),gtk_image_new_from_icon_name(icon_name,GTK_ICON_SIZE_MENU)); | ||
106 | + | ||
104 | gtk_menu_button_set_menu_model(GTK_MENU_BUTTON(button), G_MENU_MODEL(gtk_builder_get_object(builder, action_name+5))); | 107 | gtk_menu_button_set_menu_model(GTK_MENU_BUTTON(button), G_MENU_MODEL(gtk_builder_get_object(builder, action_name+5))); |
105 | gtk_widget_set_visible(button,TRUE); | 108 | gtk_widget_set_visible(button,TRUE); |
106 | 109 | ||
@@ -113,8 +116,19 @@ | @@ -113,8 +116,19 @@ | ||
113 | // It's a window action. | 116 | // It's a window action. |
114 | GAction * action = g_action_map_lookup_action(G_ACTION_MAP(widget),action_name+4); | 117 | GAction * action = g_action_map_lookup_action(G_ACTION_MAP(widget),action_name+4); |
115 | 118 | ||
116 | - if(action) | ||
117 | - button = pw3270_action_button_new(action,action_name); | 119 | + if(action) { |
120 | + | ||
121 | + button = gtk_button_new_from_action(action,GTK_ICON_SIZE_BUTTON); | ||
122 | + | ||
123 | + gtk_actionable_set_action_name(GTK_ACTIONABLE(button),action_name); | ||
124 | + gtk_widget_set_visible(button,g_action_get_enabled(action)); | ||
125 | + | ||
126 | + | ||
127 | + } else { | ||
128 | + | ||
129 | + g_warning("Can't find action \"%s\"",action_name+4); | ||
130 | + | ||
131 | + } | ||
118 | 132 | ||
119 | } | 133 | } |
120 | 134 |
src/objects/window/private.h
@@ -73,9 +73,6 @@ | @@ -73,9 +73,6 @@ | ||
73 | 73 | ||
74 | }; | 74 | }; |
75 | 75 | ||
76 | - // Internal methods | ||
77 | - G_GNUC_INTERNAL GtkWidget * pw3270_setup_image_button(GtkWidget *button, const gchar *image_name); | ||
78 | - | ||
79 | // Actions | 76 | // Actions |
80 | G_GNUC_INTERNAL GAction * pw3270_action_host_properties_new(void); | 77 | G_GNUC_INTERNAL GAction * pw3270_action_host_properties_new(void); |
81 | G_GNUC_INTERNAL GAction * pw3270_set_color_action_new(void); | 78 | G_GNUC_INTERNAL GAction * pw3270_set_color_action_new(void); |
src/objects/window/terminal.c
@@ -86,8 +86,14 @@ | @@ -86,8 +86,14 @@ | ||
86 | 86 | ||
87 | GAction * action = g_action_map_lookup_action(G_ACTION_MAP(window), actions[ix]); | 87 | GAction * action = g_action_map_lookup_action(G_ACTION_MAP(window), actions[ix]); |
88 | 88 | ||
89 | - if(action && PW3270_IS_ACTION(action)) { | ||
90 | - pw3270_action_set_terminal_widget(action,terminal); | 89 | + if(action) { |
90 | + | ||
91 | + if(V3270_IS_ACTION(action)) { | ||
92 | + v3270_action_set_terminal_widget(action,terminal); | ||
93 | + } else if(PW3270_IS_ACTION(action)) { | ||
94 | + pw3270_action_set_terminal_widget(action,terminal); | ||
95 | + } | ||
96 | + | ||
91 | } | 97 | } |
92 | 98 | ||
93 | } | 99 | } |
src/objects/window/tools.c
@@ -30,6 +30,7 @@ | @@ -30,6 +30,7 @@ | ||
30 | #include "private.h" | 30 | #include "private.h" |
31 | #include <pw3270/application.h> | 31 | #include <pw3270/application.h> |
32 | 32 | ||
33 | + /* | ||
33 | GtkWidget * pw3270_setup_image_button(GtkWidget *button, const gchar *image_name) { | 34 | GtkWidget * pw3270_setup_image_button(GtkWidget *button, const gchar *image_name) { |
34 | 35 | ||
35 | gtk_button_set_image(GTK_BUTTON(button),gtk_image_new_from_icon_name(image_name,GTK_ICON_SIZE_MENU)); | 36 | gtk_button_set_image(GTK_BUTTON(button),gtk_image_new_from_icon_name(image_name,GTK_ICON_SIZE_MENU)); |
@@ -41,6 +42,7 @@ | @@ -41,6 +42,7 @@ | ||
41 | return button; | 42 | return button; |
42 | 43 | ||
43 | } | 44 | } |
45 | +*/ | ||
44 | 46 | ||
45 | gboolean pw3270_settings_set_int(const gchar *key, gint value) { | 47 | gboolean pw3270_settings_set_int(const gchar *key, gint value) { |
46 | 48 |
src/objects/window/window.c
@@ -142,6 +142,8 @@ | @@ -142,6 +142,8 @@ | ||
142 | // | 142 | // |
143 | pw3270_window_add_actions(GTK_WIDGET(widget)); | 143 | pw3270_window_add_actions(GTK_WIDGET(widget)); |
144 | 144 | ||
145 | + g_action_map_add_v3270_actions(G_ACTION_MAP(widget)); | ||
146 | + | ||
145 | // Map special actions | 147 | // Map special actions |
146 | { | 148 | { |
147 | size_t ix; | 149 | size_t ix; |