Commit 2d0cb1b17ecc87459918b3f8067a223e883e14be

Authored by Perry Werneck
1 parent 2fae538c

Adding option to switch the user interface.

branding/launcher.desktop.in
... ... @@ -2,6 +2,7 @@
2 2 X-SuSE-translate=true
3 3 GenericName=@PRODUCT_NAME@
4 4 Name=3270 Terminal
  5 +Name[pt_BR]=Terminal 3270
5 6 Comment=@PACKAGE_DESCRIPTION@
6 7 Exec=@PRODUCT_NAME@
7 8 Icon=@PRODUCT_NAME@
... ... @@ -9,6 +10,20 @@ Terminal=false
9 10 Type=Application
10 11 StartupNotify=true
11 12  
  13 +Actions=gnomeui;classicalui
  14 +
12 15 # https://specifications.freedesktop.org/menu-spec/menu-spec-1.0.html
13 16 Categories=System;TerminalEmulator;
14 17  
  18 +[Desktop Action gnomeui]
  19 +Name=New window using modern user interface
  20 +Name[pt_BR]=Nova janela usando a interface de usuário atualizada
  21 +
  22 +Exec=@PRODUCT_NAME@ --user-interface=gnome
  23 +
  24 +[Desktop Action classicalui]
  25 +Name=New window using classical user interface
  26 +Name[pt_BR]=Nova janela usando a interface de usuário clássica
  27 +
  28 +Exec=@PRODUCT_NAME@ --user-interface=classic
  29 +
... ...
src/objects/application/application.c
... ... @@ -171,48 +171,70 @@
171 171  
172 172 }
173 173  
174   - static void pw3270Application_init(pw3270Application *app) {
175 174  
176   -#ifdef _WIN32
177   - app->ui_style = PW3270_UI_STYLE_CLASSICAL;
178   -#else
179   - app->ui_style = PW3270_UI_STYLE_AUTOMATIC;
180   -#endif // _WIN32
  175 + static gboolean on_user_interface(const gchar G_GNUC_UNUSED(*option), const gchar *value, gpointer G_GNUC_UNUSED(dunno), GError **error) {
181 176  
182   - // Get settings
183   - {
184   - g_autofree gchar * path = g_strconcat("/apps/" PACKAGE_NAME "/", g_get_application_name(),"/",NULL);
185   - debug("path=%s",path);
  177 + GApplication * app = g_application_get_default();
186 178  
187   -#ifdef DEBUG
188   - GError * error = NULL;
189   - GSettingsSchemaSource * source =
190   - g_settings_schema_source_new_from_directory(
191   - ".",
192   - NULL,
193   - TRUE,
194   - &error
195   - );
  179 + debug("********************* %p",app);
  180 +
  181 + g_autoptr(GSettings) app_settings = pw3270_application_settings_new();
  182 + g_autoptr(GSettings) win_settings = pw3270_application_window_settings_new();
  183 +
  184 + if(!g_ascii_strcasecmp(value,"gnome")) {
  185 +
  186 + g_settings_set_uint(app_settings,"ui-style",PW3270_UI_STYLE_GNOME);
  187 + g_settings_set_boolean(win_settings,"toolbar-visible",TRUE);
  188 + g_settings_set_boolean(win_settings,"menubar-visible",FALSE);
  189 +
  190 + } else if(!g_ascii_strcasecmp(value,"classic")) {
  191 +
  192 + g_settings_set_uint(app_settings,"ui-style",PW3270_UI_STYLE_CLASSICAL);
  193 + g_settings_set_boolean(win_settings,"toolbar-visible",TRUE);
  194 + g_settings_set_boolean(win_settings,"menubar-visible",TRUE);
  195 +
  196 + } else if(!g_ascii_strcasecmp(value,"default")) {
196 197  
197   - g_assert_no_error(error);
  198 + g_settings_set_uint(app_settings,"ui-style",PW3270_UI_STYLE_AUTOMATIC);
198 199  
199   - GSettingsSchema * schema =
200   - g_settings_schema_source_lookup(
201   - source,
202   - "br.com.bb." PACKAGE_NAME,
203   - TRUE);
  200 + } else {
204 201  
205   - debug("schema %s=%p","br.com.bb." PACKAGE_NAME,schema);
  202 + g_set_error(
  203 + error,
  204 + g_quark_from_static_string(G_STRINGIFY(PRODUCT_NAME)),
  205 + EINVAL,
  206 + _( "\"%s\" is not a valid user interface name" ), value
  207 + );
  208 +
  209 + }
  210 +
  211 + return TRUE;
  212 +
  213 + }
  214 +
  215 + static void pw3270Application_init(pw3270Application *app) {
206 216  
207   - app->settings = g_settings_new_full(schema, NULL, path);
  217 + static GOptionEntry cmd_options[] = {
208 218  
209   - g_settings_schema_source_unref(source);
  219 + { "user-interface", 'U', 0, G_OPTION_ARG_CALLBACK, &on_user_interface, N_( "Set the user-interface type" ), NULL },
  220 + { NULL }
210 221  
  222 + };
  223 +
  224 + g_application_add_main_option_entries(G_APPLICATION(app), cmd_options);
  225 +
  226 +#ifdef _WIN32
  227 + app->ui_style = PW3270_UI_STYLE_CLASSICAL;
211 228 #else
  229 + app->ui_style = PW3270_UI_STYLE_AUTOMATIC;
  230 +#endif // _WIN32
212 231  
213   - app->settings = g_settings_new_with_path("br.com.bb." PACKAGE_NAME, path);
  232 + // Get settings
  233 + app->settings = pw3270_application_settings_new();
214 234  
215   -#endif // DEBUG
  235 + // Bind properties
  236 + if(app->settings) {
  237 + g_object_ref_sink(G_OBJECT(app->settings));
216 238  
217 239 #ifdef _WIN32
218 240 {
... ... @@ -225,13 +247,6 @@
225 247 }
226 248 #endif // _WIN32
227 249  
228   - debug("app->settings=%p",app->settings);
229   -
230   - }
231   -
232   - // Bind properties
233   - if(app->settings) {
234   - g_object_ref_sink(G_OBJECT(app->settings));
235 250 g_settings_bind(app->settings, "ui-style", app, "ui-style", G_SETTINGS_BIND_DEFAULT);
236 251 }
237 252  
... ... @@ -420,6 +435,47 @@
420 435  
421 436 }
422 437  
  438 + GSettings * pw3270_application_settings_new() {
  439 +
  440 + GSettings *settings = NULL;
  441 +
  442 + g_autofree gchar * path = g_strconcat("/apps/" PACKAGE_NAME "/", g_get_application_name(),"/",NULL);
  443 + debug("path=%s",path);
  444 +
  445 +#ifdef DEBUG
  446 + GError * error = NULL;
  447 + GSettingsSchemaSource * source =
  448 + g_settings_schema_source_new_from_directory(
  449 + ".",
  450 + NULL,
  451 + TRUE,
  452 + &error
  453 + );
  454 +
  455 + g_assert_no_error(error);
  456 +
  457 + GSettingsSchema * schema =
  458 + g_settings_schema_source_lookup(
  459 + source,
  460 + "br.com.bb." PACKAGE_NAME,
  461 + TRUE);
  462 +
  463 + debug("schema %s=%p","br.com.bb." PACKAGE_NAME,schema);
  464 +
  465 + settings = g_settings_new_full(schema, NULL, path);
  466 +
  467 + g_settings_schema_source_unref(source);
  468 +
  469 +#else
  470 +
  471 + settings = g_settings_new_with_path("br.com.bb." PACKAGE_NAME, path);
  472 +
  473 +#endif // DEBUG
  474 +
  475 + return settings;
  476 + }
  477 +
  478 +
423 479 /*
424 480 void pw3270_application_plugin_foreach(GApplication *app, GFunc func, gpointer user_data) {
425 481  
... ...
src/objects/application/private.h
... ... @@ -48,6 +48,7 @@
48 48  
49 49 G_GNUC_INTERNAL void pw3270_application_open(GApplication * application, GFile **files, gint n_files, const gchar *hint);
50 50 G_GNUC_INTERNAL GtkWidget * pw3270_terminal_new(const gchar *session_file);
  51 + G_GNUC_INTERNAL GSettings * pw3270_application_settings_new();
51 52  
52 53 // Actions
53 54 G_GNUC_INTERNAL GAction * pw3270_about_action_new();
... ...