diff --git a/src/plugins/dbus3270/gobject.c b/src/plugins/dbus3270/gobject.c index 46c426f..83ba239 100644 --- a/src/plugins/dbus3270/gobject.c +++ b/src/plugins/dbus3270/gobject.c @@ -34,12 +34,15 @@ */ #include +#include #include #include #include #include #include +#include +#include #include #include "service.h" @@ -366,3 +369,41 @@ void pw3270_dbus_pa_key(PW3270Dbus *object, int key, DBusGMethodInvocation *cont trace("%s object=%p context=%p",__FUNCTION__,object,context); 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) +{ + gchar *text; + + 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)); + if(!text) + { + GError *error = pw3270_dbus_get_error_from_errno(ENOENT); + dbus_g_method_return_error(context,error); + g_error_free(error); + } + else + { + dbus_g_method_return(context,text); + g_free(text); + } +} + +void pw3270_dbus_set_script(PW3270Dbus *object, const gchar *text, int mode, DBusGMethodInvocation *context) +{ + GtkWidget *widget = pw3270_get_terminal_widget(NULL); + + trace("%s object=%p context=%p",__FUNCTION__,object,context); + + if(!widget) + { + GError *error = pw3270_dbus_get_error_from_errno(EINVAL); + dbus_g_method_return_error(context,error); + g_error_free(error); + return; + } + + dbus_g_method_return(context,v3270_set_script(widget,*text,mode != 0)); +} diff --git a/src/plugins/dbus3270/pw3270dbus.xml b/src/plugins/dbus3270/pw3270dbus.xml index 26a92f7..3b5b945 100644 --- a/src/plugins/dbus3270/pw3270dbus.xml +++ b/src/plugins/dbus3270/pw3270dbus.xml @@ -61,6 +61,10 @@ + + + + @@ -121,5 +125,12 @@ + + + + + + + diff --git a/src/plugins/dbus3270/service.h b/src/plugins/dbus3270/service.h index dcf7d1b..4acf99c 100644 --- a/src/plugins/dbus3270/service.h +++ b/src/plugins/dbus3270/service.h @@ -89,6 +89,8 @@ void pw3270_dbus_get_field_length(PW3270Dbus *object, int baddr, DBusGMethodInvocation *context); void pw3270_dbus_get_next_unprotected(PW3270Dbus *object, int baddr, DBusGMethodInvocation *context); + void pw3270_dbus_set_script(PW3270Dbus *object, const gchar *text, int mode, DBusGMethodInvocation *context); + // Actions void pw3270_dbus_enter(PW3270Dbus *object, DBusGMethodInvocation *context); void pw3270_dbus_pf_key(PW3270Dbus *object, int key, DBusGMethodInvocation *context); @@ -97,6 +99,7 @@ void pw3270_dbus_get_text_at(PW3270Dbus *object, int row, int col, int len, DBusGMethodInvocation *context); void pw3270_dbus_cmp_text_at(PW3270Dbus *object, int row, int col, const gchar *text, DBusGMethodInvocation *context); void pw3270_dbus_input(PW3270Dbus *object, const gchar *utftext, DBusGMethodInvocation *context); + void pw3270_dbus_get_clipboard(PW3270Dbus *object, int row, int col, int len, DBusGMethodInvocation *context); G_END_DECLS diff --git a/src/plugins/rx3270/remote.cc b/src/plugins/rx3270/remote.cc index 7b7eaf9..65ad5ea 100644 --- a/src/plugins/rx3270/remote.cc +++ b/src/plugins/rx3270/remote.cc @@ -83,6 +83,9 @@ int get_field_len(int baddr = -1); int get_next_unprotected(int baddr = -1); + char * get_clipboard(void); + int set_clipboard(const char *text); + private: #if defined(WIN32) @@ -1159,3 +1162,27 @@ int remote::get_next_unprotected(int baddr) return -1; } + +int remote::set_clipboard(const char *text) +{ + return -1; +} + +char * remote::get_clipboard(void) +{ +#if defined(WIN32) + + return NULL; + +#elif defined(HAVE_DBUS) + + DBusMessage * msg = create_message("getClipboard"); + if(!msg) + return NULL; + + return get_string(call(msg)); + +#endif + + return NULL; +} diff --git a/src/plugins/rx3270/sample/clipboard.rex b/src/plugins/rx3270/sample/clipboard.rex index a41132e..e4a4e3c 100644 --- a/src/plugins/rx3270/sample/clipboard.rex +++ b/src/plugins/rx3270/sample/clipboard.rex @@ -5,7 +5,7 @@ * */ - host = .rx3270~new("") + host = .rx3270~new("pw3270:a") if host~connected() = 0 then do -- libgit2 0.21.2