From 4b6b7ca34e780e3822a70db67ae10368399b9172 Mon Sep 17 00:00:00 2001 From: Perry Werneck Date: Mon, 6 Jan 2020 10:16:01 -0300 Subject: [PATCH] Implementing "open session in the window" action. --- src/include/pw3270/window.h | 4 ++-- src/objects/application/actions/open.c | 6 ++++-- src/objects/application/actions/window.c | 2 +- src/objects/application/application.c | 31 ++++++++----------------------- src/objects/window/terminal.c | 4 ++-- src/objects/window/window.c | 25 ++++++++++++++++++++++++- 6 files changed, 41 insertions(+), 31 deletions(-) diff --git a/src/include/pw3270/window.h b/src/include/pw3270/window.h index f3466af..b8afb8d 100644 --- a/src/include/pw3270/window.h +++ b/src/include/pw3270/window.h @@ -57,10 +57,10 @@ typedef struct _pw3270ApplicationWindow pw3270ApplicationWindow; GType pw3270ApplicationWindow_get_type(); - GtkWidget * pw3270_application_window_new(GtkApplication * app); + GtkWidget * pw3270_application_window_new(GtkApplication * app, const gchar *session_file); /// @brief Create a new terminal tab. - GtkWidget * pw3270_terminal_new(GtkWidget *window, const gchar *session_file); + GtkWidget * pw3270_application_window_new_tab(GtkWidget *window, const gchar *session_file); /// @brief Get the active terminal widget. GtkWidget * pw3270_window_get_terminal_widget(GtkWidget *window); diff --git a/src/objects/application/actions/open.c b/src/objects/application/actions/open.c index e8f3650..3f35490 100644 --- a/src/objects/application/actions/open.c +++ b/src/objects/application/actions/open.c @@ -78,7 +78,7 @@ g_autofree gchar * session_file_name = get_session_file_name(GTK_APPLICATION(application),_("Open session in new tab")); if(session_file_name) { - pw3270_terminal_new(GTK_WIDGET(gtk_application_get_active_window(GTK_APPLICATION(application))), session_file_name); + pw3270_application_window_new_tab(GTK_WIDGET(gtk_application_get_active_window(GTK_APPLICATION(application))), session_file_name); } g_simple_action_set_enabled(action,TRUE); @@ -91,7 +91,9 @@ g_autofree gchar * session_file_name = get_session_file_name(GTK_APPLICATION(application),_("Open session in new window")); if(session_file_name) { -// pw3270_terminal_new(pw3270_application_window_new(GTK_APPLICATION(application)), session_file_name); + GtkWidget *window = pw3270_application_window_new(GTK_APPLICATION(application), session_file_name); + pw3270_window_set_current_page(window,0); + gtk_window_present(GTK_WINDOW(window)); } g_simple_action_set_enabled(action,TRUE); diff --git a/src/objects/application/actions/window.c b/src/objects/application/actions/window.c index 7597e8f..ead5c67 100644 --- a/src/objects/application/actions/window.c +++ b/src/objects/application/actions/window.c @@ -59,7 +59,7 @@ void pw3270_application_new_tab_activated(GSimpleAction G_GNUC_UNUSED(*action), GVariant G_GNUC_UNUSED(*parameter), gpointer application) { debug("%s",__FUNCTION__); - pw3270_terminal_new(GTK_WIDGET(gtk_application_get_active_window(GTK_APPLICATION(application))), NULL); + pw3270_application_window_new_tab(GTK_WIDGET(gtk_application_get_active_window(GTK_APPLICATION(application))), NULL); } diff --git a/src/objects/application/application.c b/src/objects/application/application.c index 50a048d..208d511 100644 --- a/src/objects/application/application.c +++ b/src/objects/application/application.c @@ -286,29 +286,7 @@ void activate(GApplication *application) { - size_t ix; - - GtkWidget * window = pw3270_application_window_new(GTK_APPLICATION(application)); - - // Create terminal widget & associated widget - GtkWidget * terminal = pw3270_terminal_new(window, NULL); - - // Create property actions - static const gchar * properties[] = { - "model-number", - "font-family", - "dynamic-font-spacing", - "trace", - }; - - for(ix = 0; ix < G_N_ELEMENTS(properties); ix++) { - - g_action_map_add_action( - G_ACTION_MAP(window), - v3270_property_action_new(terminal,properties[ix]) - ); - - } + GtkWidget * window = pw3270_application_window_new(GTK_APPLICATION(application),NULL); // Present the new window pw3270_window_set_current_page(window,0); @@ -318,6 +296,11 @@ void open(GApplication *application, GFile **files, gint n_files, const gchar G_GNUC_UNUSED(*hint)) { +#ifndef DEBUG + #error Implementar +#endif // DEBUG + + /* GtkWindow * window = gtk_application_get_active_window(GTK_APPLICATION(application)); debug("%s was called with %d files (active_window=%p)", __FUNCTION__, n_files, window); @@ -338,6 +321,8 @@ if(last != -1) pw3270_window_set_current_page(GTK_WIDGET(window),last); + */ + } void pw3270_application_set_ui_style(GApplication *app, PW3270_UI_STYLE type) { diff --git a/src/objects/window/terminal.c b/src/objects/window/terminal.c index 257d509..649204d 100644 --- a/src/objects/window/terminal.c +++ b/src/objects/window/terminal.c @@ -377,7 +377,7 @@ } - GtkWidget * pw3270_terminal_new(GtkWidget *widget, const gchar *session_file) { + GtkWidget * pw3270_application_window_new_tab(GtkWidget *widget, const gchar *session_file) { struct SessionDescriptor * descriptor; @@ -468,7 +468,7 @@ if(path) { // It's a session file - pw3270_terminal_new(widget, path); + pw3270_application_window_new_tab(widget, path); return 0; } diff --git a/src/objects/window/window.c b/src/objects/window/window.c index c2de28b..16121b3 100644 --- a/src/objects/window/window.c +++ b/src/objects/window/window.c @@ -199,7 +199,7 @@ } - GtkWidget * pw3270_application_window_new(GtkApplication * application) { + GtkWidget * pw3270_application_window_new(GtkApplication * application, const gchar *session_file) { gchar *title = _( "IBM 3270 Terminal emulator" ); @@ -316,9 +316,32 @@ G_SETTINGS_BIND_DEFAULT ); + + // Setup default position and size gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER); gtk_window_set_default_size (GTK_WINDOW (window), 800, 500); + // Create terminal widget + GtkWidget * terminal = pw3270_application_window_new_tab(window, session_file); + + // Create property actions + static const gchar * properties[] = { + "model-number", + "font-family", + "dynamic-font-spacing", + "trace", + }; + + for(ix = 0; ix < G_N_ELEMENTS(properties); ix++) { + + g_action_map_add_action( + G_ACTION_MAP(window), + v3270_property_action_new(terminal,properties[ix]) + ); + + } + + // gtk_window_set_interactive_debugging(TRUE); return GTK_WIDGET(window); -- libgit2 0.21.2