static void on_document_destroy (IAnjutaDocument *doc, AnjutaDocman *docman) { AnjutaDocmanPage *page; gint page_num; g_signal_handlers_disconnect_by_func (G_OBJECT (doc), G_CALLBACK (on_document_update_save_ui), docman); g_signal_handlers_disconnect_by_func (G_OBJECT (doc), G_CALLBACK (on_document_destroy), docman); page = anjuta_docman_get_page_for_document (docman, doc); docman->priv->pages = g_list_remove (docman->priv->pages, page); if (!docman->priv->shutingdown) { if ((page_num = gtk_notebook_get_current_page (GTK_NOTEBOOK (docman))) == -1) anjuta_docman_set_current_document (docman, NULL); else { AnjutaDocmanPage *next_page; /* set a replacement active document */ next_page = anjuta_docman_get_nth_page (docman, page_num); anjuta_docman_set_current_document (docman, next_page->doc); } } anjuta_docman_page_destroy (page); }
void anjuta_docman_remove_document (AnjutaDocman *docman, IAnjutaDocument *doc) { AnjutaDocmanPage *page; if (!doc) doc = anjuta_docman_get_current_document (docman); if (!doc) return; page = anjuta_docman_get_page_for_document (docman, doc); if (page) { docman->priv->pages = g_list_remove (docman->priv->pages, (gpointer)page); if (!g_list_length (docman->priv->pages)) g_signal_emit (G_OBJECT (docman), docman_signals[DOC_CHANGED], 0, NULL); g_free (page); } gtk_widget_destroy(GTK_WIDGET(doc)); anjuta_docman_update_documents_menu(docman); }
void anjuta_docman_remove_document (AnjutaDocman *docman, IAnjutaDocument *doc) { AnjutaDocmanPage *page; if (!doc) doc = anjuta_docman_get_current_document (docman); if (!doc) return; page = anjuta_docman_get_page_for_document (docman, doc); if (page) { gtk_container_remove (GTK_CONTAINER (docman), page->widget); docman->priv->pages = g_list_remove (docman->priv->pages, (gpointer)page); if (!g_list_length (docman->priv->pages)) g_signal_emit (G_OBJECT (docman), docman_signals[DOC_CHANGED], 0, NULL); g_free (page); } anjuta_docman_update_documents_menu(docman); g_object_unref (doc); }
gboolean anjuta_docman_save_document_as (AnjutaDocman *docman, IAnjutaDocument *doc, GtkWidget *parent_window) { gchar* uri; GFile* file; const gchar* filename; GtkWidget *parent; GtkWidget *dialog; gint response; gboolean file_saved = TRUE; g_return_val_if_fail (ANJUTA_IS_DOCMAN (docman), FALSE); g_return_val_if_fail (IANJUTA_IS_DOCUMENT (doc), FALSE); if (parent_window) { parent = parent_window; } else { parent = gtk_widget_get_toplevel (GTK_WIDGET (docman)); } dialog = create_file_save_dialog_gui (GTK_WINDOW (parent), docman); if ((file = ianjuta_file_get_file (IANJUTA_FILE (doc), NULL)) != NULL) { gchar* file_uri = g_file_get_uri (file); gtk_file_chooser_set_uri (GTK_FILE_CHOOSER (dialog), file_uri); g_free (file_uri); g_object_unref (file); } else if ((filename = ianjuta_document_get_filename (doc, NULL)) != NULL) gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dialog), filename); else gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dialog), ""); response = gtk_dialog_run (GTK_DIALOG (dialog)); if (response != GTK_RESPONSE_ACCEPT) { gtk_widget_destroy (dialog); return FALSE; } uri = gtk_file_chooser_get_uri(GTK_FILE_CHOOSER(dialog)); file = g_file_new_for_uri (uri); if (g_file_query_exists (file, NULL)) { GtkWidget *msg_dialog; gchar* parse_uri = g_file_get_parse_name (file); msg_dialog = gtk_message_dialog_new (GTK_WINDOW (dialog), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, GTK_BUTTONS_NONE, _("The file '%s' already exists.\n" "Do you want to replace it with the" " one you are saving?"), parse_uri); g_free (parse_uri); gtk_dialog_add_button (GTK_DIALOG (msg_dialog), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL); anjuta_util_dialog_add_button (GTK_DIALOG (msg_dialog), _("_Replace"), GTK_STOCK_REFRESH, GTK_RESPONSE_YES); if (gtk_dialog_run (GTK_DIALOG (msg_dialog)) == GTK_RESPONSE_YES) ianjuta_file_savable_save_as (IANJUTA_FILE_SAVABLE (doc), file, NULL); else file_saved = FALSE; gtk_widget_destroy (msg_dialog); } else { ianjuta_file_savable_save_as (IANJUTA_FILE_SAVABLE (doc), file, NULL); } if (g_settings_get_boolean (docman->priv->settings, EDITOR_TABS_ORDERING)) anjuta_docman_order_tabs (docman); gtk_widget_destroy (dialog); g_free (uri); if (file_saved) { /* Update mime icons */ AnjutaDocmanPage* page = anjuta_docman_get_page_for_document (docman, doc); GdkPixbuf* pixbuf = anjuta_docman_get_pixbuf_for_file (file); if (pixbuf) { gtk_image_set_from_pixbuf (GTK_IMAGE(page->menu_icon), pixbuf); gtk_image_set_from_pixbuf (GTK_IMAGE(page->mime_icon), pixbuf); g_object_unref (pixbuf); } } g_object_unref (file); return file_saved; }
static void anjuta_docman_update_page_label (AnjutaDocman *docman, IAnjutaDocument *doc) { AnjutaDocmanPage *page; gchar *basename; GFile* file; const gchar* doc_filename; gchar* dirty_char; gchar* read_only; gchar* label; if (doc == NULL) return; page = anjuta_docman_get_page_for_document (docman, doc); if (!page || page->label == NULL || page->menu_label == NULL) return; if (!ianjuta_file_savable_is_dirty(IANJUTA_FILE_SAVABLE (doc), NULL)) { dirty_char = ""; } else { dirty_char = "*"; } if (ianjuta_file_savable_is_read_only (IANJUTA_FILE_SAVABLE (doc), NULL)) { read_only = _("[read-only]"); } else { read_only = ""; } file = ianjuta_file_get_file (IANJUTA_FILE (doc), NULL); if (file) { basename = g_file_get_basename (file); label = g_strconcat(dirty_char, basename, read_only, NULL); gtk_label_set_text (GTK_LABEL (page->label), label); gtk_label_set_text (GTK_LABEL (page->menu_label), label); g_free (label); g_free (basename); if (ianjuta_file_savable_is_conflict (IANJUTA_FILE_SAVABLE (doc), NULL)) { gtk_image_set_from_stock (GTK_IMAGE (page->menu_icon), GTK_STOCK_DIALOG_WARNING, GTK_ICON_SIZE_MENU); gtk_image_set_from_stock (GTK_IMAGE (page->mime_icon), GTK_STOCK_DIALOG_WARNING, GTK_ICON_SIZE_MENU); } else { GdkPixbuf* pixbuf = anjuta_docman_get_pixbuf_for_file (file); if (pixbuf) { gtk_image_set_from_pixbuf (GTK_IMAGE(page->menu_icon), pixbuf); gtk_image_set_from_pixbuf (GTK_IMAGE(page->mime_icon), pixbuf); g_object_unref (pixbuf); } } g_object_unref (file); } else if ((doc_filename = ianjuta_document_get_filename (doc, NULL)) != NULL) { label = g_strconcat (dirty_char, doc_filename, read_only, NULL); gtk_label_set_text (GTK_LABEL (page->label), label); gtk_label_set_text (GTK_LABEL (page->menu_label), label); g_free (label); } }
void anjuta_docman_set_current_document (AnjutaDocman *docman, IAnjutaDocument *doc) { AnjutaDocmanPage *page; IAnjutaDocument *defdoc; defdoc = anjuta_docman_get_current_document(docman); if (doc != NULL) { page = anjuta_docman_get_page_for_document (docman, doc); /* proceed only if page data has been added before */ if (page) { gint page_num; if (defdoc != NULL) { AnjutaDocmanPage *oldpage; oldpage = anjuta_docman_get_page_for_document (docman, defdoc); if (oldpage) { oldpage->is_current = FALSE; if (oldpage->close_button != NULL) { gtk_widget_set_sensitive (oldpage->close_image, FALSE); if (oldpage->mime_icon) gtk_widget_set_sensitive (oldpage->mime_icon, FALSE); } } } page->is_current = TRUE; if (page->close_button != NULL) { gtk_widget_set_sensitive (page->close_image, TRUE); if (page->mime_icon) gtk_widget_set_sensitive (page->mime_icon, TRUE); } page_num = gtk_notebook_page_num (GTK_NOTEBOOK (docman), page->widget); gtk_notebook_set_current_page (GTK_NOTEBOOK (docman), page_num); if (g_settings_get_boolean (docman->priv->settings, EDITOR_TABS_ORDERING)) anjuta_docman_order_tabs (docman); gtk_widget_grab_focus (GTK_WIDGET (doc)); anjuta_docman_grab_text_focus (docman); ianjuta_document_grab_focus (IANJUTA_DOCUMENT (doc), NULL); } } else /* doc == NULL */ { if (defdoc != NULL) { page = anjuta_docman_get_current_page (docman); if (page) { page->is_current = FALSE; if (page->close_button != NULL) { gtk_widget_set_sensitive (page->close_image, FALSE); if (page->mime_icon) gtk_widget_set_sensitive (page->mime_icon, FALSE); } } } } }