Commit fd88a4c2b784865200e96a16b6dc359cce708202
1 parent
b9c3bf72
Exists in
master
and in
5 other branches
Implementando metodos de clipboard no windows
Showing
3 changed files
with
76 additions
and
29 deletions
Show diff stats
src/classlib/remote.cc
... | ... | @@ -1040,14 +1040,14 @@ |
1040 | 1040 | |
1041 | 1041 | } |
1042 | 1042 | |
1043 | - int set_clipboard(const char *text) | |
1043 | +#if defined(HAVE_DBUS) | |
1044 | + string * get_clipboard(void) | |
1044 | 1045 | { |
1045 | -#if defined(WIN32) | |
1046 | - | |
1047 | - return -1; | |
1048 | - | |
1049 | -#elif defined(HAVE_DBUS) | |
1046 | + return query_string("getClipboard"); | |
1047 | + } | |
1050 | 1048 | |
1049 | + int set_clipboard(const char *text) | |
1050 | + { | |
1051 | 1051 | DBusMessage * msg = create_message("setClipboard"); |
1052 | 1052 | if(msg) |
1053 | 1053 | { |
... | ... | @@ -1056,30 +1056,8 @@ |
1056 | 1056 | } |
1057 | 1057 | |
1058 | 1058 | return -1; |
1059 | - | |
1060 | -#else | |
1061 | - | |
1062 | - return -1; | |
1063 | - | |
1064 | -#endif | |
1065 | - | |
1066 | - } | |
1067 | - | |
1068 | - string * get_clipboard(void) | |
1069 | - { | |
1070 | -#if defined(WIN32) | |
1071 | - | |
1072 | - return NULL; | |
1073 | - | |
1074 | -#elif defined(HAVE_DBUS) | |
1075 | - | |
1076 | - trace("%s",__FUNCTION__); | |
1077 | - return query_string("getClipboard"); | |
1078 | - | |
1079 | -#endif | |
1080 | - | |
1081 | - return NULL; | |
1082 | 1059 | } |
1060 | +#endif // HAVE_DBUS | |
1083 | 1061 | |
1084 | 1062 | }; |
1085 | 1063 | ... | ... |
src/classlib/session.cc
... | ... | @@ -214,13 +214,75 @@ |
214 | 214 | |
215 | 215 | string * session::get_clipboard(void) |
216 | 216 | { |
217 | +#if defined(WIN32) | |
218 | + | |
219 | + if (! OpenClipboard(0)) | |
220 | + { | |
221 | + throw exception(GetLastError(),"%s","Can´t open system clipboard"); | |
222 | + return NULL; | |
223 | + } | |
224 | + | |
225 | + HANDLE hData = GetClipboardData(CF_TEXT); | |
226 | + if(!hData) | |
227 | + { | |
228 | + throw exception(GetLastError(),"%s","Can´t get clipboard data"); | |
229 | + return NULL; | |
230 | + } | |
231 | + | |
232 | + char * pszText = static_cast<char*>( GlobalLock(hData) ); | |
233 | + if(!pszText) | |
234 | + { | |
235 | + throw exception(GetLastError(),"%s","Can´t lock clipboard"); | |
236 | + return NULL; | |
237 | + } | |
238 | + | |
239 | + string *text = new string ( pszText ); | |
240 | + | |
241 | + GlobalUnlock( hData ); | |
242 | + | |
243 | + CloseClipboard(); | |
244 | + | |
245 | + return text; | |
246 | + | |
247 | +#else | |
217 | 248 | errno = EINVAL; |
218 | 249 | return NULL; |
250 | + | |
251 | +#endif // WIN32 | |
219 | 252 | } |
220 | 253 | |
221 | 254 | int session::set_clipboard(const char *text) |
222 | 255 | { |
256 | +#if defined(WIN32) | |
257 | + if (! OpenClipboard(0)) | |
258 | + { | |
259 | + throw exception(GetLastError(),"%s","Can´t open system clipboard"); | |
260 | + return -1; | |
261 | + } | |
262 | + | |
263 | + EmptyClipboard(); | |
264 | + | |
265 | + size_t size = strlen(text)+1; | |
266 | + HGLOBAL hClipboardData = GlobalAlloc(GMEM_MOVEABLE , size); | |
267 | + | |
268 | + strcpy((char *) GlobalLock(hClipboardData), text); | |
269 | + | |
270 | + if(!SetClipboardData(CF_TEXT, hClipboardData)) | |
271 | + { | |
272 | + GlobalUnlock(hClipboardData); | |
273 | + CloseClipboard(); | |
274 | + throw exception(GetLastError(),"%s","Can´t set system clipboard"); | |
275 | + } | |
276 | + | |
277 | + GlobalUnlock(hClipboardData); | |
278 | + CloseClipboard(); | |
279 | + | |
280 | + return 0; | |
281 | +#else | |
282 | + | |
223 | 283 | return EINVAL; |
284 | + | |
285 | +#endif // WIN32 | |
224 | 286 | } |
225 | 287 | |
226 | 288 | ... | ... |
src/classlib/testprogram.cc
... | ... | @@ -50,6 +50,13 @@ |
50 | 50 | cout << "\tSession state: " << session->get_cstate() << endl; |
51 | 51 | cout << "\tCharset: " << session->get_charset() << endl; |
52 | 52 | |
53 | + string *str = session->get_clipboard(); | |
54 | + cout << "\nClipboard: " << str->c_str(); | |
55 | + | |
56 | + delete str; | |
57 | + | |
58 | + session->set_clipboard("Teste de clipboard"); | |
59 | + | |
53 | 60 | delete session; |
54 | 61 | return 0; |
55 | 62 | } | ... | ... |