Hi, On Thu, Mar 01, 2018 at 11:13:59AM +0100, Jakub Janků wrote: > From: Jakub Janků <jjanku@xxxxxxxxxx> > > Introduce new functions to handle clipboard, > add new files clipboard.[ch] > > This is only a preparatory patch for > following GTK+ clipboard implementation. Acked-by: Victor Toso <victortoso@xxxxxxxxxx> I plan to push this early next week and try to roll a release aftewards. Thanks again for this, Cheers, toso > --- > Makefile.am | 2 ++ > src/vdagent/clipboard.c | 68 +++++++++++++++++++++++++++++++++++++++++++++++++ > src/vdagent/clipboard.h | 43 +++++++++++++++++++++++++++++++ > src/vdagent/vdagent.c | 19 +++++++++----- > 4 files changed, 125 insertions(+), 7 deletions(-) > create mode 100644 src/vdagent/clipboard.c > create mode 100644 src/vdagent/clipboard.h > > diff --git a/Makefile.am b/Makefile.am > index c4bd3dd..3e405bc 100644 > --- a/Makefile.am > +++ b/Makefile.am > @@ -33,6 +33,8 @@ src_spice_vdagent_SOURCES = \ > $(common_sources) \ > src/vdagent/audio.c \ > src/vdagent/audio.h \ > + src/vdagent/clipboard.c \ > + src/vdagent/clipboard.h \ > src/vdagent/file-xfers.c \ > src/vdagent/file-xfers.h \ > src/vdagent/x11-priv.h \ > diff --git a/src/vdagent/clipboard.c b/src/vdagent/clipboard.c > new file mode 100644 > index 0000000..ab1e875 > --- /dev/null > +++ b/src/vdagent/clipboard.c > @@ -0,0 +1,68 @@ > +/* clipboard.c - vdagent clipboard handling code > + > + Copyright 2017 Red Hat, Inc. > + > + This program is free software: you can redistribute it and/or modify > + it under the terms of the GNU General Public License as published by > + the Free Software Foundation, either version 3 of the License, or > + (at your option) any later version. > + > + This program is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + GNU General Public License for more details. > + > + You should have received a copy of the GNU General Public License > + along with this program. If not, see <http://www.gnu.org/licenses/>. > +*/ > + > +#ifdef HAVE_CONFIG_H > +# include <config.h> > +#endif > + > +#include "clipboard.h" > + > +struct VDAgentClipboards { > + struct vdagent_x11 *x11; > +}; > + > +void vdagent_clipboard_grab(VDAgentClipboards *c, guint sel_id, > + guint32 *types, guint n_types) > +{ > + vdagent_x11_clipboard_grab(c->x11, sel_id, types, n_types); > +} > + > +void vdagent_clipboard_data(VDAgentClipboards *c, guint sel_id, > + guint type, guchar *data, guint size) > +{ > + vdagent_x11_clipboard_data(c->x11, sel_id, type, data, size); > +} > + > +void vdagent_clipboard_release(VDAgentClipboards *c, guint sel_id) > +{ > + vdagent_x11_clipboard_release(c->x11, sel_id); > +} > + > +void vdagent_clipboards_release_all(VDAgentClipboards *c) > +{ > + vdagent_x11_client_disconnected(c->x11); > +} > + > +void vdagent_clipboard_request(VDAgentClipboards *c, guint sel_id, guint type) > +{ > + vdagent_x11_clipboard_request(c->x11, sel_id, type); > +} > + > +VDAgentClipboards *vdagent_clipboards_init(struct vdagent_x11 *x11) > +{ > + VDAgentClipboards *c; > + c = g_new0(VDAgentClipboards, 1); > + c->x11 = x11; > + > + return c; > +} > + > +void vdagent_clipboards_finalize(VDAgentClipboards *c) > +{ > + g_free(c); > +} > diff --git a/src/vdagent/clipboard.h b/src/vdagent/clipboard.h > new file mode 100644 > index 0000000..aac3143 > --- /dev/null > +++ b/src/vdagent/clipboard.h > @@ -0,0 +1,43 @@ > +/* clipboard.h - vdagent clipboard handling header > + > + Copyright 2017 Red Hat, Inc. > + > + This program is free software: you can redistribute it and/or modify > + it under the terms of the GNU General Public License as published by > + the Free Software Foundation, either version 3 of the License, or > + (at your option) any later version. > + > + This program is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + GNU General Public License for more details. > + > + You should have received a copy of the GNU General Public License > + along with this program. If not, see <http://www.gnu.org/licenses/>. > +*/ > + > +#ifndef __VDAGENT_CLIPBOARD_H > +#define __VDAGENT_CLIPBOARD_H > + > +#include <glib.h> > + > +#include "x11.h" > + > +typedef struct VDAgentClipboards VDAgentClipboards; > + > +VDAgentClipboards *vdagent_clipboards_init(struct vdagent_x11 *x11); > +void vdagent_clipboards_finalize(VDAgentClipboards *c); > + > +void vdagent_clipboard_request(VDAgentClipboards *c, guint sel_id, guint type); > + > +void vdagent_clipboard_release(VDAgentClipboards *c, guint sel_id); > + > +void vdagent_clipboards_release_all(VDAgentClipboards *c); > + > +void vdagent_clipboard_data(VDAgentClipboards *c, guint sel_id, > + guint type, guchar *data, guint size); > + > +void vdagent_clipboard_grab(VDAgentClipboards *c, guint sel_id, > + guint32 *types, guint n_types); > + > +#endif > diff --git a/src/vdagent/vdagent.c b/src/vdagent/vdagent.c > index 6a20429..83180ac 100644 > --- a/src/vdagent/vdagent.c > +++ b/src/vdagent/vdagent.c > @@ -46,8 +46,10 @@ > #include "audio.h" > #include "x11.h" > #include "file-xfers.h" > +#include "clipboard.h" > > typedef struct VDAgent { > + VDAgentClipboards *clipboards; > struct vdagent_x11 *x11; > struct vdagent_file_xfers *xfers; > struct udscs_connection *conn; > @@ -168,18 +170,18 @@ static void daemon_read_complete(struct udscs_connection **connp, > vdagent_x11_set_monitor_config(agent->x11, (VDAgentMonitorsConfig *)data, 0); > break; > case VDAGENTD_CLIPBOARD_REQUEST: > - vdagent_x11_clipboard_request(agent->x11, header->arg1, header->arg2); > + vdagent_clipboard_request(agent->clipboards, header->arg1, header->arg2); > break; > case VDAGENTD_CLIPBOARD_GRAB: > - vdagent_x11_clipboard_grab(agent->x11, header->arg1, (uint32_t *)data, > - header->size / sizeof(uint32_t)); > + vdagent_clipboard_grab(agent->clipboards, header->arg1, > + (guint32 *)data, header->size / sizeof(guint32)); > break; > case VDAGENTD_CLIPBOARD_DATA: > - vdagent_x11_clipboard_data(agent->x11, header->arg1, header->arg2, > - data, header->size); > + vdagent_clipboard_data(agent->clipboards, header->arg1, header->arg2, > + data, header->size); > break; > case VDAGENTD_CLIPBOARD_RELEASE: > - vdagent_x11_clipboard_release(agent->x11, header->arg1); > + vdagent_clipboard_release(agent->clipboards, header->arg1); > break; > case VDAGENTD_VERSION: > if (strcmp((char *)data, VERSION) != 0) { > @@ -232,7 +234,7 @@ static void daemon_read_complete(struct udscs_connection **connp, > } > break; > case VDAGENTD_CLIENT_DISCONNECTED: > - vdagent_x11_client_disconnected(agent->x11); > + vdagent_clipboards_release_all(agent->clipboards); > if (vdagent_finalize_file_xfer(agent)) { > vdagent_init_file_xfer(agent); > } > @@ -340,6 +342,7 @@ static VDAgent *vdagent_new(void) > static void vdagent_destroy(VDAgent *agent) > { > vdagent_finalize_file_xfer(agent); > + vdagent_clipboards_finalize(agent->clipboards); > vdagent_x11_destroy(agent->x11, agent->conn == NULL); > udscs_destroy_connection(&agent->conn); > > @@ -379,6 +382,8 @@ static gboolean vdagent_init_async_cb(gpointer user_data) > if (!vdagent_init_file_xfer(agent)) > syslog(LOG_WARNING, "File transfer is disabled"); > > + agent->clipboards = vdagent_clipboards_init(agent->x11); > + > if (parent_socket != -1) { > if (write(parent_socket, "OK", 2) != 2) > syslog(LOG_WARNING, "Parent already gone."); > -- > 2.14.3 > > _______________________________________________ > Spice-devel mailing list > Spice-devel@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/spice-devel
Attachment:
signature.asc
Description: PGP signature
_______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel