📄 file.c
字号:
voidfile_save_as_cb (GtkWidget *widget, gpointer cbdata){ GeditDocument *doc; gedit_debug (DEBUG_FILE, ""); gedit_close_all_flag_verify ("file_save_as_cb"); doc = gedit_document_current(); if (doc==NULL) return; gedit_file_save_as (doc);}static gintdelete_event_cb (GtkWidget *widget, GdkEventAny *event){ gedit_debug (DEBUG_FILE, ""); g_print ("DElete event callback ........\n"); gtk_widget_hide (widget); return TRUE;} static voidcancel_cb (GtkWidget *w, gpointer data){ gedit_debug (DEBUG_FILE, ""); gtk_widget_hide (data);}gintfile_save_document (GeditDocument *doc){ gedit_debug (DEBUG_FILE, ""); if (doc==NULL) return FALSE; if (doc->filename == NULL) { GtkWidget *w = GTK_WIDGET (g_list_nth_data(doc->views, 0)); if(w != NULL) gnome_mdi_set_active_view (mdi, w); gedit_file_save_as (doc); return FALSE; } else { gedit_file_save (doc, NULL); return TRUE; }}voidfile_save_cb (GtkWidget *widget, gpointer cbdata){ GeditDocument *doc; gedit_debug (DEBUG_FILE, ""); gedit_close_all_flag_verify ("file_save_cb"); doc = gedit_document_current (); if (doc==NULL) return; file_save_document (doc);}void file_save_all_cb (GtkWidget *widget, gpointer cbdata){ file_save_all();}void uri_open_cb (GtkWidget *widget, gpointer cbdata){ gedit_dialog_open_uri ();}static voidgedit_file_save_as_ok_sel (GtkWidget *w, gpointer cbdata){ GeditDocument *doc; GeditView *nth_view; gchar *file_name; gint i; gedit_debug (DEBUG_FILE, ""); doc = cbdata; /* g_print ("Doc->filename %s untitled #%i\n", doc->filename, doc->untitled_number); */ if (!doc) return; file_name = g_strdup(gtk_file_selection_get_filename (GTK_FILE_SELECTION(save_file_selector))); gtk_widget_hide (GTK_WIDGET (save_file_selector)); save_file_selector = NULL; if (g_file_exists (file_name)) { guchar * msg; GtkWidget *msgbox; gint ret; msg = g_strdup_printf (_("``%s'' is about to be overwritten. Do you want to continue ?"), file_name); msgbox = gnome_message_box_new (msg, GNOME_MESSAGE_BOX_QUESTION, GNOME_STOCK_BUTTON_YES, GNOME_STOCK_BUTTON_NO, GNOME_STOCK_BUTTON_CANCEL, NULL); gnome_dialog_set_default (GNOME_DIALOG (msgbox), 2); ret = gnome_dialog_run_and_close (GNOME_DIALOG (msgbox)); g_free (msg); switch (ret) { case 0: break; case 1: gedit_close_all_flag_clear(); gedit_flash (_("Document has not been saved.")); return; default: gedit_close_all_flag_clear(); return; } } if (gedit_file_save (doc, file_name) != 0) { gedit_flash (_("Error saving file!")); g_free (file_name); gedit_close_all_flag_clear(); return; } /* If file save was succesfull, then we should turn the readonly flag off */ for (i = 0; i < g_list_length (doc->views); i++) { nth_view = g_list_nth_data (doc->views, i); gedit_view_set_readonly (nth_view, FALSE); } /* Add the saved as file to the recent files ( history ) menu */ gedit_recent_add (file_name); gedit_recent_update_all_windows (mdi); gedit_flash_va ("%s %s", _(MSGBAR_FILE_SAVED), file_name); g_free (file_name); gedit_close_all_flag_status ("gedit_file_save_ok_sel"); switch (gedit_close_all_flag){ case GEDIT_CLOSE_ALL_FLAG_NORMAL: break; case GEDIT_CLOSE_ALL_FLAG_CLOSE_ALL: file_close_all_cb (NULL, NULL); break; case GEDIT_CLOSE_ALL_FLAG_QUIT: file_quit_cb (NULL, NULL); break; default: g_return_if_fail (FALSE); } if(save_all_flag == SAVE_ALL_RUNNING) { file_save_all(); } /* We need to set the revert menu item sensitivity if we where saving as from an Untitled doc */ gedit_window_set_view_menu_sensitivity (gedit_window_active_app ()); if(gedit_window_active_app () != NULL) { gedit_window_set_widgets_sensitivity_ro (gedit_window_active_app (), FALSE); }}voidfile_close_cb (GtkWidget *widget, gpointer cbdata){ gedit_debug (DEBUG_FILE, ""); if (mdi->active_child == NULL) return; gnome_mdi_remove_child (mdi, mdi->active_child, FALSE); gedit_document_set_title (gedit_document_current()); gedit_window_set_widgets_sensitivity (FALSE);}voidfile_close_all_cb (GtkWidget *widget, gpointer cbdata){ gedit_debug (DEBUG_FILE, ""); gedit_close_all_flag_status("File_close_all_cb. Before"); if (gedit_close_all_flag != GEDIT_CLOSE_ALL_FLAG_QUIT) gedit_close_all_flag = GEDIT_CLOSE_ALL_FLAG_CLOSE_ALL; if (mdi->active_child == NULL) return; gnome_mdi_remove_all (mdi, FALSE); /* If this close all was successful, clear the flag */ if (gedit_document_current()==NULL) gedit_close_all_flag_clear(); gedit_window_set_widgets_sensitivity (FALSE); }voidfile_quit_cb (GtkWidget *widget, gpointer cbdata){ gedit_debug (DEBUG_FILE, ""); gedit_close_all_flag = GEDIT_CLOSE_ALL_FLAG_QUIT; file_close_all_cb (NULL, NULL); if (gedit_document_current()!=NULL) return; /* We need to disconnect the signal because mdi "destroy" event is connected to file_quit_cb ( i.e. this function ). Chema */ gtk_signal_disconnect (GTK_OBJECT(mdi), gedit_mdi_destroy_signal); gtk_object_destroy (GTK_OBJECT (mdi)); gedit_prefs_save_settings (); gedit_recent_history_write_config (); gtk_main_quit ();}voidfile_revert_cb (GtkWidget *widget, gpointer data){ GtkWidget *msgbox; GeditDocument *doc = gedit_document_current (); gchar * msg; gchar * file_name; gedit_debug(DEBUG_FILE, ""); gedit_close_all_flag_verify ("file_save_cb"); if (!doc) return; if (doc->filename==NULL) { msg = g_strdup (_("You can't revert an Untitled document\n")); msgbox = gnome_message_box_new (msg, GNOME_MESSAGE_BOX_INFO, GNOME_STOCK_BUTTON_OK, NULL); gnome_dialog_set_parent (GNOME_DIALOG (msgbox), GTK_WINDOW (mdi->active_window)); gnome_dialog_run_and_close (GNOME_DIALOG(msgbox)); g_free (msg); return; } msg = g_strdup_printf (_("Are you sure you wish to revert all changes?\n(%s)"), doc->filename); msgbox = gnome_message_box_new (msg, GNOME_MESSAGE_BOX_QUESTION, GNOME_STOCK_BUTTON_YES, GNOME_STOCK_BUTTON_NO, NULL); gnome_dialog_set_default (GNOME_DIALOG (msgbox), 2); switch (gnome_dialog_run_and_close (GNOME_DIALOG (msgbox))) { case 0: gedit_document_delete_text (doc, 0, gedit_document_get_buffer_length(doc), FALSE); file_name = g_strdup (doc->filename); gedit_file_open (doc, file_name); g_free (file_name); break; default: break; } g_free (msg);}gint gedit_file_create_popup (const gchar *title){ GtkWidget *msgbox; GeditDocument *doc; int ret; char *msg; gedit_debug(DEBUG_FILE, ""); msg = g_strdup_printf (_("The file ``%s'' does not exist. Would you like to create it?"), title); msgbox = gnome_message_box_new (msg, GNOME_MESSAGE_BOX_QUESTION, GNOME_STOCK_BUTTON_YES, GNOME_STOCK_BUTTON_NO, NULL); ret = gnome_dialog_run_and_close (GNOME_DIALOG (msgbox)); g_free (msg); switch (ret) { case 0: doc = gedit_document_new_with_title (title); doc->changed = TRUE; return TRUE; case 1: return FALSE; default: return FALSE; } return FALSE;}void gedit_close_all_flag_clear (void){ gedit_debug (DEBUG_FILE, ""); gedit_close_all_flag = GEDIT_CLOSE_ALL_FLAG_NORMAL; }static voidgedit_close_all_flag_status (guchar * function){ gedit_debug(DEBUG_FILE, ""); g_return_if_fail (function!=NULL); return; g_print("Close all flag state is: "); switch (gedit_close_all_flag){ case GEDIT_CLOSE_ALL_FLAG_NORMAL: g_print("NORMAL"); break; case GEDIT_CLOSE_ALL_FLAG_CLOSE_ALL: g_print("CLOSE ALL"); break; case GEDIT_CLOSE_ALL_FLAG_QUIT: g_print("QUIT"); break; } g_print(" %s \n", function);}static voidgedit_close_all_flag_verify (guchar *function){ gedit_debug(DEBUG_FILE, ""); if (gedit_close_all_flag != GEDIT_CLOSE_ALL_FLAG_NORMAL) g_warning ("The close all flag was set !!!!! Func: %s", function);}/** * gedit_file_convert_to_full_pathname: convert a file_name to a full path * @file_name_to_convert: the file name to convert * * Test strings 1. /home/user/./dir/././././file.txt /home/user/dir/file.txt 2. /home/user/cvs/gedit/../../docs/file.txt /home/user/docs/file.txt 3. File name in: /home/chema/cvs/gedit/../../cvs/../docs/././././././temp_32avo.txt File name out: /home/chema/docs/temp_32avo.txt * * * Return Value: a pointer to a allocated string. The calling function is responsible * o freeing the string **/gchar *gedit_file_convert_to_full_pathname (const gchar * file_name_to_convert){ gint file_name_in_length; gchar *file_name_in; gchar *file_name_out; gint i, j=0; g_return_val_if_fail (file_name_to_convert != NULL, NULL); if (g_path_is_absolute(file_name_to_convert)) file_name_in = g_strdup (file_name_to_convert); else file_name_in = g_strdup_printf ("%s/%s", g_get_current_dir(), file_name_to_convert); file_name_in_length = strlen (file_name_in); file_name_out = g_malloc (file_name_in_length + 1); g_return_val_if_fail (file_name_in[0] == '/', NULL); for (i = 0; i < file_name_in_length - 1; i++) { /* remove all the "../" from file_name */ if (file_name_in[i] == '.' && file_name_in[i+1] == '.') { if (i < file_name_in_length-1) if (file_name_in[i+2] == '/') { /* Remove the last directory in file_name_out */ i+=2; j--; while (file_name_out [j-1] != '/') j--; j--; } } /* remove all the "./"'s from file_name */ if (file_name_in[i] == '.' && file_name_in[i+1] == '/') { i++; continue; } file_name_out [j++] = file_name_in [i]; } file_name_out [j++] = file_name_in [i]; file_name_out [j] = '\0'; return file_name_out;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -