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,6 +2,7 @@
2 X-SuSE-translate=true 2 X-SuSE-translate=true
3 GenericName=@PRODUCT_NAME@ 3 GenericName=@PRODUCT_NAME@
4 Name=3270 Terminal 4 Name=3270 Terminal
  5 +Name[pt_BR]=Terminal 3270
5 Comment=@PACKAGE_DESCRIPTION@ 6 Comment=@PACKAGE_DESCRIPTION@
6 Exec=@PRODUCT_NAME@ 7 Exec=@PRODUCT_NAME@
7 Icon=@PRODUCT_NAME@ 8 Icon=@PRODUCT_NAME@
@@ -9,6 +10,20 @@ Terminal=false @@ -9,6 +10,20 @@ Terminal=false
9 Type=Application 10 Type=Application
10 StartupNotify=true 11 StartupNotify=true
11 12
  13 +Actions=gnomeui;classicalui
  14 +
12 # https://specifications.freedesktop.org/menu-spec/menu-spec-1.0.html 15 # https://specifications.freedesktop.org/menu-spec/menu-spec-1.0.html
13 Categories=System;TerminalEmulator; 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,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 #else 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 #ifdef _WIN32 239 #ifdef _WIN32
218 { 240 {
@@ -225,13 +247,6 @@ @@ -225,13 +247,6 @@
225 } 247 }
226 #endif // _WIN32 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 g_settings_bind(app->settings, "ui-style", app, "ui-style", G_SETTINGS_BIND_DEFAULT); 250 g_settings_bind(app->settings, "ui-style", app, "ui-style", G_SETTINGS_BIND_DEFAULT);
236 } 251 }
237 252
@@ -420,6 +435,47 @@ @@ -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 void pw3270_application_plugin_foreach(GApplication *app, GFunc func, gpointer user_data) { 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,6 +48,7 @@
48 48
49 G_GNUC_INTERNAL void pw3270_application_open(GApplication * application, GFile **files, gint n_files, const gchar *hint); 49 G_GNUC_INTERNAL void pw3270_application_open(GApplication * application, GFile **files, gint n_files, const gchar *hint);
50 G_GNUC_INTERNAL GtkWidget * pw3270_terminal_new(const gchar *session_file); 50 G_GNUC_INTERNAL GtkWidget * pw3270_terminal_new(const gchar *session_file);
  51 + G_GNUC_INTERNAL GSettings * pw3270_application_settings_new();
51 52
52 // Actions 53 // Actions
53 G_GNUC_INTERNAL GAction * pw3270_about_action_new(); 54 G_GNUC_INTERNAL GAction * pw3270_about_action_new();