finch/libgnt/gntwidget.c

branch
soc.2007.finchfeat
changeset 19307
0027732ddb26
parent 18832
177a16b4b9f3
child 19859
71d37b57eff2
equal deleted inserted replaced
18717:4c0284a98465 19307:0027732ddb26
72 72
73 static void 73 static void
74 gnt_widget_dispose(GObject *obj) 74 gnt_widget_dispose(GObject *obj)
75 { 75 {
76 GntWidget *self = GNT_WIDGET(obj); 76 GntWidget *self = GNT_WIDGET(obj);
77 77 g_signal_emit(self, signals[SIG_DESTROY], 0);
78 if(!(GNT_WIDGET_FLAGS(self) & GNT_WIDGET_DESTROYING)) {
79 GNT_WIDGET_SET_FLAGS(self, GNT_WIDGET_DESTROYING);
80
81 g_signal_emit(self, signals[SIG_DESTROY], 0);
82
83 GNT_WIDGET_UNSET_FLAGS(self, GNT_WIDGET_DESTROYING);
84 }
85
86 parent_class->dispose(obj); 78 parent_class->dispose(obj);
87 GNTDEBUG; 79 GNTDEBUG;
88 } 80 }
89 81
90 static void 82 static void
318 void 310 void
319 gnt_widget_destroy(GntWidget *obj) 311 gnt_widget_destroy(GntWidget *obj)
320 { 312 {
321 g_return_if_fail(GNT_IS_WIDGET(obj)); 313 g_return_if_fail(GNT_IS_WIDGET(obj));
322 314
323 gnt_widget_hide(obj); 315 if(!(GNT_WIDGET_FLAGS(obj) & GNT_WIDGET_DESTROYING)) {
324 delwin(obj->window); 316 GNT_WIDGET_SET_FLAGS(obj, GNT_WIDGET_DESTROYING);
325 if(!(GNT_WIDGET_FLAGS(obj) & GNT_WIDGET_DESTROYING)) 317 gnt_widget_hide(obj);
318 delwin(obj->window);
326 g_object_run_dispose(G_OBJECT(obj)); 319 g_object_run_dispose(G_OBJECT(obj));
320 }
327 GNTDEBUG; 321 GNTDEBUG;
328 } 322 }
329 323
330 void 324 void
331 gnt_widget_show(GntWidget *widget) 325 gnt_widget_show(GntWidget *widget)
397 { 391 {
398 gboolean ret; 392 gboolean ret;
399 if (!GNT_WIDGET_IS_FLAG_SET(widget, GNT_WIDGET_CAN_TAKE_FOCUS)) 393 if (!GNT_WIDGET_IS_FLAG_SET(widget, GNT_WIDGET_CAN_TAKE_FOCUS))
400 return FALSE; 394 return FALSE;
401 395
402 if (gnt_bindable_perform_action_key(GNT_BINDABLE(widget), keys)) 396 if (!GNT_WIDGET_IS_FLAG_SET(widget, GNT_WIDGET_DISABLE_ACTIONS) &&
397 gnt_bindable_perform_action_key(GNT_BINDABLE(widget), keys))
403 return TRUE; 398 return TRUE;
404 399
405 keys = gnt_bindable_remap_keys(GNT_BINDABLE(widget), keys); 400 keys = gnt_bindable_remap_keys(GNT_BINDABLE(widget), keys);
406 g_signal_emit(widget, signals[SIG_KEY_PRESSED], 0, keys, &ret); 401 g_signal_emit(widget, signals[SIG_KEY_PRESSED], 0, keys, &ret);
407 return ret; 402 return ret;

mercurial