static void sp_button_set_action (SPButton *button, SPAction *action) { GtkWidget *child; if (button->action) { nr_active_object_remove_listener_by_data ((NRActiveObject *) button->action, button); nr_object_unref ((NRObject *) button->action); child = gtk_bin_get_child (GTK_BIN (button)); if (child) { gtk_container_remove (GTK_CONTAINER (button), child); } } button->action = action; if (action) { button->action = (SPAction *) nr_object_ref ((NRObject *) action); nr_active_object_add_listener ((NRActiveObject *) action, (NRObjectEventVector *) &button_event_vector, sizeof (SPActionEventVector), button); if (action->image) { child = sp_icon_new (button->lsize, action->image); gtk_widget_show (child); gtk_container_add (GTK_CONTAINER (button), child); } } if (button->tooltips) { sp_button_set_composed_tooltip (button->tooltips, (GtkWidget *) button, action); } }
static void sp_canvas_arena_destroy (GtkObject *object) { SPCanvasArena *arena; arena = SP_CANVAS_ARENA (object); if (arena->active) { nr_object_unref ((NRObject *) arena->active); arena->active = NULL; } if (arena->root) { nr_arena_item_unref (arena->root); arena->root = NULL; } if (arena->arena) { #if 0 /* g_signal_disconnect_by_data (G_OBJECT (arena->arena), arena); */ g_signal_handlers_disconnect_matched (G_OBJECT(arena->arena), G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, arena); #endif nr_active_object_remove_listener_by_data ((NRActiveObject *) arena->arena, arena); nr_object_unref ((NRObject *) arena->arena); arena->arena = NULL; } if (GTK_OBJECT_CLASS (parent_class)->destroy) (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); }