Hi, On Mon, Jan 28, 2019 at 1:23 PM Victor Toso <victortoso@xxxxxxxxxx> wrote: > > From: Victor Toso <me@xxxxxxxxxxxxxx> > > * Attaching the 'guest_' prefix for actions that were started from > guest agent, those renames are: > > clipboard_grab -> guest_clipboard_grab > clipboard_release -> guest_clipboard_release > clipboard_request -> guest_clipboard_request_data > clipboard_request_send_data -> guest_clipboard_request_send_data > > * Attaching the 'client_' prefix for actions that were triggered by > client and sent/received by guest agent, those renames are: > > clipboard_get -> client_clipboard_request_data > clipboard_got_from_guest -> client_clipboard_received_data > > * Changed from 'clipboard_' to 'clipboard_handler' prefix for > callbacks related to GtkClipboard, those renames are: > > clipboard_clear -> clipboard_handler_clear > clipboard_owner_change -> clipboard_handler_owner_change_cb > clipboard_received_text_cb -> clipboard_handler_received_text_cb > clipboard_get_targets -> clipboard_handler_get_targets_cb These 4 seem a bit weird. I would either change them all to "clipboard_*_handler", or "clipboard_*_cb". I wouldn't use "handler" together with "cb". They could also bear the "client_" prefix as they're all concerning clipboard on the client side. > > Signed-off-by: Victor Toso <me@xxxxxxxxxxxxxx> > --- > src/spice-gtk-session.c | 123 ++++++++++++++++++++++++---------------- > 1 file changed, 75 insertions(+), 48 deletions(-) > > diff --git a/src/spice-gtk-session.c b/src/spice-gtk-session.c > index 1a19bca..ac2ba0b 100644 > --- a/src/spice-gtk-session.c > +++ b/src/spice-gtk-session.c > @@ -95,9 +95,9 @@ struct _SpiceGtkSessionPrivate { > > /* ------------------------------------------------------------------ */ > /* Prototypes for private functions */ > -static void clipboard_owner_change(GtkClipboard *clipboard, > - GdkEventOwnerChange *event, > - gpointer user_data); > +static void clipboard_handler_owner_change_cb(GtkClipboard *clipboard, > + GdkEventOwnerChange *event, > + gpointer user_data); > static void channel_new(SpiceSession *session, SpiceChannel *channel, > gpointer user_data); > static void channel_destroy(SpiceSession *session, SpiceChannel *channel, > @@ -182,10 +182,10 @@ static void spice_gtk_session_init(SpiceGtkSession *self) > > s->clipboard = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD); > g_signal_connect(G_OBJECT(s->clipboard), "owner-change", > - G_CALLBACK(clipboard_owner_change), self); > + G_CALLBACK(clipboard_handler_owner_change_cb), self); > s->clipboard_primary = gtk_clipboard_get(GDK_SELECTION_PRIMARY); > g_signal_connect(G_OBJECT(s->clipboard_primary), "owner-change", > - G_CALLBACK(clipboard_owner_change), self); > + G_CALLBACK(clipboard_handler_owner_change_cb), self); > spice_g_signal_connect_object(keymap, "state-changed", > G_CALLBACK(keymap_modifiers_changed), self, 0); > } > @@ -222,13 +222,13 @@ static void spice_gtk_session_dispose(GObject *gobject) > /* release stuff */ > if (s->clipboard) { > g_signal_handlers_disconnect_by_func(s->clipboard, > - G_CALLBACK(clipboard_owner_change), self); > + G_CALLBACK(clipboard_handler_owner_change_cb), self); > s->clipboard = NULL; > } > > if (s->clipboard_primary) { > g_signal_handlers_disconnect_by_func(s->clipboard_primary, > - G_CALLBACK(clipboard_owner_change), self); > + G_CALLBACK(clipboard_handler_owner_change_cb), self); > s->clipboard_primary = NULL; > } > > @@ -537,10 +537,10 @@ static gpointer free_weak_ref(gpointer data) > return object; > } > > -static void clipboard_get_targets(GtkClipboard *clipboard, > - GdkAtom *atoms, > - gint n_atoms, > - gpointer user_data) > +static void clipboard_handler_get_targets_cb(GtkClipboard *clipboard, > + GdkAtom *atoms, > + gint n_atoms, > + gpointer user_data) > { > SpiceGtkSession *self = free_weak_ref(user_data); > > @@ -635,9 +635,10 @@ static void clipboard_get_targets(GtkClipboard *clipboard, > * emits owner-change event; On Wayland that does not happen as spice-gtk still is > * the owner of the clipboard. > */ > -static void clipboard_owner_change(GtkClipboard *clipboard, > - GdkEventOwnerChange *event, > - gpointer user_data) > +static void > +clipboard_handler_owner_change_cb(GtkClipboard *clipboard, > + GdkEventOwnerChange *event, > + gpointer user_data) > { > g_return_if_fail(SPICE_IS_GTK_SESSION(user_data)); > > @@ -676,7 +677,8 @@ static void clipboard_owner_change(GtkClipboard *clipboard, > s->clipboard_by_guest[selection] = FALSE; > s->clip_hasdata[selection] = TRUE; > if (s->auto_clipboard_enable && !read_only(self)) > - gtk_clipboard_request_targets(clipboard, clipboard_get_targets, > + gtk_clipboard_request_targets(clipboard, > + clipboard_handler_get_targets_cb, > get_weak_ref(self)); > } > > @@ -689,9 +691,14 @@ typedef struct > guint selection; > } RunInfo; > > -static void clipboard_got_from_guest(SpiceMainChannel *main, guint selection, > - guint type, const guchar *data, guint size, > - gpointer user_data) > +/* Only After client_clipboard_request_data */ lowercase a in "After"? > +static void > +client_clipboard_received_data(SpiceMainChannel *main, > + guint selection, > + guint type, > + const guchar *data, > + guint size, > + gpointer user_data) > { > RunInfo *ri = user_data; > SpiceGtkSessionPrivate *s = ri->self->priv; > @@ -730,9 +737,11 @@ static void clipboard_agent_connected(RunInfo *ri) > g_main_loop_quit(ri->loop); > } > > -static void clipboard_get(GtkClipboard *clipboard, > - GtkSelectionData *selection_data, > - guint info, gpointer user_data) > +static void > +client_clipboard_request_data(GtkClipboard *clipboard, > + GtkSelectionData *selection_data, > + guint info, > + gpointer user_data) > { > g_return_if_fail(SPICE_IS_GTK_SESSION(user_data)); > > @@ -758,8 +767,7 @@ static void clipboard_get(GtkClipboard *clipboard, > ri.self = self; > > clipboard_handler = g_signal_connect(s->main, "main-clipboard-selection", > - G_CALLBACK(clipboard_got_from_guest), > - &ri); > + G_CALLBACK(client_clipboard_received_data), &ri); > agent_handler = g_signal_connect_swapped(s->main, "notify::agent-connected", > G_CALLBACK(clipboard_agent_connected), > &ri); > @@ -770,7 +778,7 @@ static void clipboard_get(GtkClipboard *clipboard, > > g_object_get(s->main, "agent-connected", &agent_connected, NULL); > if (!agent_connected) { > - SPICE_DEBUG("canceled clipboard_get, before running loop"); > + SPICE_DEBUG("canceled client_clipboard_request_data, before running loop"); replace hardcoded function name with "%s" and __func__? > goto cleanup; > } > > @@ -790,16 +798,21 @@ cleanup: > g_signal_handler_disconnect(s->main, agent_handler); > } > > -static void clipboard_clear(GtkClipboard *clipboard, gpointer user_data) > +static void > +clipboard_handler_clear(GtkClipboard *clipboard, gpointer user_data) > { > SPICE_DEBUG("clipboard_clear"); I think this should be updated in this patch too (instead of 2/2). > /* We watch for clipboard ownership changes and act on those, so we > don't need to do anything here */ > } > > -static gboolean clipboard_grab(SpiceMainChannel *main, guint selection, > - guint32* types, guint32 ntypes, > - gpointer user_data) > +/* Guest agent is sending guest's clipboard metadata */ > +static gboolean > +guest_clipboard_grab(SpiceMainChannel *main, > + guint selection, > + guint32* types, > + guint32 ntypes, > + gpointer user_data) > { > g_return_val_if_fail(SPICE_IS_GTK_SESSION(user_data), FALSE); > > @@ -848,8 +861,8 @@ static gboolean clipboard_grab(SpiceMainChannel *main, guint selection, > if (!gtk_clipboard_set_with_owner(cb, > targets, > num_targets, > - clipboard_get, > - clipboard_clear, > + client_clipboard_request_data, > + clipboard_handler_clear, > G_OBJECT(self))) { > g_warning("clipboard grab failed"); > return FALSE; > @@ -906,9 +919,9 @@ static char *fixup_clipboard_text(SpiceGtkSession *self, const char *text, int * > return conv; > } > > -static void clipboard_received_text_cb(GtkClipboard *clipboard, > - const gchar *text, > - gpointer user_data) > +static void clipboard_handler_received_text_cb(GtkClipboard *clipboard, > + const gchar *text, > + gpointer user_data) > { > SpiceGtkSession *self = free_weak_ref(user_data); > char *conv = NULL; > @@ -951,7 +964,8 @@ notify_agent: > g_free(conv); > } > > -static void clipboard_received_cb(GtkClipboard *clipboard, > +static void > +guest_clipboard_request_send_data(GtkClipboard *clipboard, > GtkSelectionData *selection_data, > gpointer user_data) This function contains the following line: | g_warning("clipboard_received for unsupported type: %s", name); Needs update too. > { > @@ -995,16 +1009,20 @@ static void clipboard_received_cb(GtkClipboard *clipboard, > > const guchar *data = gtk_selection_data_get_data(selection_data); > > - /* text should be handled through clipboard_received_text_cb(), not > - * clipboard_received_cb(). > + /* text should be handled through clipboard_handler_received_text_cb(), not > + * guest_clipboard_request_send_data() > */ > g_warn_if_fail(type != VD_AGENT_CLIPBOARD_UTF8_TEXT); > > spice_main_channel_clipboard_selection_notify(s->main, selection, type, data, len); > } > > -static gboolean clipboard_request(SpiceMainChannel *main, guint selection, > - guint type, gpointer user_data) > +/* Guest agent is requesting client's clipboard data */ > +static gboolean > +guest_clipboard_request_data(SpiceMainChannel *main, > + guint selection, > + guint type, > + gpointer user_data) > { > g_return_val_if_fail(SPICE_IS_GTK_SESSION(user_data), FALSE); > > @@ -1023,7 +1041,8 @@ static gboolean clipboard_request(SpiceMainChannel *main, guint selection, > return FALSE; > > if (type == VD_AGENT_CLIPBOARD_UTF8_TEXT) { > - gtk_clipboard_request_text(cb, clipboard_received_text_cb, > + gtk_clipboard_request_text(cb, > + clipboard_handler_received_text_cb, > get_weak_ref(self)); > } else { > for (m = 0; m < SPICE_N_ELEMENTS(atom2agent); m++) { > @@ -1034,15 +1053,18 @@ static gboolean clipboard_request(SpiceMainChannel *main, guint selection, > g_return_val_if_fail(m < SPICE_N_ELEMENTS(atom2agent), FALSE); > > atom = gdk_atom_intern_static_string(atom2agent[m].xatom); > - gtk_clipboard_request_contents(cb, atom, clipboard_received_cb, > + gtk_clipboard_request_contents(cb, atom, guest_clipboard_request_send_data, > get_weak_ref(self)); > } > > return TRUE; > } > > -static void clipboard_release(SpiceMainChannel *main, guint selection, > - gpointer user_data) > +/* Guest agent is clearing last guest's clipboard metadata */ > +static void > +guest_clipboard_release(SpiceMainChannel *main, > + guint selection, > + gpointer user_data) > { > g_return_if_fail(SPICE_IS_GTK_SESSION(user_data)); > > @@ -1073,11 +1095,11 @@ static void channel_new(SpiceSession *session, SpiceChannel *channel, > SPICE_DEBUG("Changing main channel from %p to %p", s->main, channel); > s->main = SPICE_MAIN_CHANNEL(channel); > g_signal_connect(channel, "main-clipboard-selection-grab", > - G_CALLBACK(clipboard_grab), self); > + G_CALLBACK(guest_clipboard_grab), self); > g_signal_connect(channel, "main-clipboard-selection-request", > - G_CALLBACK(clipboard_request), self); > + G_CALLBACK(guest_clipboard_request_data), self); > g_signal_connect(channel, "main-clipboard-selection-release", > - G_CALLBACK(clipboard_release), self); > + G_CALLBACK(guest_clipboard_release), self); > } > if (SPICE_IS_INPUTS_CHANNEL(channel)) { > spice_g_signal_connect_object(channel, "inputs-modifiers", > @@ -1207,7 +1229,8 @@ void spice_gtk_session_copy_to_guest(SpiceGtkSession *self) > int selection = VD_AGENT_CLIPBOARD_SELECTION_CLIPBOARD; > > if (s->clip_hasdata[selection] && !s->clip_grabbed[selection]) { > - gtk_clipboard_request_targets(s->clipboard, clipboard_get_targets, > + gtk_clipboard_request_targets(s->clipboard, > + clipboard_handler_get_targets_cb, > get_weak_ref(self)); > } > } > @@ -1233,8 +1256,12 @@ void spice_gtk_session_paste_from_guest(SpiceGtkSession *self) > return; > } > > - if (!gtk_clipboard_set_with_owner(s->clipboard, s->clip_targets[selection], s->nclip_targets[selection], > - clipboard_get, clipboard_clear, G_OBJECT(self))) { > + if (!gtk_clipboard_set_with_owner(s->clipboard, > + s->clip_targets[selection], > + s->nclip_targets[selection], > + client_clipboard_request_data, > + clipboard_handler_clear, > + G_OBJECT(self))) { > g_warning("Clipboard grab failed"); > return; > } > -- > 2.20.1 > Otherwise seems good to me. But I would consider delaying this patch until the bug is fixed. At the moment, it might result in a real mess in the ongoing discussions. Cheers, Jakub _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel