Revision: 1612 http://svn.sourceforge.net/geany/?rev=1612&view=rev Author: eht16 Date: 2007-06-12 09:45:24 -0700 (Tue, 12 Jun 2007)
Log Message: ----------- Add "Open file in a new tab" and "Rename file" to the "Save as" dialog for more control over saved file.
Modified Paths: -------------- trunk/ChangeLog trunk/src/callbacks.c trunk/src/dialogs.c
Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2007-06-12 15:16:17 UTC (rev 1611) +++ trunk/ChangeLog 2007-06-12 16:45:24 UTC (rev 1612) @@ -1,3 +1,10 @@ +2007-06-12 Enrico Tröger enrico.troeger@uvena.de + + * src/callbacks.c, src/dialogs.c: + Add "Open file in a new tab" and "Rename file" to the "Save as" + dialog for more control over saved file. + + 2007-06-12 Nick Treleaven nick.treleaven@btinternet.com
* src/interface.c, src/sciwrappers.c, src/sciwrappers.h, src/prefs.c,
Modified: trunk/src/callbacks.c =================================================================== --- trunk/src/callbacks.c 2007-06-12 15:16:17 UTC (rev 1611) +++ trunk/src/callbacks.c 2007-06-12 16:45:24 UTC (rev 1612) @@ -32,6 +32,7 @@ #include <unistd.h> #include <string.h> #include <gdk/gdkkeysyms.h> +#include <glib/gstdio.h> #include <time.h>
#include "callbacks.h" @@ -849,34 +850,82 @@ { gint idx = document_get_cur_idx(); gchar *new_filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(app->save_filesel)); + gchar *utf8_filename; + gboolean open_new_tab = gtk_toggle_button_get_active( + GTK_TOGGLE_BUTTON(lookup_widget(app->save_filesel, "check_open_new_tab"))); + gboolean rename_file = gtk_toggle_button_get_active( + GTK_TOGGLE_BUTTON(lookup_widget(app->save_filesel, "check_rename")));
+ utf8_filename = utils_get_utf8_from_locale(new_filename); + // check if file exists and ask whether to overwrite or not if (g_file_test(new_filename, G_FILE_TEST_EXISTS)) { if (dialogs_show_question( - _("The file '%s' already exists. Do you want to overwrite it?"), - new_filename) == FALSE) return; + _("The file '%s' already exists. Do you want to overwrite it?"), + utf8_filename) == FALSE) + return; } - gtk_widget_hide(app->save_filesel);
- if (doc_list[idx].file_name) - { // create a new tm_source_file object otherwise tagmanager won't work correctly - tm_workspace_remove_object(doc_list[idx].tm_file, TRUE); - doc_list[idx].tm_file = NULL; - g_free(doc_list[idx].file_name); + if (open_new_tab) + { // "open" the saved file in a new tab + // (actually create a new file and copy file content and properties) + gint len, old_idx; + gchar *data; + + old_idx = idx; + + // use old file type (or maybe NULL for auto detect would be better?) + idx = document_new_file(utf8_filename, doc_list[idx].file_type); + + len = sci_get_length(doc_list[old_idx].sci) + 1; + data = (gchar*) g_malloc(len); + sci_get_text(doc_list[old_idx].sci, len, data); + + sci_set_text(doc_list[idx].sci, data); + + // copy file properties + doc_list[idx].line_breaking = doc_list[old_idx].line_breaking; + doc_list[idx].readonly = doc_list[old_idx].readonly; + doc_list[idx].has_bom = doc_list[old_idx].has_bom; + document_set_encoding(idx, doc_list[old_idx].encoding); + sci_set_lines_wrapped(doc_list[idx].sci, doc_list[idx].line_breaking); + sci_set_readonly(doc_list[idx].sci, doc_list[idx].readonly); + + ui_document_show_hide(idx); + + g_free(data); + g_free(utf8_filename); } - doc_list[idx].file_name = utils_get_utf8_from_locale(new_filename); - g_free(new_filename); + else + { + if (rename_file) + { // delete the previous file name + gchar *old_filename = utils_get_locale_from_utf8(doc_list[idx].file_name); + g_unlink(old_filename); + g_free(old_filename); + }
+ if (doc_list[idx].file_name != NULL) + { // create a new tm_source_file object otherwise tagmanager won't work correctly + tm_workspace_remove_object(doc_list[idx].tm_file, TRUE); + doc_list[idx].tm_file = NULL; + g_free(doc_list[idx].file_name); + } + doc_list[idx].file_name = utf8_filename; + } utils_replace_filename(idx); document_save_file(idx, TRUE);
- build_menu_update(idx); + if (! open_new_tab) + build_menu_update(idx);
// finally add current file to recent files menu ui_add_recent_file(doc_list[idx].file_name); + + g_free(new_filename); } - else gtk_widget_hide(app->save_filesel); + gtk_widget_hide(app->save_filesel); }
Modified: trunk/src/dialogs.c =================================================================== --- trunk/src/dialogs.c 2007-06-12 15:16:17 UTC (rev 1611) +++ trunk/src/dialogs.c 2007-06-12 16:45:24 UTC (rev 1612) @@ -57,6 +57,7 @@ #if ! GEANY_USE_WIN32_DIALOG static GtkWidget *add_file_open_extra_widget(); #endif +static void on_save_as_new_tab_toggled(GtkToggleButton *togglebutton, gpointer user_data);
/* This shows the file selection dialog to open a file. */ @@ -275,6 +276,8 @@
if (app->save_filesel == NULL) { + GtkWidget *vbox, *check_open_new_tab, *check_rename; + app->save_filesel = gtk_file_chooser_dialog_new(_("Save File"), GTK_WINDOW(app->window), GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, NULL); @@ -285,6 +288,25 @@ gtk_dialog_set_default_response(GTK_DIALOG(app->save_filesel), GTK_RESPONSE_ACCEPT); gtk_widget_set_name(app->save_filesel, "GeanyDialog");
+ vbox = gtk_vbox_new(FALSE, 0); + check_open_new_tab = gtk_check_button_new_with_mnemonic("_Open file in a new tab"); + check_rename = gtk_check_button_new_with_mnemonic("R_ename file"); + gtk_box_pack_start(GTK_BOX(vbox), check_open_new_tab, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(vbox), check_rename, FALSE, TRUE, 0); + gtk_widget_show_all(vbox); + gtk_file_chooser_set_extra_widget(GTK_FILE_CHOOSER(app->save_filesel), vbox); + + g_signal_connect(check_open_new_tab, "toggled", + G_CALLBACK(on_save_as_new_tab_toggled), check_rename); + + g_signal_connect(check_rename, "toggled", + G_CALLBACK(on_save_as_new_tab_toggled), check_open_new_tab); + + g_object_set_data_full(G_OBJECT(app->save_filesel), "check_open_new_tab", + gtk_widget_ref(check_open_new_tab), (GDestroyNotify) gtk_widget_unref); + g_object_set_data_full(G_OBJECT(app->save_filesel), "check_rename", + gtk_widget_ref(check_rename), (GDestroyNotify) gtk_widget_unref); + g_signal_connect((gpointer) app->save_filesel, "delete_event", G_CALLBACK(gtk_widget_hide_on_delete), NULL); g_signal_connect((gpointer) app->save_filesel, "response", @@ -1099,3 +1121,8 @@ }
+static void on_save_as_new_tab_toggled(GtkToggleButton *togglebutton, gpointer user_data) +{ + if (gtk_toggle_button_get_active(togglebutton)) + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(user_data), FALSE); +}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.