From 1bd07549f6c809d31851f3cabf747c6bc2b1546e Mon Sep 17 00:00:00 2001 From: Perry Werneck Date: Tue, 12 Feb 2019 14:12:45 -0200 Subject: [PATCH] Fixes on FT dialog. --- src/dialogs/print/print.c | 2 ++ src/include/v3270/filetransfer.h | 3 +++ src/v3270ft/activity.c | 2 ++ src/v3270ft/activitylist.c | 4 +++- src/v3270ft/dialog.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++--- 5 files changed, 61 insertions(+), 4 deletions(-) diff --git a/src/dialogs/print/print.c b/src/dialogs/print/print.c index 231ab9c..402e6d8 100644 --- a/src/dialogs/print/print.c +++ b/src/dialogs/print/print.c @@ -180,6 +180,8 @@ } + G_OBJECT_CLASS(V3270PrintOperation_parent_class)->dispose(object); + } static void V3270PrintOperation_class_init(V3270PrintOperationClass *klass) diff --git a/src/include/v3270/filetransfer.h b/src/include/v3270/filetransfer.h index e145493..c9365e9 100644 --- a/src/include/v3270/filetransfer.h +++ b/src/include/v3270/filetransfer.h @@ -141,6 +141,9 @@ typedef struct _V3270FTDialog V3270FTDialog; typedef struct _V3270FTDialogClass V3270FTDialogClass; + LIB3270_EXPORT GtkWidget * v3270_ft_dialog_new(GtkWidget *parent); + LIB3270_EXPORT void v3270_ft_dialog_set_session(GtkWidget *widget, H3270 *hSession); + G_END_DECLS #endif // V3270FT_H_INCLUDED diff --git a/src/v3270ft/activity.c b/src/v3270ft/activity.c index 1caafda..f42a5f4 100644 --- a/src/v3270ft/activity.c +++ b/src/v3270ft/activity.c @@ -78,6 +78,8 @@ g_free(activity->file.local); g_free(activity->file.remote); + G_OBJECT_CLASS(V3270FTActivity_parent_class)->dispose(object); + } static void set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec G_GNUC_UNUSED(*pspec)) diff --git a/src/v3270ft/activitylist.c b/src/v3270ft/activitylist.c index 69c871b..052f94c 100644 --- a/src/v3270ft/activitylist.c +++ b/src/v3270ft/activitylist.c @@ -73,6 +73,8 @@ g_free(list->filename); list->filename = NULL; + G_OBJECT_CLASS(V3270FTActivityList_parent_class)->dispose(object); + } static void V3270FTActivityList_has_file(GtkWidget G_GNUC_UNUSED(*widget), gboolean G_GNUC_UNUSED(has_file)) @@ -186,7 +188,7 @@ } - static void element_start(GMarkupParseContext *context, const gchar *element_name, const gchar **names,const gchar **values, V3270FTActivityList *widget, GError **error) + static void element_start(GMarkupParseContext *context, const gchar *element_name, const gchar G_GNUC_UNUSED(**names),const gchar G_GNUC_UNUSED(**values), V3270FTActivityList *widget, GError G_GNUC_UNUSED(**error)) { debug("%s(%s)",__FUNCTION__, element_name); if(!g_ascii_strcasecmp(element_name,"entry")) diff --git a/src/v3270ft/dialog.c b/src/v3270ft/dialog.c index 0f12566..df7792b 100644 --- a/src/v3270ft/dialog.c +++ b/src/v3270ft/dialog.c @@ -37,9 +37,13 @@ { GtkDialog parent; - GtkWidget * settings; + GtkWidget * settings; - struct { + H3270 * hSession; + const void * stHandle; + + struct + { GtkWidget * insert; GtkWidget * update; GtkWidget * remove; @@ -47,7 +51,8 @@ GtkWidget * begin; } button; - struct { + struct + { GtkWidget * view; GtkWidget * load; GtkWidget * save; @@ -65,8 +70,24 @@ /*--[ Implement ]------------------------------------------------------------------------------------*/ +static void finalize(GObject *object) +{ + debug("%s",__FUNCTION__); + + V3270FTDialog * dialog = GTK_V3270_FT_DIALOG(object); + + if(dialog->hSession && dialog->stHandle) + { + lib3270_unregister_schange(dialog->hSession,LIB3270_STATE_CONNECT,dialog->stHandle); + dialog->stHandle = NULL; + } + + G_OBJECT_CLASS(V3270FTDialog_parent_class)->finalize(object); +} + static void V3270FTDialog_class_init(G_GNUC_UNUSED V3270FTDialogClass *klass) { + G_OBJECT_CLASS(klass)->finalize = finalize; } void activity_selected(GtkTreeView *view, GtkTreePath *path, GtkTreeViewColumn G_GNUC_UNUSED(*column), V3270FTDialog *widget) @@ -276,6 +297,7 @@ static void V3270FTDialog_init(V3270FTDialog *widget) GtkWidget * scrolled = gtk_scrolled_window_new(NULL,NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled),GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC); gtk_container_add(GTK_CONTAINER(scrolled),widget->queue.view); + gtk_widget_set_size_request(scrolled,50,150); gtk_widget_set_vexpand(scrolled,TRUE); gtk_widget_set_hexpand(scrolled,TRUE); @@ -321,6 +343,7 @@ static void V3270FTDialog_init(V3270FTDialog *widget) // gtk_widget_set_sensitive(widget->button.begin,FALSE); gtk_widget_set_tooltip_markup(widget->button.begin,_("Start transfer")); + gtk_widget_set_sensitive(widget->button.begin,FALSE); /* #ifdef DEBUG @@ -358,6 +381,31 @@ LIB3270_EXPORT GtkWidget * v3270_ft_dialog_new(GtkWidget *parent) gtk_window_set_destroy_with_parent(GTK_WINDOW(dialog), TRUE); } + if(GTK_IS_V3270(parent)) + v3270_ft_dialog_set_session(dialog,v3270_get_session(parent)); + return dialog; } +static void connect_changed(H3270 G_GNUC_UNUSED(*hSession), int state, void *widget) +{ + V3270FTDialog * dialog = GTK_V3270_FT_DIALOG( ((GtkWidget *) widget) ); + gtk_widget_set_sensitive(dialog->button.begin,state ? TRUE : FALSE); +} + +LIB3270_EXPORT void v3270_ft_dialog_set_session(GtkWidget *widget, H3270 *hSession) +{ + V3270FTDialog * dialog = GTK_V3270_FT_DIALOG(widget); + + if(dialog->hSession && dialog->stHandle) + { + lib3270_unregister_schange(dialog->hSession,LIB3270_STATE_CONNECT,dialog->stHandle); + dialog->stHandle = NULL; + } + + dialog->hSession = hSession; + dialog->stHandle = lib3270_register_schange(hSession,LIB3270_STATE_CONNECT,connect_changed,(void *) widget); + + gtk_widget_set_sensitive(dialog->button.begin,lib3270_is_connected(hSession) ? TRUE : FALSE); + +} -- libgit2 0.21.2