diff --git a/pw3270.cbp b/pw3270.cbp
index e74484d..268b5a6 100644
--- a/pw3270.cbp
+++ b/pw3270.cbp
@@ -147,6 +147,9 @@
+
+
+
diff --git a/src/include/pw3270.h b/src/include/pw3270.h
index 7bf732f..fcbccb2 100644
--- a/src/include/pw3270.h
+++ b/src/include/pw3270.h
@@ -70,7 +70,7 @@
const gchar * v3270_get_session_filename(GtkWidget *widget);
void v3270_set_session_filename(GtkWidget *widget, const gchar *filename);
-
+ GtkWidget * pw3270_settings_dialog_new(const gchar *title, GtkWindow *parent);
G_END_DECLS
diff --git a/src/include/pw3270/window.h b/src/include/pw3270/window.h
index 49d0744..0db5e57 100644
--- a/src/include/pw3270/window.h
+++ b/src/include/pw3270/window.h
@@ -59,6 +59,8 @@
GType pw3270ApplicationWindow_get_type();
GtkWidget * pw3270_application_window_new(GtkApplication * app, const gchar *session_file);
+ gint pw3270_application_window_append_page(GtkWidget *window, GtkWidget *terminal);
+
/// @brief Set the active terminal widget.
void pw3270_application_window_set_active_terminal(GtkWidget *window, GtkWidget *terminal);
diff --git a/src/main/tools.c b/src/main/tools.c
index c73bba4..0638fea 100644
--- a/src/main/tools.c
+++ b/src/main/tools.c
@@ -110,4 +110,34 @@
}
+ GtkWidget * pw3270_settings_dialog_new(const gchar *title, GtkWindow *parent) {
+
+ gboolean use_header;
+ g_object_get(gtk_settings_get_default(), "gtk-dialogs-use-header", &use_header, NULL);
+
+ GtkWidget * dialog =
+ GTK_WIDGET(g_object_new(
+ GTK_TYPE_DIALOG,
+ "use-header-bar", (use_header ? 1 : 0),
+ NULL
+ ));
+
+ gtk_window_set_title(GTK_WINDOW(dialog),title);
+ gtk_window_set_deletable(GTK_WINDOW(dialog),FALSE);
+ gtk_window_set_destroy_with_parent(GTK_WINDOW(dialog), TRUE);
+ gtk_window_set_transient_for(GTK_WINDOW(dialog),parent);
+
+ g_signal_connect(dialog,"close",G_CALLBACK(gtk_widget_destroy),NULL);
+
+ gtk_dialog_add_buttons(
+ GTK_DIALOG(dialog),
+ _("_Cancel"), GTK_RESPONSE_CANCEL,
+ _("_Apply"), GTK_RESPONSE_APPLY,
+ NULL
+ );
+
+ return dialog;
+
+ }
+
diff --git a/src/objects/application/actions/preferences.c b/src/objects/application/actions/preferences.c
index 46c164c..6c7eda1 100644
--- a/src/objects/application/actions/preferences.c
+++ b/src/objects/application/actions/preferences.c
@@ -128,29 +128,10 @@
debug("%s",__FUNCTION__);
// Create dialog.
- gboolean use_header;
- g_object_get(gtk_settings_get_default(), "gtk-dialogs-use-header", &use_header, NULL);
-
- GtkWidget * dialog =
- GTK_WIDGET(g_object_new(
- GTK_TYPE_DIALOG,
- "use-header-bar", (use_header ? 1 : 0),
- NULL
- ));
-
- gtk_window_set_title(GTK_WINDOW(dialog),_("Application preferences"));
- gtk_window_set_deletable(GTK_WINDOW(dialog),FALSE);
- gtk_window_set_destroy_with_parent(GTK_WINDOW(dialog), TRUE);
-
- gtk_window_set_transient_for(GTK_WINDOW(dialog),gtk_application_get_active_window(GTK_APPLICATION(application)));
- gtk_window_set_destroy_with_parent(GTK_WINDOW(dialog),TRUE);
-
- gtk_dialog_add_buttons(
- GTK_DIALOG(dialog),
- _("_Cancel"), GTK_RESPONSE_CANCEL,
- _("_Apply"), GTK_RESPONSE_APPLY,
- NULL
- );
+ GtkWidget * dialog = pw3270_settings_dialog_new(
+ _("Application preferences"),
+ gtk_application_get_active_window(GTK_APPLICATION(application))
+ );
// Create setttings data.
Pw3270SettingsDialog * settings = g_new0(Pw3270SettingsDialog,1);
@@ -159,7 +140,6 @@
settings->application = G_APPLICATION(application);
g_simple_action_set_enabled(action,FALSE);
- gtk_window_set_deletable(GTK_WINDOW(dialog),FALSE);
// Create settings notebook.
@@ -177,7 +157,6 @@
// Connection signals.
g_signal_connect(dialog,"destroy",G_CALLBACK(on_destroy),settings);
g_signal_connect(dialog,"response",G_CALLBACK(on_response),settings);
- g_signal_connect(dialog,"close",G_CALLBACK(gtk_widget_destroy),NULL);
// Load pages.
Pw3270SettingsPage * pages[] = {
@@ -199,7 +178,6 @@
// Show dialog.
gtk_widget_show_all(dialog);
- gtk_window_set_deletable(GTK_WINDOW(dialog),FALSE);
}
diff --git a/src/objects/application/private.h b/src/objects/application/private.h
index 36c87cf..8c22baf 100644
--- a/src/objects/application/private.h
+++ b/src/objects/application/private.h
@@ -47,7 +47,6 @@
#include
G_GNUC_INTERNAL void pw3270_application_open(GApplication * application, GFile **files, gint n_files, const gchar *hint);
- G_GNUC_INTERNAL gint pw3270_application_window_append_page(GtkWidget *window, GtkWidget *terminal);
G_GNUC_INTERNAL GtkWidget * pw3270_terminal_new(const gchar *session_file);
// Actions
diff --git a/src/objects/window/page.c b/src/objects/window/page.c
index 0702c2f..4e3751f 100644
--- a/src/objects/window/page.c
+++ b/src/objects/window/page.c
@@ -33,6 +33,7 @@
#include
#include
#include
+ #include
//---[ Gtk Label with customized popup-menu ]---------------------------------------------------------------------------------------
@@ -110,7 +111,7 @@
static gboolean on_popup_menu(GtkWidget *widget, gboolean selected, gboolean online, GdkEvent *event, pw3270ApplicationWindow * window);
static void label_populate_popup(GtkLabel *label, GtkMenu *menu, GtkWidget *terminal);
- gint pw3270_application_window_append_page(pw3270ApplicationWindow * window, GtkWidget * terminal) {
+ gint pw3270_application_window_append_page(GtkWidget * window, GtkWidget * terminal) {
GtkWidget * label =
GTK_WIDGET(
@@ -123,13 +124,12 @@
// gtk_label_new(v3270_get_session_name(terminal));
- GtkWidget * tab = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,2);
- GtkWidget * button = gtk_button_new_from_icon_name("window-close-symbolic",GTK_ICON_SIZE_MENU);
+ GtkWidget * tab = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,2);
+ GtkWidget * button = gtk_button_new_from_icon_name("window-close-symbolic",GTK_ICON_SIZE_MENU);
+ GtkNotebook * notebook = PW3270_APPLICATION_WINDOW(window)->notebook;
gtk_button_set_relief(GTK_BUTTON(button),GTK_RELIEF_NONE);
- debug("notebook: %p", window->notebook);
-
g_signal_connect(G_OBJECT(label), "populate-popup", G_CALLBACK(label_populate_popup), terminal);
g_signal_connect(G_OBJECT(terminal), "focus-in-event", G_CALLBACK(on_terminal_focus), window);
@@ -147,14 +147,10 @@
gtk_widget_show_all(terminal);
gtk_widget_show_all(tab);
- gint page = gtk_notebook_append_page(window->notebook,terminal,tab);
-
- gtk_notebook_set_tab_detachable(window->notebook,terminal,TRUE);
- gtk_notebook_set_tab_reorderable(window->notebook,terminal,TRUE);
-
- // Setup session.
+ gint page = gtk_notebook_append_page(notebook,terminal,tab);
-// H3270 * hSession = v3270_get_session(terminal);
+ gtk_notebook_set_tab_detachable(notebook,terminal,TRUE);
+ gtk_notebook_set_tab_reorderable(notebook,terminal,TRUE);
return page;
@@ -164,47 +160,6 @@
gtk_widget_grab_default(terminal);
pw3270_application_window_set_active_terminal(window,terminal);
-
- /*
- if(gtk_window_get_default_widget(window) == terminal) {
- return FALSE;
- }
-
- // Store the active terminal widget.
- gtk_widget_grab_default(terminal);
- debug("Terminal %p is now default",terminal);
-
- // Change window title
- g_autofree gchar * title = v3270_get_session_title(terminal);
- gtk_window_set_title(window, title);
-
- pw3270_window_set_subtitle(GTK_WIDGET(window), v3270_is_connected(terminal) ? _("Connected to host") : _("Disconnected from host"));
-
- // Update actions
- size_t ix;
- gchar ** actions = g_action_group_list_actions(G_ACTION_GROUP(window));
-
- for(ix = 0; actions[ix]; ix++) {
-
-// debug("%s",actions[ix]);
-
- GAction * action = g_action_map_lookup_action(G_ACTION_MAP(window), actions[ix]);
-
- if(action) {
-
- if(V3270_IS_ACTION(action)) {
- v3270_action_set_terminal_widget(action,terminal);
- } else if(PW3270_IS_ACTION(action)) {
- pw3270_action_set_terminal_widget(action,terminal);
- }
-
- }
-
- }
-
- g_strfreev(actions);
- */
-
return FALSE;
}
@@ -273,7 +228,61 @@
}
static void rename_session(GtkWidget G_GNUC_UNUSED(*widget), GtkWidget *terminal) {
+
debug("%s",__FUNCTION__);
+
+ GtkWidget * dialog = pw3270_settings_dialog_new(
+ _("Rename session"),
+ GTK_WINDOW(gtk_widget_get_toplevel(terminal))
+ );
+
+ // https://developer.gnome.org/hig/stable/visual-layout.html.en
+ GtkWidget * content = gtk_dialog_get_content_area(GTK_DIALOG(dialog));
+ gtk_container_set_border_width(GTK_CONTAINER(content),18);
+
+ GtkWidget * box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,12);
+ gtk_box_pack_start(GTK_BOX(content),box,TRUE,TRUE,0);
+
+
+ // Create label.
+ GtkWidget *label = gtk_label_new(_("Session name"));
+ gtk_label_set_xalign(GTK_LABEL(label),1);
+ gtk_box_pack_start(GTK_BOX(box),label,FALSE,TRUE,0);
+
+ // Create entry
+ GtkWidget * entry = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(entry),10);
+ gtk_entry_set_activates_default(GTK_ENTRY(entry),TRUE);
+ gtk_entry_set_width_chars(GTK_ENTRY(entry),12);
+ gtk_entry_set_placeholder_text(GTK_ENTRY(entry),G_STRINGIFY(PRODUCT_NAME));
+ gtk_entry_set_input_purpose(GTK_ENTRY(entry),GTK_INPUT_PURPOSE_ALPHA);
+
+ {
+ g_autofree gchar * session_name = g_strdup(v3270_get_session_name(terminal));
+
+ gchar *ptr = strrchr(session_name,':');
+ if(ptr)
+ *ptr = 0;
+
+ gtk_entry_set_text(GTK_ENTRY(entry),session_name);
+
+ }
+
+ gtk_box_pack_start(GTK_BOX(box),entry,FALSE,TRUE,0);
+
+ gtk_widget_show_all(dialog);
+
+ if(gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_APPLY) {
+
+ v3270_set_session_name(terminal, gtk_entry_get_text(GTK_ENTRY(entry)));
+
+
+ g_signal_emit_by_name(terminal,"save-settings");
+ }
+
+ gtk_widget_destroy(dialog);
+
+
}
static gboolean on_popup_menu(GtkWidget *widget, gboolean selected, gboolean online, GdkEvent *event, pw3270ApplicationWindow * window) {
@@ -298,7 +307,7 @@
}
- static void label_populate_popup(GtkLabel *label, GtkMenu *menu, GtkWidget *terminal) {
+ static void label_populate_popup(GtkLabel G_GNUC_UNUSED(*label), GtkMenu *menu, GtkWidget *terminal) {
static const struct Item {
const gchar * label;
diff --git a/src/objects/window/terminal.c b/src/objects/window/terminal.c
index ffe30fe..97d9780 100644
--- a/src/objects/window/terminal.c
+++ b/src/objects/window/terminal.c
@@ -69,6 +69,8 @@
session->changed = FALSE;
+ debug("%s(%p,%p)",__FUNCTION__,terminal,session);
+
v3270_to_key_file(terminal,session->key_file,"terminal");
v3270_accelerator_map_to_key_file(terminal, session->key_file, "accelerators");
diff --git a/src/objects/window/window.c b/src/objects/window/window.c
index 1473b0a..e438b9d 100644
--- a/src/objects/window/window.c
+++ b/src/objects/window/window.c
@@ -52,28 +52,6 @@
pw3270_application_window_set_active_terminal(widget,NULL);
- /*
- // Update actions
- gchar ** actions = g_action_group_list_actions(G_ACTION_GROUP(widget));
-
- for(ix = 0; actions[ix]; ix++) {
-
- GAction * action = g_action_map_lookup_action(G_ACTION_MAP(widget), actions[ix]);
-
- if(!action)
- continue;
-
- if(PW3270_IS_ACTION(action)) {
- pw3270_action_set_terminal_widget(action,NULL);
- } else if(V3270_IS_ACTION(action)) {
- v3270_action_set_terminal_widget(action,NULL);
- }
-
- }
- g_strfreev(actions);
- */
-
-
// Destroy popups
for(ix = 0; ix < G_N_ELEMENTS(window->popups); ix++) {
if(window->popups[ix]) {
@@ -410,12 +388,12 @@
g_autofree gchar * title = v3270_get_session_title(terminal);
gtk_window_set_title(GTK_WINDOW(window), title);
- pw3270_window_set_subtitle(window, v3270_is_connected(terminal) ? _("Connected to host") : _("Disconnected from host"));
+ pw3270_window_set_subtitle(GTK_WIDGET(window), v3270_is_connected(terminal) ? _("Connected to host") : _("Disconnected from host"));
} else {
terminal = NULL;
- pw3270_window_set_subtitle(window, _("Disconnected from host"));
+ pw3270_window_set_subtitle(GTK_WIDGET(window), _("Disconnected from host"));
}
--
libgit2 0.21.2