• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2007 Apple Inc.  All rights reserved.
3  * Copyright (C) 2007 Ryan Leavengood <leavengood@gmail.com>
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
15  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
18  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
22  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25  */
26 
27 #include "config.h"
28 #include "ClipboardHaiku.h"
29 
30 #include "FileList.h"
31 #include "IntPoint.h"
32 #include "NotImplemented.h"
33 #include "PlatformString.h"
34 
35 #include <support/Locker.h>
36 #include <app/Clipboard.h>
37 #include <Message.h>
38 #include <String.h>
39 #include <wtf/HashTable.h>
40 #include <wtf/text/StringHash.h>
41 
42 
43 namespace WebCore {
44 
create(ClipboardAccessPolicy policy,DragData *,Frame *)45 PassRefPtr<Clipboard> Clipboard::create(ClipboardAccessPolicy policy, DragData*, Frame*)
46 {
47     return ClipboardHaiku::create(policy, DragAndDrop);
48 }
49 
ClipboardHaiku(ClipboardAccessPolicy policy,ClipboardType clipboardType)50 ClipboardHaiku::ClipboardHaiku(ClipboardAccessPolicy policy, ClipboardType clipboardType)
51     : Clipboard(policy, clipboardType)
52 {
53 }
54 
clearData(const String & type)55 void ClipboardHaiku::clearData(const String& type)
56 {
57     if (be_clipboard->Lock()) {
58         BMessage* data = be_clipboard->Data();
59 
60         if (data) {
61             data->RemoveName(BString(type).String());
62             be_clipboard->Commit();
63         }
64 
65         be_clipboard->Unlock();
66     }
67 }
68 
clearAllData()69 void ClipboardHaiku::clearAllData()
70 {
71     if (be_clipboard->Lock()) {
72         be_clipboard->Clear();
73         be_clipboard->Commit();
74         be_clipboard->Unlock();
75     }
76 }
77 
getData(const String & type,bool & success) const78 String ClipboardHaiku::getData(const String& type, bool& success) const
79 {
80     BString result;
81     success = false;
82 
83     if (be_clipboard->Lock()) {
84         BMessage* data = be_clipboard->Data();
85 
86         if (data)
87             if (data->FindString(BString(type).String(), &result) == B_OK)
88                 success = true;
89 
90         be_clipboard->Unlock();
91     }
92 
93     return result;
94 }
95 
setData(const String & type,const String & data)96 bool ClipboardHaiku::setData(const String& type, const String& data)
97 {
98     bool result = false;
99 
100     if (be_clipboard->Lock()) {
101         BMessage* bdata = be_clipboard->Data();
102 
103         if (bdata) {
104             bdata->RemoveName(BString(type).String());
105 
106             if (bdata->AddString(BString(type).String(), BString(data)) == B_OK)
107                 result = true;
108         }
109 
110         be_clipboard->Commit();
111         be_clipboard->Unlock();
112     }
113 
114     return result;
115 }
116 
117 // Extensions beyond IE's API.
types() const118 HashSet<String> ClipboardHaiku::types() const
119 {
120     HashSet<String> result;
121 
122     if (be_clipboard->Lock()) {
123         BMessage* data = be_clipboard->Data();
124 
125         if (data) {
126             char* name;
127             uint32 type;
128             int32 count;
129 
130             for (int32 i = 0; data->GetInfo(B_ANY_TYPE, i, &name, &type, &count) == B_OK; i++)
131                 result.add(name);
132         }
133 
134         be_clipboard->Unlock();
135     }
136 
137     return result;
138 }
139 
files() const140 PassRefPtr<FileList> ClipboardHaiku::files() const
141 {
142     notImplemented();
143     return 0;
144 }
145 
dragLocation() const146 IntPoint ClipboardHaiku::dragLocation() const
147 {
148     notImplemented();
149     return IntPoint(0, 0);
150 }
151 
dragImage() const152 CachedImage* ClipboardHaiku::dragImage() const
153 {
154     notImplemented();
155     return 0;
156 }
157 
setDragImage(CachedImage *,const IntPoint &)158 void ClipboardHaiku::setDragImage(CachedImage*, const IntPoint&)
159 {
160     notImplemented();
161 }
162 
dragImageElement()163 Node* ClipboardHaiku::dragImageElement()
164 {
165     notImplemented();
166     return 0;
167 }
168 
setDragImageElement(Node *,const IntPoint &)169 void ClipboardHaiku::setDragImageElement(Node*, const IntPoint&)
170 {
171     notImplemented();
172 }
173 
createDragImage(IntPoint & dragLocation) const174 DragImageRef ClipboardHaiku::createDragImage(IntPoint& dragLocation) const
175 {
176     notImplemented();
177     return 0;
178 }
179 
declareAndWriteDragImage(Element *,const KURL &,const String &,Frame *)180 void ClipboardHaiku::declareAndWriteDragImage(Element*, const KURL&, const String&, Frame*)
181 {
182     notImplemented();
183 }
184 
writeURL(const KURL &,const String &,Frame *)185 void ClipboardHaiku::writeURL(const KURL&, const String&, Frame*)
186 {
187     notImplemented();
188 }
189 
writeRange(Range *,Frame *)190 void ClipboardHaiku::writeRange(Range*, Frame*)
191 {
192     notImplemented();
193 }
194 
writePlainText(const String &)195 void ClipboardHaiku::writePlainText(const String&)
196 {
197     notImplemented();
198 }
199 
hasData()200 bool ClipboardHaiku::hasData()
201 {
202     bool result = false;
203 
204     if (be_clipboard->Lock()) {
205         BMessage* data = be_clipboard->Data();
206 
207         if (data)
208             result = !data->IsEmpty();
209 
210         be_clipboard->Unlock();
211     }
212 
213     return result;
214 }
215 
216 } // namespace WebCore
217 
218