Mercurial > dwindows
comparison gtk/dw.c @ 1867:a3e356948426
Minor signal handler fixes for GTK2 ... prevents
crash on exit due to double free().
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Tue, 19 Mar 2013 07:03:29 +0000 |
parents | f3ae396b3585 |
children | fb137f7f91e4 |
comparison
equal
deleted
inserted
replaced
1866:f3ae396b3585 | 1867:a3e356948426 |
---|---|
13648 else if (GTK_IS_TREE(thiswindow) && strcmp(signame, DW_SIGNAL_TREE_EXPAND) == 0) | 13648 else if (GTK_IS_TREE(thiswindow) && strcmp(signame, DW_SIGNAL_TREE_EXPAND) == 0) |
13649 { | 13649 { |
13650 if(thisfunc) | 13650 if(thisfunc) |
13651 { | 13651 { |
13652 sigid = _set_signal_handler(thiswindow, window, sigfunc, data, thisfunc); | 13652 sigid = _set_signal_handler(thiswindow, window, sigfunc, data, thisfunc); |
13653 params[0] = GINT_TO_POINTER(sigid); | |
13653 gtk_object_set_data(GTK_OBJECT(thiswindow), "_dw_tree_item_expand_func", (gpointer)thisfunc); | 13654 gtk_object_set_data(GTK_OBJECT(thiswindow), "_dw_tree_item_expand_func", (gpointer)thisfunc); |
13654 gtk_object_set_data(GTK_OBJECT(thiswindow), "_dw_tree_item_expand_data", GINT_TO_POINTER(sigid)); | 13655 gtk_object_set_data(GTK_OBJECT(thiswindow), "_dw_tree_item_expand_data", GINT_TO_POINTER(sigid)); |
13655 } | 13656 } |
13656 DW_MUTEX_UNLOCK; | 13657 DW_MUTEX_UNLOCK; |
13657 return; | 13658 return; |
13663 params[0] = GINT_TO_POINTER(sigid); | 13664 params[0] = GINT_TO_POINTER(sigid); |
13664 params[2] = (void *)thiswindow; | 13665 params[2] = (void *)thiswindow; |
13665 cid = g_signal_connect_data(G_OBJECT(thiswindow), "key_press_event", G_CALLBACK(_container_enter_event), params, _dw_signal_disconnect, 0); | 13666 cid = g_signal_connect_data(G_OBJECT(thiswindow), "key_press_event", G_CALLBACK(_container_enter_event), params, _dw_signal_disconnect, 0); |
13666 _set_signal_handler_id(thiswindow, sigid, cid); | 13667 _set_signal_handler_id(thiswindow, sigid, cid); |
13667 | 13668 |
13669 params = calloc(sizeof(void *), 3); | |
13668 thisname = "button_press_event"; | 13670 thisname = "button_press_event"; |
13669 thisfunc = _findsigfunc(DW_SIGNAL_ITEM_ENTER); | 13671 thisfunc = _findsigfunc(DW_SIGNAL_ITEM_ENTER); |
13670 } | 13672 } |
13671 else if (GTK_IS_CLIST(thiswindow) && strcmp(signame, DW_SIGNAL_ITEM_SELECT) == 0) | 13673 else if (GTK_IS_CLIST(thiswindow) && strcmp(signame, DW_SIGNAL_ITEM_SELECT) == 0) |
13672 { | 13674 { |
13711 thisname = "click-column"; | 13713 thisname = "click-column"; |
13712 } | 13714 } |
13713 | 13715 |
13714 if (!thisfunc || !thiswindow) | 13716 if (!thisfunc || !thiswindow) |
13715 { | 13717 { |
13718 free(params); | |
13716 DW_MUTEX_UNLOCK; | 13719 DW_MUTEX_UNLOCK; |
13717 return; | 13720 return; |
13718 } | 13721 } |
13719 | 13722 |
13720 sigid = _set_signal_handler(thiswindow, window, sigfunc, data, thisfunc); | 13723 sigid = _set_signal_handler(thiswindow, window, sigfunc, data, thisfunc); |