Commit deb094c06c7a5bb97c450acc2173f4bcfd1b454e

Authored by Perry Werneck
1 parent 2ea451a5
Exists in master and in 1 other branch develop

Working on transfer widget.

src/filetransfer/marshal
1 1 VOID:POINTER,POINTER
2 2 VOID:VOID,BOOLEAN
  3 +VOID:VOID,OBJECT
3 4  
... ...
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  
... ...