From 3e708c90d36f2b064363af0155fb4205b3ca356b Mon Sep 17 00:00:00 2001 From: Perry Werneck Date: Thu, 24 Oct 2019 15:05:14 -0300 Subject: [PATCH] Setting UI type as an application property. --- src/include/pw3270/application.h | 4 +++- src/objects/window/application.c | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/objects/window/testprogram/testprogram.c | 3 --- src/objects/window/window.c | 16 +--------------- 4 files changed, 90 insertions(+), 19 deletions(-) diff --git a/src/include/pw3270/application.h b/src/include/pw3270/application.h index ae6582a..586e59c 100644 --- a/src/include/pw3270/application.h +++ b/src/include/pw3270/application.h @@ -50,7 +50,7 @@ #define PW3270_IS_APPLICATION_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), \ PW3270_TYPE_APPLICATION)) #define PW3270_APPLICATION_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), \ - GTK_TYPE_APPLICATION, pw3270ApplicationClass)) + GTK_TYPE_APPLICATION, pw3270ApplicationClass)) typedef enum _pw3270_ui_type { PW3270_UI_STYLE_CLASSICAL, ///< @brief Interface "classica", com menu e toolbar. @@ -63,6 +63,8 @@ GType pw3270Application_get_type(); GtkApplication * pw3270_application_new(const gchar *application_id, GApplicationFlags flags); + + void pw3270_application_set_ui_type(GApplication *app, PW3270_UI_TYPE type); PW3270_UI_TYPE pw3270_application_get_ui_type(GApplication *app); G_END_DECLS diff --git a/src/objects/window/application.c b/src/objects/window/application.c index d6002f5..98b075c 100644 --- a/src/objects/window/application.c +++ b/src/objects/window/application.c @@ -34,12 +34,24 @@ #include "private.h" #include + enum { + PROP_ZERO, + PROP_UI_TYPE, + + NUM_PROPERTIES + }; + + static GParamSpec * props[NUM_PROPERTIES]; + struct _pw3270ApplicationClass { GtkApplicationClass parent_class; }; struct _pw3270Application { GtkApplication parent; + + PW3270_UI_TYPE ui_type; + }; static void startup(GApplication * application); @@ -48,18 +60,71 @@ G_DEFINE_TYPE(pw3270Application, pw3270Application, GTK_TYPE_APPLICATION); + static void get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { + + switch (prop_id) { + case PROP_UI_TYPE: + g_value_set_uint(value,pw3270_application_get_ui_type(G_APPLICATION(object))); + break; + + default: + g_assert_not_reached (); + } + + } + + static void set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { + + switch (prop_id) { + case PROP_UI_TYPE: + pw3270_application_set_ui_type(G_APPLICATION(object),g_value_get_uint(value)); + break; + + default: + g_assert_not_reached (); + } + + } + static void pw3270Application_class_init(pw3270ApplicationClass *klass) { GApplicationClass *application_class = G_APPLICATION_CLASS(klass); + GObjectClass *object_class = G_OBJECT_CLASS(klass); + + object_class->get_property = get_property; + object_class->set_property = set_property; application_class->startup = startup; application_class->activate = activate; application_class->open = open; + props[PROP_UI_TYPE] = + g_param_spec_uint( + "ui_type", + _("UI Type"), + _("The code of the User interface type"), + PW3270_UI_STYLE_CLASSICAL, + PW3270_UI_STYLE_GNOME, +#ifdef _WIN32 + PW3270_UI_STYLE_CLASSICAL, +#else + PW3270_UI_STYLE_GNOME, +#endif // _WIN32 + G_PARAM_READABLE|G_PARAM_WRITABLE + ); + + + g_object_class_install_properties(object_class, NUM_PROPERTIES, props); + } static void pw3270Application_init(pw3270Application *app) { +#ifdef _WIN32 + app->ui_type = PW3270_UI_STYLE_CLASSICAL; +#else + app->ui_type = PW3270_UI_STYLE_GNOME; +#endif // _WIN32 } @@ -179,3 +244,24 @@ } + void pw3270_application_set_ui_type(GApplication *app, PW3270_UI_TYPE type) { + + g_return_if_fail(PW3270_IS_APPLICATION(app)); + + pw3270Application * application = PW3270_APPLICATION(app); + + if(application->ui_type == type) + return; + + application->ui_type = type; + g_object_notify_by_pspec(G_OBJECT(app), props[PROP_UI_TYPE]); + + } + + PW3270_UI_TYPE pw3270_application_get_ui_type(GApplication *app) { + + g_return_val_if_fail(PW3270_IS_APPLICATION(app),PW3270_UI_STYLE_CLASSICAL); + return PW3270_APPLICATION(app)->ui_type; + + } + diff --git a/src/objects/window/testprogram/testprogram.c b/src/objects/window/testprogram/testprogram.c index dfed455..223998e 100644 --- a/src/objects/window/testprogram/testprogram.c +++ b/src/objects/window/testprogram/testprogram.c @@ -88,8 +88,5 @@ int main (int argc, char **argv) { } -PW3270_UI_TYPE pw3270_application_get_ui_type(GApplication *app) { - return PW3270_UI_STYLE_GNOME; -} diff --git a/src/objects/window/window.c b/src/objects/window/window.c index 51c88c3..3924ece 100644 --- a/src/objects/window/window.c +++ b/src/objects/window/window.c @@ -35,20 +35,6 @@ static void pw3270ApplicationWindow_class_init(pw3270ApplicationWindowClass *klass) { - /* - window_props[PROP_UI_STYLE] = - g_param_spec_uint ( - "ui_style", // P_() - "ui_style", // P_() - _( "The application interface style" ), - PW3270_UI_STYLE_CLASSICAL, - PW3270_UI_STYLE_GNOME, - PW3270_UI_STYLE_GNOME, - G_PARAM_READABLE - ); - */ - - } static void pw3270ApplicationWindow_init(pw3270ApplicationWindow *widget) { @@ -141,7 +127,7 @@ // Create "new tab" bar GtkWidget * new_tab_button = pw3270_setup_image_button(gtk_button_new(),"tab-new-symbolic"); - gtk_actionable_set_action_name(GTK_ACTIONABLE(new_tab_button),"app.new_tab"); + gtk_actionable_set_action_name(GTK_ACTIONABLE(new_tab_button),"app.new.tab"); gtk_header_bar_pack_start(header, new_tab_button); // Show the new header -- libgit2 0.21.2