diff --git a/src/dialogs/commondialog.c b/src/dialogs/commondialog.c index 7bde8d0..552fba2 100644 --- a/src/dialogs/commondialog.c +++ b/src/dialogs/commondialog.c @@ -28,6 +28,7 @@ */ #include "private.h" + #include /*--[ Implement ]------------------------------------------------------------------------------------*/ @@ -84,12 +85,25 @@ LIB3270_EXPORT GtkWidget * v3270_dialog_new(GtkWidget *widget, const gchar *titl gtk_window_set_destroy_with_parent(GTK_WINDOW(dialog), TRUE); } + gtk_box_set_spacing( + GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), + 18 + ); + + v3270_dialog_setup(dialog,title,apply); + + return dialog; +} + +LIB3270_EXPORT void v3270_dialog_setup(GtkWidget *dialog, const gchar *title, const gchar *apply) +{ + #if GTK_CHECK_VERSION(3,12,0) - if(use_header) - { - GtkWidget * header = gtk_dialog_get_header_bar(GTK_DIALOG(dialog)); + GtkWidget * header = gtk_dialog_get_header_bar(GTK_DIALOG(dialog)); + if(header) + { gtk_header_bar_set_title(GTK_HEADER_BAR(header),title); gtk_header_bar_pack_start(GTK_HEADER_BAR(header),v3270_dialog_button_new(dialog,_("_Cancel"),G_CALLBACK(v3270_dialog_cancel))); gtk_header_bar_pack_end(GTK_HEADER_BAR(header),v3270_dialog_button_new(dialog,apply,G_CALLBACK(v3270_dialog_apply))); @@ -98,11 +112,6 @@ LIB3270_EXPORT GtkWidget * v3270_dialog_new(GtkWidget *widget, const gchar *titl { gtk_window_set_title(GTK_WINDOW(dialog), title); - gtk_box_set_spacing( - GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), - 18 - ); - gtk_dialog_add_buttons( GTK_DIALOG (dialog), _("_Cancel"), GTK_RESPONSE_CANCEL, @@ -129,7 +138,6 @@ LIB3270_EXPORT GtkWidget * v3270_dialog_new(GtkWidget *widget, const gchar *titl #endif // GTK 3.12 - return dialog; } #if GTK_CHECK_VERSION(3,12,0) diff --git a/src/dialogs/hostselect.c b/src/dialogs/hostselect.c index 360efe4..0929c07 100644 --- a/src/dialogs/hostselect.c +++ b/src/dialogs/hostselect.c @@ -30,6 +30,7 @@ #include "private.h" #include #include + #include #include /*--[ Widget definition ]----------------------------------------------------------------------------*/ @@ -57,9 +58,7 @@ struct _V3270HostSelectWidget { - GtkGrid parent; - - LIB3270_HOST_TYPE type; /**< @brief Connect option */ + V3270Settings parent; struct { @@ -69,180 +68,86 @@ } input; - unsigned short colors; /**< @brief Number of colors */ - H3270 * hSession; /**< @brief lib3270's session handle */ - }; struct _V3270HostSelectWidgetClass { - GtkGridClass parent_class; + V3270SettingsClass parent_class; }; - G_DEFINE_TYPE(V3270HostSelectWidget, V3270HostSelectWidget, GTK_TYPE_GRID); + G_DEFINE_TYPE(V3270HostSelectWidget, V3270HostSelectWidget, GTK_TYPE_V3270_SETTINGS); /*--[ Implement ]------------------------------------------------------------------------------------*/ -static void V3270HostSelectWidget_class_init(G_GNUC_UNUSED V3270HostSelectWidgetClass *klass) -{ -} - -static void systype_changed(GtkComboBox *widget, V3270HostSelectWidget *dialog) +static void apply(GtkWidget *w, GtkWidget *terminal) { - GValue value = { 0, }; - GtkTreeIter iter; - - if(!gtk_combo_box_get_active_iter(widget,&iter)) - return; + debug("V3270HostSelectWidget::%s",__FUNCTION__); - gtk_tree_model_get_value(gtk_combo_box_get_model(widget),&iter,1,&value); - - dialog->type = g_value_get_int(&value); - -} - -static void colortable_changed(GtkComboBox *widget, V3270HostSelectWidget *dialog) -{ - GValue value = { 0, }; - GtkTreeIter iter; - - if(!gtk_combo_box_get_active_iter(widget,&iter)) - return; - - gtk_tree_model_get_value(gtk_combo_box_get_model(widget),&iter,1,&value); - - dialog->colors = g_value_get_int(&value); - -} - -static void V3270HostSelectWidget_init(V3270HostSelectWidget *widget) -{ - int f; - - // https://developer.gnome.org/hig/stable/visual-layout.html.en - gtk_grid_set_row_spacing(GTK_GRID(widget),6); - gtk_grid_set_column_spacing(GTK_GRID(widget),12); + V3270HostSelectWidget *widget = GTK_V3270HostSelectWidget(w); + H3270 *hSession = v3270_get_session(terminal); - // Entry fields - GtkWidget * label[ENTRY_COUNT] = + // Apply URL { - gtk_label_new_with_mnemonic( _( "_Host" ) ), - gtk_label_new_with_mnemonic( _( "_Service" ) ) - }; + g_autofree gchar * url = + g_strconcat( + (gtk_toggle_button_get_active(widget->input.ssl) ? "tn3270s://" : "tn3270://"), + gtk_entry_get_text(widget->input.entry[ENTRY_HOSTNAME]), + ":", + gtk_entry_get_text(widget->input.entry[ENTRY_SRVCNAME]), + NULL + ); + + debug("URL=[%s]",url); + lib3270_set_url(hSession,url); - for(f=0;finput.entry[f] = GTK_ENTRY(gtk_entry_new()); - gtk_widget_set_halign(label[f],GTK_ALIGN_END); - gtk_label_set_mnemonic_widget(GTK_LABEL(label[f]),GTK_WIDGET(widget->input.entry[f])); } - gtk_widget_set_tooltip_text(GTK_WIDGET(widget->input.entry[ENTRY_HOSTNAME]),_("Address or name of the host to connect.") ); - gtk_widget_set_tooltip_text(GTK_WIDGET(widget->input.entry[ENTRY_SRVCNAME]),_("Port or service name (empty for \"telnet\").") ); - - gtk_entry_set_max_length(widget->input.entry[ENTRY_HOSTNAME],0xFF); - gtk_entry_set_width_chars(widget->input.entry[ENTRY_HOSTNAME],50); - - gtk_entry_set_max_length(widget->input.entry[ENTRY_SRVCNAME],6); - gtk_entry_set_width_chars(widget->input.entry[ENTRY_SRVCNAME],7); - - gtk_entry_set_placeholder_text(widget->input.entry[ENTRY_SRVCNAME],"telnet"); - - gtk_widget_set_hexpand(GTK_WIDGET(widget->input.entry[ENTRY_HOSTNAME]),TRUE); - - gtk_grid_attach(GTK_GRID(widget),label[0],0,0,1,1); - gtk_grid_attach(GTK_GRID(widget),GTK_WIDGET(widget->input.entry[ENTRY_HOSTNAME]),1,0,5,1); - - gtk_grid_attach(GTK_GRID(widget),label[1],0,1,1,1); - gtk_grid_attach(GTK_GRID(widget),GTK_WIDGET(widget->input.entry[ENTRY_SRVCNAME]),1,1,1,1); - - // gtk_widget_set_hexpand(GTK_WIDGET(widget->input.ssl),TRUE); - - // SSL checkbox + // Apply Host type { - widget->input.ssl = GTK_TOGGLE_BUTTON(gtk_check_button_new_with_mnemonic(_( "_Secure connection." ))); - gtk_widget_set_tooltip_text(GTK_WIDGET(widget->input.ssl),_( "Check for SSL secure connection." )); - - gtk_grid_attach(GTK_GRID(widget),GTK_WIDGET(widget->input.ssl),3,1,1,1); - } + GtkTreeIter iter; - // Host type - { - GtkTreeModel * model = (GtkTreeModel *) gtk_list_store_new(2,G_TYPE_STRING,G_TYPE_INT); - GtkCellRenderer * renderer = gtk_cell_renderer_text_new(); + if(gtk_combo_box_get_active_iter(GTK_COMBO_BOX(widget->input.combo[0]), &iter)) + { + GValue value = { 0, }; + gtk_tree_model_get_value(gtk_combo_box_get_model(GTK_COMBO_BOX(widget->input.combo[0])),&iter,1,&value); - widget->input.combo[0] = GTK_COMBO_BOX(gtk_combo_box_new_with_model(model)); + lib3270_set_host_type(hSession,g_value_get_int(&value)); - gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(widget->input.combo[0]), renderer, TRUE); - gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(widget->input.combo[0]), renderer, "text", 0, NULL); + g_value_unset(&value); - const LIB3270_HOST_TYPE_ENTRY *entry = lib3270_get_option_list(); - for(f=0;entry[f].name != NULL;f++) - { - GtkTreeIter iter; - gtk_list_store_append((GtkListStore *) model,&iter); - gtk_list_store_set((GtkListStore *) model, &iter, 0, gettext(entry[f].description), 1, entry[f].type, -1); } - g_signal_connect(G_OBJECT(widget->input.combo[0]),"changed",G_CALLBACK(systype_changed),widget); - } - // Color table + // Apply color type { - GtkTreeModel * model = (GtkTreeModel *) gtk_list_store_new(2,G_TYPE_STRING,G_TYPE_INT); - GtkCellRenderer * renderer = gtk_cell_renderer_text_new(); - - widget->input.combo[1] = GTK_COMBO_BOX(gtk_combo_box_new_with_model(model)); + GtkTreeIter iter; - gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(widget->input.combo[1]), renderer, TRUE); - gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(widget->input.combo[1]), renderer, "text", 0, NULL); - - for(f=0;f< (int) G_N_ELEMENTS(colortable);f++) + if(gtk_combo_box_get_active_iter(GTK_COMBO_BOX(widget->input.combo[1]), &iter)) { - GtkTreeIter iter; - gtk_list_store_append((GtkListStore *) model,&iter); - gtk_list_store_set((GtkListStore *) model, &iter, 0, gettext(colortable[f].description), 1, colortable[f].colors, -1); - } - - g_signal_connect(G_OBJECT(widget->input.combo[1]),"changed",G_CALLBACK(colortable_changed),widget); - - } - - // Host options - for(f=0;f< (int) G_N_ELEMENTS(comboLabel);f++) - { - GtkWidget *label = gtk_label_new_with_mnemonic(gettext(comboLabel[f])); - gtk_widget_set_halign(label,GTK_ALIGN_END); - gtk_grid_attach(GTK_GRID(widget),label,0,f+2,1,1); - gtk_grid_attach(GTK_GRID(widget),GTK_WIDGET(widget->input.combo[f]),1,f+2,2,1); - } + GValue value = { 0, }; - gtk_widget_show_all(GTK_WIDGET(widget)); + gtk_tree_model_get_value(gtk_combo_box_get_model(GTK_COMBO_BOX(widget->input.combo[1])),&iter,1,&value); -} + lib3270_set_color_type(hSession,g_value_get_int(&value)); -LIB3270_EXPORT GtkWidget * v3270_host_select_new(GtkWidget *widget) -{ - g_return_val_if_fail(GTK_IS_V3270(widget),NULL); + g_value_unset(&value); - GtkWidget * selector = GTK_WIDGET(g_object_new(GTK_TYPE_V3270HostSelectWidget, NULL)); + } - v3270_host_select_set_session(selector,widget); + } - return selector; } -LIB3270_EXPORT void v3270_host_select_set_session(GtkWidget *w, GtkWidget *session) +static void load(GtkWidget *w, GtkWidget *terminal) { - g_return_if_fail(GTK_IS_V3270(session)); - g_return_if_fail(GTK_IS_V3270HostSelectWidget(w)); + debug("V3270HostSelectWidget::%s",__FUNCTION__); + H3270 *hSession = v3270_get_session(terminal); V3270HostSelectWidget *widget = GTK_V3270HostSelectWidget(w); - widget->hSession = v3270_get_session(session); - const gchar * u = lib3270_get_url(widget->hSession); + const gchar * u = lib3270_get_url(hSession); if(u) { @@ -250,6 +155,8 @@ LIB3270_EXPORT void v3270_host_select_set_session(GtkWidget *w, GtkWidget *sessi g_autofree gchar * url = g_strdup(u); debug("URL=[%s]",url); + gtk_toggle_button_set_active(widget->input.ssl,g_str_has_prefix(u,"tn3270s")); + gchar *hostname = strstr(url,"://"); if(!hostname) { @@ -277,9 +184,7 @@ LIB3270_EXPORT void v3270_host_select_set_session(GtkWidget *w, GtkWidget *sessi } - LIB3270_HOST_TYPE type = lib3270_get_host_type(widget->hSession); - - gtk_toggle_button_set_active(widget->input.ssl,lib3270_get_secure_host(widget->hSession) != 0); + LIB3270_HOST_TYPE type = lib3270_get_host_type(hSession); // Set host type { @@ -308,7 +213,7 @@ LIB3270_EXPORT void v3270_host_select_set_session(GtkWidget *w, GtkWidget *sessi { GtkTreeModel * model = gtk_combo_box_get_model(widget->input.combo[1]); GtkTreeIter iter; - int colors = (int) lib3270_get_color_type(widget->hSession); + int colors = (int) lib3270_get_color_type(hSession); if(gtk_tree_model_get_iter_first(model,&iter)) { @@ -328,9 +233,115 @@ LIB3270_EXPORT void v3270_host_select_set_session(GtkWidget *w, GtkWidget *sessi } } - // Just in case - widget->type = type; +} + +static void V3270HostSelectWidget_class_init(G_GNUC_UNUSED V3270HostSelectWidgetClass *klass) +{ + GTK_V3270_SETTINGS_CLASS(klass)->apply = apply; + GTK_V3270_SETTINGS_CLASS(klass)->load = load; +} + +static void V3270HostSelectWidget_init(V3270HostSelectWidget *widget) +{ + int f; + + // Entry fields + GtkWidget * label[ENTRY_COUNT] = + { + gtk_label_new_with_mnemonic( _( "_Host" ) ), + gtk_label_new_with_mnemonic( _( "_Service" ) ) + }; + + for(f=0;finput.entry[f] = GTK_ENTRY(gtk_entry_new()); + gtk_widget_set_halign(label[f],GTK_ALIGN_END); + gtk_label_set_mnemonic_widget(GTK_LABEL(label[f]),GTK_WIDGET(widget->input.entry[f])); + } + + gtk_widget_set_tooltip_text(GTK_WIDGET(widget->input.entry[ENTRY_HOSTNAME]),_("Address or name of the host to connect.") ); + gtk_widget_set_tooltip_text(GTK_WIDGET(widget->input.entry[ENTRY_SRVCNAME]),_("Port or service name (empty for \"telnet\").") ); + + gtk_entry_set_max_length(widget->input.entry[ENTRY_HOSTNAME],0xFF); + gtk_entry_set_width_chars(widget->input.entry[ENTRY_HOSTNAME],50); + + gtk_entry_set_max_length(widget->input.entry[ENTRY_SRVCNAME],6); + gtk_entry_set_width_chars(widget->input.entry[ENTRY_SRVCNAME],7); + + gtk_entry_set_placeholder_text(widget->input.entry[ENTRY_SRVCNAME],"telnet"); + + gtk_widget_set_hexpand(GTK_WIDGET(widget->input.entry[ENTRY_HOSTNAME]),TRUE); + + gtk_grid_attach(GTK_GRID(widget),label[0],0,0,1,1); + gtk_grid_attach(GTK_GRID(widget),GTK_WIDGET(widget->input.entry[ENTRY_HOSTNAME]),1,0,5,1); + + gtk_grid_attach(GTK_GRID(widget),label[1],0,1,1,1); + gtk_grid_attach(GTK_GRID(widget),GTK_WIDGET(widget->input.entry[ENTRY_SRVCNAME]),1,1,1,1); + + // SSL checkbox + { + widget->input.ssl = GTK_TOGGLE_BUTTON(gtk_check_button_new_with_mnemonic(_( "_Secure connection." ))); + gtk_widget_set_tooltip_text(GTK_WIDGET(widget->input.ssl),_( "Check for SSL secure connection." )); + + gtk_grid_attach(GTK_GRID(widget),GTK_WIDGET(widget->input.ssl),3,1,1,1); + } + + // Host type + { + GtkTreeModel * model = (GtkTreeModel *) gtk_list_store_new(2,G_TYPE_STRING,G_TYPE_INT); + GtkCellRenderer * renderer = gtk_cell_renderer_text_new(); + + widget->input.combo[0] = GTK_COMBO_BOX(gtk_combo_box_new_with_model(model)); + + gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(widget->input.combo[0]), renderer, TRUE); + gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(widget->input.combo[0]), renderer, "text", 0, NULL); + + const LIB3270_HOST_TYPE_ENTRY *entry = lib3270_get_option_list(); + for(f=0;entry[f].name != NULL;f++) + { + GtkTreeIter iter; + gtk_list_store_append((GtkListStore *) model,&iter); + gtk_list_store_set((GtkListStore *) model, &iter, 0, gettext(entry[f].description), 1, entry[f].type, -1); + } + + } + + // Color table + { + GtkTreeModel * model = (GtkTreeModel *) gtk_list_store_new(2,G_TYPE_STRING,G_TYPE_INT); + GtkCellRenderer * renderer = gtk_cell_renderer_text_new(); + + widget->input.combo[1] = GTK_COMBO_BOX(gtk_combo_box_new_with_model(model)); + + gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(widget->input.combo[1]), renderer, TRUE); + gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(widget->input.combo[1]), renderer, "text", 0, NULL); + + for(f=0;f< (int) G_N_ELEMENTS(colortable);f++) + { + GtkTreeIter iter; + gtk_list_store_append((GtkListStore *) model,&iter); + gtk_list_store_set((GtkListStore *) model, &iter, 0, gettext(colortable[f].description), 1, colortable[f].colors, -1); + } + + } + + // Host options + for(f=0;f< (int) G_N_ELEMENTS(comboLabel);f++) + { + GtkWidget *label = gtk_label_new_with_mnemonic(gettext(comboLabel[f])); + gtk_widget_set_halign(label,GTK_ALIGN_END); + gtk_grid_attach(GTK_GRID(widget),label,0,f+2,1,1); + gtk_grid_attach(GTK_GRID(widget),GTK_WIDGET(widget->input.combo[f]),1,f+2,2,1); + } + + gtk_widget_show_all(GTK_WIDGET(widget)); + +} + +LIB3270_EXPORT GtkWidget * v3270_host_select_new() +{ + return GTK_WIDGET(g_object_new(GTK_TYPE_V3270HostSelectWidget, NULL)); } LIB3270_EXPORT void v3270_select_host(GtkWidget *widget) @@ -343,64 +354,36 @@ LIB3270_EXPORT void v3270_select_host(GtkWidget *widget) return; } - GtkWidget * dialog = v3270_host_select_new(widget); - GtkWidget * win = v3270_dialog_new(widget, _("Setup host"), _("C_onnect")); + debug("V3270HostSelectWidget::%s",__FUNCTION__); + + GtkWidget * dialog = v3270_settings_dialog_new(widget, v3270_host_select_new()); - gtk_window_set_default_size(GTK_WINDOW(win), 700, 150); + v3270_dialog_setup(dialog,_("Setup host"),_("C_onnect")); - gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(win))),dialog,FALSE,FALSE,2); + gtk_window_set_default_size(GTK_WINDOW(dialog), 700, 150); gtk_widget_show_all(dialog); gboolean again = TRUE; while(again) { - gtk_widget_set_sensitive(win,TRUE); + gtk_widget_set_sensitive(dialog,TRUE); + gtk_widget_set_visible(dialog,TRUE); - gtk_widget_set_visible(win,TRUE); - - switch(gtk_dialog_run(GTK_DIALOG(win))) + switch(gtk_dialog_run(GTK_DIALOG(dialog))) { case GTK_RESPONSE_APPLY: - gtk_widget_set_visible(win,FALSE); - gtk_widget_set_sensitive(win,FALSE); - again = v3270_host_select_apply(dialog) != 0; + debug("V3270HostSelectWidget::%s=%s",__FUNCTION__,"GTK_RESPONSE_APPLY"); + again = lib3270_reconnect(v3270_get_session(widget),0); break; case GTK_RESPONSE_CANCEL: again = FALSE; + debug("V3270HostSelectWidget::%s=%s",__FUNCTION__,"GTK_RESPONSE_CANCEL"); break; } } - gtk_widget_destroy(win); - -} - -int v3270_host_select_apply(GtkWidget *w) -{ - g_return_val_if_fail(GTK_IS_V3270HostSelectWidget(w),EINVAL); - - V3270HostSelectWidget *widget = GTK_V3270HostSelectWidget(w); - - g_autofree gchar * url = - g_strconcat( - (gtk_toggle_button_get_active(widget->input.ssl) ? "tn3270s://" : "tn3270://"), - gtk_entry_get_text(widget->input.entry[ENTRY_HOSTNAME]), - ":", - gtk_entry_get_text(widget->input.entry[ENTRY_SRVCNAME]), - NULL - ); - - debug("URL=[%s]",url); - lib3270_set_url(widget->hSession,url); - - /* - lib3270_set_hostname(widget->hSession,gtk_entry_get_text(widget->input.entry[ENTRY_HOSTNAME])); - lib3270_set_srvcname(widget->hSession,gtk_entry_get_text(widget->input.entry[ENTRY_SRVCNAME])); - */ - - lib3270_set_host_type(widget->hSession,widget->type); - return lib3270_reconnect(widget->hSession,0); + debug("%s end",__FUNCTION__); + gtk_widget_destroy(dialog); } - diff --git a/src/dialogs/settings.c b/src/dialogs/settings.c index f0e7617..50eb107 100644 --- a/src/dialogs/settings.c +++ b/src/dialogs/settings.c @@ -37,23 +37,34 @@ static void apply(GtkWidget G_GNUC_UNUSED(*widget), GtkWidget G_GNUC_UNUSED(*terminal)) { - + debug("V3270Settings::%s",__FUNCTION__); } -static void revert(GtkWidget G_GNUC_UNUSED(*widget), GtkWidget G_GNUC_UNUSED(*terminal)) +static void cancel(GtkWidget G_GNUC_UNUSED(*widget), GtkWidget G_GNUC_UNUSED(*terminal)) { + debug("V3270Settings::%s",__FUNCTION__); +} +static void load(GtkWidget G_GNUC_UNUSED(*widget), GtkWidget G_GNUC_UNUSED(*terminal)) +{ + debug("V3270Settings::%s",__FUNCTION__); } static void V3270Settings_class_init(V3270SettingsClass *klass) { klass->apply = apply; - klass->revert = revert; + klass->cancel = cancel; + klass->load = load; } static void V3270Settings_init(V3270Settings *widget) { widget->terminal = NULL; + + // https://developer.gnome.org/hig/stable/visual-layout.html.en + gtk_grid_set_row_spacing(GTK_GRID(widget),6); + gtk_grid_set_column_spacing(GTK_GRID(widget),12); + } LIB3270_EXPORT void v3270_settings_set_terminal_widget(GtkWidget *widget, GtkWidget *terminal) @@ -71,13 +82,13 @@ LIB3270_EXPORT void v3270_settings_set_terminal_widget(GtkWidget *widget, GtkWid GTK_V3270_SETTINGS_GET_CLASS(widget)->apply(widget,GTK_V3270_SETTINGS(widget)->terminal); } - LIB3270_EXPORT void v3270_settings_revert(GtkWidget *widget) + LIB3270_EXPORT void v3270_settings_cancel(GtkWidget *widget) { g_return_if_fail(GTK_IS_V3270_SETTINGS(widget)); - GTK_V3270_SETTINGS_GET_CLASS(widget)->revert(widget,GTK_V3270_SETTINGS(widget)->terminal); + GTK_V3270_SETTINGS_GET_CLASS(widget)->cancel(widget,GTK_V3270_SETTINGS(widget)->terminal); } - void on_response(GtkDialog G_GNUC_UNUSED(*dialog), gint response_id, GtkWidget *settings) + LIB3270_EXPORT void v3270_settings_on_dialog_response(GtkDialog G_GNUC_UNUSED(*dialog), gint response_id, GtkWidget *settings) { switch(response_id) { @@ -86,14 +97,13 @@ LIB3270_EXPORT void v3270_settings_set_terminal_widget(GtkWidget *widget, GtkWid break; case GTK_RESPONSE_CANCEL: - v3270_settings_revert(settings); + v3270_settings_cancel(settings); break; } - } - LIB3270_EXPORT GtkWidget * v3270_settings_dialog_nwidgetew(GtkWidget *terminal, GtkWidget *settings) + LIB3270_EXPORT GtkWidget * v3270_settings_dialog_new(GtkWidget *terminal, GtkWidget *settings) { #if GTK_CHECK_VERSION(3,12,0) @@ -113,10 +123,18 @@ LIB3270_EXPORT void v3270_settings_set_terminal_widget(GtkWidget *widget, GtkWid #endif // GTK 3.12 - gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),settings,FALSE,FALSE,2); + GtkWidget * content_area = gtk_dialog_get_content_area(GTK_DIALOG(dialog)); + + // https://developer.gnome.org/hig/stable/visual-layout.html.en + gtk_box_set_spacing( + GTK_BOX(content_area), + 18 + ); + + gtk_box_pack_start(GTK_BOX(content_area),settings,FALSE,FALSE,2); v3270_settings_set_terminal_widget(settings,terminal); - g_signal_connect(G_OBJECT(dialog),"response",G_CALLBACK(on_response),settings); + g_signal_connect(G_OBJECT(dialog),"response",G_CALLBACK(v3270_settings_on_dialog_response),settings); gtk_window_set_deletable(GTK_WINDOW(dialog),FALSE); @@ -127,6 +145,5 @@ LIB3270_EXPORT void v3270_settings_set_terminal_widget(GtkWidget *widget, GtkWid gtk_window_set_modal(GTK_WINDOW(dialog), TRUE); gtk_window_set_destroy_with_parent(GTK_WINDOW(dialog), TRUE); - return dialog; } diff --git a/src/include/v3270/dialogs.h b/src/include/v3270/dialogs.h index adc38d8..1a916f3 100644 --- a/src/include/v3270/dialogs.h +++ b/src/include/v3270/dialogs.h @@ -35,9 +35,10 @@ G_BEGIN_DECLS - LIB3270_EXPORT GtkWidget * v3270_host_select_new(GtkWidget *widget); + LIB3270_EXPORT GtkWidget * v3270_host_select_new(); LIB3270_EXPORT GtkWidget * v3270_dialog_new(GtkWidget *widget, const gchar *title, const gchar *apply); LIB3270_EXPORT void v3270_error_popup(GtkWidget *widget, const gchar *title, const gchar *summary, const gchar *body); + LIB3270_EXPORT void v3270_dialog_setup(GtkWidget *dialog, const gchar *title, const gchar *apply); LIB3270_EXPORT GtkWidget * v3270_save_dialog_new(GtkWidget *widget, LIB3270_CONTENT_OPTION mode, const gchar *filename); LIB3270_EXPORT void v3270_save_dialog_run(GtkWidget *widget); diff --git a/src/include/v3270/settings.h b/src/include/v3270/settings.h index f4c5b22..ac937ac 100644 --- a/src/include/v3270/settings.h +++ b/src/include/v3270/settings.h @@ -37,7 +37,7 @@ /*--[ Progress widget ]------------------------------------------------------------------------------*/ - #define GTK_TYPE_V3270_SETTINGS (V3270Settings_get_type ()) + #define GTK_TYPE_V3270_SETTINGS (V3270Settings_get_type()) #define GTK_V3270_SETTINGS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_V3270_SETTINGS, V3270Settings)) #define GTK_V3270_SETTINGS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_V3270_SETTINGS, V3270SettingsClass)) #define GTK_IS_V3270_SETTINGS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_V3270_SETTINGS)) @@ -52,17 +52,21 @@ typedef struct _V3270SettingsClass { GtkGridClass parent_class; - void (*load)(GtkWidget *widget, GtkWidget *terminal); - void (*apply)(GtkWidget *widget, GtkWidget *terminal); - void (*revert)(GtkWidget *widget, GtkWidget *terminal); + void (*load)(GtkWidget *widget, GtkWidget *terminal); ///< @brief Method to load the properties from terminal widget + void (*apply)(GtkWidget *widget, GtkWidget *terminal); ///< @brief Method for GTK_RESPONSE_APPLY + void (*cancel)(GtkWidget *widget, GtkWidget *terminal); ///< @brief Method for GTK_RESPONSE_CANCEL } V3270SettingsClass; /*--[ Prototypes ]-----------------------------------------------------------------------------------*/ LIB3270_EXPORT void v3270_settings_set_terminal_widget(GtkWidget *widget, GtkWidget *terminal); + LIB3270_EXPORT GType V3270Settings_get_type(void); LIB3270_EXPORT void v3270_settings_apply(GtkWidget *widget); - LIB3270_EXPORT void v3270_settings_revert(GtkWidget *widget); + LIB3270_EXPORT void v3270_settings_cancel(GtkWidget *widget); + + /// @brief Callback for GtkDialog's "response" signal. + LIB3270_EXPORT void v3270_settings_on_dialog_response(GtkDialog *dialog, gint response_id, GtkWidget *settings); LIB3270_EXPORT GtkWidget * v3270_settings_dialog_new(GtkWidget *terminal, GtkWidget *settings); // LIB3270_EXPORT gint v3270_settings_dialog_run(GtkWidget *widget, GtkWidget *terminal); -- libgit2 0.21.2