summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Otte <otte@gnome.org>2009-08-06 16:25:20 +0200
committerBenjamin Otte <otte@gnome.org>2009-08-12 14:49:02 +0200
commite3bdf9291f6abd22e92f121716f9f39343b34568 (patch)
tree7f4dce6bcf49cc49b5d6887d1d7a4e2f68d06688
parent860fdbe3ba6279dd354743f46d89e896fd14619e (diff)
downloadgtk+-e3bdf9291f6abd22e92f121716f9f39343b34568.tar.gz
Bug 590959 - Set child_has_focus flag properly (second try)
Previously, this flag wasn't cleared properly when the notebook lost focus, but only when the notebook was focussed again later. As this flag is only used to advance correctly focus pages by grabbing focus to the new page after switching the page, this is not good. In particular, it can cause a focus grab when programmatically switching the notebook page and the focus is inside a completely different widget. A previous attempt at this fix in 6e0af6c25225440263792a3cbecd8f4301e3def5 has been reverted in dfe0c8c0ca4823c77fa71b0048f6454958170b4e because it didn't work correctly.
-rw-r--r--gtk/gtknotebook.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/gtk/gtknotebook.c b/gtk/gtknotebook.c
index aa1a5ade06..2c6a507a4c 100644
--- a/gtk/gtknotebook.c
+++ b/gtk/gtknotebook.c
@@ -3094,8 +3094,6 @@ static gint
gtk_notebook_focus_in (GtkWidget *widget,
GdkEventFocus *event)
{
- GTK_NOTEBOOK (widget)->child_has_focus = FALSE;
-
gtk_notebook_redraw_tabs (GTK_NOTEBOOK (widget));
return FALSE;
@@ -3978,6 +3976,8 @@ gtk_notebook_set_focus_child (GtkContainer *container,
}
}
}
+ else
+ notebook->child_has_focus = FALSE;
GTK_CONTAINER_CLASS (gtk_notebook_parent_class)->set_focus_child (container, child);
}
@@ -5799,9 +5799,14 @@ gtk_notebook_real_switch_page (GtkNotebook *notebook,
GtkNotebookPage *page,
guint page_num)
{
+ gboolean child_has_focus;
+
if (notebook->cur_page == page || !GTK_WIDGET_VISIBLE (page->child))
return;
+ /* save the value here, changing visibility changes focus */
+ child_has_focus = notebook->child_has_focus;
+
if (notebook->cur_page)
gtk_widget_set_child_visible (notebook->cur_page->child, FALSE);
@@ -5818,7 +5823,7 @@ gtk_notebook_real_switch_page (GtkNotebook *notebook,
* element on the new page, if possible, or if not, to the
* notebook itself.
*/
- if (notebook->child_has_focus)
+ if (child_has_focus)
{
if (notebook->cur_page->last_focus_child &&
gtk_widget_is_ancestor (notebook->cur_page->last_focus_child, notebook->cur_page->child))