[libgda] GdaBrowser: improved status bar messages handling
- From: Vivien Malerba <vivien src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [libgda] GdaBrowser: improved status bar messages handling
- Date: Thu, 24 Sep 2009 18:45:09 +0000 (UTC)
commit f9d134ae296e2c998f36c41ad3d434a94b73f144
Author: Vivien Malerba <malerba gnome-db org>
Date: Tue Sep 22 21:52:51 2009 +0200
GdaBrowser: improved status bar messages handling
tools/browser/browser-window.c | 38 +++++++++++++++++++++++++++++++++++---
tools/browser/browser-window.h | 3 ++-
2 files changed, 37 insertions(+), 4 deletions(-)
---
diff --git a/tools/browser/browser-window.c b/tools/browser/browser-window.c
index 29e54f2..d41f26d 100644
--- a/tools/browser/browser-window.c
+++ b/tools/browser/browser-window.c
@@ -855,27 +855,59 @@ perspective_data_free (PerspectiveData *pers)
g_free (pers);
}
+typedef struct {
+ BrowserWindow *bwin;
+ guint cid; /* statusbar context id */
+ guint msgid; /* statusbar message id */
+} StatusData;
+
+static gboolean
+status_auto_pop_timeout (StatusData *sd)
+{
+ if (sd->bwin) {
+ g_object_remove_weak_pointer (G_OBJECT (sd->bwin), (gpointer*) &(sd->bwin));
+ gtk_statusbar_remove (GTK_STATUSBAR (sd->bwin->priv->statusbar), sd->cid, sd->msgid);
+ }
+ g_free (sd);
+
+ return FALSE; /* remove source */
+}
+
/**
* browser_window_push_status
* @bwin: a #BrowserWindow
* @context: textual description of what context the new message is being used in
* @text: textual message
+ * @auto_clear: %TRUE if the message has to disappear after a while
*
* Pushes a new message onto @bwin's statusbar's stack.
*
- * Returns: the message ID, see gtk_statusbar_push().
+ * Returns: the message ID, see gtk_statusbar_push(), or %0 if @auto_clear is %TRUE
*/
guint
-browser_window_push_status (BrowserWindow *bwin, const gchar *context, const gchar *text)
+browser_window_push_status (BrowserWindow *bwin, const gchar *context, const gchar *text, gboolean auto_clear)
{
guint cid;
+ guint retval;
g_return_val_if_fail (BROWSER_IS_WINDOW (bwin), 0);
g_return_val_if_fail (context, 0);
g_return_val_if_fail (text, 0);
cid = gtk_statusbar_get_context_id (GTK_STATUSBAR (bwin->priv->statusbar), context);
- return gtk_statusbar_push (GTK_STATUSBAR (bwin->priv->statusbar), cid, text);
+ retval = gtk_statusbar_push (GTK_STATUSBAR (bwin->priv->statusbar), cid, text);
+ if (auto_clear) {
+ StatusData *sd;
+ sd = g_new0 (StatusData, 1);
+ sd->bwin = bwin;
+ g_object_add_weak_pointer (G_OBJECT (sd->bwin), (gpointer*) &(sd->bwin));
+ sd->cid = cid;
+ sd->msgid = retval;
+ g_timeout_add_seconds (5, (GSourceFunc) status_auto_pop_timeout, sd);
+ return 0;
+ }
+ else
+ return retval;
}
/**
diff --git a/tools/browser/browser-window.h b/tools/browser/browser-window.h
index 73d8491..d3e9a20 100644
--- a/tools/browser/browser-window.h
+++ b/tools/browser/browser-window.h
@@ -52,7 +52,8 @@ GType browser_window_get_type (void) G_GNUC_CONST;
BrowserWindow *browser_window_new (BrowserConnection *bcnc, BrowserPerspectiveFactory *factory);
BrowserConnection *browser_window_get_connection (BrowserWindow *bwin);
-guint browser_window_push_status (BrowserWindow *bwin, const gchar *context, const gchar *text);
+guint browser_window_push_status (BrowserWindow *bwin, const gchar *context,
+ const gchar *text, gboolean auto_clear);
void browser_window_pop_status (BrowserWindow *bwin, const gchar *context);
void browser_window_customize_perspective_ui (BrowserWindow *bwin, BrowserPerspective *bpers,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]