From 4bbe84b508c245841375a3188e07e86422abc7ce Mon Sep 17 00:00:00 2001 From: Owen Taylor Date: Mon, 15 Mar 2004 14:57:54 +0000 Subject: [PATCH] Check for Control-Tab or Control-Shift-Tab, not any Control-key as a Mon Mar 15 09:54:36 2004 Owen Taylor * gtk/gtklabel.c (gtk_label_focus): Check for Control-Tab or Control-Shift-Tab, not any Control-key as a current event ... handles the case where a dialog is triggered from a control accelerator better. --- ChangeLog | 7 +++++++ ChangeLog.pre-2-10 | 7 +++++++ ChangeLog.pre-2-4 | 7 +++++++ ChangeLog.pre-2-6 | 7 +++++++ ChangeLog.pre-2-8 | 7 +++++++ gtk/gtklabel.c | 22 +++++++++++++++++----- 6 files changed, 52 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index bc64c26049..4f4191896c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Mon Mar 15 09:54:36 2004 Owen Taylor + + * gtk/gtklabel.c (gtk_label_focus): Check for + Control-Tab or Control-Shift-Tab, not any Control-key + as a current event ... handles the case where a dialog + is triggered from a control accelerator better. + Mon Mar 15 08:48:48 2004 Jonathan Blandford * gtk/gtkfilechooserentry.c (match_selected_callback): implement diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index bc64c26049..4f4191896c 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,10 @@ +Mon Mar 15 09:54:36 2004 Owen Taylor + + * gtk/gtklabel.c (gtk_label_focus): Check for + Control-Tab or Control-Shift-Tab, not any Control-key + as a current event ... handles the case where a dialog + is triggered from a control accelerator better. + Mon Mar 15 08:48:48 2004 Jonathan Blandford * gtk/gtkfilechooserentry.c (match_selected_callback): implement diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index bc64c26049..4f4191896c 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,10 @@ +Mon Mar 15 09:54:36 2004 Owen Taylor + + * gtk/gtklabel.c (gtk_label_focus): Check for + Control-Tab or Control-Shift-Tab, not any Control-key + as a current event ... handles the case where a dialog + is triggered from a control accelerator better. + Mon Mar 15 08:48:48 2004 Jonathan Blandford * gtk/gtkfilechooserentry.c (match_selected_callback): implement diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index bc64c26049..4f4191896c 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,10 @@ +Mon Mar 15 09:54:36 2004 Owen Taylor + + * gtk/gtklabel.c (gtk_label_focus): Check for + Control-Tab or Control-Shift-Tab, not any Control-key + as a current event ... handles the case where a dialog + is triggered from a control accelerator better. + Mon Mar 15 08:48:48 2004 Jonathan Blandford * gtk/gtkfilechooserentry.c (match_selected_callback): implement diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index bc64c26049..4f4191896c 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,10 @@ +Mon Mar 15 09:54:36 2004 Owen Taylor + + * gtk/gtklabel.c (gtk_label_focus): Check for + Control-Tab or Control-Shift-Tab, not any Control-key + as a current event ... handles the case where a dialog + is triggered from a control accelerator better. + Mon Mar 15 08:48:48 2004 Jonathan Blandford * gtk/gtkfilechooserentry.c (match_selected_callback): implement diff --git a/gtk/gtklabel.c b/gtk/gtklabel.c index a2fc9b059b..3e9461c9de 100644 --- a/gtk/gtklabel.c +++ b/gtk/gtklabel.c @@ -2820,18 +2820,30 @@ gtk_label_focus (GtkWidget *widget, GtkDirectionType direction) { GtkLabel *label = GTK_LABEL (widget); - GdkModifierType state; + GdkEvent *current_event; + gboolean is_control_tab = FALSE; /* We want to be in the tab chain only if we are selectable - * and the Control key is pressed + * and Control-[Shift]Tab is pressed */ if (label->select_info == NULL) return FALSE; - if (!gtk_get_current_event_state (&state)) - return FALSE; + current_event = gtk_get_current_event (); - if (state & GDK_CONTROL_MASK) + if (current_event) + { + if (current_event->type == GDK_KEY_PRESS && + (current_event->key.keyval == GDK_Tab || + current_event->key.keyval == GDK_KP_Tab || + current_event->key.keyval == GDK_ISO_Left_Tab) && + (current_event->key.state & GDK_CONTROL_MASK) != 0) + is_control_tab = TRUE; + + gdk_event_free (current_event); + } + + if (is_control_tab) return GTK_WIDGET_CLASS (parent_class)->focus (widget, direction); else return FALSE;