Commit 4baf2f92f231b7f2832d4df5da5b17576559e4dd

Authored by perry.werneck@gmail.com
1 parent 9d7f1cf3

Incluindo mais métodos na interface dbus

src/plugins/dbus3270/gobject.c
... ... @@ -34,12 +34,15 @@
34 34 */
35 35  
36 36 #include <glib.h>
  37 +#include <gtk/gtk.h>
37 38 #include <dbus/dbus.h>
38 39 #include <dbus/dbus-glib-lowlevel.h>
39 40 #include <dbus/dbus-glib.h>
40 41  
41 42 #include <lib3270/config.h>
42 43 #include <lib3270.h>
  44 +#include <pw3270.h>
  45 +#include <pw3270/v3270.h>
43 46 #include <lib3270/actions.h>
44 47  
45 48 #include "service.h"
... ... @@ -366,3 +369,41 @@ void pw3270_dbus_pa_key(PW3270Dbus *object, int key, DBusGMethodInvocation *cont
366 369 trace("%s object=%p context=%p",__FUNCTION__,object,context);
367 370 dbus_g_method_return(context,lib3270_get_next_unprotected(pw3270_dbus_get_session_handle(object),baddr));
368 371 }
  372 +
  373 +void pw3270_dbus_get_clipboard(PW3270Dbus *object, int row, int col, int len, DBusGMethodInvocation *context)
  374 +{
  375 + gchar *text;
  376 +
  377 + if(pw3270_dbus_check_valid_state(object,context))
  378 + return;
  379 +
  380 + text = gtk_clipboard_wait_for_text(gtk_widget_get_clipboard(pw3270_get_toplevel(),GDK_SELECTION_CLIPBOARD));
  381 + if(!text)
  382 + {
  383 + GError *error = pw3270_dbus_get_error_from_errno(ENOENT);
  384 + dbus_g_method_return_error(context,error);
  385 + g_error_free(error);
  386 + }
  387 + else
  388 + {
  389 + dbus_g_method_return(context,text);
  390 + g_free(text);
  391 + }
  392 +}
  393 +
  394 +void pw3270_dbus_set_script(PW3270Dbus *object, const gchar *text, int mode, DBusGMethodInvocation *context)
  395 +{
  396 + GtkWidget *widget = pw3270_get_terminal_widget(NULL);
  397 +
  398 + trace("%s object=%p context=%p",__FUNCTION__,object,context);
  399 +
  400 + if(!widget)
  401 + {
  402 + GError *error = pw3270_dbus_get_error_from_errno(EINVAL);
  403 + dbus_g_method_return_error(context,error);
  404 + g_error_free(error);
  405 + return;
  406 + }
  407 +
  408 + dbus_g_method_return(context,v3270_set_script(widget,*text,mode != 0));
  409 +}
... ...
src/plugins/dbus3270/pw3270dbus.xml
... ... @@ -61,6 +61,10 @@
61 61 <arg type="i" name="len" direction="in" />
62 62 <arg type="s" name="text" direction="out" />
63 63 </method>
  64 + <method name="getClipboard">
  65 + <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>
  66 + <arg type="s" name="text" direction="out" />
  67 + </method>
64 68 <method name="isConnected">
65 69 <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>
66 70 <arg type="i" name="result" direction="out" />
... ... @@ -121,5 +125,12 @@
121 125 <arg type="i" name="addr" direction="in" />
122 126 <arg type="i" name="result" direction="out" />
123 127 </method>
  128 + <method name="setScript">
  129 + <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>
  130 + <arg type="s" name="id" direction="in" />
  131 + <arg type="i" name="status" direction="in" />
  132 + <arg type="i" name="result" direction="out" />
  133 + </method>
124 134 </interface>
  135 +
125 136 </node>
... ...
src/plugins/dbus3270/service.h
... ... @@ -89,6 +89,8 @@
89 89 void pw3270_dbus_get_field_length(PW3270Dbus *object, int baddr, DBusGMethodInvocation *context);
90 90 void pw3270_dbus_get_next_unprotected(PW3270Dbus *object, int baddr, DBusGMethodInvocation *context);
91 91  
  92 + void pw3270_dbus_set_script(PW3270Dbus *object, const gchar *text, int mode, DBusGMethodInvocation *context);
  93 +
92 94 // Actions
93 95 void pw3270_dbus_enter(PW3270Dbus *object, DBusGMethodInvocation *context);
94 96 void pw3270_dbus_pf_key(PW3270Dbus *object, int key, DBusGMethodInvocation *context);
... ... @@ -97,6 +99,7 @@
97 99 void pw3270_dbus_get_text_at(PW3270Dbus *object, int row, int col, int len, DBusGMethodInvocation *context);
98 100 void pw3270_dbus_cmp_text_at(PW3270Dbus *object, int row, int col, const gchar *text, DBusGMethodInvocation *context);
99 101 void pw3270_dbus_input(PW3270Dbus *object, const gchar *utftext, DBusGMethodInvocation *context);
  102 + void pw3270_dbus_get_clipboard(PW3270Dbus *object, int row, int col, int len, DBusGMethodInvocation *context);
100 103  
101 104 G_END_DECLS
102 105  
... ...
src/plugins/rx3270/remote.cc
... ... @@ -83,6 +83,9 @@
83 83 int get_field_len(int baddr = -1);
84 84 int get_next_unprotected(int baddr = -1);
85 85  
  86 + char * get_clipboard(void);
  87 + int set_clipboard(const char *text);
  88 +
86 89 private:
87 90 #if defined(WIN32)
88 91  
... ... @@ -1159,3 +1162,27 @@ int remote::get_next_unprotected(int baddr)
1159 1162  
1160 1163 return -1;
1161 1164 }
  1165 +
  1166 +int remote::set_clipboard(const char *text)
  1167 +{
  1168 + return -1;
  1169 +}
  1170 +
  1171 +char * remote::get_clipboard(void)
  1172 +{
  1173 +#if defined(WIN32)
  1174 +
  1175 + return NULL;
  1176 +
  1177 +#elif defined(HAVE_DBUS)
  1178 +
  1179 + DBusMessage * msg = create_message("getClipboard");
  1180 + if(!msg)
  1181 + return NULL;
  1182 +
  1183 + return get_string(call(msg));
  1184 +
  1185 +#endif
  1186 +
  1187 + return NULL;
  1188 +}
... ...
src/plugins/rx3270/sample/clipboard.rex
... ... @@ -5,7 +5,7 @@
5 5 *
6 6 */
7 7  
8   - host = .rx3270~new("")
  8 + host = .rx3270~new("pw3270:a")
9 9  
10 10 if host~connected() = 0 then
11 11 do
... ...