diff --git a/src/plugins/dbus3270/gobject.c b/src/plugins/dbus3270/gobject.c index f3b5d62..e500fad 100644 --- a/src/plugins/dbus3270/gobject.c +++ b/src/plugins/dbus3270/gobject.c @@ -370,14 +370,19 @@ void pw3270_dbus_pa_key(PW3270Dbus *object, int key, DBusGMethodInvocation *cont dbus_g_method_return(context,lib3270_get_next_unprotected(pw3270_dbus_get_session_handle(object),baddr)); } -void pw3270_dbus_get_clipboard(PW3270Dbus *object, int row, int col, int len, DBusGMethodInvocation *context) +void pw3270_dbus_get_clipboard(PW3270Dbus *object, DBusGMethodInvocation *context) { gchar *text; + trace("%s object=%p context=%p",__FUNCTION__,object,context); + if(pw3270_dbus_check_valid_state(object,context)) return; text = gtk_clipboard_wait_for_text(gtk_widget_get_clipboard(pw3270_get_toplevel(),GDK_SELECTION_CLIPBOARD)); + + trace("Clipboard:\n%s\n",text); + if(!text) { 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 void pw3270_dbus_set_clipboard(PW3270Dbus *object, const gchar *text, DBusGMethodInvocation *context) { + trace("%s object=%p context=%p",__FUNCTION__,object,context); gtk_clipboard_set_text(gtk_widget_get_clipboard(pw3270_get_toplevel(),GDK_SELECTION_CLIPBOARD),(gchar *) text, -1); dbus_g_method_return(context,0); } diff --git a/src/plugins/dbus3270/pw3270dbus.xml b/src/plugins/dbus3270/pw3270dbus.xml index 80a9cb5..e627749 100644 --- a/src/plugins/dbus3270/pw3270dbus.xml +++ b/src/plugins/dbus3270/pw3270dbus.xml @@ -64,6 +64,7 @@ + diff --git a/src/plugins/dbus3270/service.h b/src/plugins/dbus3270/service.h index 247f36c..43fc7cc 100644 --- a/src/plugins/dbus3270/service.h +++ b/src/plugins/dbus3270/service.h @@ -101,7 +101,7 @@ void pw3270_dbus_input(PW3270Dbus *object, const gchar *utftext, DBusGMethodInvocation *context); void pw3270_dbus_set_clipboard(PW3270Dbus *object, const gchar *text, DBusGMethodInvocation *context); - void pw3270_dbus_get_clipboard(PW3270Dbus *object, int row, int col, int len, DBusGMethodInvocation *context); + void pw3270_dbus_get_clipboard(PW3270Dbus *object, DBusGMethodInvocation *context); G_END_DECLS diff --git a/src/plugins/dbus3270/test.sh b/src/plugins/dbus3270/test.sh index adb9155..f56aa6b 100755 --- a/src/plugins/dbus3270/test.sh +++ b/src/plugins/dbus3270/test.sh @@ -41,6 +41,10 @@ run_command() dbus-send --session --print-reply --dest=$DEST.$SESSION $BPATH $DEST.enter ;; + isconnected) + dbus-send --session --print-reply --dest=$DEST.$SESSION $BPATH $DEST.isConnected + ;; + *) echo "Comando $1 desconhecido" ;; diff --git a/src/plugins/rx3270/remote.cc b/src/plugins/rx3270/remote.cc index 5307e57..024a188 100644 --- a/src/plugins/rx3270/remote.cc +++ b/src/plugins/rx3270/remote.cc @@ -192,6 +192,9 @@ remote::remote(const char *name) int rc; char * str = strdup(name); char * ptr; + char busname[4096]; + char pidname[10]; + int pid = (int) getpid(); trace("%s str=%p",__FUNCTION__,str); @@ -272,7 +275,18 @@ remote::remote(const char *name) return; } - rc = dbus_bus_request_name(conn, "br.com.bb." PACKAGE_NAME ".rexx", DBUS_NAME_FLAG_REPLACE_EXISTING , &err); + memset(pidname,0,10); + for(int f = 0; f < 9 && pid > 0;f++) + { + pidname[f] = 'a'+(pid % 25); + pid /= 25; + } + + snprintf(busname, 4095, "%s.rx3270.br.com.bb",pidname); + + trace("Busname: [%s]",busname); + + rc = dbus_bus_request_name(conn, busname, DBUS_NAME_FLAG_REPLACE_EXISTING , &err); trace("dbus_bus_request_name rc=%d",rc); if (dbus_error_is_set(&err)) @@ -285,11 +299,14 @@ remote::remote(const char *name) if(rc != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER) { - log("%s", "DBUS request name failed"); + trace("%s: DBUS request for name %s failed",__FUNCTION__, busname); + log("DBUS for \"%s\" failed",name); conn = NULL; return; } + trace("%s: Using DBUS name %s",__FUNCTION__,busname); + #else @@ -1191,11 +1208,8 @@ char * remote::get_clipboard(void) #elif defined(HAVE_DBUS) - DBusMessage * msg = create_message("getClipboard"); - if(!msg) - return NULL; - - return get_string(call(msg)); + trace("%s",__FUNCTION__); + return query_string("getClipboard"); #endif diff --git a/src/plugins/rx3270/sample/clipboard.rex b/src/plugins/rx3270/sample/clipboard.rex index e4a4e3c..1a8fdf6 100644 --- a/src/plugins/rx3270/sample/clipboard.rex +++ b/src/plugins/rx3270/sample/clipboard.rex @@ -5,6 +5,8 @@ * */ +trace "?R" + host = .rx3270~new("pw3270:a") if host~connected() = 0 then -- libgit2 0.21.2