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@xxxxxxxxxx > https://www.redhat.com/mailman/listinfo/virt-tools-list
Attachment:
pgpxM3fhFTFhr.pgp
Description: PGP signature