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 | } |