Re: [PATCH spice-gtk] gtk-session: remove clipboard timeout

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Looks good, ACK.

On 03/21/2013 07:58 PM, Marc-André Lureau wrote:
A large clipboard may take longer than 7s on slow networks. Since the
Gtk+ API forces us to use an inner main-loop, exit it asap, if agent
is disconnected for instance.

https://bugzilla.redhat.com/show_bug.cgi?id=752483
---
  gtk/spice-gtk-session.c | 22 ++++++++++------------
  1 file changed, 10 insertions(+), 12 deletions(-)

diff --git a/gtk/spice-gtk-session.c b/gtk/spice-gtk-session.c
index 555085b..47c7d36 100644
--- a/gtk/spice-gtk-session.c
+++ b/gtk/spice-gtk-session.c
@@ -552,7 +552,6 @@ typedef struct
      GMainLoop *loop;
      GtkSelectionData *selection_data;
      guint info;
-    gulong timeout_handler;
      guint selection;
  } RunInfo;

@@ -574,16 +573,12 @@ static void clipboard_got_from_guest(SpiceMainChannel *main, guint selection,
          g_main_loop_quit (ri->loop);
  }

-static gboolean clipboard_timeout(gpointer user_data)
+static void clipboard_agent_connected(RunInfo *ri)
  {
-    RunInfo *ri = user_data;
+    g_warning("agent status changed, cancel clipboard request");

-    g_warning("clipboard get timed out");
-    if (g_main_loop_is_running (ri->loop))
-        g_main_loop_quit (ri->loop);
-
-    ri->timeout_handler = 0;
-    return FALSE;
+    if (g_main_loop_is_running(ri->loop))
+        g_main_loop_quit(ri->loop);
  }

  static void clipboard_get(GtkClipboard *clipboard,
@@ -596,6 +591,7 @@ static void clipboard_get(GtkClipboard *clipboard,
      SpiceGtkSession *self = user_data;
      SpiceGtkSessionPrivate *s = self->priv;
      gulong clipboard_handler;
+    gulong agent_handler;
      int selection;

      SPICE_DEBUG("clipboard get");
@@ -613,7 +609,10 @@ static void clipboard_get(GtkClipboard *clipboard,
      clipboard_handler = g_signal_connect(s->main, "main-clipboard-selection",
                                           G_CALLBACK(clipboard_got_from_guest),
                                           &ri);
-    ri.timeout_handler = g_timeout_add_seconds(7, clipboard_timeout, &ri);
+    agent_handler = g_signal_connect(s->main, "notify::agent-connected",
+                                     G_CALLBACK(clipboard_agent_connected),
+                                     &ri);
+
      spice_main_clipboard_selection_request(s->main, selection,
                                             atom2agent[info].vdagent);

@@ -626,8 +625,7 @@ static void clipboard_get(GtkClipboard *clipboard,
      g_main_loop_unref(ri.loop);
      ri.loop = NULL;
      g_signal_handler_disconnect(s->main, clipboard_handler);
-    if (ri.timeout_handler != 0)
-        g_source_remove(ri.timeout_handler);
+    g_signal_handler_disconnect(s->main, agent_handler);
  }

  static void clipboard_clear(GtkClipboard *clipboard, gpointer user_data)

_______________________________________________
Spice-devel mailing list
Spice-devel@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/spice-devel



[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]     [Monitors]