void gtk_combo_set_item_string (GtkCombo * combo, GtkItem * item, const gchar * item_value) { gchar *val; gint connected = 0; g_return_if_fail (combo != NULL); g_return_if_fail (GTK_IS_COMBO (combo)); g_return_if_fail (item != NULL); val = gtk_object_get_data (GTK_OBJECT (item), gtk_combo_string_key); if (val) { g_free (val); connected = 1; } if (item_value) { val = g_strdup(item_value); gtk_object_set_data (GTK_OBJECT (item), gtk_combo_string_key, val); if (!connected) gtk_signal_connect (GTK_OBJECT (item), "destroy", (GtkSignalFunc) gtk_combo_item_destroy, val); } else { gtk_object_set_data (GTK_OBJECT (item), gtk_combo_string_key, NULL); if (connected) gtk_signal_disconnect_by_data(GTK_OBJECT (item), val); } }
static void gv_tool_real_deactivate(GvTool *tool, GvViewArea *view) { g_return_if_fail(tool->view == view); gtk_signal_disconnect_by_data(GTK_OBJECT(tool->view), (gpointer)tool); tool->view = NULL; gtk_object_unref(GTK_OBJECT(view)); }
void gv_rotate_tool_set_layer(GvRotateTool *tool, GvShapeLayer *layer) { if (GV_TOOL(tool)->view == NULL) { g_warning("gv_rotate_tool_set_layer(): inactive tool"); return; } if( layer != NULL && gv_data_is_read_only( GV_DATA(layer) ) ) { g_warning( "gv_rotate_tool_set_layer(): layer is read-only" ); return; } gv_rotate_tool_terminate( tool ); tool->shape_id = -1; /* Disconnect from the previous layer (for draw) */ if (tool->layer) { tool->rrmode = RRMODE_DISPLAY; /** TODO: Not sure that we need to unselect ... try to remove later */ gv_shape_layer_clear_selection(GV_SHAPE_LAYER(tool->layer)); gtk_signal_disconnect_by_data(GTK_OBJECT(tool->layer), (gpointer)tool); gv_view_area_queue_draw(GV_TOOL(tool)->view); } if( layer == NULL ) tool->layer = NULL; else tool->layer = GV_SHAPES_LAYER(layer); if (layer) { gv_view_area_set_active_layer(GV_TOOL(tool)->view, GTK_OBJECT(layer)); /* Redraw when the layer draws */ gtk_signal_connect_object_after(GTK_OBJECT(layer), "draw", GTK_SIGNAL_FUNC(gv_rotate_tool_draw), GTK_OBJECT(tool)); /* Recover if layer destroyed */ gtk_signal_connect( GTK_OBJECT(layer), "destroy", GTK_SIGNAL_FUNC(gv_rotate_tool_layer_destroy), GTK_OBJECT(tool)); } }
void gradient_select_free (GradientSelect *gsp) { if (!gsp) return; /* remove from active list */ gradient_active_dialogs = g_slist_remove (gradient_active_dialogs, gsp); gtk_signal_disconnect_by_data (GTK_OBJECT (gsp->context), gsp); if (gsp->callback_name) { g_free (gsp->callback_name); gtk_object_unref (GTK_OBJECT (gsp->context)); } g_free (gsp); }
void gv_point_tool_set_layer(GvPointTool *tool, GvShapeLayer *layer) { if (GV_TOOL(tool)->view == NULL) { g_warning("gv_point_tool_set_layer(): inactive tool"); return; } if( layer != NULL && !GV_IS_POINT_LAYER(layer) && !GV_IS_SHAPES_LAYER(layer) ) { g_warning( "gv_point_tool_set_layer(): not a point capable layer" ); return; } if( layer != NULL && gv_data_is_read_only( GV_DATA(layer) ) ) { g_warning( "gv_point_tool_set_layer(): layer is read-only" ); return; } /* Disconnect from the previous layer */ if (tool->layer) { gv_shape_layer_clear_selection(GV_SHAPE_LAYER(tool->layer)); gv_view_area_queue_draw(GV_TOOL(tool)->view); gtk_signal_disconnect_by_data( GTK_OBJECT(tool->layer), GTK_OBJECT(tool) ); } tool->layer = layer; if (layer) { gv_view_area_set_active_layer(GV_TOOL(tool)->view, GTK_OBJECT(layer)); gtk_signal_connect( GTK_OBJECT(layer), "destroy", GTK_SIGNAL_FUNC(gv_point_tool_layer_destroy), GTK_OBJECT(tool)); } }
static void tslider_destroy( GtkObject *object ) { Tslider *tslider; g_return_if_fail( object != NULL ); g_return_if_fail( IS_TSLIDER( object ) ); tslider = TSLIDER( object ); #ifdef DEBUG printf( "tslider_destroy: %p\n", tslider ); #endif /*DEBUG*/ /* My instance destroy stuff. */ if( tslider->adj ) { gtk_signal_disconnect_by_data( GTK_OBJECT( tslider->adj ), (gpointer) tslider ); tslider->adj = NULL; } GTK_OBJECT_CLASS( parent_class )->destroy( object ); }
static void wins_link_cb (GtkWidget *button, xchatwin *xw) { GtkWidget *new_win; GtkWidget *old_win; xchatwin *new_xw; #ifdef USE_GNOME GtkWidget *wid; #endif old_win = xw->child; /* make sure wins_destroy_cb isn't called */ gtk_signal_disconnect_by_data (GTK_OBJECT (old_win), xw); /* do we need to create a main window? */ if (main_window == NULL && xw->is_toplevel) { gui_make_tab_window (NULL, old_win); gtk_widget_show (main_window); } /* create a new tab/window */ new_win = wins_new (xw->name, xw->title, xw->close_callback, xw->userdata, xw->link_callback, xw->link_userdata, xw->is_toplevel, xw->is_nonirc, xw->child_ret); new_xw = gtk_object_get_user_data (GTK_OBJECT (new_win)); /* give the client the new window pointer */ if (xw->child_ret != NULL) *xw->child_ret = new_win; /* use the old vbox instead */ gtk_widget_destroy (new_xw->vbox); new_xw->vbox = xw->vbox; #ifdef USE_GNOME if (xw->is_toplevel) { gtk_widget_reparent (xw->vbox, new_win); } else { wid = gtk_hbox_new (0, 0); gtk_widget_reparent (xw->vbox, wid); gnome_app_set_contents (GNOME_APP (new_win), wid); } #else gtk_widget_reparent (xw->vbox, new_win); #endif if (xw->button_box != NULL) { /* buttons need to be re-created so that the parameters to the callbacks are updated. */ gtk_widget_destroy (xw->button_box); wins_create_linkbuttons (new_win, xw->button_box_box); } gtk_widget_destroy (old_win); gtk_widget_show (new_win); wins_free (xw); /* this will call link_cb() in maingui.c */ if (new_xw->link_callback != NULL) new_xw->link_callback (new_win, new_xw->link_userdata); /* did we just remove the last page? if so, destroy the main window */ if (gtk_notebook_get_nth_page (GTK_NOTEBOOK (main_book), 0) == NULL) gtk_widget_destroy (main_window); }