2007-11-04 Alp Toker <alp@atoker.com>
[WebKit-https.git] / WebCore / platform / gtk / PasteboardGtk.cpp
1 /*
2  * Copyright (C) 2006, 2007 Apple Inc.  All rights reserved.
3  * Copyright (C) 2007 Holger Hans Peter Freyther
4  * Copyright (C) 2007 Alp Toker <alp@atoker.com>
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  *
10  * 1.  Redistributions of source code must retain the above copyright
11  *     notice, this list of conditions and the following disclaimer. 
12  * 2.  Redistributions in binary form must reproduce the above copyright
13  *     notice, this list of conditions and the following disclaimer in the
14  *     documentation and/or other materials provided with the distribution. 
15  * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
16  *     its contributors may be used to endorse or promote products derived
17  *     from this software without specific prior written permission. 
18  *
19  * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
20  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22  * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
23  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
24  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
26  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
28  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29  */
30
31 #include "config.h"
32 #include "Pasteboard.h"
33
34 #include "CString.h"
35 #include "DocumentFragment.h"
36 #include "Frame.h"
37 #include "NotImplemented.h"
38 #include "PlatformString.h"
39 #include "Image.h"
40 #include "RenderImage.h"
41 #include "KURL.h"
42
43 #include <gtk/gtk.h>
44
45 namespace WebCore {
46
47 Pasteboard* Pasteboard::generalPasteboard()
48 {
49     static Pasteboard* pasteboard = new Pasteboard();
50     return pasteboard;
51 }
52
53 Pasteboard::Pasteboard()
54 {
55     notImplemented();
56 }
57
58 Pasteboard::~Pasteboard()
59 {
60     notImplemented();
61 }
62
63 void Pasteboard::writeSelection(Range* selectedRange, bool canSmartCopyOrDelete, Frame* frame)
64 {
65     GtkClipboard* clipboard = gtk_clipboard_get_for_display(gdk_display_get_default(), GDK_SELECTION_CLIPBOARD);
66
67     String text = frame->selectedText();
68     gtk_clipboard_set_text(clipboard, text.utf8().data(), text.utf8().length());
69 }
70
71 void Pasteboard::writeURL(const KURL&, const String&, Frame*)
72 {
73     notImplemented();
74 }
75
76 void Pasteboard::writeImage(Node* node, const KURL&, const String&)
77 {
78     // TODO: Enable this when Image gets GdkPixbuf support
79
80     /*
81     GtkClipboard* clipboard = gtk_clipboard_get_for_display(gdk_display_get_default(), GDK_SELECTION_CLIPBOARD);
82
83     ASSERT(node && node->renderer() && node->renderer()->isImage());
84     RenderImage* renderer = static_cast<RenderImage*>(node->renderer());
85     CachedImage* cachedImage = static_cast<CachedImage*>(renderer->cachedImage());
86     ASSERT(cachedImage);
87     Image* image = cachedImage->image();
88     ASSERT(image);
89
90     gtk_clipboard_set_image(clipboard, image->pixbuf());
91     */
92
93     notImplemented();
94 }
95
96 void Pasteboard::clear()
97 {
98     GtkClipboard* clipboard = gtk_clipboard_get_for_display(gdk_display_get_default(), GDK_SELECTION_CLIPBOARD);
99
100     gtk_clipboard_clear(clipboard);
101 }
102
103 bool Pasteboard::canSmartReplace()
104 {
105     notImplemented();
106     return false;
107 }
108
109 PassRefPtr<DocumentFragment> Pasteboard::documentFragment(Frame*, PassRefPtr<Range>, bool, bool&)
110 {
111     notImplemented();
112     return 0;
113 }
114
115 String Pasteboard::plainText(Frame*)
116 {
117     GtkClipboard* clipboard = gtk_clipboard_get_for_display(gdk_display_get_default(), GDK_SELECTION_CLIPBOARD);
118
119     gchar* utf8 = gtk_clipboard_wait_for_text(clipboard);
120
121     if (!utf8)
122         return String();
123
124     String text = String::fromUTF8(utf8);
125     g_free(utf8);
126
127     return text;
128 }
129 }