Commit 2d0cb1b17ecc87459918b3f8067a223e883e14be
1 parent
2fae538c
Exists in
master
and in
4 other branches
Adding option to switch the user interface.
Showing
3 changed files
with
109 additions
and
37 deletions
Show diff stats
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(); |