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(); |