]> spindle.queued.net Git - midori/commitdiff
Add midori_browser_get_for_widget_utility function
authorChristian Dywan <christian@twotoasts.de>
Thu, 23 Apr 2009 02:10:38 +0000 (04:10 +0200)
committerChristian Dywan <christian@twotoasts.de>
Thu, 23 Apr 2009 02:10:38 +0000 (04:10 +0200)
This function will look for a MidoriBrowser according to a
particular widget - even if it's inside a detached panel
window or any other window transient for the browser.

midori/midori-browser.c

index 39599d93bd412a2b5c2b49ce8391c25d9fe3c55d..f4dfae808c4f372698b51264a4782dd2227c1774 100644 (file)
@@ -699,7 +699,7 @@ midori_view_add_bookmark_cb (GtkWidget*   menuitem,
 
     item = katze_item_new ();
     katze_item_set_uri (item, uri);
-    browser = (MidoriBrowser*)gtk_widget_get_toplevel (menuitem);
+    browser = midori_browser_get_for_widget (menuitem);
     midori_browser_edit_bookmark_dialog_new (browser, item, FALSE, FALSE);
 }
 
@@ -806,7 +806,7 @@ midori_view_save_as_cb (GtkWidget*   menuitem,
 {
     MidoriBrowser* browser;
 
-    browser = (MidoriBrowser*)gtk_widget_get_toplevel (menuitem);
+    browser = midori_browser_get_for_widget (menuitem);
     midori_browser_save_uri (browser, uri);
 }
 
@@ -927,7 +927,7 @@ midori_browser_download_button_clicked_cb (GtkWidget*      button,
     MidoriBrowser* browser;
     GList* buttons;
 
-    browser = MIDORI_BROWSER (gtk_widget_get_toplevel (button));
+    browser = midori_browser_get_for_widget (button);
 
     switch (webkit_download_get_status (download))
     {
@@ -3181,7 +3181,7 @@ static gboolean
 midori_browser_panel_timeout (GtkWidget* hpaned)
 {
     gboolean position = gtk_paned_get_position (GTK_PANED (hpaned));
-    MidoriBrowser* browser = MIDORI_BROWSER (gtk_widget_get_toplevel (hpaned));
+    MidoriBrowser* browser = midori_browser_get_for_widget (hpaned);
     if (browser->settings)
         g_object_set (browser->settings, "last-panel-position", position, NULL);
     browser->panel_timeout = 0;
@@ -5209,6 +5209,37 @@ midori_browser_get_proxy_array (MidoriBrowser* browser)
     return browser->proxy_array;
 }
 
+/**
+ * midori_browser_get_for_widget:
+ * @widget: a #GtkWidget
+ *
+ * Determines the browser appropriate for the specified widget.
+ *
+ * Return value: a #MidoriBrowser
+ *
+ * Since 0.1.7
+ **/
+MidoriBrowser*
+midori_browser_get_for_widget (GtkWidget* widget)
+{
+    gpointer browser;
+
+    g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL);
+
+    browser = gtk_widget_get_toplevel (GTK_WIDGET (widget));
+    if (!MIDORI_IS_BROWSER (browser))
+    {
+        if (!GTK_IS_WINDOW (browser))
+            return NULL;
+
+        browser = gtk_window_get_transient_for (GTK_WINDOW (browser));
+        if (!MIDORI_IS_BROWSER (browser))
+            return NULL;
+    }
+
+    return MIDORI_BROWSER (browser);
+}
+
 /**
  * midori_browser_quit:
  * @browser: a #MidoriBrowser