Diff
Modified: trunk/Source/WebCore/ChangeLog (182174 => 182175)
--- trunk/Source/WebCore/ChangeLog 2015-03-31 07:34:11 UTC (rev 182174)
+++ trunk/Source/WebCore/ChangeLog 2015-03-31 07:49:54 UTC (rev 182175)
@@ -1,3 +1,19 @@
+2015-03-31 Carlos Garcia Campos <[email protected]>
+
+ [GTK] DnD icon/widget has odd background
+ https://bugs.webkit.org/show_bug.cgi?id=143217
+
+ Reviewed by Martin Robinson.
+
+ Remove DragIcon class since it's no longer needed with GTK+3 and
+ the GTK+2 code there is unused. GTK+ knows what to do with a cairo
+ surface, I guess we migrated the GTK+2 code to GTK+3 without
+ realizing that using the surface was enough.
+
+ * PlatformGTK.cmake:
+ * platform/gtk/DragIcon.cpp: Removed.
+ * platform/gtk/DragIcon.h: Removed.
+
2015-03-30 Alex Christensen <[email protected]>
Unreviewed build fix after r182168.
Modified: trunk/Source/WebCore/PlatformGTK.cmake (182174 => 182175)
--- trunk/Source/WebCore/PlatformGTK.cmake 2015-03-31 07:34:11 UTC (rev 182174)
+++ trunk/Source/WebCore/PlatformGTK.cmake 2015-03-31 07:49:54 UTC (rev 182175)
@@ -213,7 +213,6 @@
platform/gtk/CursorGtk.cpp
platform/gtk/DataObjectGtk.cpp
platform/gtk/DragDataGtk.cpp
- platform/gtk/DragIcon.cpp
platform/gtk/DragImageGtk.cpp
platform/gtk/GRefPtrGtk.cpp
platform/gtk/GtkUtilities.cpp
Deleted: trunk/Source/WebCore/platform/gtk/DragIcon.cpp (182174 => 182175)
--- trunk/Source/WebCore/platform/gtk/DragIcon.cpp 2015-03-31 07:34:11 UTC (rev 182174)
+++ trunk/Source/WebCore/platform/gtk/DragIcon.cpp 2015-03-31 07:49:54 UTC (rev 182175)
@@ -1,130 +0,0 @@
-/*
- * Copyright (C) 2011 Igalia S.L.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "DragIcon.h"
-#include "GdkCairoUtilities.h"
-
-#include <gtk/gtk.h>
-
-namespace WebCore {
-
-#ifdef GTK_API_VERSION_2
-static gboolean dragIconWindowDrawEventCallback(GtkWidget*, GdkEventExpose* event, DragIcon* icon)
-{
- RefPtr<cairo_t> context = adoptRef(gdk_cairo_create(event->window));
- icon->draw(context.get());
- return TRUE;
-}
-#else
-static gboolean dragIconWindowDrawEventCallback(GtkWidget*, cairo_t* context, DragIcon* icon)
-{
- if (!gdk_cairo_get_clip_rectangle(context, 0))
- return FALSE;
- icon->draw(context);
- return TRUE;
-}
-#endif // GTK_API_VERSION_2
-
-DragIcon::DragIcon()
- : isComposited(gdk_screen_is_composited(gdk_screen_get_default()))
- , m_window(0)
-{
- if (!isComposited)
- return;
-
- m_window = gtk_window_new(GTK_WINDOW_POPUP);
-#ifdef GTK_API_VERSION_2
- g_signal_connect(m_window, "expose-event", G_CALLBACK(dragIconWindowDrawEventCallback), this);
-#else
- g_signal_connect(m_window, "draw", G_CALLBACK(dragIconWindowDrawEventCallback), this);
-#endif
-
- // This strategy originally comes from Chromium: src/chrome/browser/gtk/tab_contents_drag_source.cc
- GdkScreen* screen = gtk_widget_get_screen(m_window);
-#ifdef GTK_API_VERSION_2
- GdkColormap* rgba = gdk_screen_get_rgba_colormap(screen);
- if (rgba)
- gtk_widget_set_colormap(m_window, rgba);
-#else
- GdkVisual* visual = gdk_screen_get_rgba_visual(screen);
- if (!visual)
- visual = gdk_screen_get_system_visual(screen);
- gtk_widget_set_visual(m_window, visual);
-#endif // GTK_API_VERSION_2
-}
-
-DragIcon::~DragIcon()
-{
- if (m_window)
- gtk_widget_destroy(m_window);
-}
-
-void DragIcon::draw(cairo_t* context)
-{
- cairo_rectangle(context, 0, 0,
- cairo_image_surface_get_width(m_image.get()),
- cairo_image_surface_get_height(m_image.get()));
- cairo_set_operator(context, CAIRO_OPERATOR_SOURCE);
- cairo_set_source_surface(context, m_image.get(), 0, 0);
- cairo_fill(context);
-}
-
-void DragIcon::setImage(cairo_surface_t* image)
-{
- ASSERT(image);
- m_image = image;
- m_imageSize = IntSize(cairo_image_surface_get_width(image), cairo_image_surface_get_height(image));
- if (isComposited) {
- gtk_window_resize(GTK_WINDOW(m_window), m_imageSize.width(), m_imageSize.height());
- return;
- }
-
-#ifdef GTK_API_VERSION_2
- m_pixbuf = adoptGRef(cairoSurfaceToGdkPixbuf(image));
-#endif
-}
-
-void DragIcon::useForDrag(GdkDragContext* context)
-{
- IntPoint hotspot(m_imageSize);
- hotspot.scale(0.5, 0.5);
- useForDrag(context, hotspot);
-}
-
-void DragIcon::useForDrag(GdkDragContext* context, const IntPoint& hotspot)
-{
- if (isComposited) {
- gtk_drag_set_icon_widget(context, m_window, hotspot.x(), hotspot.y());
- return;
- }
-#ifdef GTK_API_VERSION_2
- gtk_drag_set_icon_pixbuf(context, m_pixbuf.get(), hotspot.x(), hotspot.y());
-#else
- gtk_drag_set_icon_surface(context, m_image.get());
-#endif
-}
-
-} // namespace WebCore
Deleted: trunk/Source/WebCore/platform/gtk/DragIcon.h (182174 => 182175)
--- trunk/Source/WebCore/platform/gtk/DragIcon.h 2015-03-31 07:34:11 UTC (rev 182174)
+++ trunk/Source/WebCore/platform/gtk/DragIcon.h 2015-03-31 07:49:54 UTC (rev 182175)
@@ -1,57 +0,0 @@
-/*
- * Copyright (C) 2011 Igalia S.L.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef DragIcon_h
-#define DragIcon_h
-
-#include "IntPoint.h"
-#include <RefPtrCairo.h>
-#include <wtf/gobject/GRefPtr.h>
-
-namespace WebCore {
-
-class DragIcon {
-public:
- DragIcon();
- virtual ~DragIcon();
-
- void draw(cairo_t*);
- void setImage(cairo_surface_t*);
- void useForDrag(GdkDragContext*);
- void useForDrag(GdkDragContext*, const IntPoint& hotspot);
-
-private:
- bool isComposited;
- GtkWidget* m_window;
- RefPtr<cairo_surface_t> m_image;
- IntSize m_imageSize;
-#ifdef GTK_API_VERSION_2
- GRefPtr<GdkPixbuf> m_pixbuf;
-#endif
-};
-
-}
-
-#endif // DragIcon_h
Modified: trunk/Source/WebKit2/ChangeLog (182174 => 182175)
--- trunk/Source/WebKit2/ChangeLog 2015-03-31 07:34:11 UTC (rev 182174)
+++ trunk/Source/WebKit2/ChangeLog 2015-03-31 07:49:54 UTC (rev 182175)
@@ -1,3 +1,18 @@
+2015-03-31 Carlos Garcia Campos <[email protected]>
+
+ [GTK] DnD icon/widget has odd background
+ https://bugs.webkit.org/show_bug.cgi?id=143217
+
+ Reviewed by Martin Robinson.
+
+ Use gtk_drag_set_icon_surface() to set the drag icon image,
+ instead of DragIcon class.
+
+ * UIProcess/API/gtk/WebKitWebView.cpp:
+ * UIProcess/gtk/DragAndDropHandler.cpp:
+ (WebKit::DragAndDropHandler::startDrag):
+ * UIProcess/gtk/DragAndDropHandler.h:
+
2015-03-30 Commit Queue <[email protected]>
Unreviewed, rolling out r182172.
Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp (182174 => 182175)
--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp 2015-03-31 07:34:11 UTC (rev 182174)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp 2015-03-31 07:49:54 UTC (rev 182175)
@@ -62,7 +62,6 @@
#include "WebKitWindowPropertiesPrivate.h"
#include <_javascript_Core/APICast.h>
#include <WebCore/CertificateInfo.h>
-#include <WebCore/DragIcon.h>
#include <WebCore/GUniquePtrGtk.h>
#include <WebCore/GUniquePtrSoup.h>
#include <WebCore/GtkUtilities.h>
Modified: trunk/Source/WebKit2/UIProcess/gtk/DragAndDropHandler.cpp (182174 => 182175)
--- trunk/Source/WebKit2/UIProcess/gtk/DragAndDropHandler.cpp 2015-03-31 07:34:11 UTC (rev 182174)
+++ trunk/Source/WebKit2/UIProcess/gtk/DragAndDropHandler.cpp 2015-03-31 07:49:54 UTC (rev 182175)
@@ -31,7 +31,6 @@
#include "WebPageProxy.h"
#include <WebCore/DataObjectGtk.h>
#include <WebCore/DragData.h>
-#include <WebCore/DragIcon.h>
#include <WebCore/GRefPtrGtk.h>
#include <WebCore/GtkUtilities.h>
#include <WebCore/PasteboardHelper.h>
@@ -121,8 +120,9 @@
if (dragImage) {
RefPtr<cairo_surface_t> image(dragImage->createCairoSurface());
- m_dragIcon.setImage(image.get());
- m_dragIcon.useForDrag(context);
+ // Use the center of the drag image as hotspot.
+ cairo_surface_set_device_offset(image.get(), -cairo_image_surface_get_width(image.get()) / 2, -cairo_image_surface_get_height(image.get()) / 2);
+ gtk_drag_set_icon_surface(context, image.get());
} else
gtk_drag_set_icon_default(context);
}
Modified: trunk/Source/WebKit2/UIProcess/gtk/DragAndDropHandler.h (182174 => 182175)
--- trunk/Source/WebKit2/UIProcess/gtk/DragAndDropHandler.h 2015-03-31 07:34:11 UTC (rev 182174)
+++ trunk/Source/WebKit2/UIProcess/gtk/DragAndDropHandler.h 2015-03-31 07:49:54 UTC (rev 182175)
@@ -29,7 +29,7 @@
#if ENABLE(DRAG_SUPPORT)
#include <WebCore/DataObjectGtk.h>
-#include <WebCore/DragIcon.h>
+#include <WebCore/IntPoint.h>
#include <wtf/HashMap.h>
#include <wtf/Noncopyable.h>
@@ -38,7 +38,6 @@
namespace WebCore {
class DragData;
-class IntPoint;
}
namespace WebKit {
@@ -75,7 +74,6 @@
WebCore::DataObjectGtk* requestDragData(GdkDragContext*, const WebCore::IntPoint& position, unsigned time);
WebPageProxy& m_page;
- WebCore::DragIcon m_dragIcon;
HashMap<GdkDragContext*, std::unique_ptr<DroppingContext>> m_droppingContexts;
HashMap<GdkDragContext*, RefPtr<WebCore::DataObjectGtk>> m_draggingDataObjects;
};