Changeset 47241 in webkit


Ignore:
Timestamp:
Aug 13, 2009 3:31:23 PM (15 years ago)
Author:
eric@webkit.org
Message:

2009-08-13 Zan Dobersek <zandobersek@gmail.com>

Reviewed by Gustavo Noronha.

[GTK] Drag and drop support
https://bugs.webkit.org/show_bug.cgi?id=23642

Utilizes functions that are being called upon drag and drop actions.
Uses different GTK clipboards that hold different types
of drag data - images, HTML markup, text, URL, URL label.
Also clears each clipboard before setting new data to it.

No new tests - despite some implementations, no new functionality
is added until implementations of the GTK drag and drop protocol
in WebKit part.

  • platform/gtk/ClipboardGtk.cpp: (WebCore::ClipboardGtk::ClipboardGtk): (WebCore::ClipboardGtk::~ClipboardGtk): (WebCore::getCachedImage): (WebCore::ClipboardGtk::declareAndWriteDragImage): (WebCore::ClipboardGtk::writeURL): (WebCore::ClipboardGtk::writeRange):
  • platform/gtk/ClipboardGtk.h: ClipboardGdk -> ClipboardGtk
Location:
trunk/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r47236 r47241  
     12009-08-13  Zan Dobersek  <zandobersek@gmail.com>
     2
     3        Reviewed by Gustavo Noronha.
     4
     5        [GTK] Drag and drop support
     6        https://bugs.webkit.org/show_bug.cgi?id=23642
     7
     8        Utilizes functions that are being called upon drag and drop actions.
     9        Uses different GTK clipboards that hold different types
     10        of drag data - images, HTML markup, text, URL, URL label.
     11        Also clears each clipboard before setting new data to it.
     12
     13        No new tests - despite some implementations, no new functionality
     14        is added until implementations of the GTK drag and drop protocol
     15        in WebKit part.
     16
     17        * platform/gtk/ClipboardGtk.cpp:
     18        (WebCore::ClipboardGtk::ClipboardGtk):
     19        (WebCore::ClipboardGtk::~ClipboardGtk):
     20        (WebCore::getCachedImage):
     21        (WebCore::ClipboardGtk::declareAndWriteDragImage):
     22        (WebCore::ClipboardGtk::writeURL):
     23        (WebCore::ClipboardGtk::writeRange):
     24        * platform/gtk/ClipboardGtk.h: ClipboardGdk -> ClipboardGtk
     25
    1262009-08-13  Darin Adler  <darin@apple.com>
    227
  • trunk/WebCore/platform/gtk/ClipboardGtk.cpp

    r45169 r47241  
    1818#include "ClipboardGtk.h"
    1919
     20#include "CachedImage.h"
     21#include "CString.h"
     22#include "Editor.h"
     23#include "Element.h"
    2024#include "FileList.h"
     25#include "Frame.h"
     26#include "markup.h"
    2127#include "NotImplemented.h"
     28#include "RenderImage.h"
    2229#include "StringHash.h"
    2330
    24 #include "Editor.h"
     31#include <gtk/gtk.h>
    2532
    2633namespace WebCore {
     
    3441    : Clipboard(policy, forDragging)
    3542{
    36     notImplemented();
    3743}
    3844
    3945ClipboardGtk::~ClipboardGtk()
    4046{
    41     notImplemented();
    4247}
    4348
     
    111116}
    112117
    113 void ClipboardGtk::declareAndWriteDragImage(Element*, const KURL&, const String&, Frame*)
     118static CachedImage* getCachedImage(Element* element)
    114119{
    115     notImplemented();
     120    // Attempt to pull CachedImage from element
     121    ASSERT(element);
     122    RenderObject* renderer = element->renderer();
     123    if (!renderer || !renderer->isImage())
     124        return 0;
     125
     126    RenderImage* image = static_cast<RenderImage*>(renderer);
     127    if (image->cachedImage() && !image->cachedImage()->errorOccurred())
     128        return image->cachedImage();
     129
     130    return 0;
    116131}
    117132
    118 void ClipboardGtk::writeURL(const KURL&, const String&, Frame*)
     133void ClipboardGtk::declareAndWriteDragImage(Element* element, const KURL& url, const String& label, Frame*)
    119134{
    120     notImplemented();
     135    CachedImage* cachedImage = getCachedImage(element);
     136    if (!cachedImage || !cachedImage->isLoaded())
     137        return;
     138
     139    GdkPixbuf* pixbuf = cachedImage->image()->getGdkPixbuf();
     140    if (!pixbuf)
     141        return;
     142
     143    GtkClipboard* imageClipboard = gtk_clipboard_get(gdk_atom_intern_static_string("WebKitClipboardImage"));
     144    gtk_clipboard_clear(imageClipboard);
     145
     146    gtk_clipboard_set_image(imageClipboard, pixbuf);
     147    g_object_unref(pixbuf);
     148
     149    writeURL(url, label, 0);
    121150}
    122151
    123 void ClipboardGtk::writeRange(Range*, Frame*)
     152void ClipboardGtk::writeURL(const KURL& url, const String& label, Frame*)
    124153{
    125     notImplemented();
     154    GtkClipboard* textClipboard = gtk_clipboard_get(gdk_atom_intern_static_string("WebKitClipboardText"));
     155    GtkClipboard* urlClipboard = gtk_clipboard_get(gdk_atom_intern_static_string("WebKitClipboardUrl"));
     156    GtkClipboard* urlLabelClipboard = gtk_clipboard_get(gdk_atom_intern_static_string("WebKitClipboardUrlLabel"));
     157
     158    gtk_clipboard_clear(textClipboard);
     159    gtk_clipboard_clear(urlClipboard);
     160    gtk_clipboard_clear(urlLabelClipboard);
     161
     162    gtk_clipboard_set_text(textClipboard, url.string().utf8().data(), -1);
     163    gtk_clipboard_set_text(urlClipboard, url.string().utf8().data(), -1);
     164    gtk_clipboard_set_text(urlLabelClipboard, label.utf8().data(), -1);
     165}
     166
     167void ClipboardGtk::writeRange(Range* range, Frame* frame)
     168{
     169    GtkClipboard* textClipboard = gtk_clipboard_get(gdk_atom_intern_static_string("WebKitClipboardText"));
     170    GtkClipboard* htmlClipboard = gtk_clipboard_get(gdk_atom_intern_static_string("WebKitClipboardHtml"));
     171
     172    gtk_clipboard_clear(textClipboard);
     173    gtk_clipboard_clear(htmlClipboard);
     174
     175    gtk_clipboard_set_text(textClipboard, frame->selectedText().utf8().data(), -1);
     176    gtk_clipboard_set_text(htmlClipboard, createMarkup(range, 0, AnnotateForInterchange).utf8().data(), -1);
    126177}
    127178
  • trunk/WebCore/platform/gtk/ClipboardGtk.h

    r45168 r47241  
    2525 */
    2626
    27 #ifndef ClipboardGdk_h
    28 #define ClipboardGdk_h
     27#ifndef ClipboardGtk_h
     28#define ClipboardGtk_h
    2929
    3030#include "Clipboard.h"
Note: See TracChangeset for help on using the changeset viewer.