Re: [Geany-devel] [PATCH 1/3] Fix tab history switching

2010-06-10 Thread Nick Treleaven
On Wed,  9 Jun 2010 21:40:57 +0200
Jiří Techet tec...@gmail.com wrote:

 There is a 600ms interval in which the panel displaying the current file
 name isn't displayed. If you switch tabs with a keybinding and do it
 too quickly (press it twice in the 600ms period), the wrong file is
 put on top of the stack. This patch fixes the problem

Thanks, applied to:
https://geany.svn.sourceforge.net/svnroot/geany/branches/unstable

Will merge to trunk after the release.

BTW, please could you attach any future patches rather than paste them
in the message body so it's easier to save the patch as a file - sorry
to moan ;-)

Regards,
Nick
___
Geany-devel mailing list
Geany-devel@uvena.de
http://lists.uvena.de/cgi-bin/mailman/listinfo/geany-devel


Re: [Geany-devel] [PATCH 1/3] Fix tab history switching

2010-06-10 Thread Jiří Techet
On Thu, Jun 10, 2010 at 13:40, Nick Treleaven
nick.trelea...@btinternet.com wrote:
 On Wed,  9 Jun 2010 21:40:57 +0200
 Jiří Techet tec...@gmail.com wrote:

 There is a 600ms interval in which the panel displaying the current file
 name isn't displayed. If you switch tabs with a keybinding and do it
 too quickly (press it twice in the 600ms period), the wrong file is
 put on top of the stack. This patch fixes the problem

 Thanks, applied to:
 https://geany.svn.sourceforge.net/svnroot/geany/branches/unstable

 Will merge to trunk after the release.

 BTW, please could you attach any future patches rather than paste them
 in the message body so it's easier to save the patch as a file - sorry
 to moan ;-)

Sorry. I used git send-email for that but I think there is an --attach
option that should do the trick. If it's too big problem I can re-post
the patches again (after returning from work ;-)

Jiri
___
Geany-devel mailing list
Geany-devel@uvena.de
http://lists.uvena.de/cgi-bin/mailman/listinfo/geany-devel


[Geany-devel] [PATCH 1/3] Fix tab history switching

2010-06-09 Thread Jiří Techet
There is a 600ms interval in which the panel displaying the current file
name isn't displayed. If you switch tabs with a keybinding and do it
too quickly (press it twice in the 600ms period), the wrong file is
put on top of the stack. This patch fixes the problem

Signed-off-by: Jiří Techet tec...@gmail.com
---
 src/keybindings.c |   65 +++-
 1 files changed, 39 insertions(+), 26 deletions(-)

diff --git a/src/keybindings.c b/src/keybindings.c
index 8347cc1..c297589 100644
--- a/src/keybindings.c
+++ b/src/keybindings.c
@@ -71,7 +71,7 @@ const gsize MAX_MRU_DOCS = 20;
 static GQueue *mru_docs = NULL;
 static guint mru_pos = 0;
 
-static gboolean switch_dialog_cancelled = TRUE;
+static gboolean switch_in_progress = FALSE;
 static GtkWidget *switch_dialog = NULL;
 static GtkWidget *switch_dialog_label = NULL;
 
@@ -576,7 +576,7 @@ static void on_notebook_switch_page(void)
 
/* when closing current doc, old is NULL.
 * Don't add to the mru list when switch dialog is visible. */
-   if (old  switch_dialog_cancelled)
+   if (old  !switch_in_progress)
{
g_queue_remove(mru_docs, old);
g_queue_push_head(mru_docs, old);
@@ -879,7 +879,7 @@ static GtkWidget *create_dialog(void)
gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column);
 
text_renderer = gtk_cell_renderer_text_new();
-column = gtk_tree_view_column_new_with_attributes(NULL, text_renderer, 
text, 1, NULL);
+   column = gtk_tree_view_column_new_with_attributes(NULL, text_renderer, 
text, 1, NULL);
gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column);
 
fill_shortcut_labels_treeview(tree);
@@ -1751,12 +1751,15 @@ static void cb_func_switch_tabright(G_GNUC_UNUSED guint 
key_id)
 static gboolean on_key_release_event(GtkWidget *widget, GdkEventKey *ev, 
gpointer user_data)
 {
/* user may have rebound keybinding to a different modifier than Ctrl, 
so check all */
-   if (!switch_dialog_cancelled  is_modifier_key(ev-keyval))
+   if (switch_in_progress  is_modifier_key(ev-keyval))
{
-   switch_dialog_cancelled = TRUE;
+   switch_in_progress = FALSE;
 
-   if (switch_dialog  GTK_WIDGET_VISIBLE(switch_dialog))
-   gtk_widget_hide(switch_dialog);
+   if (switch_dialog)
+   {
+   gtk_widget_destroy(switch_dialog);
+   switch_dialog = NULL;
+   }
 
mru_pos = 0;
}
@@ -1809,23 +1812,27 @@ static GtkWidget *create_switch_dialog(void)
 }
 
 
-static gboolean on_switch_timeout(G_GNUC_UNUSED gpointer data)
+static void update_filename_label()
 {
-   if (switch_dialog_cancelled)
+   if (!switch_dialog)
{
-   return FALSE;
-   }
-   if (! switch_dialog || !GTK_WIDGET_VISIBLE(switch_dialog))
-   mru_pos = 2;/* skip past the previous document */
-   else
-   mru_pos += 1;
-
-   if (! switch_dialog)
switch_dialog = create_switch_dialog();
+   gtk_widget_show_all(switch_dialog);
+   }
 
geany_wrap_label_set_text(GTK_LABEL(switch_dialog_label),
DOC_FILENAME(document_get_current()));
-   gtk_widget_show_all(switch_dialog);
+}
+
+
+static gboolean on_switch_timeout(G_GNUC_UNUSED gpointer data)
+{
+   if (!switch_in_progress || switch_dialog)
+   {
+   return FALSE;
+   }
+
+   update_filename_label();
return FALSE;
 }
 
@@ -1848,19 +1855,25 @@ static void cb_func_switch_tablastused(G_GNUC_UNUSED 
guint key_id)
 
/* if there's a modifier key, we can switch back in MRU order each time 
unless
 * the key is released */
-   if (! switch_dialog_cancelled)
+   if (!switch_in_progress)
{
-   on_switch_timeout(NULL);/* update filename label */
-   }
-   else
-   if (keybindings_lookup_item(GEANY_KEY_GROUP_NOTEBOOK,
-   GEANY_KEYS_NOTEBOOK_SWITCHTABLASTUSED)-mods)
-   {
-   switch_dialog_cancelled = FALSE;
+   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 */
g_timeout_add(600, on_switch_timeout, NULL);
}
+   else
+   {
+   update_filename_label();/* update filename label */
+   mru_pos += 1;
+   }
 }
 
 
-- 
1.7.0.4