Revision: 5265 http://geany.svn.sourceforge.net/geany/?rev=5265&view=rev Author: ntrel Date: 2010-09-30 14:49:54 +0000 (Thu, 30 Sep 2010)
Log Message: ----------- Avoid delay and redrawing when automatically opening a new document after closing one.
Modified Paths: -------------- trunk/ChangeLog trunk/src/document.c
Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2010-09-30 14:14:54 UTC (rev 5264) +++ trunk/ChangeLog 2010-09-30 14:49:54 UTC (rev 5265) @@ -11,6 +11,9 @@ Move GeanyFiletypePrivate to filetypesprivate.h. * src/Makefile.am, src/ui_utils.c, configure.ac, wscript: Link with X11 if found to fix linking with a recent GNU ld. + * src/document.c: + Avoid delay and redrawing when automatically opening a new document + after closing one.
2010-09-25 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
Modified: trunk/src/document.c =================================================================== --- trunk/src/document.c 2010-09-30 14:14:54 UTC (rev 5264) +++ trunk/src/document.c 2010-09-30 14:49:54 UTC (rev 5265) @@ -541,6 +541,8 @@ }
+static gboolean remove_page(guint page_num); + /* Creates a new document and editor, adding a tab in the notebook. * @return The created document */ static GeanyDocument *document_create(const gchar *utf8_filename) @@ -552,9 +554,11 @@ if (cur_pages == 1) { GeanyDocument *cur = document_get_current(); - /* remove the empty document and open a new one */ + /* remove the empty document first */ if (cur != NULL && cur->file_name == NULL && ! cur->changed) - document_remove_page(0); + /* prevent immediately opening another new doc with + * new_document_after_close pref */ + remove_page(0); }
new_idx = document_get_new_idx(); @@ -609,25 +613,9 @@ }
-static gboolean on_idle_new_doc(gpointer user_data) +/* Call document_remove_page() instead, this is only needed for document_create(). */ +static gboolean remove_page(guint page_num) { - /* Idle may be after Geany has quit */ - if (!main_status.quitting) - document_new_file_if_non_open(); - return FALSE; -} - - -/** - * Removes the given notebook tab at @a page_num and clears all related information - * in the document list. - * - * @param page_num The notebook page number to remove. - * - * @return @c TRUE if the document was actually removed or @c FALSE otherwise. - **/ -gboolean document_remove_page(guint page_num) -{ GeanyDocument *doc = document_get_from_page(page_num);
if (G_UNLIKELY(doc == NULL)) @@ -686,16 +674,30 @@ ui_update_popup_reundo_items(NULL); ui_document_buttons_update(); build_menu_update(NULL); - - /* we use an idle callback to prevent opening a new document if other documents - * are about to be opened. */ - if (ui_prefs.new_document_after_close) - g_idle_add(on_idle_new_doc, NULL); } return TRUE; }
+/** + * Removes the given notebook tab at @a page_num and clears all related information + * in the document list. + * + * @param page_num The notebook page number to remove. + * + * @return @c TRUE if the document was actually removed or @c FALSE otherwise. + **/ +gboolean document_remove_page(guint page_num) +{ + gboolean done = remove_page(page_num); + + if (done && ui_prefs.new_document_after_close) + document_new_file_if_non_open(); + + return done; +} + + /* used to keep a record of the unchanged document state encoding */ static void store_saved_encoding(GeanyDocument *doc) {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.