[libgda] GdaBrowser: improved busy connection status
- From: Vivien Malerba <vivien src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [libgda] GdaBrowser: improved busy connection status
- Date: Mon, 19 Oct 2009 18:42:39 +0000 (UTC)
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]