]> spindle.queued.net Git - midori/commitdiff
Consistently focus the view, which propagates
authorChristian Dywan <christian@twotoasts.de>
Thu, 6 May 2010 20:27:29 +0000 (22:27 +0200)
committerChristian Dywan <christian@twotoasts.de>
Thu, 6 May 2010 20:49:47 +0000 (22:49 +0200)
Rather than trying to determine and focus the web view
from different places, the parent view should simply
propagate focus by default. The child needs to be
constructed implicitly if focus comes in early.

midori/midori-browser.c
midori/midori-view.c

index 93734a7b1b2b12186537341bbb0374dd91ce040d..85440e0d3b64ae9098165d22e26888afceecdc83 100644 (file)
@@ -2667,9 +2667,7 @@ _midori_browser_find_done (MidoriBrowser* browser)
     midori_view_unmark_text_matches (MIDORI_VIEW (view));
     gtk_widget_hide (browser->find);
     browser->find_typing = FALSE;
-    gtk_window_set_focus (GTK_WINDOW (browser),
-        midori_view_get_web_view (MIDORI_VIEW (view)) ?
-        midori_view_get_web_view (MIDORI_VIEW (view)) : view);
+    gtk_window_set_focus (GTK_WINDOW (browser), view);
 }
 
 static void
@@ -5024,8 +5022,7 @@ _action_tab_current_activate (GtkAction*     action,
                               MidoriBrowser* browser)
 {
     GtkWidget* view = midori_browser_get_current_tab (browser);
-    GtkWidget* child = midori_view_get_web_view (MIDORI_VIEW (view));
-    gtk_widget_grab_focus (child ? child : view);
+    gtk_widget_grab_focus (view);
 }
 
 static const gchar* credits_authors[] =
@@ -7560,14 +7557,11 @@ midori_browser_set_current_page (MidoriBrowser* browser,
                                  gint           n)
 {
     GtkWidget* view;
-    GtkWidget* web_view;
 
     gtk_notebook_set_current_page (GTK_NOTEBOOK (browser->notebook), n);
     view = gtk_notebook_get_nth_page (GTK_NOTEBOOK (browser->notebook), n);
-    if (view && midori_view_is_blank (MIDORI_VIEW (view)))
+    if (midori_view_is_blank (MIDORI_VIEW (view)))
         gtk_action_activate (_action_by_name (browser, "Location"));
-    else if ((web_view = midori_view_get_web_view (MIDORI_VIEW (view))))
-        gtk_widget_grab_focus (web_view);
     else
         gtk_widget_grab_focus (view);
 }
@@ -7626,17 +7620,14 @@ midori_browser_set_current_tab (MidoriBrowser* browser,
                                 GtkWidget*     view)
 {
     gint n;
-    GtkWidget* web_view;
 
     g_return_if_fail (MIDORI_IS_BROWSER (browser));
     g_return_if_fail (GTK_IS_WIDGET (view));
 
     n = gtk_notebook_page_num (GTK_NOTEBOOK (browser->notebook), view);
     gtk_notebook_set_current_page (GTK_NOTEBOOK (browser->notebook), n);
-    if (view && midori_view_is_blank (MIDORI_VIEW (view)))
+    if (midori_view_is_blank (MIDORI_VIEW (view)))
         gtk_action_activate (_action_by_name (browser, "Location"));
-    else if ((web_view = midori_view_get_web_view (MIDORI_VIEW (view))))
-        gtk_widget_grab_focus (web_view);
     else
         gtk_widget_grab_focus (view);
 }
index cdfd15aa2f220209a469dec293217bb6e6134f10..b9bf397ba2ccc4db6c4b4f8e2c63fe1947353524 100644 (file)
@@ -225,6 +225,10 @@ midori_view_get_property (GObject*    object,
                           GValue*     value,
                           GParamSpec* pspec);
 
+static gboolean
+midori_view_focus_in_event (GtkWidget*     widget,
+                            GdkEventFocus* event);
+
 static void
 midori_view_settings_notify_cb (MidoriWebSettings* settings,
                                 GParamSpec*        pspec,
@@ -243,6 +247,7 @@ static void
 midori_view_class_init (MidoriViewClass* class)
 {
     GObjectClass* gobject_class;
+    GtkWidgetClass* gtkwidget_class;
     GParamFlags flags;
 
     signals[ACTIVATE_ACTION] = g_signal_new (
@@ -439,6 +444,9 @@ midori_view_class_init (MidoriViewClass* class)
     gobject_class->set_property = midori_view_set_property;
     gobject_class->get_property = midori_view_get_property;
 
+    gtkwidget_class = GTK_WIDGET_CLASS (class);
+    gtkwidget_class->focus_in_event = midori_view_focus_in_event;
+
     flags = G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS;
 
     g_object_class_install_property (gobject_class,
@@ -2988,6 +2996,20 @@ midori_view_get_property (GObject*    object,
     }
 }
 
+static gboolean
+midori_view_focus_in_event (GtkWidget*     widget,
+                            GdkEventFocus* event)
+{
+    MidoriView* view = MIDORI_VIEW (widget);
+
+    /* Always propagate focus to the child web view,
+     * create it if it's not there yet. */
+    if (!view->web_view)
+        midori_view_construct_web_view (view);
+    gtk_widget_grab_focus (view->web_view);
+    return TRUE;
+}
+
 /**
  * midori_view_new:
  * @net: a #KatzeNet