1/* 2 * Copyright (C) 2011, Igalia S.L. 3 * 4 * This library is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU Lesser General Public 6 * License as published by the Free Software Foundation; either 7 * version 2 of the License, or (at your option) any later version. 8 * 9 * This library is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * Lesser General Public License for more details. 13 * 14 * You should have received a copy of the GNU Lesser General Public 15 * License along with this library; if not, write to the Free Software 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 17 */ 18 19#include "config.h" 20#include "GtkUtilities.h" 21 22#include "IntPoint.h" 23#include <gtk/gtk.h> 24 25namespace WebCore { 26 27IntPoint convertWidgetPointToScreenPoint(GtkWidget* widget, const IntPoint& point) 28{ 29 // FIXME: This is actually a very tricky operation and the results of this function should 30 // only be thought of as a guess. For instance, sometimes it may not correctly take into 31 // account window decorations. 32 33 GtkWidget* toplevelWidget = gtk_widget_get_toplevel(widget); 34 if (!toplevelWidget || !gtk_widget_is_toplevel(toplevelWidget) || !GTK_IS_WINDOW(toplevelWidget)) 35 return point; 36 37 GdkWindow* gdkWindow = gtk_widget_get_window(toplevelWidget); 38 if (!gdkWindow) 39 return point; 40 41 int xInWindow, yInWindow; 42 gtk_widget_translate_coordinates(widget, toplevelWidget, point.x(), point.y(), &xInWindow, &yInWindow); 43 44 int windowOriginX, windowOriginY; 45 gdk_window_get_origin(gdkWindow, &windowOriginX, &windowOriginY); 46 47 return IntPoint(windowOriginX + xInWindow, windowOriginY + yInWindow); 48} 49 50bool widgetIsOnscreenToplevelWindow(GtkWidget* widget) 51{ 52 return gtk_widget_is_toplevel(widget) && GTK_IS_WINDOW(widget) && !GTK_IS_OFFSCREEN_WINDOW(widget); 53} 54 55} // namespace WebCore 56