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 | ... | ... |