[virt-tools-list] [PATCH 06/12] Make virt_viewer_activate() a vfunc

Daniel P. Berrange berrange at redhat.com
Thu Jan 26 16:23:14 UTC 2012


On Tue, Dec 13, 2011 at 08:35:04PM +0100, Marc-André Lureau wrote:
> (so it can be overriden)
> ---
>  src/virt-viewer-app.c |   49 +++++++++++++++++++++++++++++++------------------
>  src/virt-viewer-app.h |    1 +
>  2 files changed, 32 insertions(+), 18 deletions(-)
> 
> diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c
> index 3bc69f7..97b53c2 100644
> --- a/src/virt-viewer-app.c
> +++ b/src/virt-viewer-app.c
> @@ -679,16 +679,11 @@ virt_viewer_app_channel_open(VirtViewerSession *session G_GNUC_UNUSED,
>  }
>  #endif
>  
> -int
> -virt_viewer_app_activate(VirtViewerApp *self)
> +static int
> +virt_viewer_app_default_activate(VirtViewerApp *self)
>  {
> -	g_return_val_if_fail(VIRT_VIEWER_IS_APP(self), -1);
>  	VirtViewerAppPrivate *priv = self->priv;
>  	int fd = -1;
> -	int ret = -1;
> -
> -	if (priv->active)
> -		goto cleanup;
>  
>  #if defined(HAVE_SOCKETPAIR) && defined(HAVE_FORK)
>  	if (priv->transport &&
> @@ -725,25 +720,42 @@ virt_viewer_app_activate(VirtViewerApp *self)
>  #endif
>  
>  	if (fd >= 0) {
> -		ret = virt_viewer_session_open_fd(VIRT_VIEWER_SESSION(priv->session), fd);
> -       } else if (priv->guri) {
> +		return virt_viewer_session_open_fd(VIRT_VIEWER_SESSION(priv->session), fd);
> +	} else if (priv->guri) {
>  		virt_viewer_app_trace(self, "Opening connection to display at %s\n", priv->guri);
> -		ret = virt_viewer_session_open_uri(VIRT_VIEWER_SESSION(priv->session), priv->guri);
> +		return virt_viewer_session_open_uri(VIRT_VIEWER_SESSION(priv->session), priv->guri);
>  	} else {
>  		virt_viewer_app_trace(self, "Opening direct TCP connection to display at %s:%s\n",
>  				      priv->ghost, priv->gport);
> -		ret = virt_viewer_session_open_host(VIRT_VIEWER_SESSION(priv->session),
> -						    priv->ghost, priv->gport);
> +		return virt_viewer_session_open_host(VIRT_VIEWER_SESSION(priv->session),
> +						     priv->ghost, priv->gport);
>  	}
>  
> -	virt_viewer_app_show_status(self, _("Connecting to graphic server"));
> +	return -1;
> +}
>  
> -	priv->connected = FALSE;
> -	priv->active = TRUE;
> -	priv->grabbed = FALSE;
> -	virt_viewer_app_update_title(self);
> +int
> +virt_viewer_app_activate(VirtViewerApp *self)
> +{
> +	VirtViewerAppPrivate *priv;
> +	int ret;
> +
> +	g_return_val_if_fail(VIRT_VIEWER_IS_APP(self), -1);
> +
> +	priv = self->priv;
> +	if (priv->active)
> +		return -1;
> +
> +	ret = VIRT_VIEWER_APP_GET_CLASS(self)->activate(self);
> +
> +	if (ret != -1) {
> +		virt_viewer_app_show_status(self, _("Connecting to graphic server"));
> +		priv->connected = FALSE;
> +		priv->active = TRUE;
> +		priv->grabbed = FALSE;
> +		virt_viewer_app_update_title(self);
> +	}
>  
> - cleanup:
>  	return ret;
>  }
>  
> @@ -1166,6 +1178,7 @@ virt_viewer_app_class_init (VirtViewerAppClass *klass)
>  
>  	klass->start = virt_viewer_app_default_start;
>  	klass->initial_connect = virt_viewer_app_default_initial_connect;
> +	klass->activate = virt_viewer_app_default_activate;
>  	klass->deactivated = virt_viewer_app_default_deactivated;
>  
>  	g_object_class_install_property(object_class,
> diff --git a/src/virt-viewer-app.h b/src/virt-viewer-app.h
> index 93b2b58..7c3f0a7 100644
> --- a/src/virt-viewer-app.h
> +++ b/src/virt-viewer-app.h
> @@ -53,6 +53,7 @@ typedef struct {
>          /*< private >*/
>          gboolean (*start) (VirtViewerApp *self);
>          int (*initial_connect) (VirtViewerApp *self);
> +        int (*activate) (VirtViewerApp *self);
>          void (*deactivated) (VirtViewerApp *self);
>  } VirtViewerAppClass;

ACK, since other equivalent methods are already overridable.

Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|




More information about the virt-tools-list mailing list