From 061296898e15d7ae4ecc1e7b17b9071f72ee154b Mon Sep 17 00:00:00 2001 From: Perry Werneck Date: Thu, 24 Oct 2019 20:00:15 -0300 Subject: [PATCH] Implementing gsettings support. --- configure.ac | 1 + schemas/application.gschema.xml | 19 ------------------- schemas/application.gschema.xml.in | 19 +++++++++++++++++++ src/include/pw3270/application.h | 8 ++++---- src/main/main.c | 6 +++++- src/objects/window/application.c | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------- src/objects/window/window.c | 2 +- 7 files changed, 89 insertions(+), 42 deletions(-) delete mode 100644 schemas/application.gschema.xml create mode 100644 schemas/application.gschema.xml.in diff --git a/configure.ac b/configure.ac index 00ea01e..f49c807 100644 --- a/configure.ac +++ b/configure.ac @@ -194,6 +194,7 @@ dnl --------------------------------------------------------------------------- AC_SUBST(INSTALL_PACKAGES) AC_CONFIG_FILES(Makefile) +AC_CONFIG_FILES(schemas/application.gschema.xml) dnl --------------------------------------------------------------------------- dnl Output the generated config.status script. diff --git a/schemas/application.gschema.xml b/schemas/application.gschema.xml deleted file mode 100644 index 9b71833..0000000 --- a/schemas/application.gschema.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - 1 - UI Style - The ID of the current user interface style - - - - - diff --git a/schemas/application.gschema.xml.in b/schemas/application.gschema.xml.in new file mode 100644 index 0000000..9b71833 --- /dev/null +++ b/schemas/application.gschema.xml.in @@ -0,0 +1,19 @@ + + + + + + + + + 1 + UI Style + The ID of the current user interface style + + + + + diff --git a/src/include/pw3270/application.h b/src/include/pw3270/application.h index 586e59c..9544910 100644 --- a/src/include/pw3270/application.h +++ b/src/include/pw3270/application.h @@ -52,10 +52,10 @@ #define PW3270_APPLICATION_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), \ GTK_TYPE_APPLICATION, pw3270ApplicationClass)) - typedef enum _pw3270_ui_type { + typedef enum _pw3270_ui_style { PW3270_UI_STYLE_CLASSICAL, ///< @brief Interface "classica", com menu e toolbar. PW3270_UI_STYLE_GNOME, ///< @brief Interface padrĂ£o gnome. - } PW3270_UI_TYPE; + } PW3270_UI_STYLE; typedef struct _pw3270ApplicationClass pw3270ApplicationClass; @@ -64,8 +64,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); + void pw3270_application_set_ui_style(GApplication *app, PW3270_UI_STYLE type); + PW3270_UI_STYLE pw3270_application_get_ui_style(GApplication *app); G_END_DECLS diff --git a/src/main/main.c b/src/main/main.c index 4e432bb..1946c52 100644 --- a/src/main/main.c +++ b/src/main/main.c @@ -45,6 +45,7 @@ int main (int argc, char **argv) { GtkApplication *app; int status; +/* #ifdef DEBUG { GError * error = NULL; @@ -73,8 +74,11 @@ int main (int argc, char **argv) { g_object_unref(settings); } #endif // DEBUG +*/ + +// app = pw3270_application_new("br.com.bb." G_STRINGIFY(PRODUCT_NAME),G_APPLICATION_HANDLES_OPEN); + app = pw3270_application_new("br.com.bb.pw3270",G_APPLICATION_HANDLES_OPEN); - app = pw3270_application_new("br.com.bb." G_STRINGIFY(PRODUCT_NAME),G_APPLICATION_HANDLES_OPEN); status = g_application_run(G_APPLICATION (app), argc, argv); g_object_unref (app); diff --git a/src/objects/window/application.c b/src/objects/window/application.c index 98b075c..2331405 100644 --- a/src/objects/window/application.c +++ b/src/objects/window/application.c @@ -36,7 +36,7 @@ enum { PROP_ZERO, - PROP_UI_TYPE, + PROP_UI_STYLE, NUM_PROPERTIES }; @@ -50,7 +50,7 @@ struct _pw3270Application { GtkApplication parent; - PW3270_UI_TYPE ui_type; + PW3270_UI_STYLE ui_style; }; @@ -63,8 +63,8 @@ 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))); + case PROP_UI_STYLE: + g_value_set_uint(value,pw3270_application_get_ui_style(G_APPLICATION(object))); break; default: @@ -76,8 +76,8 @@ 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)); + case PROP_UI_STYLE: + pw3270_application_set_ui_style(G_APPLICATION(object),g_value_get_uint(value)); break; default: @@ -98,9 +98,9 @@ application_class->activate = activate; application_class->open = open; - props[PROP_UI_TYPE] = + props[PROP_UI_STYLE] = g_param_spec_uint( - "ui_type", + "ui-style", _("UI Type"), _("The code of the User interface type"), PW3270_UI_STYLE_CLASSICAL, @@ -121,11 +121,53 @@ static void pw3270Application_init(pw3270Application *app) { #ifdef _WIN32 - app->ui_type = PW3270_UI_STYLE_CLASSICAL; + app->ui_style = PW3270_UI_STYLE_CLASSICAL; #else - app->ui_type = PW3270_UI_STYLE_GNOME; + app->ui_style = PW3270_UI_STYLE_GNOME; #endif // _WIN32 + // Bind properties + GSettings * settings = NULL; + +#ifdef DEBUG + { + GError * error = NULL; + GSettingsSchemaSource * source = + g_settings_schema_source_new_from_directory( + ".", + NULL, + TRUE, + &error + ); + + g_assert_no_error(error); + + GSettingsSchema * schema = + g_settings_schema_source_lookup( + source, + "br.com.bb.pw3270", + TRUE); + + g_settings_schema_source_unref(source); + + settings = g_settings_new_full(schema, NULL, "/br/com/bb/pw3270/application/"); + + } +#else + + #error TODO! + +#endif // DEBUG + + if(settings) { + + g_settings_bind(settings, "ui-style", app, "ui-style", G_SETTINGS_BIND_DEFAULT); + + + g_object_unref(settings); + + } + } GtkApplication * pw3270_application_new(const gchar *application_id, GApplicationFlags flags) { @@ -200,7 +242,7 @@ GtkBuilder * builder = gtk_builder_new_from_file("ui/application.xml"); gtk_application_set_app_menu(GTK_APPLICATION (application), G_MENU_MODEL(gtk_builder_get_object (builder, "app-menu"))); - if(pw3270_application_get_ui_type(application) == PW3270_UI_STYLE_CLASSICAL) + if(pw3270_application_get_ui_style(application) == PW3270_UI_STYLE_CLASSICAL) gtk_application_set_menubar(GTK_APPLICATION (application), G_MENU_MODEL(gtk_builder_get_object (builder, "menubar"))); g_object_unref(builder); @@ -244,24 +286,24 @@ } - void pw3270_application_set_ui_type(GApplication *app, PW3270_UI_TYPE type) { + void pw3270_application_set_ui_style(GApplication *app, PW3270_UI_STYLE type) { g_return_if_fail(PW3270_IS_APPLICATION(app)); pw3270Application * application = PW3270_APPLICATION(app); - if(application->ui_type == type) + if(application->ui_style == type) return; - application->ui_type = type; - g_object_notify_by_pspec(G_OBJECT(app), props[PROP_UI_TYPE]); + application->ui_style = type; + g_object_notify_by_pspec(G_OBJECT(app), props[PROP_UI_STYLE]); } - PW3270_UI_TYPE pw3270_application_get_ui_type(GApplication *app) { + PW3270_UI_STYLE pw3270_application_get_ui_style(GApplication *app) { g_return_val_if_fail(PW3270_IS_APPLICATION(app),PW3270_UI_STYLE_CLASSICAL); - return PW3270_APPLICATION(app)->ui_type; + return PW3270_APPLICATION(app)->ui_style; } diff --git a/src/objects/window/window.c b/src/objects/window/window.c index cb13512..68ad0c8 100644 --- a/src/objects/window/window.c +++ b/src/objects/window/window.c @@ -108,7 +108,7 @@ GtkBuilder * builder = gtk_builder_new_from_file("ui/window.xml"); - switch(pw3270_application_get_ui_type(G_APPLICATION(application))) { + switch(pw3270_application_get_ui_style(G_APPLICATION(application))) { case PW3270_UI_STYLE_CLASSICAL: { gtk_window_set_title(GTK_WINDOW(window), title); -- libgit2 0.21.2