diff --git a/src/include/pw3270/application.h b/src/include/pw3270/application.h index 902b810..c58eb5f 100644 --- a/src/include/pw3270/application.h +++ b/src/include/pw3270/application.h @@ -87,6 +87,8 @@ GtkBuilder * pw3270_application_get_builder(const gchar *name); void gtk_container_remove_all(GtkContainer *container); +gboolean pw3270_application_allow_tabs(GApplication *application); + // Actions void pw3270_application_print_copy_activated(GAction *action, GVariant *parameter, GtkWidget *terminal); void pw3270_application_save_copy_activated(GAction *action, GVariant *parameter, GtkWidget *terminal); diff --git a/src/objects/application/application.c b/src/objects/application/application.c index 7fe0992..d56174a 100644 --- a/src/objects/application/application.c +++ b/src/objects/application/application.c @@ -54,11 +54,11 @@ struct _pw3270ApplicationClass { struct _pw3270Application { GtkApplication parent; - GSettings * settings; - GList * keypads; - - GSList * plugins; ///< @brief Handlers of the loaded plugins. + GSettings * settings; + GList * keypads; + gboolean allow_tabs; ///< @brief Always open window. + GSList * plugins; ///< @brief Handlers of the loaded plugins. PW3270_UI_STYLE ui_style; }; @@ -123,7 +123,6 @@ static void window_removed(GtkApplication *application, GtkWindow *window) { } } - GTK_APPLICATION_CLASS(pw3270Application_parent_class)->window_removed(application,window); } @@ -218,15 +217,36 @@ static gboolean on_user_interface(const gchar G_GNUC_UNUSED(*option), const gcha } +static gboolean on_log_file(const gchar G_GNUC_UNUSED(*option), const gchar *value, gpointer G_GNUC_UNUSED(dunno), GError **error) { + pw3270Application *app = PW3270_APPLICATION(g_application_get_default()); + + return TRUE; +} + +static gboolean on_allow_tabs(const gchar G_GNUC_UNUSED(*option), const gchar *value, gpointer G_GNUC_UNUSED(dunno), GError **error) { + pw3270Application *app = PW3270_APPLICATION(g_application_get_default()); + app->allow_tabs = (g_ascii_strcasecmp(value,"no") != 0); + if(app->allow_tabs) { + g_message("Opening new sessions on tabs"); + } else { + g_message("Opening new sessions on windows"); + } + return TRUE; +} + static void pw3270Application_init(pw3270Application *app) { static GOptionEntry cmd_options[] = { { "user-interface", 'U', 0, G_OPTION_ARG_CALLBACK, &on_user_interface, N_( "Set the user-interface type" ), NULL }, + { "log-filename", 'l', 0, G_OPTION_ARG_CALLBACK, &on_log_file, N_( "Set custom log file for the active session" ), NULL }, + { "allow-tabs", 'T', 0, G_OPTION_ARG_CALLBACK, &on_allow_tabs, N_( "If 'no' allways open a window" ), NULL }, { NULL } }; + app->allow_tabs = TRUE; + g_application_add_main_option_entries(G_APPLICATION(app), cmd_options); #ifdef _WIN32 @@ -519,6 +539,11 @@ void pw3270_application_plugin_foreach(GApplication *app, GFunc func, gpointer u } +gboolean pw3270_application_allow_tabs(GApplication *app) { + g_return_val_if_fail(PW3270_IS_APPLICATION(app),TRUE); + return PW3270_APPLICATION(app)->allow_tabs; +} + void pw3270_application_plugin_call(GApplication *app, const gchar *method, gpointer user_data) { g_return_if_fail(PW3270_IS_APPLICATION(app)); diff --git a/src/objects/application/open.c b/src/objects/application/open.c index e425b91..b532a84 100644 --- a/src/objects/application/open.c +++ b/src/objects/application/open.c @@ -97,7 +97,7 @@ void pw3270_application_open(GApplication *application, GFile **files, gint n_fi if(sz > 0 && uri[sz-1] == '/') uri[sz-1] = 0; - if(!window) { + if(!(window && pw3270_application_allow_tabs(application))) { debug("%s: Creating new window",__FUNCTION__); window = pw3270_application_window_new(GTK_APPLICATION(application), NULL); } else { @@ -122,7 +122,7 @@ void pw3270_application_open(GApplication *application, GFile **files, gint n_fi // The file exists, use it. debug("%s: Loading '%s'",__FUNCTION__,path); - if(!window) { + if(!(window && pw3270_application_allow_tabs(application))) { debug("%s: Creating new window",__FUNCTION__); window = pw3270_application_window_new(GTK_APPLICATION(application), path); } else { -- libgit2 0.21.2