[libgda] GdaBrowser: improved busy connection status



commit d7091f37c6221b4cbbba4b75e787e8a8e535dfb1
Author: Vivien Malerba <malerba gnome-db org>
Date:   Sat Oct 17 12:25:31 2009 +0200

    GdaBrowser: improved busy connection status

 tools/browser/browser-connection-priv.h    |    5 ++++
 tools/browser/browser-connection.c         |   37 ++++++++++++++++++----------
 tools/browser/browser-connection.h         |    3 --
 tools/browser/browser-virtual-connection.c |   27 +-------------------
 4 files changed, 31 insertions(+), 41 deletions(-)
---
diff --git a/tools/browser/browser-connection-priv.h b/tools/browser/browser-connection-priv.h
index 27c5c38..f7b741a 100644
--- a/tools/browser/browser-connection-priv.h
+++ b/tools/browser/browser-connection-priv.h
@@ -40,6 +40,11 @@ struct _BrowserConnectionPrivate {
 	GdaMetaStruct *mstruct; /* public GdaMetaStruct: once it has been created and is no more modified */
 
 	BrowserFavorites *bfav;
+
+	gboolean  busy;
+	gchar    *busy_reason;
 };
 
+void browser_connection_set_busy_state (BrowserConnection *bcnc, gboolean busy, const gchar *busy_reason);
+
 #endif
diff --git a/tools/browser/browser-connection.c b/tools/browser/browser-connection.c
index ae1ae9b..e44fef8 100644
--- a/tools/browser/browser-connection.c
+++ b/tools/browser/browser-connection.c
@@ -205,13 +205,11 @@ browser_connection_class_init (BrowserConnectionClass *klass)
                               g_cclosure_marshal_VOID__VOID, G_TYPE_NONE,
                               0);
 
-	klass->busy = NULL;
+	klass->busy = browser_connection_set_busy_state;
 	klass->meta_changed = NULL;
 	klass->favorites_changed = NULL;
 	klass->transaction_status_changed = NULL;
 
-	klass->is_busy = NULL;
-
 	/* Properties */
         object_class->set_property = browser_connection_set_property;
         object_class->get_property = browser_connection_get_property;
@@ -454,6 +452,7 @@ browser_connection_dispose (GObject *object)
 							      G_CALLBACK (fav_changed_cb), bcnc);
 			g_object_unref (bcnc->priv->bfav);
 		}
+		browser_connection_set_busy_state (bcnc, FALSE, NULL);
 
 		g_free (bcnc->priv);
 		bcnc->priv = NULL;
@@ -678,16 +677,11 @@ browser_connection_is_busy (BrowserConnection *bcnc, gchar **out_reason)
 	if (out_reason)
 		*out_reason = NULL;
 	g_return_val_if_fail (BROWSER_IS_CONNECTION (bcnc), FALSE);
-	if (bcnc->priv->wrapper_jobs) {
-		WrapperJob *wj = (WrapperJob*) bcnc->priv->wrapper_jobs->data;
-		if (out_reason && wj->reason)
-			*out_reason = g_strdup (wj->reason);
-		return TRUE;
-	}
-	else if (BROWSER_CONNECTION_CLASS (G_OBJECT_GET_CLASS (bcnc))->is_busy)
-		return BROWSER_CONNECTION_CLASS (G_OBJECT_GET_CLASS (bcnc))->is_busy (bcnc, out_reason);
-	else
-		return FALSE;
+
+	if (out_reason && bcnc->priv->busy_reason)
+		*out_reason = g_strdup (bcnc->priv->busy_reason);
+
+	return bcnc->priv->busy;
 }
 
 /**
@@ -1022,3 +1016,20 @@ browser_connection_execution_get_result (BrowserConnection *bcnc, guint exec_id,
 	g_hash_table_remove (bcnc->priv->executed_statements, &id);
 	return retval;
 }
+
+
+/*
+ * DOES NOT emit any signal
+ */
+void
+browser_connection_set_busy_state (BrowserConnection *bcnc, gboolean busy, const gchar *busy_reason)
+{
+	if (bcnc->priv->busy_reason) {
+		g_free (bcnc->priv->busy_reason);
+		bcnc->priv->busy_reason = NULL;
+	}
+
+	bcnc->priv->busy = busy;
+	if (busy_reason)
+		bcnc->priv->busy_reason = g_strdup (busy_reason);
+}
diff --git a/tools/browser/browser-connection.h b/tools/browser/browser-connection.h
index 4ad0737..7a38d03 100644
--- a/tools/browser/browser-connection.h
+++ b/tools/browser/browser-connection.h
@@ -52,9 +52,6 @@ struct _BrowserConnectionClass
 	void                    (*meta_changed) (BrowserConnection *bcnc, GdaMetaStruct *mstruct);
 	void                    (*favorites_changed) (BrowserConnection *bcnc);
 	void                    (*transaction_status_changed) (BrowserConnection *bcnc);
-
-	/* virtual methods */
-	gboolean                (*is_busy) (BrowserConnection *bcnc,  gchar **out_reason);
 };
 
 GType               browser_connection_get_type               (void) G_GNUC_CONST;
diff --git a/tools/browser/browser-virtual-connection.c b/tools/browser/browser-virtual-connection.c
index d3e728e..18d1466 100644
--- a/tools/browser/browser-virtual-connection.c
+++ b/tools/browser/browser-virtual-connection.c
@@ -88,30 +88,6 @@ source_cnc_busy_cb (BrowserConnection *bcnc, gboolean is_busy, const gchar *reas
 			       is_busy ? _("Bound connection is used") : NULL);
 }
 
-static gboolean
-is_busy (BrowserConnection *bcnc, gchar **out_reason)
-{
-	GSList *list;
-	if (out_reason)
-		*out_reason = NULL;
-
-	if (! BROWSER_VIRTUAL_CONNECTION (bcnc)->priv->specs)
-		return FALSE;
-
-	for (list = BROWSER_VIRTUAL_CONNECTION (bcnc)->priv->specs->parts; list; list = list->next) {
-		BrowserVirtualConnectionPart *part;
-		part = (BrowserVirtualConnectionPart*) list->data;
-		if (part->part_type == BROWSER_VIRTUAL_CONNECTION_PART_CNC) {
-			BrowserVirtualConnectionCnc *cnc;
-			cnc = &(part->u.cnc);
-			if (browser_connection_is_busy (cnc->source_cnc, out_reason))
-				return TRUE;
-		}
-	}
-
-	return FALSE;
-}
-
 static void
 m_busy (BrowserConnection *bcnc, gboolean is_busy, const gchar *reason)
 {
@@ -138,6 +114,8 @@ m_busy (BrowserConnection *bcnc, gboolean is_busy, const gchar *reason)
 							   bcnc);			
 		}
 	}
+
+	BROWSER_CONNECTION_CLASS (parent_class)->busy (bcnc, is_busy, reason);
 }
 
 static void
@@ -147,7 +125,6 @@ browser_virtual_connection_class_init (BrowserVirtualConnectionClass * klass)
 	parent_class = g_type_class_peek_parent (klass);
 
 	BROWSER_CONNECTION_CLASS (klass)->busy = m_busy;
-	BROWSER_CONNECTION_CLASS (klass)->is_busy = is_busy;
 
 	/* Properties */
         object_class->set_property = browser_virtual_connection_set_property;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]