[GTK] Make MiniBrowser windows non-transient by default
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 13 Jan 2014 08:12:36 +0000 (08:12 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 13 Jan 2014 08:12:36 +0000 (08:12 +0000)
https://bugs.webkit.org/show_bug.cgi?id=126840

Patch by Adrian Perez de Castro <aperez@igalia.com> on 2014-01-13
Reviewed by Carlos Garcia Campos.

Instead of making new browser windows transient as soon as they are
created, save the pointer to the parent window and set the transient
state later on when handling the "run-as-modal" signal. This makes
it easier to use the MiniBrowser to do tests involving multiple
windows, and will be useful as well when multi-web-process mode is
enabled for the GTK port.

* MiniBrowser/gtk/BrowserWindow.c:
(webViewRunAsModal): Set the parent window using
gtk_window_set_transient_for() using the saved parent
window.
(browser_window_new): Save the parent window using
g_object_set_data() instead of making the new window
transient immediately.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@161864 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Tools/ChangeLog
Tools/MiniBrowser/gtk/BrowserWindow.c

index 9cecc5a..d828372 100644 (file)
@@ -1,3 +1,25 @@
+2014-01-13  Adrian Perez de Castro  <aperez@igalia.com>
+
+        [GTK] Make MiniBrowser windows non-transient by default
+        https://bugs.webkit.org/show_bug.cgi?id=126840
+
+        Reviewed by Carlos Garcia Campos.
+
+        Instead of making new browser windows transient as soon as they are
+        created, save the pointer to the parent window and set the transient
+        state later on when handling the "run-as-modal" signal. This makes
+        it easier to use the MiniBrowser to do tests involving multiple
+        windows, and will be useful as well when multi-web-process mode is
+        enabled for the GTK port.
+
+        * MiniBrowser/gtk/BrowserWindow.c:
+        (webViewRunAsModal): Set the parent window using
+        gtk_window_set_transient_for() using the saved parent
+        window.
+        (browser_window_new): Save the parent window using
+        g_object_set_data() instead of making the new window
+        transient immediately.
+
 2014-01-12  Sergio Correia  <sergio.correia@openbossa.org>
 
         [EFL][WK2] Make API tests work again
index ddffddd..9a039de 100644 (file)
@@ -59,6 +59,7 @@ struct _BrowserWindow {
     GdkPixbuf *favicon;
     GtkWidget *reloadOrStopButton;
     GtkWidget *fullScreenMessageLabel;
+    GtkWindow *parentWindow;
     guint fullScreenMessageLabelId;
 };
 
@@ -269,6 +270,7 @@ static void webViewClose(WebKitWebView *webView, BrowserWindow *window)
 static void webViewRunAsModal(WebKitWebView *webView, BrowserWindow *window)
 {
     gtk_window_set_modal(GTK_WINDOW(window), TRUE);
+    gtk_window_set_transient_for(GTK_WINDOW(window), window->parentWindow);
 }
 
 static void webViewReadyToShow(WebKitWebView *webView, BrowserWindow *window)
@@ -700,10 +702,15 @@ GtkWidget *browser_window_new(WebKitWebView *view, GtkWindow *parent)
 {
     g_return_val_if_fail(WEBKIT_IS_WEB_VIEW(view), 0);
 
-    return GTK_WIDGET(g_object_new(BROWSER_TYPE_WINDOW,
-                                   "transient-for", parent,
-                                   "type", GTK_WINDOW_TOPLEVEL,
-                                   "view", view, NULL));
+    BrowserWindow *window = BROWSER_WINDOW(g_object_new(BROWSER_TYPE_WINDOW,
+        "type", GTK_WINDOW_TOPLEVEL, "view", view, NULL));
+
+    if (parent) {
+        window->parentWindow = parent;
+        g_object_add_weak_pointer(G_OBJECT(parent), &window->parentWindow);
+    }
+
+    return GTK_WIDGET(window);
 }
 
 WebKitWebView *browser_window_get_view(BrowserWindow *window)