[virt-tools-list] [PATCH virt-viewer 18/25] Add VirtViewerDisplay::selectable property

Christophe Fergeau cfergeau at redhat.com
Wed Jul 18 08:54:54 UTC 2012


On Tue, Jul 17, 2012 at 09:25:00PM +0200, Marc-André Lureau wrote:
> This property will be set when the display can be selected to be
> "enabled" and shown (this can involve creating/connecting an
> additional guest monitor, and may need guest agent cooperation for
> example).
> ---
>  src/virt-viewer-display-spice.c |   16 ++++++++++++++++
>  src/virt-viewer-display.c       |   23 +++++++++++++++++++++++
>  src/virt-viewer-display.h       |    2 ++
>  3 files changed, 41 insertions(+)
> 
> diff --git a/src/virt-viewer-display-spice.c b/src/virt-viewer-display-spice.c
> index d06e5cf..81eb16f 100644
> --- a/src/virt-viewer-display-spice.c
> +++ b/src/virt-viewer-display-spice.c
> @@ -47,6 +47,7 @@ static void virt_viewer_display_spice_send_keys(VirtViewerDisplay *display,
>  static GdkPixbuf *virt_viewer_display_spice_get_pixbuf(VirtViewerDisplay *display);
>  static void virt_viewer_display_spice_release_cursor(VirtViewerDisplay *display);
>  static void virt_viewer_display_spice_close(VirtViewerDisplay *display G_GNUC_UNUSED);
> +static gboolean virt_viewer_display_spice_selectable(VirtViewerDisplay *display);
>  
>  static void
>  virt_viewer_display_spice_finalize(GObject *obj)
> @@ -70,6 +71,7 @@ virt_viewer_display_spice_class_init(VirtViewerDisplaySpiceClass *klass)
>      dclass->get_pixbuf = virt_viewer_display_spice_get_pixbuf;
>      dclass->release_cursor = virt_viewer_display_spice_release_cursor;
>      dclass->close = virt_viewer_display_spice_close;
> +    dclass->selectable = virt_viewer_display_spice_selectable;
>  
>      g_type_class_add_private(klass, sizeof(VirtViewerDisplaySpicePrivate));
>  }
> @@ -279,6 +281,20 @@ virt_viewer_display_spice_close(VirtViewerDisplay *display G_GNUC_UNUSED)
>  {
>  }
>  
> +static gboolean
> +virt_viewer_display_spice_selectable(VirtViewerDisplay *self)
> +{
> +    gboolean agent_connected;
> +    SpiceMainChannel *mainc;
> +
> +    mainc = get_main(self);
> +    g_object_get(mainc,
> +                 "agent-connected", &agent_connected,
> +                 NULL);
> +
> +    return agent_connected;

Can all agents (older agents, windows agent, ...) handle multiple displays
or is a more specific check needed?


> +}
> +
>  
>  /*
>   * Local variables:
> diff --git a/src/virt-viewer-display.c b/src/virt-viewer-display.c
> index 18fed19..8d13733 100644
> --- a/src/virt-viewer-display.c
> +++ b/src/virt-viewer-display.c
> @@ -80,6 +80,7 @@ enum {
>      PROP_ZOOM_LEVEL,
>      PROP_SHOW_HINT,
>      PROP_SESSION,
> +    PROP_SELECTABLE,
>  };
>  
>  static void
> @@ -167,6 +168,13 @@ virt_viewer_display_class_init(VirtViewerDisplayClass *class)
>                                                          G_PARAM_READWRITE |
>                                                          G_PARAM_CONSTRUCT_ONLY));
>  
> +    g_object_class_install_property(object_class,
> +                                    PROP_SELECTABLE,
> +                                    g_param_spec_boolean("selectable",
> +                                                         "Selectable",
> +                                                         "Selectable",
> +                                                         FALSE,
> +                                                         G_PARAM_READABLE));
>  
>      g_signal_new("display-pointer-grab",
>                   G_OBJECT_CLASS_TYPE(object_class),
> @@ -302,6 +310,9 @@ virt_viewer_display_get_property(GObject *object,
>      case PROP_SESSION:
>          g_value_set_object(value, virt_viewer_display_get_session(display));
>          break;
> +    case PROP_SELECTABLE:
> +        g_value_set_boolean(value, virt_viewer_display_get_selectable(display));
> +        break;
>  
>      default:
>          G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
> @@ -601,6 +612,18 @@ void virt_viewer_display_release_cursor(VirtViewerDisplay *self)
>      klass->release_cursor(self);
>  }
>  
> +gboolean virt_viewer_display_get_selectable(VirtViewerDisplay *self)
> +{
> +    VirtViewerDisplayClass *klass;
> +
> +    g_return_val_if_fail(VIRT_VIEWER_IS_DISPLAY(self), FALSE);
> +
> +    klass = VIRT_VIEWER_DISPLAY_GET_CLASS(self);
> +    if (klass->selectable)
> +        return klass->selectable(self);
> +
> +    return TRUE;

Isn't it better to default to FALSE when the method is not overridden?


Christophe

> +}
>  
>  void virt_viewer_display_close(VirtViewerDisplay *self)
>  {
> diff --git a/src/virt-viewer-display.h b/src/virt-viewer-display.h
> index 89b4817..4247570 100644
> --- a/src/virt-viewer-display.h
> +++ b/src/virt-viewer-display.h
> @@ -77,6 +77,7 @@ struct _VirtViewerDisplayClass {
>      void (*release_cursor)(VirtViewerDisplay *display);
>  
>      void (*close)(VirtViewerDisplay *display);
> +    gboolean (*selectable)(VirtViewerDisplay *display);
>  
>      /* signals */
>      void (*display_pointer_grab)(VirtViewerDisplay *display);
> @@ -118,6 +119,7 @@ void virt_viewer_display_release_cursor(VirtViewerDisplay *display);
>  
>  void virt_viewer_display_close(VirtViewerDisplay *display);
>  void virt_viewer_display_set_enabled(VirtViewerDisplay *display, gboolean enabled);
> +gboolean virt_viewer_display_get_selectable(VirtViewerDisplay *display);
>  
>  G_END_DECLS
>  
> -- 
> 1.7.10.4
> 
> _______________________________________________
> virt-tools-list mailing list
> virt-tools-list at redhat.com
> https://www.redhat.com/mailman/listinfo/virt-tools-list
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/virt-tools-list/attachments/20120718/e9066a21/attachment.sig>


More information about the virt-tools-list mailing list