diff options
author | Garrett Regier <alias301@gmail.com> | 2010-05-15 13:58:30 -0700 |
---|---|---|
committer | Christian Dywan <christian@twotoasts.de> | 2010-06-02 17:50:28 +0200 |
commit | 2e4a066cd078f3f930e8893d40c4753a6a211735 (patch) | |
tree | 30b919b2a29afc617e65d48d164f2ccf74665a72 /gtk/gtkstatusbar.c | |
parent | 8e142788a5e1ee0575d2f9963038a29a903d687e (diff) | |
download | gtk+-2e4a066cd078f3f930e8893d40c4753a6a211735.tar.gz |
Bug 611709 - Add gtk_statusbar_remove_all
Diffstat (limited to 'gtk/gtkstatusbar.c')
-rw-r--r-- | gtk/gtkstatusbar.c | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/gtk/gtkstatusbar.c b/gtk/gtkstatusbar.c index ff7bc0fa0d..81d28d02c8 100644 --- a/gtk/gtkstatusbar.c +++ b/gtk/gtkstatusbar.c @@ -463,6 +463,72 @@ gtk_statusbar_remove (GtkStatusbar *statusbar, } /** + * gtk_statusbar_remove_all: + * @statusbar: a #GtkStatusBar + * @context_id: a context identifier + * + * Forces the removal of all messages from a statusbar's + * stack with the exact @context_id. + * + * Since: 2.22 + */ +void +gtk_statusbar_remove_all (GtkStatusbar *statusbar, + guint context_id) +{ + GtkStatusbarMsg *msg; + GSList *prev, *list; + + g_return_if_fail (GTK_IS_STATUSBAR (statusbar)); + + if (statusbar->messages == NULL) + return; + + msg = statusbar->messages->data; + + /* care about signal emission if the topmost item is removed */ + if (msg->context_id == context_id) + { + gtk_statusbar_pop (statusbar, context_id); + + prev = NULL; + list = statusbar->messages; + } + else + { + prev = statusbar->messages; + list = prev->next; + } + + while (list != NULL) + { + msg = list->data; + + if (msg->context_id == context_id) + { + if (prev == NULL) + statusbar->messages = list->next; + else + prev->next = list->next; + + g_free (msg->text); + g_slice_free (GtkStatusbarMsg, msg); + g_slist_free_1 (list); + + if (prev == NULL) + prev = statusbar->messages; + + list = prev->next; + } + else + { + prev = list; + list = prev->next; + } + } +} + +/** * gtk_statusbar_set_has_resize_grip: * @statusbar: a #GtkStatusBar * @setting: %TRUE to have a resize grip |