Title: [89673] trunk/Source/WebCore
Revision
89673
Author
carlo...@webkit.org
Date
2011-06-24 08:42:28 -0700 (Fri, 24 Jun 2011)

Log Message

2011-06-24  Carlos Garcia Campos  <cgar...@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Fix runtime critical warnings in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=63256

        Check whether there's a view widget before trying to use it in
        PlatformScreenGtk. If there isn't a view widget, which is the case
        in WebKit2, try to use the default GdkScreen and monitor.

        * platform/gtk/PlatformScreenGtk.cpp:
        (WebCore::getToplevel): Helper function to get the toplevel
        widget.
        (WebCore::getVisual): Use getToplevel().
        (WebCore::getScreen): Helper funtion to get the screen of a
        widget.
        (WebCore::screenRect): Use getToplevel() and getScreen().

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (89672 => 89673)


--- trunk/Source/WebCore/ChangeLog	2011-06-24 14:14:48 UTC (rev 89672)
+++ trunk/Source/WebCore/ChangeLog	2011-06-24 15:42:28 UTC (rev 89673)
@@ -1,3 +1,22 @@
+2011-06-24  Carlos Garcia Campos  <cgar...@igalia.com>
+
+        Reviewed by Martin Robinson.
+
+        [GTK] Fix runtime critical warnings in WebKit2
+        https://bugs.webkit.org/show_bug.cgi?id=63256
+
+        Check whether there's a view widget before trying to use it in
+        PlatformScreenGtk. If there isn't a view widget, which is the case
+        in WebKit2, try to use the default GdkScreen and monitor.
+
+        * platform/gtk/PlatformScreenGtk.cpp:
+        (WebCore::getToplevel): Helper function to get the toplevel
+        widget.
+        (WebCore::getVisual): Use getToplevel().
+        (WebCore::getScreen): Helper funtion to get the screen of a
+        widget.
+        (WebCore::screenRect): Use getToplevel() and getScreen().
+
 2011-06-24  Yuta Kitamura  <yu...@chromium.org>
 
         Reviewed by Adam Barth.

Modified: trunk/Source/WebCore/platform/gtk/PlatformScreenGtk.cpp (89672 => 89673)


--- trunk/Source/WebCore/platform/gtk/PlatformScreenGtk.cpp	2011-06-24 14:14:48 UTC (rev 89672)
+++ trunk/Source/WebCore/platform/gtk/PlatformScreenGtk.cpp	2011-06-24 15:42:28 UTC (rev 89673)
@@ -45,25 +45,26 @@
 
 namespace WebCore {
 
+static GtkWidget* getToplevel(GtkWidget* widget)
+{
+    GtkWidget* toplevel = gtk_widget_get_toplevel(widget);
+    return gtk_widget_is_toplevel(toplevel) ? toplevel : 0;
+}
+
 static GdkVisual* getVisual(Widget* widget)
 {
     if (!widget)
         return 0;
 
     GtkWidget* container = GTK_WIDGET(widget->root()->hostWindow()->platformPageClient());
-
-    if (!container)
-        return 0;
-
-    if (!gtk_widget_get_realized(container)) {
-        GtkWidget* toplevel = gtk_widget_get_toplevel(container);
-        if (gtk_widget_is_toplevel(toplevel))
-            container = toplevel;
-        else
-            return 0;
+    if (!container) {
+        GdkScreen* screen = gdk_screen_get_default();
+        return screen ? gdk_screen_get_system_visual(screen) : 0;
     }
 
-    return gdk_window_get_visual(gtk_widget_get_window(container));
+    if (!gtk_widget_get_realized(container))
+        container = getToplevel(container);
+    return container ? gdk_window_get_visual(gtk_widget_get_window(container)) : 0;
 }
 
 int screenDepth(Widget* widget)
@@ -88,23 +89,30 @@
     return screenDepth(widget) < 2;
 }
 
+
+static GdkScreen* getScreen(GtkWidget* widget)
+{
+    return gtk_widget_has_screen(widget) ? gtk_widget_get_screen(widget) : gdk_screen_get_default();
+}
+
 FloatRect screenRect(Widget* widget)
 {
     if (!widget)
         return FloatRect();
 
-    GtkWidget* container = gtk_widget_get_toplevel(GTK_WIDGET(widget->root()->hostWindow()->platformPageClient()));
-    if (!gtk_widget_is_toplevel(container))
-        return FloatRect();
+    GtkWidget* container = GTK_WIDGET(widget->root()->hostWindow()->platformPageClient());
+    if (container)
+        container = getToplevel(container);
 
-    GdkScreen* screen = gtk_widget_has_screen(container) ? gtk_widget_get_screen(container) : gdk_screen_get_default();
+    GdkScreen* screen = container ? getScreen(container) : gdk_screen_get_default();
     if (!screen)
         return FloatRect();
 
-    gint monitor = gdk_screen_get_monitor_at_window(screen, gtk_widget_get_window(GTK_WIDGET(container)));
+    gint monitor = container ? gdk_screen_get_monitor_at_window(screen, gtk_widget_get_window(container)) : 0;
+
     GdkRectangle geometry;
     gdk_screen_get_monitor_geometry(screen, monitor, &geometry);
-    
+
     return FloatRect(geometry.x, geometry.y, geometry.width, geometry.height);
 }
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to