Commit 3e708c90d36f2b064363af0155fb4205b3ca356b

Authored by Perry Werneck
1 parent 726bfb70

Setting UI type as an application property.

src/include/pw3270/application.h
@@ -50,7 +50,7 @@ @@ -50,7 +50,7 @@
50 #define PW3270_IS_APPLICATION_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), \ 50 #define PW3270_IS_APPLICATION_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), \
51 PW3270_TYPE_APPLICATION)) 51 PW3270_TYPE_APPLICATION))
52 #define PW3270_APPLICATION_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), \ 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 typedef enum _pw3270_ui_type { 55 typedef enum _pw3270_ui_type {
56 PW3270_UI_STYLE_CLASSICAL, ///< @brief Interface "classica", com menu e toolbar. 56 PW3270_UI_STYLE_CLASSICAL, ///< @brief Interface "classica", com menu e toolbar.
@@ -63,6 +63,8 @@ @@ -63,6 +63,8 @@
63 63
64 GType pw3270Application_get_type(); 64 GType pw3270Application_get_type();
65 GtkApplication * pw3270_application_new(const gchar *application_id, GApplicationFlags flags); 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 PW3270_UI_TYPE pw3270_application_get_ui_type(GApplication *app); 68 PW3270_UI_TYPE pw3270_application_get_ui_type(GApplication *app);
67 69
68 G_END_DECLS 70 G_END_DECLS
src/objects/window/application.c
@@ -34,12 +34,24 @@ @@ -34,12 +34,24 @@
34 #include "private.h" 34 #include "private.h"
35 #include <pw3270/application.h> 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 struct _pw3270ApplicationClass { 46 struct _pw3270ApplicationClass {
38 GtkApplicationClass parent_class; 47 GtkApplicationClass parent_class;
39 }; 48 };
40 49
41 struct _pw3270Application { 50 struct _pw3270Application {
42 GtkApplication parent; 51 GtkApplication parent;
  52 +
  53 + PW3270_UI_TYPE ui_type;
  54 +
43 }; 55 };
44 56
45 static void startup(GApplication * application); 57 static void startup(GApplication * application);
@@ -48,18 +60,71 @@ @@ -48,18 +60,71 @@
48 60
49 G_DEFINE_TYPE(pw3270Application, pw3270Application, GTK_TYPE_APPLICATION); 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 static void pw3270Application_class_init(pw3270ApplicationClass *klass) { 89 static void pw3270Application_class_init(pw3270ApplicationClass *klass) {
52 90
53 GApplicationClass *application_class = G_APPLICATION_CLASS(klass); 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 application_class->startup = startup; 97 application_class->startup = startup;
56 application_class->activate = activate; 98 application_class->activate = activate;
57 application_class->open = open; 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 static void pw3270Application_init(pw3270Application *app) { 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,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
@@ -88,8 +88,5 @@ int main (int argc, char **argv) { @@ -88,8 +88,5 @@ int main (int argc, char **argv) {
88 88
89 } 89 }
90 90
91 -PW3270_UI_TYPE pw3270_application_get_ui_type(GApplication *app) {  
92 - return PW3270_UI_STYLE_GNOME;  
93 -}  
94 91
95 92
src/objects/window/window.c
@@ -35,20 +35,6 @@ @@ -35,20 +35,6 @@
35 35
36 static void pw3270ApplicationWindow_class_init(pw3270ApplicationWindowClass *klass) { 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 static void pw3270ApplicationWindow_init(pw3270ApplicationWindow *widget) { 40 static void pw3270ApplicationWindow_init(pw3270ApplicationWindow *widget) {
@@ -141,7 +127,7 @@ @@ -141,7 +127,7 @@
141 127
142 // Create "new tab" bar 128 // Create "new tab" bar
143 GtkWidget * new_tab_button = pw3270_setup_image_button(gtk_button_new(),"tab-new-symbolic"); 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 gtk_header_bar_pack_start(header, new_tab_button); 131 gtk_header_bar_pack_start(header, new_tab_button);
146 132
147 // Show the new header 133 // Show the new header