diff --git a/pw3270.cbp b/pw3270.cbp index 0eea8b5..8316f71 100644 --- a/pw3270.cbp +++ b/pw3270.cbp @@ -63,6 +63,9 @@ + + diff --git a/src/include/pw3270/actions.h b/src/include/pw3270/actions.h index 1ad06f7..27c9b44 100644 --- a/src/include/pw3270/actions.h +++ b/src/include/pw3270/actions.h @@ -160,6 +160,22 @@ /// @brief New simple action from LIB3270's action name. pw3270SimpleAction * pw3270_simple_action_new_from_name(const gchar *source_name, const gchar *name); + + // + // Dialog action + // + #define PW3270_TYPE_DIALOG_ACTION (pw3270DialogAction_get_type()) + #define PW3270_DIALOG_ACTION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), PW3270_TYPE_DIALOG_ACTION, pw3270DialogAction)) + #define PW3270_DIALOG_ACTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PW3270_TYPE_DIALOG_ACTION, pw3270DialogActionClass)) + #define PW3270_IS_DIALOG_ACTION(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), PW3270_TYPE_DIALOG_ACTION)) + #define PW3270_IS_DIALOG_ACTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PW3270_TYPE_DIALOG_ACTION)) + #define PW3270_DIALOG_ACTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PW3270_TYPE_DIALOG_ACTION, pw3270DialogActionClass)) + + typedef struct _pw3270DialogAction pw3270DialogAction; + typedef struct _pw3270DialogActionClass pw3270DialogActionClass; + + pw3270SimpleAction * pw3270_dialog_action_new(GtkWidget * (*factory)(GtkWidget *)); + G_END_DECLS #endif // PW3270_ACTIONS_H_INCLUDED diff --git a/src/objects/window/actions/sethost.c b/src/objects/window/actions/sethost.c index f8650d0..c8f8675 100644 --- a/src/objects/window/actions/sethost.c +++ b/src/objects/window/actions/sethost.c @@ -33,17 +33,18 @@ #include #include - static void activate(GAction G_GNUC_UNUSED(*action), GVariant G_GNUC_UNUSED(*parameter), GtkWidget *terminal); + static GtkWidget * factory(GtkWidget *terminal); GAction * pw3270_set_host_action_new(void) { - pw3270Action * action = PW3270_ACTION(pw3270_action_new_from_lib3270(lib3270_action_get_by_name("reconnect"))); + pw3270SimpleAction * action = pw3270_dialog_action_new(factory); - action->activate = activate; - action->name = "set.host"; + action->parent.name = "set.host"; + action->group.id = LIB3270_ACTION_GROUP_OFFLINE; + action->icon_name = "network-server"; + action->label = N_("Configure host"); return G_ACTION(action); - } static void on_response(GtkDialog *dialog, gint response_id, GtkWidget *settings) { @@ -58,10 +59,7 @@ } - void activate(GAction G_GNUC_UNUSED(*action), GVariant G_GNUC_UNUSED(*parameter), GtkWidget *terminal) { - - if(!GTK_IS_V3270(terminal)) - return; + GtkWidget * factory(GtkWidget *terminal) { GtkWidget * settings = v3270_host_select_new(); GtkWidget * dialog = @@ -74,12 +72,11 @@ v3270_dialog_setup(dialog,_("Setup host"),_("C_onnect")); gtk_window_set_modal(GTK_WINDOW(dialog), TRUE); - - g_signal_connect(dialog,"close",G_CALLBACK(gtk_widget_destroy),NULL); g_signal_connect(dialog,"response",G_CALLBACK(on_response),settings); - gtk_widget_show_all(dialog); } + return dialog; + } -- libgit2 0.21.2