All pastes #33285 Raw Edit

Something

public text v1 · immutable
#33285 ·published 2005-12-11 14:11 UTC
rendered paste body
? .cdtproject
? .project
? INSTALL_DIR
? bubble.patch
? gedit.D
? interactive_search_v1.diff
? session-save.patch
? sexy-search.patch
? gedit/Makefile.am.search
? gedit/Unsaved Document 1
? gedit/eggnotificationbubble.c
? gedit/eggnotificationbubble.h
? gedit/gedit-document.c.search
? gedit/gedit-document.h.search
? gedit/gedit-document.old.c
? gedit/gedit-global-message-area.c
? gedit/gedit-global-message-area.h
? gedit/gedit-panel.c.diff
? gedit/gedit-print-job-preview.c.paolo
? gedit/gedit-session.c.pbor
? gedit/gedit-vfs-utils.c
? gedit/gedit-vfs-utils.h
? gedit/gedit-view.c.search
? gedit/gtktextregion.c
? gedit/gtktextregion.h
? gedit/output.pdf
? gedit/pippo.txt
? gedit/prova2.txt
? gedit/search-panel.gladep
? gedit/search.patch
? gedit/sessionTODO
? gedit/vg.log
? gedit/dialogs/gedit-dialog-goto-line.loT
? gedit/dialogs/search-panel.gladep
? plugins/sample_test
? plugins/savecopy/savecopy.c.paolo
? po/stamp-it
? tools/plugin_template/Makefile.in
Index: gedit/gedit-commands-file.c
===================================================================
RCS file: /cvs/gnome/gedit/gedit/Attic/gedit-commands-file.c,v
retrieving revision 1.1.2.16
diff -u -p -r1.1.2.16 gedit-commands-file.c
--- gedit/gedit-commands-file.c	8 Dec 2005 22:27:57 -0000	1.1.2.16
+++ gedit/gedit-commands-file.c	11 Dec 2005 14:09:00 -0000
@@ -800,7 +800,9 @@ file_save (GeditTab    *tab,
 	{
 		gedit_debug_message (DEBUG_COMMANDS, "Untitled");
 
-		return file_save_as (tab, window);
+		file_save_as (tab, window);
+		
+		return;
 	}
 
 	uri_for_display = gedit_document_get_uri_for_display (doc);
@@ -877,19 +879,26 @@ _gedit_cmd_file_save_documents_list (Ged
 		g_return_if_fail (state != GEDIT_TAB_STATE_PRINT_PREVIEWING);
 		g_return_if_fail (state != GEDIT_TAB_STATE_CLOSING);
 
-		/* FIXME: manage readonly files - Paolo (Oct. 12, 2005) */
 		if ((state == GEDIT_TAB_STATE_NORMAL) ||
 		    (state == GEDIT_TAB_STATE_SHOWING_PRINT_PREVIEW) ||
 		    (state == GEDIT_TAB_STATE_GENERIC_NOT_EDITABLE))
 		{
-			if (gedit_document_is_untitled (doc))
+			/* FIXME: manage the case of local readonly files owned by the
+			   user is running gedit - Paolo (Dec. 8, 2005) */
+			if ((gedit_document_is_untitled (doc) || 
+			     gedit_document_get_readonly (doc)) && 
+			    (gtk_text_buffer_get_modified (GTK_TEXT_BUFFER (doc)) ||
+			     gedit_document_get_deleted (doc)))			
 			{
 				tabs_to_save_as = g_slist_prepend (tabs_to_save_as,
 								   t);
 			}
 			else
 			{
-				_gedit_tab_save (t);
+				/* Do not save unmodified utitled or deleted documents */
+				if (!gedit_document_is_untitled (doc) && 
+				    !gedit_document_get_readonly (doc))
+					file_save (t, window);
 			}
 		}
 		else
@@ -1296,38 +1305,72 @@ save_and_close_all_documents (const GLis
 		state = gedit_tab_get_state (t);
 		doc = gedit_tab_get_document (t);
 
+		/* If the state is: ([*] invalid states)
+		   - GEDIT_TAB_STATE_NORMAL: close (and if needed save)
+		   - GEDIT_TAB_STATE_LOADING: close, we are sure the file is unmodified
+		   - GEDIT_TAB_STATE_REVERTING: since the user wants
+		     to return back to the version of the file she previously saved, we can close
+		     without saving (CHECK: are we sure this is the right behavior, suppose the case 
+		     the original file has been deleted)
+		   - [*] GEDIT_TAB_STATE_SAVING: invalid, ClosAll
+		     and Quit are unsensitive if the window state is SAVING.
+		   - [*] GEDIT_TAB_STATE_PRINTING, GEDIT_TAB_STATE_PRINT_PREVIEWING: there is not a
+		     real reason for not closing in this case, we do not save to avoid to run
+		     two operations using the message area at the same time (may be we can remove
+		     this limitation in the future). Note that ClosAll
+		     and Quit are unsensitive if the window state is PRINTING.
+		   - GEDIT_TAB_STATE_SHOWING_PRINT_PREVIEW: close (and if needed save)
+		   - GEDIT_TAB_STATE_LOADING_ERROR: close without saving (if the state is LOADING_ERROR then the
+		     document is not modified)
+		   - GEDIT_TAB_STATE_REVERTING_ERROR: we do not close since the document contains errors
+		   - GEDIT_TAB_STATE_SAVING_ERROR: we do not close since the document contains errors
+		   - GEDIT_TAB_STATE_GENERIC_ERROR: we do not close since the document contains
+		     errors (CHECK: we should problably remove this state)
+		   - [*] GEDIT_TAB_STATE_CLOSING: this state is invalid in this case
+		*/
+
 		g_return_if_fail (state != GEDIT_TAB_STATE_PRINTING);
 		g_return_if_fail (state != GEDIT_TAB_STATE_PRINT_PREVIEWING);
 		g_return_if_fail (state != GEDIT_TAB_STATE_CLOSING);
-		g_return_if_fail (state != GEDIT_TAB_STATE_LOADING_ERROR);
 		g_return_if_fail (state != GEDIT_TAB_STATE_SAVING);
 
-		if (g_list_index ((GList *)docs, doc) >= 0)
+		if ((state != GEDIT_TAB_STATE_SAVING_ERROR) &&
+		    (state != GEDIT_TAB_STATE_GENERIC_ERROR) &&
+		    (state != GEDIT_TAB_STATE_REVERTING_ERROR))
 		{
-			/* The document must be saved before closing */
-			g_return_if_fail (gtk_text_buffer_get_modified (GTK_TEXT_BUFFER (doc)) ||
-	     				  gedit_document_get_deleted (doc));
-
-			if (gedit_document_is_untitled (doc))
-			{
-				g_object_set_data (G_OBJECT (t),
-						   GEDIT_IS_CLOSING_TAB,
-						   GBOOLEAN_TO_POINTER (TRUE));
-
-				tabs_to_save_as = g_slist_prepend (tabs_to_save_as,
-								   t);
+			if ((g_list_index ((GList *)docs, doc) >= 0) &&
+			    (state != GEDIT_TAB_STATE_LOADING) &&
+			    (state != GEDIT_TAB_STATE_LOADING_ERROR) &&			    
+			    (state != GEDIT_TAB_STATE_REVERTING)) /* CHECK: is this the right behavior with REVERTING ?*/
+			{			
+				/* The document must be saved before closing */
+				g_return_if_fail (gtk_text_buffer_get_modified (GTK_TEXT_BUFFER (doc)) ||
+		     				  gedit_document_get_deleted (doc));
+				
+				/* FIXME: manage the case of local readonly files owned by the
+				   user is running gedit - Paolo (Dec. 8, 2005) */
+				if (gedit_document_is_untitled (doc) ||
+				    gedit_document_get_readonly (doc))
+				{
+					g_object_set_data (G_OBJECT (t),
+							   GEDIT_IS_CLOSING_TAB,
+							   GBOOLEAN_TO_POINTER (TRUE));
+
+					tabs_to_save_as = g_slist_prepend (tabs_to_save_as,
+									   t);
+				}
+				else
+				{
+					tabs_to_save_and_close = g_slist_prepend (tabs_to_save_and_close,
+										  t);
+				}
 			}
 			else
 			{
-				tabs_to_save_and_close = g_slist_prepend (tabs_to_save_and_close,
-									  t);
+				/* The document must be closed without saving */
+				tabs_to_close = g_list_prepend (tabs_to_close,
+								t);
 			}
-		}
-		else
-		{
-			/* The document must be closed without saving */
-			tabs_to_close = g_list_prepend (tabs_to_close,
-							t);
 		}
 
 		l = g_list_next (l);
Index: gedit/gedit-tab.c
===================================================================
RCS file: /cvs/gnome/gedit/gedit/Attic/gedit-tab.c,v
retrieving revision 1.1.2.66
diff -u -p -r1.1.2.66 gedit-tab.c
--- gedit/gedit-tab.c	10 Dec 2005 19:20:35 -0000	1.1.2.66
+++ gedit/gedit-tab.c	11 Dec 2005 14:09:00 -0000
@@ -1945,9 +1945,13 @@ _gedit_tab_can_close (GeditTab *tab)
 	if ((ts == GEDIT_TAB_STATE_LOADING)       ||
 	    (ts == GEDIT_TAB_STATE_LOADING_ERROR) ||
 	    (ts == GEDIT_TAB_STATE_REVERTING)     ||
-	    (ts == GEDIT_TAB_STATE_REVERTING_ERROR))
+	    (ts == GEDIT_TAB_STATE_REVERTING_ERROR)) /* CHECK: I'm not sure this is the right behavior for REVERTING ERROR */
 		return TRUE;
 
+	/* Do not close tab with saving errors */
+	if (ts == GEDIT_TAB_STATE_SAVING_ERROR)
+		return FALSE;
+		
 	doc = gedit_tab_get_document (tab);
 
 	/* TODO: we need to save the file also if it has been externally