This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch master in repository libx2goclient. commit 6c8a91e84f73458c08df9b7989150034fadb78e3 Author: Mihai Moldovan <ionic@ionic.de> Date: Fri Oct 30 06:54:37 2020 +0100 src/x2goclient-network.{c,h}: add basic disconnect support. Mirrors the connect feature. Needs further implementation in more concrete classes. --- src/x2goclient-network.c | 36 ++++++++++++++++++++++++++++++++++++ src/x2goclient-network.h | 2 ++ 2 files changed, 38 insertions(+) diff --git a/src/x2goclient-network.c b/src/x2goclient-network.c index 6ba5b24..d46f28f 100644 --- a/src/x2goclient-network.c +++ b/src/x2goclient-network.c @@ -56,6 +56,7 @@ typedef struct X2GoClientNetworkPrivate_ { gchar *session_path; /* Will eventually be replaced with a session object, probably. */ gboolean connected; gboolean (*connect_func) (X2GoClientNetwork * const self, GError ** const gerr); + gboolean (*disconnect_func) (X2GoClientNetwork * const self, GError ** const gerr); } X2GoClientNetworkPrivate; G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (X2GoClientNetwork, x2goclient_network, G_TYPE_OBJECT); @@ -75,6 +76,7 @@ enum { X2GO_NET_PROP_SESSION_PATH, X2GO_NET_PROP_CONNECTED, X2GO_NET_PROP_CONN_FUNC, + X2GO_NET_PROP_DISCONN_FUNC, X2GO_NET_N_PROPERTIES }; @@ -136,6 +138,11 @@ static void x2goclient_network_class_init (X2GoClientNetworkClass * const klass) "This is supposed to be immutable."), G_PARAM_STATIC_STRINGS | G_PARAM_READABLE); + net_obj_properties[X2GO_NET_PROP_DISCONN_FUNC] = g_param_spec_pointer ("disconnect-function", _("Pointer to this instance's disconnect function"), + _("A pointer to the instance's disconnect function. " + "This is supposed to be immutable."), + G_PARAM_STATIC_STRINGS | G_PARAM_READABLE); + g_object_class_install_properties (object_class, X2GO_NET_N_PROPERTIES, net_obj_properties); } @@ -147,6 +154,7 @@ static void x2goclient_network_init (X2GoClientNetwork * const self) { priv->session_path = NULL; priv->connected = FALSE; priv->connect_func = &x2goclient_network_connect; + priv->disconnect_func = &x2goclient_network_disconnect; } static void x2goclient_network_dispose (GObject * const object) { @@ -169,6 +177,7 @@ static void x2goclient_network_finalize (GObject * const object) { priv->session_path = NULL; priv->connect_func = NULL; + priv->disconnect_func = NULL; (G_OBJECT_CLASS (x2goclient_network_parent_class))->finalize (object); } @@ -208,6 +217,27 @@ gboolean x2goclient_network_connect (X2GoClientNetwork * const self, GError ** c return (ret); } +gboolean x2goclient_network_disconnect (X2GoClientNetwork * const self, GError ** const gerr) { + gboolean ret = FALSE; + + X2GoClientNetworkClass *class = X2GOCLIENT_NETWORK_GET_CLASS (self); + X2GoClientNetworkPrivate *priv = x2goclient_network_get_instance_private (self); + + g_return_val_if_fail (X2GOCLIENT_IS_NETWORK (self), ret); + g_return_val_if_fail (((NULL == gerr) || (NULL == *gerr)), ret); + g_return_val_if_fail (class->disconnect, ret); + + ret = (!(priv->connected)); + + if (!(ret)) { + ret = class->disconnect (self, gerr); + + priv->connected = (!(ret)); + } + + return (ret); +} + static void x2goclient_network_set_property (GObject * const object, guint prop_id, const GValue * const value, GParamSpec * const param_spec) { X2GoClientNetwork *self = X2GOCLIENT_NETWORK (object); X2GoClientNetworkPrivate *priv = x2goclient_network_get_instance_private (self); @@ -239,6 +269,9 @@ static void x2goclient_network_set_property (GObject * const object, guint prop_ case (X2GO_NET_PROP_CONN_FUNC): priv->connect_func = g_value_get_pointer (value); break; + case (X2GO_NET_PROP_DISCONN_FUNC): + priv->disconnect_func = g_value_get_pointer (value); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, param_spec); break; @@ -268,6 +301,9 @@ static void x2goclient_network_get_property (GObject * const object, const guint case (X2GO_NET_PROP_CONN_FUNC): g_value_set_pointer (value, priv->connect_func); break; + case (X2GO_NET_PROP_DISCONN_FUNC): + g_value_set_pointer (value, priv->disconnect_func); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, param_spec); break; diff --git a/src/x2goclient-network.h b/src/x2goclient-network.h index cf96c35..54cd44d 100644 --- a/src/x2goclient-network.h +++ b/src/x2goclient-network.h @@ -56,6 +56,7 @@ struct _X2GoClientNetworkClass { GObjectClass parent_class; gboolean (*connect) (X2GoClientNetwork * const self, GError ** const gerr); + gboolean (*disconnect) (X2GoClientNetwork * const self, GError ** const gerr); /*< private >*/ GSocketAddress* (*parse_sockspec) (X2GoClientNetwork * const self, const GString * const sockspec); @@ -65,6 +66,7 @@ struct _X2GoClientNetworkClass { }; gboolean x2goclient_network_connect (X2GoClientNetwork * const self, GError ** const gerr); +gboolean x2goclient_network_disconnect (X2GoClientNetwork * const self, GError ** const gerr); G_END_DECLS -- Alioth's /home/x2go-admin/maintenancescripts/git/hooks/post-receive-email on /srv/git/code.x2go.org/libx2goclient.git