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,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 | DBusMessage * msg = create_message("setClipboard"); | 1051 | DBusMessage * msg = create_message("setClipboard"); |
1052 | if(msg) | 1052 | if(msg) |
1053 | { | 1053 | { |
@@ -1056,30 +1056,8 @@ | @@ -1056,30 +1056,8 @@ | ||
1056 | } | 1056 | } |
1057 | 1057 | ||
1058 | return -1; | 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,13 +214,75 @@ | ||
214 | 214 | ||
215 | string * session::get_clipboard(void) | 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 | errno = EINVAL; | 248 | errno = EINVAL; |
218 | return NULL; | 249 | return NULL; |
250 | + | ||
251 | +#endif // WIN32 | ||
219 | } | 252 | } |
220 | 253 | ||
221 | int session::set_clipboard(const char *text) | 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 | return EINVAL; | 283 | return EINVAL; |
284 | + | ||
285 | +#endif // WIN32 | ||
224 | } | 286 | } |
225 | 287 | ||
226 | 288 |
src/classlib/testprogram.cc
@@ -50,6 +50,13 @@ | @@ -50,6 +50,13 @@ | ||
50 | cout << "\tSession state: " << session->get_cstate() << endl; | 50 | cout << "\tSession state: " << session->get_cstate() << endl; |
51 | cout << "\tCharset: " << session->get_charset() << endl; | 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 | delete session; | 60 | delete session; |
54 | return 0; | 61 | return 0; |
55 | } | 62 | } |