[Spice-devel] [PATCH spice-gtk 07/10] Add auto_usbredir property to spice-widget
Christophe Fergeau
cfergeau at redhat.com
Wed Aug 17 08:35:56 PDT 2011
Looks good to me,
Christophe
On Fri, Aug 12, 2011 at 04:50:34PM +0200, Hans de Goede wrote:
> ---
> gtk/spice-widget-priv.h | 1 +
> gtk/spice-widget.c | 36 ++++++++++++++++++++++++++++++++++++
> gtk/spicy.c | 8 +++++++-
> 3 files changed, 44 insertions(+), 1 deletions(-)
>
> diff --git a/gtk/spice-widget-priv.h b/gtk/spice-widget-priv.h
> index 3711aaa..5527ebc 100644
> --- a/gtk/spice-widget-priv.h
> +++ b/gtk/spice-widget-priv.h
> @@ -51,6 +51,7 @@ struct _SpiceDisplayPrivate {
> bool mouse_grab_enable;
> bool resize_guest_enable;
> bool auto_clipboard_enable;
> + bool auto_usbredir_enable;
>
> /* state */
> enum SpiceSurfaceFmt format;
> diff --git a/gtk/spice-widget.c b/gtk/spice-widget.c
> index 74fa4ce..c377489 100644
> --- a/gtk/spice-widget.c
> +++ b/gtk/spice-widget.c
> @@ -87,6 +87,7 @@ enum {
> PROP_MOUSE_GRAB,
> PROP_RESIZE_GUEST,
> PROP_AUTO_CLIPBOARD,
> + PROP_AUTO_USBREDIR,
> PROP_SCALING,
> };
>
> @@ -117,6 +118,7 @@ static void disconnect_display(SpiceDisplay *display);
> static void channel_new(SpiceSession *s, SpiceChannel *channel, gpointer data);
> static void channel_destroy(SpiceSession *s, SpiceChannel *channel, gpointer data);
> static void sync_keyboard_lock_modifiers(SpiceDisplay *display);
> +static void update_auto_usbredir(SpiceDisplay *display);
>
> /* ---------------------------------------------------------------- */
>
> @@ -141,6 +143,10 @@ static void spice_display_get_property(GObject *object,
> case PROP_AUTO_CLIPBOARD:
> g_value_set_boolean(value, d->auto_clipboard_enable);
> break;
> + case PROP_AUTO_USBREDIR:
> + g_value_set_boolean(value, d->auto_usbredir_enable);
> + update_auto_usbredir(display);
> + break;
> case PROP_SCALING:
> g_value_set_boolean(value, d->allow_scaling);
> break;
> @@ -195,6 +201,9 @@ static void spice_display_set_property(GObject *object,
> case PROP_AUTO_CLIPBOARD:
> d->auto_clipboard_enable = g_value_get_boolean(value);
> break;
> + case PROP_AUTO_USBREDIR:
> + d->auto_usbredir_enable = g_value_get_boolean(value);
> + break;
> default:
> G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
> break;
> @@ -589,6 +598,20 @@ static void recalc_geometry(GtkWidget *widget, gboolean set_display)
> }
> }
>
> +static void update_auto_usbredir(SpiceDisplay *display)
> +{
> + SpiceDisplayPrivate *d = SPICE_DISPLAY_GET_PRIVATE(display);
> + SpiceUsbDeviceManager *manager;
> + gboolean auto_connect = FALSE;
> +
> + if (d->auto_usbredir_enable && d->keyboard_have_focus)
> + auto_connect = TRUE;
> +
> + /* FIXME: allow specifying a different GMainContext then the default */
> + manager = spice_usb_device_manager_get(NULL /* FIXME */);
> + g_object_set(manager, "auto-connect", auto_connect, NULL);
> +}
> +
> /* ---------------------------------------------------------------- */
>
> #define CONVERT_0565_TO_0888(s) \
> @@ -866,6 +889,7 @@ static gboolean focus_in_event(GtkWidget *widget, GdkEventFocus *focus G_GNUC_UN
> sync_keyboard_lock_modifiers(display);
> d->keyboard_have_focus = true;
> try_keyboard_grab(display);
> + update_auto_usbredir(display);
> #ifdef WIN32
> focus_window = (HWND)gdk_win32_drawable_get_handle(GDK_DRAWABLE(widget->window));
> g_return_val_if_fail(focus_window != NULL, true);
> @@ -880,6 +904,7 @@ static gboolean focus_out_event(GtkWidget *widget, GdkEventFocus *focus G_GNUC_U
>
> SPICE_DEBUG("%s", __FUNCTION__);
> d->keyboard_have_focus = false;
> + update_auto_usbredir(display);
> return true;
> }
>
> @@ -1299,6 +1324,17 @@ static void spice_display_class_init(SpiceDisplayClass *klass)
> G_PARAM_STATIC_STRINGS));
>
> g_object_class_install_property
> + (gobject_class, PROP_AUTO_USBREDIR,
> + g_param_spec_boolean("auto-usbredir",
> + "Auto USB Redirection",
> + "Automatically redirect newly plugged in USB"
> + "Devices to the guest.",
> + TRUE,
> + G_PARAM_READWRITE |
> + G_PARAM_CONSTRUCT |
> + G_PARAM_STATIC_STRINGS));
> +
> + g_object_class_install_property
> (gobject_class, PROP_SCALING,
> g_param_spec_boolean("scaling", "Scaling",
> "Whether we should use scaling",
> diff --git a/gtk/spicy.c b/gtk/spicy.c
> index a954085..aec5f2a 100644
> --- a/gtk/spicy.c
> +++ b/gtk/spicy.c
> @@ -686,7 +686,8 @@ static const char *spice_properties[] = {
> "grab-mouse",
> "resize-guest",
> "scaling",
> - "auto-clipboard"
> + "auto-clipboard",
> + "auto-usbredir",
> };
>
> static const GtkToggleActionEntry tentries[] = {
> @@ -711,6 +712,10 @@ static const GtkToggleActionEntry tentries[] = {
> .label = N_("Automagic clipboard sharing between host and guest"),
> .callback = G_CALLBACK(menu_cb_bool_prop),
> },{
> + .name = "auto-usbredir",
> + .label = N_("Auto redirect newly plugged in USB devices"),
> + .callback = G_CALLBACK(menu_cb_bool_prop),
> + },{
> .name = "Statusbar",
> .label = N_("Statusbar"),
> .callback = G_CALLBACK(menu_cb_statusbar),
> @@ -752,6 +757,7 @@ static char ui_xml[] =
> " <menuitem action='resize-guest'/>\n"
> " <menuitem action='scaling'/>\n"
> " <menuitem action='auto-clipboard'/>\n"
> +" <menuitem action='auto-usbredir'/>\n"
> " </menu>\n"
> " <menu action='HelpMenu'>\n"
> " <menuitem action='About'/>\n"
> --
> 1.7.5.1
>
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/spice-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/spice-devel/attachments/20110817/9de57db0/attachment.pgp>
More information about the Spice-devel
mailing list