On Thu, Sep 16, 2010 at 17:52, Nick Treleaven
<nick.trelea...@btinternet.com> wrote:
> On Wed, 15 Sep 2010 21:34:52 +0200
> Jiří Techet <tec...@gmail.com> wrote:
>
>> > Thanks, I'd like to commit this now. I realize it's been a while, but
>> > the patch doesn't apply cleanly and I can't see any commits since that
>> > would have caused conflicts. Any chance you could update and resubmit
>> > please?
>>
>> Hi Nick,
>>
>> no problem, I have just rebased all my patches on top of mainline.
>> This particular patch is attached.
>
> Thanks, but still no joy. The problem is these 2 hunks:
>
>> @@ -599,7 +599,7 @@ static void on_document_close(GObject *obj, 
>> GeanyDocument *doc)
>>       {
>>               GeanyDocument *last_doc;
>>
>> -             last_doc = g_queue_peek_head(mru_docs);
>> +             last_doc = g_queue_peek_nth(mru_docs, 1);
>>
>>               if (DOC_VALID(last_doc) && document_get_current() == doc)
>>               {
>> @@ -607,8 +607,10 @@ static void on_document_close(GObject *obj, 
>> GeanyDocument *doc)
>>                               document_get_notebook_page(last_doc));
>>               }
>>               g_queue_remove(mru_docs, doc);
>> -
>> -             g_idle_add(on_idle_close, NULL);
>> +             /* this prevents the pop up window from showing when there's a 
>> single
>> +              * document */
>> +             if 
>> (gtk_notebook_get_n_pages(GTK_NOTEBOOK(main_widgets.notebook)) == 2)
>> +                     g_queue_clear(mru_docs);
>>       }
>>  }
>
> I haven't been able to work out where they apply to. It didn't seem
> that a conflict had been introduced since your first patch for this
> code, but maybe I'm missing something.

I see, the patch depends on the "When closing tab, return to the
document at the top of the MRU list" commit. This is actually a commit
I'd really like to see in geany so even though I could make the patch
independent of this commit, I would like both to be applied in which
case their separation doesn't make sense.

Please see the attached files. First apply tab_closing.patch and then
tab_switching.patch. Everything should apply cleanly now.

Jiri

>
>> You can find the remaining pending
>> patches under for_review3 branch here:
>>
>> http://gitorious.org/~techy/geany/gproject-geany
>>
>> If you wish me to resubmit them by email, just tell me - I would
>
> Thanks - no need to resend. I can download the patches.
>
>> really like to see the patches extending geany's API to be a part of
>> mainline so my gproject plugin would not depend on patched geany and
>> could be moved among other plugins repository.
>
> I've applied some this afternoon, will get through them soon hopefully.
>
> Regards,
> Nick
> _______________________________________________
> Geany-devel mailing list
> Geany-devel@uvena.de
> http://lists.uvena.de/cgi-bin/mailman/listinfo/geany-devel
>
diff --git a/src/keybindings.c b/src/keybindings.c
index 4cf2992..0d227c5 100644
--- a/src/keybindings.c
+++ b/src/keybindings.c
@@ -597,7 +597,17 @@ static void on_document_close(GObject *obj, GeanyDocument *doc)
 {
 	if (! main_status.quitting)
 	{
+		GeanyDocument *last_doc;
+
+		last_doc = g_queue_peek_head(mru_docs);
+
+		if (DOC_VALID(last_doc) && document_get_current() == doc)
+		{
+			gtk_notebook_set_current_page(GTK_NOTEBOOK(main_widgets.notebook),
+				document_get_notebook_page(last_doc));
+		}
 		g_queue_remove(mru_docs, doc);
+
 		g_idle_add(on_idle_close, NULL);
 	}
 }
diff --git a/src/notebook.c b/src/notebook.c
index a1d10bd..0a4af68 100644
--- a/src/notebook.c
+++ b/src/notebook.c
@@ -551,15 +551,6 @@ notebook_tab_close_clicked_cb(GtkButton *button, gpointer user_data)
 /* Always use this instead of gtk_notebook_remove_page(). */
 void notebook_remove_page(gint page_num)
 {
-	gint curpage = gtk_notebook_get_current_page(GTK_NOTEBOOK(main_widgets.notebook));
-
-	/* Focus the next page, not the previous */
-	if (curpage == page_num && file_prefs.tab_order_ltr)
-	{
-		gtk_notebook_set_current_page(GTK_NOTEBOOK(main_widgets.notebook), curpage + 1);
-	}
-
-	/* now remove the page (so we don't temporarily switch to the previous page) */
 	gtk_notebook_remove_page(GTK_NOTEBOOK(main_widgets.notebook), page_num);
 
 	tab_count_changed();
diff --git a/src/keybindings.c b/src/keybindings.c
index 0d227c5..3d54cd0 100644
--- a/src/keybindings.c
+++ b/src/keybindings.c
@@ -562,17 +562,12 @@ static void init_default_kb(void)
 }
 
 
-/* before the tab changes, add the current document to the MRU list */
-static void on_notebook_switch_page(void)
+static void update_mru_docs_head(GeanyDocument *doc)
 {
-	GeanyDocument *old = document_get_current();
-
-	/* when closing current doc, old is NULL.
-	 * Don't add to the mru list when switch dialog is visible. */
-	if (old && !switch_in_progress)
+	if (doc)
 	{
-		g_queue_remove(mru_docs, old);
-		g_queue_push_head(mru_docs, old);
+		g_queue_remove(mru_docs, doc);
+		g_queue_push_head(mru_docs, doc);
 
 		if (g_queue_get_length(mru_docs) > MAX_MRU_DOCS)
 			g_queue_pop_tail(mru_docs);
@@ -580,16 +575,21 @@ static void on_notebook_switch_page(void)
 }
 
 
-/* really this should be just after a document was closed, not idle */
-static gboolean on_idle_close(gpointer data)
+/* before the tab changes, add the current document to the MRU list */
+static void on_notebook_switch_page(GtkNotebook *notebook,
+	GtkNotebookPage *page, guint page_num, gpointer user_data)
 {
-	GeanyDocument *current;
+	GeanyDocument *new;
 
-	current = document_get_current();
-	if (current && g_queue_peek_head(mru_docs) == current)
-		g_queue_pop_head(mru_docs);
+	new = document_get_from_page(page_num);
 
-	return FALSE;
+	/* insert the very first document (when adding the second document
+	 * and switching to it) */
+	if (g_queue_get_length(mru_docs) == 0 && gtk_notebook_get_n_pages(notebook) == 2)
+		update_mru_docs_head(document_get_current());
+
+	if (!switch_in_progress)
+		update_mru_docs_head(new);
 }
 
 
@@ -599,7 +599,7 @@ static void on_document_close(GObject *obj, GeanyDocument *doc)
 	{
 		GeanyDocument *last_doc;
 
-		last_doc = g_queue_peek_head(mru_docs);
+		last_doc = g_queue_peek_nth(mru_docs, 1);
 
 		if (DOC_VALID(last_doc) && document_get_current() == doc)
 		{
@@ -607,8 +607,10 @@ static void on_document_close(GObject *obj, GeanyDocument *doc)
 				document_get_notebook_page(last_doc));
 		}
 		g_queue_remove(mru_docs, doc);
-
-		g_idle_add(on_idle_close, NULL);
+		/* this prevents the pop up window from showing when there's a single
+		 * document */
+		if (gtk_notebook_get_n_pages(GTK_NOTEBOOK(main_widgets.notebook)) == 2)
+			g_queue_clear(mru_docs);
 	}
 }
 
@@ -1728,6 +1730,7 @@ static gboolean on_key_release_event(GtkWidget *widget, GdkEventKey *ev, gpointe
 			switch_dialog = NULL;
 		}
 
+		update_mru_docs_head(document_get_current());
 		mru_pos = 0;
 	}
 	return FALSE;
@@ -1806,7 +1809,11 @@ static gboolean on_switch_timeout(G_GNUC_UNUSED gpointer data)
 
 static void cb_func_switch_tablastused(G_GNUC_UNUSED guint key_id)
 {
-	GeanyDocument *last_doc = g_queue_peek_nth(mru_docs, mru_pos);
+	GeanyDocument *last_doc;
+	gboolean switch_start = !switch_in_progress;
+
+	mru_pos += 1;
+	last_doc = g_queue_peek_nth(mru_docs, mru_pos);
 
 	if (! DOC_VALID(last_doc))
 	{
@@ -1817,30 +1824,16 @@ static void cb_func_switch_tablastused(G_GNUC_UNUSED guint key_id)
 	if (! DOC_VALID(last_doc))
 		return;
 
+	switch_in_progress = TRUE;
 	gtk_notebook_set_current_page(GTK_NOTEBOOK(main_widgets.notebook),
 		document_get_notebook_page(last_doc));
 
 	/* if there's a modifier key, we can switch back in MRU order each time unless
 	 * the key is released */
-	if (!switch_in_progress)
-	{
-		switch_in_progress = TRUE;
-
-		/* because switch_in_progress was not set when we called
-		 * gtk_notebook_set_current_page() above, this function inserted last_doc
-		 * into the queue => on mru_pos = 0 there is last_doc, on mru_pos = 1
-		 * there is the currently displayed doc, so we want to continue from 2
-		 * next time this function is called */
-		mru_pos = 2;
-
-		/* delay showing dialog to give user time to let go of any modifier keys */
+	if (switch_start)
 		g_timeout_add(600, on_switch_timeout, NULL);
-	}
 	else
-	{
 		update_filename_label();
-		mru_pos += 1;
-	}
 }
 
 
_______________________________________________
Geany-devel mailing list
Geany-devel@uvena.de
http://lists.uvena.de/cgi-bin/mailman/listinfo/geany-devel

Reply via email to