diff --git a/src/include/v3270/keyfile.h b/src/include/v3270/keyfile.h index 149923f..0f48473 100644 --- a/src/include/v3270/keyfile.h +++ b/src/include/v3270/keyfile.h @@ -42,6 +42,7 @@ G_BEGIN_DECLS typedef struct _V3270KeyFile V3270KeyFile; +void v3270_set_default_session(GtkWidget *terminal); gchar * v3270_keyfile_get_default_filename(void); gchar * v3270_key_file_get_default_path(GtkWidget *terminal); diff --git a/src/main/main.c b/src/main/main.c index 796d4c7..cca6e34 100644 --- a/src/main/main.c +++ b/src/main/main.c @@ -51,22 +51,9 @@ static gboolean quit_signal(GtkApplication *app) { debug("%s",__FUNCTION__); g_message("Terminating by signal"); - - /* - GList *list = gtk_application_get_windows(GTK_APPLICATION(application)); - - while(list) { - - GtkWidget * window = GTK_WIDGET(list->data); - list = list->next; - - gtk_widget_destroy(window); - - } - */ - g_application_quit(G_APPLICATION(app)); return FALSE; + } #endif // G_OS_UNIX diff --git a/src/objects/application/application.c b/src/objects/application/application.c index e9c4a7e..71df2e6 100644 --- a/src/objects/application/application.c +++ b/src/objects/application/application.c @@ -63,8 +63,8 @@ struct _pw3270Application { }; -static void startup(GApplication * application); -static void activate(GApplication * application); +static void startup(GApplication * application); +static void activate(GApplication * application); static void finalize(GObject *object); G_DEFINE_TYPE(pw3270Application, pw3270Application, GTK_TYPE_APPLICATION); diff --git a/src/objects/application/open.c b/src/objects/application/open.c index 076c47d..e425b91 100644 --- a/src/objects/application/open.c +++ b/src/objects/application/open.c @@ -29,6 +29,7 @@ #include "private.h" #include +#include gchar * v3270_keyfile_find(const gchar *name) { // @@ -88,6 +89,8 @@ void pw3270_application_open(GApplication *application, GFile **files, gint n_fi if(!(g_ascii_strcasecmp(scheme,"tn3270") && g_ascii_strcasecmp(scheme,"tn3270s"))) { + // It's an URL, load it in the default session. + g_autofree gchar * uri = g_file_get_uri(files[file]); size_t sz = strlen(uri); @@ -102,7 +105,11 @@ void pw3270_application_open(GApplication *application, GFile **files, gint n_fi window = pw3270_application_window_new_tab(window, NULL); } - v3270_set_url(pw3270_application_window_get_active_terminal(window),uri); + // Load default + GtkWidget * terminal = pw3270_application_window_get_active_terminal(window); + + v3270_set_default_session(terminal); + v3270_set_url(terminal,uri); } diff --git a/src/objects/window/terminal.c b/src/objects/window/terminal.c index 3db5824..26171f9 100644 --- a/src/objects/window/terminal.c +++ b/src/objects/window/terminal.c @@ -120,6 +120,37 @@ static gboolean save_popup_response(GtkWidget *widget, const gchar *popup_name, return TRUE; } +void v3270_set_default_session(GtkWidget *terminal) { + + GError * error = NULL; + g_autofree gchar * filename = v3270_keyfile_get_default_filename(); + + v3270_key_file_open(terminal,filename,&error); + + if(error) { + + GtkWidget * dialog = gtk_message_dialog_new_with_markup( + GTK_WINDOW(gtk_widget_get_toplevel(terminal)), + GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_ERROR, + GTK_BUTTONS_CANCEL, + _("Can't use default session file") + ); + + gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),"%s",error->message); + + gtk_window_set_title(GTK_WINDOW(dialog),_("Can't load session file")); + + gtk_widget_show_all(dialog); + + g_signal_connect(dialog,"close",G_CALLBACK(gtk_widget_destroy),NULL); + g_signal_connect(dialog,"response",G_CALLBACK(gtk_widget_destroy),NULL); + + g_error_free(error); + + } +} + GtkWidget * pw3270_terminal_new(const gchar *session_file) { GtkWidget * terminal = v3270_new(); -- libgit2 0.21.2