Commit 3e708c90d36f2b064363af0155fb4205b3ca356b
1 parent
726bfb70
Exists in
master
and in
4 other branches
Setting UI type as an application property.
Showing
4 changed files
with
90 additions
and
19 deletions
Show diff stats
src/include/pw3270/application.h
... | ... | @@ -50,7 +50,7 @@ |
50 | 50 | #define PW3270_IS_APPLICATION_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), \ |
51 | 51 | PW3270_TYPE_APPLICATION)) |
52 | 52 | #define PW3270_APPLICATION_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), \ |
53 | - GTK_TYPE_APPLICATION, pw3270ApplicationClass)) | |
53 | + GTK_TYPE_APPLICATION, pw3270ApplicationClass)) | |
54 | 54 | |
55 | 55 | typedef enum _pw3270_ui_type { |
56 | 56 | PW3270_UI_STYLE_CLASSICAL, ///< @brief Interface "classica", com menu e toolbar. |
... | ... | @@ -63,6 +63,8 @@ |
63 | 63 | |
64 | 64 | GType pw3270Application_get_type(); |
65 | 65 | GtkApplication * pw3270_application_new(const gchar *application_id, GApplicationFlags flags); |
66 | + | |
67 | + void pw3270_application_set_ui_type(GApplication *app, PW3270_UI_TYPE type); | |
66 | 68 | PW3270_UI_TYPE pw3270_application_get_ui_type(GApplication *app); |
67 | 69 | |
68 | 70 | G_END_DECLS | ... | ... |
src/objects/window/application.c
... | ... | @@ -34,12 +34,24 @@ |
34 | 34 | #include "private.h" |
35 | 35 | #include <pw3270/application.h> |
36 | 36 | |
37 | + enum { | |
38 | + PROP_ZERO, | |
39 | + PROP_UI_TYPE, | |
40 | + | |
41 | + NUM_PROPERTIES | |
42 | + }; | |
43 | + | |
44 | + static GParamSpec * props[NUM_PROPERTIES]; | |
45 | + | |
37 | 46 | struct _pw3270ApplicationClass { |
38 | 47 | GtkApplicationClass parent_class; |
39 | 48 | }; |
40 | 49 | |
41 | 50 | struct _pw3270Application { |
42 | 51 | GtkApplication parent; |
52 | + | |
53 | + PW3270_UI_TYPE ui_type; | |
54 | + | |
43 | 55 | }; |
44 | 56 | |
45 | 57 | static void startup(GApplication * application); |
... | ... | @@ -48,18 +60,71 @@ |
48 | 60 | |
49 | 61 | G_DEFINE_TYPE(pw3270Application, pw3270Application, GTK_TYPE_APPLICATION); |
50 | 62 | |
63 | + static void get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { | |
64 | + | |
65 | + switch (prop_id) { | |
66 | + case PROP_UI_TYPE: | |
67 | + g_value_set_uint(value,pw3270_application_get_ui_type(G_APPLICATION(object))); | |
68 | + break; | |
69 | + | |
70 | + default: | |
71 | + g_assert_not_reached (); | |
72 | + } | |
73 | + | |
74 | + } | |
75 | + | |
76 | + static void set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { | |
77 | + | |
78 | + switch (prop_id) { | |
79 | + case PROP_UI_TYPE: | |
80 | + pw3270_application_set_ui_type(G_APPLICATION(object),g_value_get_uint(value)); | |
81 | + break; | |
82 | + | |
83 | + default: | |
84 | + g_assert_not_reached (); | |
85 | + } | |
86 | + | |
87 | + } | |
88 | + | |
51 | 89 | static void pw3270Application_class_init(pw3270ApplicationClass *klass) { |
52 | 90 | |
53 | 91 | GApplicationClass *application_class = G_APPLICATION_CLASS(klass); |
92 | + GObjectClass *object_class = G_OBJECT_CLASS(klass); | |
93 | + | |
94 | + object_class->get_property = get_property; | |
95 | + object_class->set_property = set_property; | |
54 | 96 | |
55 | 97 | application_class->startup = startup; |
56 | 98 | application_class->activate = activate; |
57 | 99 | application_class->open = open; |
58 | 100 | |
101 | + props[PROP_UI_TYPE] = | |
102 | + g_param_spec_uint( | |
103 | + "ui_type", | |
104 | + _("UI Type"), | |
105 | + _("The code of the User interface type"), | |
106 | + PW3270_UI_STYLE_CLASSICAL, | |
107 | + PW3270_UI_STYLE_GNOME, | |
108 | +#ifdef _WIN32 | |
109 | + PW3270_UI_STYLE_CLASSICAL, | |
110 | +#else | |
111 | + PW3270_UI_STYLE_GNOME, | |
112 | +#endif // _WIN32 | |
113 | + G_PARAM_READABLE|G_PARAM_WRITABLE | |
114 | + ); | |
115 | + | |
116 | + | |
117 | + g_object_class_install_properties(object_class, NUM_PROPERTIES, props); | |
118 | + | |
59 | 119 | } |
60 | 120 | |
61 | 121 | static void pw3270Application_init(pw3270Application *app) { |
62 | 122 | |
123 | +#ifdef _WIN32 | |
124 | + app->ui_type = PW3270_UI_STYLE_CLASSICAL; | |
125 | +#else | |
126 | + app->ui_type = PW3270_UI_STYLE_GNOME; | |
127 | +#endif // _WIN32 | |
63 | 128 | |
64 | 129 | } |
65 | 130 | |
... | ... | @@ -179,3 +244,24 @@ |
179 | 244 | |
180 | 245 | } |
181 | 246 | |
247 | + void pw3270_application_set_ui_type(GApplication *app, PW3270_UI_TYPE type) { | |
248 | + | |
249 | + g_return_if_fail(PW3270_IS_APPLICATION(app)); | |
250 | + | |
251 | + pw3270Application * application = PW3270_APPLICATION(app); | |
252 | + | |
253 | + if(application->ui_type == type) | |
254 | + return; | |
255 | + | |
256 | + application->ui_type = type; | |
257 | + g_object_notify_by_pspec(G_OBJECT(app), props[PROP_UI_TYPE]); | |
258 | + | |
259 | + } | |
260 | + | |
261 | + PW3270_UI_TYPE pw3270_application_get_ui_type(GApplication *app) { | |
262 | + | |
263 | + g_return_val_if_fail(PW3270_IS_APPLICATION(app),PW3270_UI_STYLE_CLASSICAL); | |
264 | + return PW3270_APPLICATION(app)->ui_type; | |
265 | + | |
266 | + } | |
267 | + | ... | ... |
src/objects/window/testprogram/testprogram.c
src/objects/window/window.c
... | ... | @@ -35,20 +35,6 @@ |
35 | 35 | |
36 | 36 | static void pw3270ApplicationWindow_class_init(pw3270ApplicationWindowClass *klass) { |
37 | 37 | |
38 | - /* | |
39 | - window_props[PROP_UI_STYLE] = | |
40 | - g_param_spec_uint ( | |
41 | - "ui_style", // P_() | |
42 | - "ui_style", // P_() | |
43 | - _( "The application interface style" ), | |
44 | - PW3270_UI_STYLE_CLASSICAL, | |
45 | - PW3270_UI_STYLE_GNOME, | |
46 | - PW3270_UI_STYLE_GNOME, | |
47 | - G_PARAM_READABLE | |
48 | - ); | |
49 | - */ | |
50 | - | |
51 | - | |
52 | 38 | } |
53 | 39 | |
54 | 40 | static void pw3270ApplicationWindow_init(pw3270ApplicationWindow *widget) { |
... | ... | @@ -141,7 +127,7 @@ |
141 | 127 | |
142 | 128 | // Create "new tab" bar |
143 | 129 | GtkWidget * new_tab_button = pw3270_setup_image_button(gtk_button_new(),"tab-new-symbolic"); |
144 | - gtk_actionable_set_action_name(GTK_ACTIONABLE(new_tab_button),"app.new_tab"); | |
130 | + gtk_actionable_set_action_name(GTK_ACTIONABLE(new_tab_button),"app.new.tab"); | |
145 | 131 | gtk_header_bar_pack_start(header, new_tab_button); |
146 | 132 | |
147 | 133 | // Show the new header | ... | ... |