diff --git a/src/dialogs/commondialog.c b/src/dialogs/commondialog.c index 11ce4bb..4a4d570 100644 --- a/src/dialogs/commondialog.c +++ b/src/dialogs/commondialog.c @@ -41,6 +41,15 @@ static void cancel_clicked(GtkButton G_GNUC_UNUSED(*button), GtkWidget *dialog) gtk_dialog_response(GTK_DIALOG(dialog),GTK_RESPONSE_CANCEL); } +static GtkWidget * create_button(GtkWidget *dialog, const gchar *mnemonic, GCallback callback) +{ + GtkWidget * button = gtk_button_new_with_mnemonic(mnemonic); + gtk_button_set_use_underline(GTK_BUTTON (button), TRUE); + g_signal_connect(button,"clicked",callback,dialog); + gtk_widget_show(button); + return button; +} + LIB3270_EXPORT GtkWidget * v3270_dialog_new(const gchar *title, GtkWindow *parent, const gchar *apply) { GtkWidget * dialog = @@ -62,20 +71,10 @@ LIB3270_EXPORT GtkWidget * v3270_dialog_new(const gchar *title, GtkWindow *paren } GtkWidget * header = gtk_dialog_get_header_bar(GTK_DIALOG(dialog)); - GtkWidget * button; // Cancel button - button = gtk_button_new_with_mnemonic(_("_Cancel")); - gtk_header_bar_pack_start(GTK_HEADER_BAR(header),button); - gtk_button_set_use_underline(GTK_BUTTON (button), TRUE); - g_signal_connect(button,"clicked",G_CALLBACK(cancel_clicked),dialog); - gtk_widget_show(button); - - button = gtk_button_new_with_mnemonic(apply); - gtk_header_bar_pack_end(GTK_HEADER_BAR(header),button); - gtk_button_set_use_underline(GTK_BUTTON (button), TRUE); - g_signal_connect(button,"clicked",G_CALLBACK(apply_clicked),dialog); - gtk_widget_show(button); + gtk_header_bar_pack_start(GTK_HEADER_BAR(header),create_button(dialog,_("_Cancel"),G_CALLBACK(cancel_clicked))); + gtk_header_bar_pack_end(GTK_HEADER_BAR(header),create_button(dialog,apply,G_CALLBACK(apply_clicked))); return dialog; } diff --git a/src/dialogs/hostselect.c b/src/dialogs/hostselect.c index ffff382..2c754a7 100644 --- a/src/dialogs/hostselect.c +++ b/src/dialogs/hostselect.c @@ -226,18 +226,19 @@ LIB3270_EXPORT GtkWidget * v3270_host_select_new(GtkWidget *widget) { g_return_val_if_fail(GTK_IS_V3270(widget),NULL); - V3270HostSelectWidget * selector = GTK_V3270HostSelectWidget(g_object_new(GTK_TYPE_V3270HostSelectWidget, NULL)); + GtkWidget * selector = GTK_WIDGET(g_object_new(GTK_TYPE_V3270HostSelectWidget, NULL)); v3270_host_select_set_session(selector,widget); - return GTK_WIDGET(selector); + return selector; } -LIB3270_EXPORT void v3270_host_select_set_session(V3270HostSelectWidget *widget, GtkWidget *session) +LIB3270_EXPORT void v3270_host_select_set_session(GtkWidget *w, GtkWidget *session) { g_return_if_fail(GTK_IS_V3270(session)); - g_return_if_fail(GTK_IS_V3270HostSelectWidget(widget)); + g_return_if_fail(GTK_IS_V3270HostSelectWidget(w)); + V3270HostSelectWidget *widget = GTK_V3270HostSelectWidget(w); widget->hSession = v3270_get_session(session); gtk_entry_set_text(widget->input.entry[ENTRY_HOSTNAME],lib3270_get_hostname(widget->hSession)); @@ -305,9 +306,17 @@ LIB3270_EXPORT void v3270_select_host(GtkWidget *widget) { g_return_if_fail(GTK_IS_V3270(widget)); + if(v3270_is_connected(widget)) + { + gdk_display_beep(gdk_display_get_default()); + return; + } + GtkWidget * dialog = v3270_host_select_new(widget); GtkWidget * win = v3270_dialog_new(_("Configure host"), GTK_WINDOW(gtk_widget_get_toplevel(widget)), _("C_onnect")); + gtk_window_set_default_size(GTK_WINDOW(win), 700, 150); + gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(win))),dialog,FALSE,FALSE,2); gtk_widget_show_all(dialog); @@ -323,7 +332,7 @@ LIB3270_EXPORT void v3270_select_host(GtkWidget *widget) case GTK_RESPONSE_APPLY: gtk_widget_set_visible(win,FALSE); gtk_widget_set_sensitive(win,FALSE); - again = v3270_host_select_apply(GTK_V3270HostSelectWidget(dialog)) != 0; + again = v3270_host_select_apply(dialog) != 0; break; case GTK_RESPONSE_CANCEL: @@ -336,13 +345,14 @@ LIB3270_EXPORT void v3270_select_host(GtkWidget *widget) } -int v3270_host_select_apply(V3270HostSelectWidget *widget) +int v3270_host_select_apply(GtkWidget *w) { - g_return_val_if_fail(GTK_IS_V3270HostSelectWidget(widget),0); + g_return_val_if_fail(GTK_IS_V3270HostSelectWidget(w),EINVAL); + + V3270HostSelectWidget *widget = GTK_V3270HostSelectWidget(w); 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); diff --git a/src/include/hostselect.h b/src/include/hostselect.h index 3053543..64bbf55 100644 --- a/src/include/hostselect.h +++ b/src/include/hostselect.h @@ -59,8 +59,8 @@ /*--[ Prototipes ]-----------------------------------------------------------------------------------*/ - void v3270_host_select_set_session(V3270HostSelectWidget *widget, GtkWidget *session); - int v3270_host_select_apply(V3270HostSelectWidget *widget); + void v3270_host_select_set_session(GtkWidget *widget, GtkWidget *session); + int v3270_host_select_apply(GtkWidget *widget); G_END_DECLS diff --git a/src/testprogram/testprogram.c b/src/testprogram/testprogram.c index a69ac77..8b9c5bd 100644 --- a/src/testprogram/testprogram.c +++ b/src/testprogram/testprogram.c @@ -166,6 +166,8 @@ static void activate(GtkApplication* app, G_GNUC_UNUSED gpointer user_data) { GtkWidget * terminal = v3270_new(); GValue val = G_VALUE_INIT; + v3270_set_url(terminal,NULL); + g_signal_connect(terminal,"field_clicked",G_CALLBACK(field_clicked),window); GtkWidget *trace = v3270_new_trace_window(terminal,NULL); @@ -177,7 +179,6 @@ static void activate(GtkApplication* app, G_GNUC_UNUSED gpointer user_data) { } /* - v3270_set_url(terminal,url); v3270_connect(terminal); */ -- libgit2 0.21.2