diff --git a/gtk/gtkstatusbar.c b/gtk/gtkstatusbar.c index 6483f321f9..f3518c5de9 100644 --- a/gtk/gtkstatusbar.c +++ b/gtk/gtkstatusbar.c @@ -529,7 +529,10 @@ gtk_statusbar_remove_all (GtkStatusbar *statusbar, if (prev == NULL) prev = priv->messages; - list = prev->next; + if (prev) + list = prev->next; + else + list = NULL; } else { diff --git a/gtk/tests/testing.c b/gtk/tests/testing.c index bc002f6eef..07cd8d45c2 100644 --- a/gtk/tests/testing.c +++ b/gtk/tests/testing.c @@ -232,17 +232,38 @@ test_spin_button_arrows (void) g_assert (oldval == 0); } +static void +test_statusbar_remove_all (void) +{ + GtkWidget *statusbar; + + g_test_bug ("640487"); + + statusbar = gtk_statusbar_new (); + g_object_ref_sink (statusbar); + + gtk_statusbar_push (GTK_STATUSBAR (statusbar), 1, "bla"); + gtk_statusbar_push (GTK_STATUSBAR (statusbar), 1, "bla"); + gtk_statusbar_remove_all (GTK_STATUSBAR (statusbar), 1); + + g_object_unref (statusbar); +} + int main (int argc, char *argv[]) { gtk_test_init (&argc, &argv); + g_test_bug_base ("http://bugzilla.gnome.org/"); gtk_test_register_all_types(); + + g_test_add_func ("/tests/statusbar-remove-all", test_statusbar_remove_all); g_test_add_func ("/ui-tests/text-access", test_text_access); g_test_add_func ("/ui-tests/button-clicks", test_button_clicks); g_test_add_func ("/ui-tests/keys-events", test_button_keys); g_test_add_func ("/ui-tests/slider-ranges", test_slider_ranges); g_test_add_func ("/ui-tests/xserver-sync", test_xserver_sync); g_test_add_func ("/ui-tests/spin-button-arrows", test_spin_button_arrows); + return g_test_run(); }