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);