Commit deb094c06c7a5bb97c450acc2173f4bcfd1b454e
1 parent
2ea451a5
Exists in
master
and in
1 other branch
Working on transfer widget.
Showing
2 changed files
with
69 additions
and
3 deletions
Show diff stats
src/filetransfer/marshal
src/filetransfer/worker.c
... | ... | @@ -35,10 +35,22 @@ |
35 | 35 | |
36 | 36 | /*--[ Widget definition ]----------------------------------------------------------------------------*/ |
37 | 37 | |
38 | + enum _SIGNALS | |
39 | + { | |
40 | + V3270_WORKER_ACTIVITY_SIGNAL, ///< @brief Indicates if the list has an activity set. | |
41 | + | |
42 | + V3270_WORKER_LAST_SIGNAL | |
43 | + }; | |
44 | + | |
38 | 45 | struct _V3270FTWorkerClass |
39 | 46 | { |
40 | 47 | GtkGridClass parent_class; |
41 | 48 | |
49 | + struct | |
50 | + { | |
51 | + void (*activity)(GtkWidget *, GObject *); | |
52 | + } signal; | |
53 | + | |
42 | 54 | }; |
43 | 55 | |
44 | 56 | struct _V3270FTWorker |
... | ... | @@ -46,23 +58,52 @@ |
46 | 58 | GtkGrid parent; |
47 | 59 | |
48 | 60 | GtkProgressBar * pbar; ///< @brief Progress bar. |
49 | - GObject * activity; ///< @brief File transfer activity; | |
61 | + GObject * activity; ///< @brief File transfer activity. | |
62 | + GSource * pulse; ///< @brief Process pulse. | |
50 | 63 | |
51 | 64 | GtkEntry * field[PROGRESS_FIELD_COUNT]; ///< @brief Transfer information widgets. |
52 | 65 | |
53 | - | |
54 | 66 | }; |
55 | 67 | |
56 | 68 | G_DEFINE_TYPE(V3270FTWorker, V3270FTWorker, GTK_TYPE_GRID); |
57 | 69 | |
70 | + static guint v3270_worker_signals[V3270_WORKER_LAST_SIGNAL] = { 0 }; | |
71 | + | |
58 | 72 | /*--[ Implement ]------------------------------------------------------------------------------------*/ |
59 | 73 | |
74 | + static gboolean do_pulse(V3270FTWorker *worker) { | |
75 | + gtk_progress_bar_pulse(worker->pbar); | |
76 | + return TRUE; | |
77 | + } | |
78 | + | |
79 | + static void pulse_start(V3270FTWorker *worker) | |
80 | + { | |
81 | + debug("%s(%p)",__FUNCTION__,worker->pulse); | |
82 | + if(!worker->pulse) | |
83 | + { | |
84 | + worker->pulse = g_timeout_source_new(100); | |
85 | + g_source_set_callback(worker->pulse,(GSourceFunc) do_pulse,worker,NULL); | |
86 | + g_source_attach(worker->pulse,NULL); | |
87 | + } | |
88 | + } | |
89 | + | |
90 | + static void pulse_stop(V3270FTWorker *worker) | |
91 | + { | |
92 | + if(worker->pulse) | |
93 | + { | |
94 | + g_source_destroy(worker->pulse); | |
95 | + worker->pulse = NULL; | |
96 | + } | |
97 | + } | |
98 | + | |
60 | 99 | static void finalize(GObject *object) |
61 | 100 | { |
62 | 101 | debug("%s",__FUNCTION__); |
63 | 102 | |
64 | 103 | V3270FTWorker * worker = GTK_V3270_FT_WORKER(object); |
65 | 104 | |
105 | + pulse_stop(worker); | |
106 | + | |
66 | 107 | if(worker->activity) |
67 | 108 | { |
68 | 109 | g_object_unref(worker->activity); |
... | ... | @@ -73,9 +114,28 @@ |
73 | 114 | |
74 | 115 | } |
75 | 116 | |
117 | + static void V3270FTWorker_activity(GtkWidget G_GNUC_UNUSED(*widget), GObject G_GNUC_UNUSED(*activity)) | |
118 | + { | |
119 | + debug("%s",__FUNCTION__); | |
120 | + } | |
121 | + | |
76 | 122 | static void V3270FTWorker_class_init(G_GNUC_UNUSED V3270FTWorkerClass *klass) |
77 | 123 | { |
78 | - G_OBJECT_CLASS(klass)->finalize = finalize; | |
124 | + GObjectClass * gobject_class = G_OBJECT_CLASS(klass); | |
125 | + | |
126 | + gobject_class->finalize = finalize; | |
127 | + | |
128 | + klass->signal.activity = V3270FTWorker_activity; | |
129 | + | |
130 | + v3270_worker_signals[V3270_WORKER_ACTIVITY_SIGNAL] = | |
131 | + g_signal_new( "activity", | |
132 | + G_OBJECT_CLASS_TYPE (gobject_class), | |
133 | + G_SIGNAL_RUN_FIRST, | |
134 | + G_STRUCT_OFFSET (V3270FTWorkerClass, signal.activity), | |
135 | + NULL, NULL, | |
136 | + v3270ft_VOID__VOID_OBJECT, | |
137 | + G_TYPE_NONE, 1, G_TYPE_OBJECT); | |
138 | + | |
79 | 139 | } |
80 | 140 | |
81 | 141 | static GtkWidget * create_label(V3270FTWorker *widget, const gchar *text, gint left, gint top) |
... | ... | @@ -206,5 +266,10 @@ |
206 | 266 | gtk_entry_set_text(worker->field[ix],""); |
207 | 267 | } |
208 | 268 | |
269 | + gtk_progress_bar_set_text(worker->pbar,_("Starting transfer")); | |
270 | + pulse_start(worker); | |
271 | + | |
272 | + g_signal_emit(widget, v3270_worker_signals[V3270_WORKER_ACTIVITY_SIGNAL], 0, worker->activity); | |
273 | + | |
209 | 274 | } |
210 | 275 | ... | ... |