static void anjuta_docman_finalize (GObject *obj) { AnjutaDocman *docman; DEBUG_PRINT ("%s", "Finalising AnjutaDocman object"); docman = ANJUTA_DOCMAN (obj); if (docman->priv) { if (docman->priv->fileselection) gtk_widget_destroy (docman->priv->fileselection); g_free (docman->priv); docman->priv = NULL; } G_OBJECT_CLASS (parent_class)->finalize (obj); }
GtkWidget* anjuta_docman_new (DocmanPlugin* plugin, AnjutaPreferences *pref) { GtkWidget *docman; docman = gtk_widget_new (ANJUTA_TYPE_DOCMAN, NULL); if (docman) { AnjutaUI* ui; AnjutaDocman* real_docman = ANJUTA_DOCMAN (docman); real_docman->priv->plugin = plugin; real_docman->priv->preferences = pref; real_docman->priv->documents_action_group = gtk_action_group_new ("ActionGroupDocument"); ui = anjuta_shell_get_ui (ANJUTA_PLUGIN (plugin)->shell, NULL); gtk_ui_manager_insert_action_group (GTK_UI_MANAGER (ui), real_docman->priv->documents_action_group, 0); g_object_unref (real_docman->priv->documents_action_group); } return docman; }
static void anjuta_docman_dispose (GObject *obj) { AnjutaDocman *docman; GList *node; docman = ANJUTA_DOCMAN (obj); docman->priv->shutingdown = TRUE; DEBUG_PRINT ("%s", "Disposing AnjutaDocman object"); if (docman->priv->popup_menu) { gtk_widget_destroy (docman->priv->popup_menu); docman->priv->popup_menu = NULL; } if (docman->priv->pages) { /* Destroy all page data (more than just the notebook-page-widgets) */ GList *pages; g_signal_handlers_disconnect_by_func (G_OBJECT (docman), (gpointer) on_notebook_switch_page, (gpointer) docman); pages = docman->priv->pages; /*work with copy so var can be NULL'ed ASAP*/ docman->priv->pages = NULL; for (node = pages; node != NULL; node = g_list_next (node)) { /* this also tries to destroy any notebook-page-widgets, in case they're not gone already CHECKME at shutdown do we need "destroy" signals in case other plugins hold refs on any page(s) or their contents ? */ anjuta_docman_page_destroy ((AnjutaDocmanPage *)node->data); } g_list_free (pages); } G_OBJECT_CLASS (parent_class)->dispose (obj); }