Commit 34f7ad747d1796420bef179c966d9eecf1282d8e
1 parent
5076a548
Exists in
master
and in
5 other branches
Corrigindo tratamento do dbus em rexx
Showing
6 changed files
with
36 additions
and
9 deletions
Show diff stats
src/plugins/dbus3270/gobject.c
| @@ -370,14 +370,19 @@ void pw3270_dbus_pa_key(PW3270Dbus *object, int key, DBusGMethodInvocation *cont | @@ -370,14 +370,19 @@ void pw3270_dbus_pa_key(PW3270Dbus *object, int key, DBusGMethodInvocation *cont | ||
| 370 | dbus_g_method_return(context,lib3270_get_next_unprotected(pw3270_dbus_get_session_handle(object),baddr)); | 370 | dbus_g_method_return(context,lib3270_get_next_unprotected(pw3270_dbus_get_session_handle(object),baddr)); |
| 371 | } | 371 | } |
| 372 | 372 | ||
| 373 | -void pw3270_dbus_get_clipboard(PW3270Dbus *object, int row, int col, int len, DBusGMethodInvocation *context) | 373 | +void pw3270_dbus_get_clipboard(PW3270Dbus *object, DBusGMethodInvocation *context) |
| 374 | { | 374 | { |
| 375 | gchar *text; | 375 | gchar *text; |
| 376 | 376 | ||
| 377 | + trace("%s object=%p context=%p",__FUNCTION__,object,context); | ||
| 378 | + | ||
| 377 | if(pw3270_dbus_check_valid_state(object,context)) | 379 | if(pw3270_dbus_check_valid_state(object,context)) |
| 378 | return; | 380 | return; |
| 379 | 381 | ||
| 380 | text = gtk_clipboard_wait_for_text(gtk_widget_get_clipboard(pw3270_get_toplevel(),GDK_SELECTION_CLIPBOARD)); | 382 | text = gtk_clipboard_wait_for_text(gtk_widget_get_clipboard(pw3270_get_toplevel(),GDK_SELECTION_CLIPBOARD)); |
| 383 | + | ||
| 384 | + trace("Clipboard:\n%s\n",text); | ||
| 385 | + | ||
| 381 | if(!text) | 386 | if(!text) |
| 382 | { | 387 | { |
| 383 | GError *error = pw3270_dbus_get_error_from_errno(ENOENT); | 388 | GError *error = pw3270_dbus_get_error_from_errno(ENOENT); |
| @@ -393,6 +398,7 @@ void pw3270_dbus_get_clipboard(PW3270Dbus *object, int row, int col, int len, DB | @@ -393,6 +398,7 @@ void pw3270_dbus_get_clipboard(PW3270Dbus *object, int row, int col, int len, DB | ||
| 393 | 398 | ||
| 394 | void pw3270_dbus_set_clipboard(PW3270Dbus *object, const gchar *text, DBusGMethodInvocation *context) | 399 | void pw3270_dbus_set_clipboard(PW3270Dbus *object, const gchar *text, DBusGMethodInvocation *context) |
| 395 | { | 400 | { |
| 401 | + trace("%s object=%p context=%p",__FUNCTION__,object,context); | ||
| 396 | gtk_clipboard_set_text(gtk_widget_get_clipboard(pw3270_get_toplevel(),GDK_SELECTION_CLIPBOARD),(gchar *) text, -1); | 402 | gtk_clipboard_set_text(gtk_widget_get_clipboard(pw3270_get_toplevel(),GDK_SELECTION_CLIPBOARD),(gchar *) text, -1); |
| 397 | dbus_g_method_return(context,0); | 403 | dbus_g_method_return(context,0); |
| 398 | } | 404 | } |
src/plugins/dbus3270/pw3270dbus.xml
| @@ -64,6 +64,7 @@ | @@ -64,6 +64,7 @@ | ||
| 64 | <method name="setClipboard"> | 64 | <method name="setClipboard"> |
| 65 | <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/> | 65 | <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/> |
| 66 | <arg type="s" name="text" direction="in" /> | 66 | <arg type="s" name="text" direction="in" /> |
| 67 | + <arg type="i" name="result" direction="out" /> | ||
| 67 | </method> | 68 | </method> |
| 68 | <method name="getClipboard"> | 69 | <method name="getClipboard"> |
| 69 | <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/> | 70 | <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/> |
src/plugins/dbus3270/service.h
| @@ -101,7 +101,7 @@ | @@ -101,7 +101,7 @@ | ||
| 101 | void pw3270_dbus_input(PW3270Dbus *object, const gchar *utftext, DBusGMethodInvocation *context); | 101 | void pw3270_dbus_input(PW3270Dbus *object, const gchar *utftext, DBusGMethodInvocation *context); |
| 102 | 102 | ||
| 103 | void pw3270_dbus_set_clipboard(PW3270Dbus *object, const gchar *text, DBusGMethodInvocation *context); | 103 | void pw3270_dbus_set_clipboard(PW3270Dbus *object, const gchar *text, DBusGMethodInvocation *context); |
| 104 | - void pw3270_dbus_get_clipboard(PW3270Dbus *object, int row, int col, int len, DBusGMethodInvocation *context); | 104 | + void pw3270_dbus_get_clipboard(PW3270Dbus *object, DBusGMethodInvocation *context); |
| 105 | 105 | ||
| 106 | G_END_DECLS | 106 | G_END_DECLS |
| 107 | 107 |
src/plugins/dbus3270/test.sh
| @@ -41,6 +41,10 @@ run_command() | @@ -41,6 +41,10 @@ run_command() | ||
| 41 | dbus-send --session --print-reply --dest=$DEST.$SESSION $BPATH $DEST.enter | 41 | dbus-send --session --print-reply --dest=$DEST.$SESSION $BPATH $DEST.enter |
| 42 | ;; | 42 | ;; |
| 43 | 43 | ||
| 44 | + isconnected) | ||
| 45 | + dbus-send --session --print-reply --dest=$DEST.$SESSION $BPATH $DEST.isConnected | ||
| 46 | + ;; | ||
| 47 | + | ||
| 44 | *) | 48 | *) |
| 45 | echo "Comando $1 desconhecido" | 49 | echo "Comando $1 desconhecido" |
| 46 | ;; | 50 | ;; |
src/plugins/rx3270/remote.cc
| @@ -192,6 +192,9 @@ remote::remote(const char *name) | @@ -192,6 +192,9 @@ remote::remote(const char *name) | ||
| 192 | int rc; | 192 | int rc; |
| 193 | char * str = strdup(name); | 193 | char * str = strdup(name); |
| 194 | char * ptr; | 194 | char * ptr; |
| 195 | + char busname[4096]; | ||
| 196 | + char pidname[10]; | ||
| 197 | + int pid = (int) getpid(); | ||
| 195 | 198 | ||
| 196 | trace("%s str=%p",__FUNCTION__,str); | 199 | trace("%s str=%p",__FUNCTION__,str); |
| 197 | 200 | ||
| @@ -272,7 +275,18 @@ remote::remote(const char *name) | @@ -272,7 +275,18 @@ remote::remote(const char *name) | ||
| 272 | return; | 275 | return; |
| 273 | } | 276 | } |
| 274 | 277 | ||
| 275 | - rc = dbus_bus_request_name(conn, "br.com.bb." PACKAGE_NAME ".rexx", DBUS_NAME_FLAG_REPLACE_EXISTING , &err); | 278 | + memset(pidname,0,10); |
| 279 | + for(int f = 0; f < 9 && pid > 0;f++) | ||
| 280 | + { | ||
| 281 | + pidname[f] = 'a'+(pid % 25); | ||
| 282 | + pid /= 25; | ||
| 283 | + } | ||
| 284 | + | ||
| 285 | + snprintf(busname, 4095, "%s.rx3270.br.com.bb",pidname); | ||
| 286 | + | ||
| 287 | + trace("Busname: [%s]",busname); | ||
| 288 | + | ||
| 289 | + rc = dbus_bus_request_name(conn, busname, DBUS_NAME_FLAG_REPLACE_EXISTING , &err); | ||
| 276 | trace("dbus_bus_request_name rc=%d",rc); | 290 | trace("dbus_bus_request_name rc=%d",rc); |
| 277 | 291 | ||
| 278 | if (dbus_error_is_set(&err)) | 292 | if (dbus_error_is_set(&err)) |
| @@ -285,11 +299,14 @@ remote::remote(const char *name) | @@ -285,11 +299,14 @@ remote::remote(const char *name) | ||
| 285 | 299 | ||
| 286 | if(rc != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER) | 300 | if(rc != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER) |
| 287 | { | 301 | { |
| 288 | - log("%s", "DBUS request name failed"); | 302 | + trace("%s: DBUS request for name %s failed",__FUNCTION__, busname); |
| 303 | + log("DBUS for \"%s\" failed",name); | ||
| 289 | conn = NULL; | 304 | conn = NULL; |
| 290 | return; | 305 | return; |
| 291 | } | 306 | } |
| 292 | 307 | ||
| 308 | + trace("%s: Using DBUS name %s",__FUNCTION__,busname); | ||
| 309 | + | ||
| 293 | 310 | ||
| 294 | #else | 311 | #else |
| 295 | 312 | ||
| @@ -1191,11 +1208,8 @@ char * remote::get_clipboard(void) | @@ -1191,11 +1208,8 @@ char * remote::get_clipboard(void) | ||
| 1191 | 1208 | ||
| 1192 | #elif defined(HAVE_DBUS) | 1209 | #elif defined(HAVE_DBUS) |
| 1193 | 1210 | ||
| 1194 | - DBusMessage * msg = create_message("getClipboard"); | ||
| 1195 | - if(!msg) | ||
| 1196 | - return NULL; | ||
| 1197 | - | ||
| 1198 | - return get_string(call(msg)); | 1211 | + trace("%s",__FUNCTION__); |
| 1212 | + return query_string("getClipboard"); | ||
| 1199 | 1213 | ||
| 1200 | #endif | 1214 | #endif |
| 1201 | 1215 |