Commit 34f7ad747d1796420bef179c966d9eecf1282d8e

Authored by perry.werneck@gmail.com
1 parent 5076a548

Corrigindo tratamento do dbus em rexx

src/plugins/dbus3270/gobject.c
... ... @@ -370,14 +370,19 @@ void pw3270_dbus_pa_key(PW3270Dbus *object, int key, DBusGMethodInvocation *cont
370 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 375 gchar *text;
376 376  
  377 + trace("%s object=%p context=%p",__FUNCTION__,object,context);
  378 +
377 379 if(pw3270_dbus_check_valid_state(object,context))
378 380 return;
379 381  
380 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 386 if(!text)
382 387 {
383 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 398  
394 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 402 gtk_clipboard_set_text(gtk_widget_get_clipboard(pw3270_get_toplevel(),GDK_SELECTION_CLIPBOARD),(gchar *) text, -1);
397 403 dbus_g_method_return(context,0);
398 404 }
... ...
src/plugins/dbus3270/pw3270dbus.xml
... ... @@ -64,6 +64,7 @@
64 64 <method name="setClipboard">
65 65 <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>
66 66 <arg type="s" name="text" direction="in" />
  67 + <arg type="i" name="result" direction="out" />
67 68 </method>
68 69 <method name="getClipboard">
69 70 <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>
... ...
src/plugins/dbus3270/service.h
... ... @@ -101,7 +101,7 @@
101 101 void pw3270_dbus_input(PW3270Dbus *object, const gchar *utftext, DBusGMethodInvocation *context);
102 102  
103 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 106 G_END_DECLS
107 107  
... ...
src/plugins/dbus3270/test.sh
... ... @@ -41,6 +41,10 @@ run_command()
41 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 49 echo "Comando $1 desconhecido"
46 50 ;;
... ...
src/plugins/rx3270/remote.cc
... ... @@ -192,6 +192,9 @@ remote::remote(const char *name)
192 192 int rc;
193 193 char * str = strdup(name);
194 194 char * ptr;
  195 + char busname[4096];
  196 + char pidname[10];
  197 + int pid = (int) getpid();
195 198  
196 199 trace("%s str=%p",__FUNCTION__,str);
197 200  
... ... @@ -272,7 +275,18 @@ remote::remote(const char *name)
272 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 290 trace("dbus_bus_request_name rc=%d",rc);
277 291  
278 292 if (dbus_error_is_set(&err))
... ... @@ -285,11 +299,14 @@ remote::remote(const char *name)
285 299  
286 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 304 conn = NULL;
290 305 return;
291 306 }
292 307  
  308 + trace("%s: Using DBUS name %s",__FUNCTION__,busname);
  309 +
293 310  
294 311 #else
295 312  
... ... @@ -1191,11 +1208,8 @@ char * remote::get_clipboard(void)
1191 1208  
1192 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 1214 #endif
1201 1215  
... ...
src/plugins/rx3270/sample/clipboard.rex
... ... @@ -5,6 +5,8 @@
5 5 *
6 6 */
7 7  
  8 +trace "?R"
  9 +
8 10 host = .rx3270~new("pw3270:a")
9 11  
10 12 if host~connected() = 0 then
... ...