Bug Summary

File:multiload/load-graph.c
Warning:line 454, column 20
This statement is never executed

Annotated Source Code

Press '?' to see keyboard shortcuts

clang -cc1 -cc1 -triple x86_64-pc-linux-gnu -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name load-graph.c -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model pic -pic-level 2 -pic-is-pie -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/rootdir/multiload -resource-dir /usr/lib/llvm-16/lib/clang/16 -D HAVE_CONFIG_H -I . -I .. -I . -D MULTILOAD_MENU_UI_DIR="/usr/local/share/cafe/ui" -I /usr/include/cafe-panel-4.0/libcafe-panel-applet -I /usr/include/glib-2.0 -I /usr/lib/x86_64-linux-gnu/glib-2.0/include -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/ctk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/fribidi -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/x86_64-linux-gnu -I /usr/include/webp -I /usr/include/gio-unix-2.0 -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/at-spi-2.0 -I /usr/include/dbus-1.0 -I /usr/lib/x86_64-linux-gnu/dbus-1.0/include -I /usr/include/libgtop-2.0 -I /usr/include/glib-2.0 -I /usr/lib/x86_64-linux-gnu/glib-2.0/include -I /usr/include/glib-2.0 -I /usr/lib/x86_64-linux-gnu/glib-2.0/include -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gio-unix-2.0 -internal-isystem /usr/lib/llvm-16/lib/clang/16/include -internal-isystem /usr/local/include -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/13/../../../../x86_64-linux-gnu/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -fdebug-compilation-dir=/rootdir/multiload -ferror-limit 19 -fgnuc-version=4.2.1 -analyzer-checker deadcode.DeadStores -analyzer-checker alpha.deadcode.UnreachableCode -analyzer-checker alpha.core.CastSize -analyzer-checker alpha.core.CastToStruct -analyzer-checker alpha.core.IdenticalExpr -analyzer-checker alpha.core.SizeofPtr -analyzer-checker alpha.security.ArrayBoundV2 -analyzer-checker alpha.security.MallocOverflow -analyzer-checker alpha.security.ReturnPtrRange -analyzer-checker alpha.unix.SimpleStream -analyzer-checker alpha.unix.cstring.BufferOverlap -analyzer-checker alpha.unix.cstring.NotNullTerminated -analyzer-checker alpha.unix.cstring.OutOfBounds -analyzer-checker alpha.core.FixedAddr -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /rootdir/html-report/2024-01-11-211921-85596-1 -x c load-graph.c
1#include <config.h>
2#include <stdio.h>
3#include <sys/stat.h>
4#include <unistd.h>
5#include <signal.h>
6#include <dirent.h>
7#include <string.h>
8#include <time.h>
9#include <glib.h>
10#include <cdk/cdkx.h>
11#include <ctk/ctk.h>
12#include <gio/gio.h>
13#include <cafe-panel-applet.h>
14#include <cafe-panel-applet-gsettings.h>
15#include <math.h>
16
17#include "global.h"
18
19/*
20 Shifts data right
21
22 data[i+1] = data[i]
23
24 data[i] are int*, so we just move the pointer, not the data.
25 But moving data loses data[n-1], so we save data[n-1] and reuse
26 it as new data[0]. In fact, we rotate data[].
27
28*/
29
30static void
31shift_right(LoadGraph *g)
32{
33 unsigned i;
34 int* last_data;
35
36 /* data[g->draw_width - 1] becomes data[0] */
37 last_data = g->data[g->draw_width - 1];
38
39 /* data[i+1] = data[i] */
40 for(i = g->draw_width - 1; i != 0; --i)
41 g->data[i] = g->data[i - 1];
42
43 g->data[0] = last_data;
44}
45
46
47/* Redraws the backing pixmap for the load graph and updates the window */
48static void
49load_graph_draw (LoadGraph *g)
50{
51 guint i, j, k;
52 cairo_t *cr;
53 int load;
54
55 /* we might get called before the configure event so that
56 * g->disp->allocation may not have the correct size
57 * (after the user resized the applet in the prop dialog). */
58
59 if (!g->surface)
60 g->surface = cdk_window_create_similar_surface (ctk_widget_get_window (g->disp),
61 CAIRO_CONTENT_COLOR,
62 g->draw_width, g->draw_height);
63
64 cr = cairo_create (g->surface);
65 cairo_set_line_width (cr, 1.0);
66 cairo_set_line_cap (cr, CAIRO_LINE_CAP_ROUND);
67 cairo_set_line_join (cr, CAIRO_LINE_JOIN_ROUND);
68
69 /* all graphs except Load and Net go this path */
70 if (g->id != 4 && g->id != 2)
71 {
72 for (i = 0; i < g->draw_width; i++)
73 g->pos [i] = g->draw_height - 1;
74
75 for (j = 0; j < g->n; j++)
76 {
77 cdk_cairo_set_source_rgba (cr, &(g->colors [j]));
78
79 for (i = 0; i < g->draw_width; i++)
80 {
81 if (g->data [i][j] != 0)
82 {
83 cairo_move_to (cr, g->draw_width - i - 0.5, g->pos[i] + 0.5);
84 cairo_line_to (cr, g->draw_width - i - 0.5, g->pos[i] - (g->data [i][j] - 0.5));
85 }
86 g->pos [i] -= g->data [i][j];
87 }
88 cairo_stroke (cr);
89 }
90 }
91 /* This is for network graph */
92 else if (g->id == 2)
93 {
94 guint maxnet = 1;
95 gint segments = 1;
96 gint combined = 0;
97 for (i = 0; i < g->draw_width; i++)
98 {
99 g->pos [i] = g->draw_height - 1;
100 combined = 0;
101 combined += g->data[i][0];
102 combined += g->data[i][1];
103 combined += g->data[i][2];
104 if (combined > maxnet)
105 maxnet = combined;
106 }
107 //printf("max = %d ", maxnet);
108 guint level = 0;
109 CdkRGBA grid_color;
110 if (maxnet > g->net_threshold3) {
111 g->net_threshold = g->net_threshold3;
112 level = 3;
113 }
114 else
115 if (maxnet > g->net_threshold2) {
116 g->net_threshold = g->net_threshold2;
117 level = 2;
118 }
119 else {
120 g->net_threshold = g->net_threshold1;
121 level = 1;
122 if (maxnet < g->net_threshold1)
123 level = 0;
124 }
125
126 //printf("level %d maxnet = %d ", level, maxnet);
127 maxnet = maxnet/g->net_threshold;
128 segments = MAX (maxnet+1,1)(((maxnet+1) > (1)) ? (maxnet+1) : (1));
129 float ratio = (float)g->draw_height/g->net_threshold/segments;
130 //printf("segments %d ratio = %f t1=%ld t2=%ld t3=%ld t=%ld\n", segments, ratio, g->net_threshold1, g->net_threshold2, g->net_threshold3, g->net_threshold);
131
132 for (j = 0; j < g->n-1; j++)
133 {
134 cdk_cairo_set_source_rgba (cr, &(g->colors [j]));
135
136 for (i = 0; i < g->draw_width; i++)
137 {
138 cairo_move_to (cr, g->draw_width - i - 0.5, g->pos[i] + 0.5);
139 cairo_line_to (cr, g->draw_width - i - 0.5, g->pos[i] - 0.5 - ((g->data [i][j] * ratio)));
140 g->pos [i] -= ((g->data [i][j] * ratio));
141 }
142 cairo_stroke (cr);
143 }
144
145 for (j = g->n-1; j < g->n; j++)
146 {
147 cdk_cairo_set_source_rgba (cr, &(g->colors [j]));
148 for (i = 0; i < g->draw_width; i++)
149 {
150 cairo_move_to (cr, g->draw_width - i - 0.5, g->pos[i] + 0.5);
151 cairo_line_to (cr, g->draw_width - i - 0.5, 0.5);
152 }
153 cairo_stroke (cr);
154 }
155
156 /* draw grid lines if needed */
157 cdk_cairo_set_source_rgba (cr, &(g->colors [4]));
158 double spacing = 0;
159 for (k = 0; k < segments -1; k++)
160 {
161 spacing = ((double) g->draw_height/segments) * (k+1);
162 cairo_move_to (cr, 0.5, spacing);
163 cairo_line_to (cr, g->draw_width-0.5, spacing);
164 }
165 cairo_stroke (cr);
166 /* draw indicator if needed */
167 if (level > 0)
168 {
169 cdk_cairo_set_source_rgba (cr, &(g->colors [5]));
170 for (k = 0; k< level; k++ )
171 cairo_rectangle(cr, 0.5, (k*2) * g->draw_height/5, 5, g->draw_height/5);
172 cairo_fill(cr);
173 }
174 cairo_stroke (cr);
175 }
176 /* this is Load graph */
177 else
178 {
179 guint maxload = 1;
180 for (i = 0; i < g->draw_width; i++)
181 {
182 g->pos [i] = g->draw_height - 1;
183 /* find maximum value */
184 if (g->data[i][0] > maxload)
185 maxload = g->data[i][0];
186 }
187 load = ceil ((double) (maxload/g->draw_height)) + 1;
188 load = MAX (load,1)(((load) > (1)) ? (load) : (1));
189
190 for (j = 0; j < g->n; j++)
191 {
192 cdk_cairo_set_source_rgba (cr, &(g->colors [j]));
193
194 for (i = 0; i < g->draw_width; i++)
195 {
196 cairo_move_to (cr, g->draw_width - i - 0.5, g->pos[i] + 0.5);
197 if (j == 0)
198 {
199 cairo_line_to (cr, g->draw_width - i - 0.5, g->pos[i] - ((g->data [i][j] - 0.5)/load));
200 }
201 else
202 {
203 cairo_line_to (cr, g->draw_width - i - 0.5, 0.5);
204 }
205 g->pos [i] -= g->data [i][j] / load;
206 }
207 cairo_stroke (cr);
208 }
209
210 /* draw grid lines in Load graph if needed */
211 cdk_cairo_set_source_rgba (cr, &(g->colors [2]));
212
213 double spacing = 0;
214 for (k = 0; k < load - 1; k++)
215 {
216 spacing = ((double) g->draw_height/load) * (k+1);
217 cairo_move_to (cr, 0.5, spacing);
218 cairo_line_to (cr, g->draw_width-0.5, spacing);
219 }
220
221 cairo_stroke (cr);
222 }
223 ctk_widget_queue_draw (g->disp);
224
225 cairo_destroy (cr);
226}
227
228/* Updates the load graph when the timeout expires */
229static gboolean
230load_graph_update (LoadGraph *g)
231{
232 if (g->data == NULL((void*)0))
233 return TRUE(!(0));
234
235 shift_right(g);
236
237 if (g->tooltip_update)
238 multiload_applet_tooltip_update(g);
239
240 g->get_data (g->draw_height, g->data [0], g);
241
242 load_graph_draw (g);
243 return TRUE(!(0));
244}
245
246void
247load_graph_unalloc (LoadGraph *g)
248{
249 guint i;
250
251 if (!g->allocated)
252 return;
253
254 for (i = 0; i < g->draw_width; i++)
255 {
256 g_free (g->data [i]);
257 }
258
259 g_free (g->data);
260 g_free (g->pos);
261
262 g->pos = NULL((void*)0);
263 g->data = NULL((void*)0);
264
265 g->size = g_settings_get_int(g->multiload->settings, "size");
266 g->size = MAX (g->size, 10)(((g->size) > (10)) ? (g->size) : (10));
267
268 if (g->surface) {
269 cairo_surface_destroy (g->surface);
270 g->surface = NULL((void*)0);
271 }
272
273 g->allocated = FALSE(0);
274}
275
276static void
277load_graph_alloc (LoadGraph *g)
278{
279 guint i;
280
281 if (g->allocated)
282 return;
283
284 g->data = g_new0 (gint *, g->draw_width)((gint * *) g_malloc0_n ((g->draw_width), sizeof (gint *))
)
;
285 g->pos = g_new0 (guint, g->draw_width)((guint *) g_malloc0_n ((g->draw_width), sizeof (guint)));
286
287 g->data_size = sizeof (guint) * g->n;
288
289 for (i = 0; i < g->draw_width; i++) {
290 g->data [i] = g_malloc0 (g->data_size);
291 }
292
293 g->allocated = TRUE(!(0));
294}
295
296static gint
297load_graph_configure (CtkWidget *widget, CdkEventConfigure *event,
298 gpointer data_ptr)
299{
300 CtkAllocation allocation;
301 LoadGraph *c = (LoadGraph *) data_ptr;
302
303 load_graph_unalloc (c);
304
305 ctk_widget_get_allocation (c->disp, &allocation);
306
307 c->draw_width = allocation.width;
308 c->draw_height = allocation.height;
309 c->draw_width = MAX (c->draw_width, 1)(((c->draw_width) > (1)) ? (c->draw_width) : (1));
310 c->draw_height = MAX (c->draw_height, 1)(((c->draw_height) > (1)) ? (c->draw_height) : (1));
311
312 load_graph_alloc (c);
313
314 if (!c->surface)
315 c->surface = cdk_window_create_similar_surface (ctk_widget_get_window (c->disp),
316 CAIRO_CONTENT_COLOR,
317 c->draw_width, c->draw_height);
318 ctk_widget_queue_draw (widget);
319
320 return TRUE(!(0));
321}
322
323static gint
324load_graph_expose (CtkWidget *widget,
325 cairo_t *cr,
326 gpointer data_ptr)
327{
328 LoadGraph *g = (LoadGraph *) data_ptr;
329
330 cairo_set_source_surface (cr, g->surface, 0, 0);
331 cairo_paint (cr);
332
333 return FALSE(0);
334}
335
336static void
337load_graph_destroy (CtkWidget *widget, gpointer data_ptr)
338{
339 LoadGraph *g = (LoadGraph *) data_ptr;
340
341 load_graph_stop (g);
342 netspeed_delete(g->netspeed_in);
343 netspeed_delete(g->netspeed_out);
344
345 ctk_widget_destroy(widget);
346}
347
348static gboolean
349load_graph_clicked (CtkWidget *widget, CdkEventButton *event, LoadGraph *load)
350{
351 load->multiload->last_clicked = load->id;
352
353 return FALSE(0);
354}
355
356static gboolean
357load_graph_enter_cb(CtkWidget *widget, CdkEventCrossing *event, gpointer data)
358{
359 LoadGraph *graph;
360 graph = (LoadGraph *)data;
361
362 graph->tooltip_update = TRUE(!(0));
363 multiload_applet_tooltip_update(graph);
364
365 return TRUE(!(0));
366}
367
368static gboolean
369load_graph_leave_cb(CtkWidget *widget, CdkEventCrossing *event, gpointer data)
370{
371 LoadGraph *graph;
372 graph = (LoadGraph *)data;
373
374 graph->tooltip_update = FALSE(0);
375
376 return TRUE(!(0));
377}
378
379static void
380load_graph_load_config (LoadGraph *g)
381{
382 gchar *name, *temp;
383 guint i;
384
385 if (!g->colors)
386 g->colors = g_new0(CdkRGBA, g->n)((CdkRGBA *) g_malloc0_n ((g->n), sizeof (CdkRGBA)));
387
388 for (i = 0; i < g->n; i++)
389 {
390 name = g_strdup_printf ("%s-color%u", g->name, i);
391 temp = g_settings_get_string(g->multiload->settings, name);
392 if (!temp)
393 temp = g_strdup ("#000000")g_strdup_inline ("#000000");
394 cdk_rgba_parse(&(g->colors[i]), temp);
395 g_free(temp);
396 g_free(name);
397 }
398}
399
400LoadGraph *
401load_graph_new (MultiloadApplet *ma, guint n, const gchar *label,
402 guint id, guint speed, guint size, gboolean visible,
403 const gchar *name, LoadGraphDataFunc get_data)
404{
405 LoadGraph *g;
406 CafePanelAppletOrient orient;
407
408 g = g_new0 (LoadGraph, 1)((LoadGraph *) g_malloc0_n ((1), sizeof (LoadGraph)));
409 g->netspeed_in = netspeed_new(g);
410 g->netspeed_out = netspeed_new(g);
411 g->visible = visible;
412 g->name = name;
413 g->n = n;
414 g->id = id;
415 g->speed = MAX (speed, 50)(((speed) > (50)) ? (speed) : (50));
416 g->size = MAX (size, 10)(((size) > (10)) ? (size) : (10));
417 g->pixel_size = cafe_panel_applet_get_size (ma->applet);
418 g->tooltip_update = FALSE(0);
419 g->show_frame = TRUE(!(0));
420 g->multiload = ma;
421
422 g->main_widget = ctk_box_new (CTK_ORIENTATION_VERTICAL, 0);
423
424 g->box = ctk_box_new (CTK_ORIENTATION_VERTICAL, 0);
425
426 orient = cafe_panel_applet_get_orient (g->multiload->applet);
427 switch (orient)
428 {
429 case CAFE_PANEL_APPLET_ORIENT_UP:
430 case CAFE_PANEL_APPLET_ORIENT_DOWN:
431 {
432 g->orient = FALSE(0);
433 break;
434 }
435 case CAFE_PANEL_APPLET_ORIENT_LEFT:
436 case CAFE_PANEL_APPLET_ORIENT_RIGHT:
437 {
438 g->orient = TRUE(!(0));
439 break;
440 }
441 default:
442 g_assert_not_reached ()do { g_assertion_message_expr (((gchar*) 0), "load-graph.c", 442
, ((const char*) (__func__)), ((void*)0)); } while (0)
;
443 }
444
445 if (g->show_frame)
446 {
447 g->frame = ctk_frame_new (NULL((void*)0));
448 ctk_frame_set_shadow_type (CTK_FRAME (g->frame)((((CtkFrame*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((g->frame)), ((ctk_frame_get_type ()))))))
, CTK_SHADOW_IN);
449 ctk_container_add (CTK_CONTAINER (g->frame)((((CtkContainer*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((g->frame)), ((ctk_container_get_type ()))))))
, g->box);
450 ctk_box_pack_start (CTK_BOX (g->main_widget)((((CtkBox*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((g->main_widget)), ((ctk_box_get_type ()))))))
, g->frame, TRUE(!(0)), TRUE(!(0)), 0);
451 }
452 else
453 {
454 g->frame = NULL((void*)0);
This statement is never executed
455 ctk_box_pack_start (CTK_BOX (g->main_widget)((((CtkBox*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((g->main_widget)), ((ctk_box_get_type ()))))))
, g->box, TRUE(!(0)), TRUE(!(0)), 0);
456 }
457
458 load_graph_load_config (g);
459
460 g->get_data = get_data;
461
462 g->timer_index = -1;
463
464 if (g->orient)
465 ctk_widget_set_size_request (g->main_widget, -1, g->size);
466 else
467 ctk_widget_set_size_request (g->main_widget, g->size, -1);
468
469 g->disp = ctk_drawing_area_new ();
470 ctk_widget_set_events (g->disp, CDK_EXPOSURE_MASK |
471 CDK_ENTER_NOTIFY_MASK |
472 CDK_LEAVE_NOTIFY_MASK |
473 CDK_BUTTON_PRESS_MASK);
474
475 g_signal_connect (G_OBJECT (g->disp), "draw",g_signal_connect_data ((((((GObject*) (void *) g_type_check_instance_cast
((GTypeInstance*) ((g->disp)), (((GType) ((20) << (
2))))))))), ("draw"), (((GCallback) (load_graph_expose))), (g
), ((void*)0), (GConnectFlags) 0)
476 G_CALLBACK (load_graph_expose), g)g_signal_connect_data ((((((GObject*) (void *) g_type_check_instance_cast
((GTypeInstance*) ((g->disp)), (((GType) ((20) << (
2))))))))), ("draw"), (((GCallback) (load_graph_expose))), (g
), ((void*)0), (GConnectFlags) 0)
;
477 g_signal_connect (G_OBJECT(g->disp), "configure_event",g_signal_connect_data ((((((GObject*) (void *) g_type_check_instance_cast
((GTypeInstance*) ((g->disp)), (((GType) ((20) << (
2))))))))), ("configure_event"), (((GCallback) (load_graph_configure
))), (g), ((void*)0), (GConnectFlags) 0)
478 G_CALLBACK (load_graph_configure), g)g_signal_connect_data ((((((GObject*) (void *) g_type_check_instance_cast
((GTypeInstance*) ((g->disp)), (((GType) ((20) << (
2))))))))), ("configure_event"), (((GCallback) (load_graph_configure
))), (g), ((void*)0), (GConnectFlags) 0)
;
479 g_signal_connect (G_OBJECT(g->disp), "destroy",g_signal_connect_data ((((((GObject*) (void *) g_type_check_instance_cast
((GTypeInstance*) ((g->disp)), (((GType) ((20) << (
2))))))))), ("destroy"), (((GCallback) (load_graph_destroy)))
, (g), ((void*)0), (GConnectFlags) 0)
480 G_CALLBACK (load_graph_destroy), g)g_signal_connect_data ((((((GObject*) (void *) g_type_check_instance_cast
((GTypeInstance*) ((g->disp)), (((GType) ((20) << (
2))))))))), ("destroy"), (((GCallback) (load_graph_destroy)))
, (g), ((void*)0), (GConnectFlags) 0)
;
481 g_signal_connect (G_OBJECT(g->disp), "button-press-event",g_signal_connect_data ((((((GObject*) (void *) g_type_check_instance_cast
((GTypeInstance*) ((g->disp)), (((GType) ((20) << (
2))))))))), ("button-press-event"), (((GCallback) (load_graph_clicked
))), (g), ((void*)0), (GConnectFlags) 0)
482 G_CALLBACK (load_graph_clicked), g)g_signal_connect_data ((((((GObject*) (void *) g_type_check_instance_cast
((GTypeInstance*) ((g->disp)), (((GType) ((20) << (
2))))))))), ("button-press-event"), (((GCallback) (load_graph_clicked
))), (g), ((void*)0), (GConnectFlags) 0)
;
483 g_signal_connect (G_OBJECT(g->disp), "enter-notify-event",g_signal_connect_data ((((((GObject*) (void *) g_type_check_instance_cast
((GTypeInstance*) ((g->disp)), (((GType) ((20) << (
2))))))))), ("enter-notify-event"), (((GCallback) (load_graph_enter_cb
))), (g), ((void*)0), (GConnectFlags) 0)
484 G_CALLBACK(load_graph_enter_cb), g)g_signal_connect_data ((((((GObject*) (void *) g_type_check_instance_cast
((GTypeInstance*) ((g->disp)), (((GType) ((20) << (
2))))))))), ("enter-notify-event"), (((GCallback) (load_graph_enter_cb
))), (g), ((void*)0), (GConnectFlags) 0)
;
485 g_signal_connect (G_OBJECT(g->disp), "leave-notify-event",g_signal_connect_data ((((((GObject*) (void *) g_type_check_instance_cast
((GTypeInstance*) ((g->disp)), (((GType) ((20) << (
2))))))))), ("leave-notify-event"), (((GCallback) (load_graph_leave_cb
))), (g), ((void*)0), (GConnectFlags) 0)
486 G_CALLBACK(load_graph_leave_cb), g)g_signal_connect_data ((((((GObject*) (void *) g_type_check_instance_cast
((GTypeInstance*) ((g->disp)), (((GType) ((20) << (
2))))))))), ("leave-notify-event"), (((GCallback) (load_graph_leave_cb
))), (g), ((void*)0), (GConnectFlags) 0)
;
487
488 ctk_box_pack_start (CTK_BOX (g->box)((((CtkBox*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((g->box)), ((ctk_box_get_type ()))))))
, g->disp, TRUE(!(0)), TRUE(!(0)), 0);
489 ctk_widget_show_all(g->box);
490
491 return g;
492}
493
494void
495load_graph_start (LoadGraph *g)
496{
497 if (g->timer_index != -1)
498 g_source_remove (g->timer_index);
499
500 g->timer_index = g_timeout_add (g->speed,
501 (GSourceFunc) load_graph_update, g);
502}
503
504void
505load_graph_stop (LoadGraph *g)
506{
507 if (g->timer_index != -1)
508 g_source_remove (g->timer_index);
509
510 g->timer_index = -1;
511}