Make sure that all timeouts in HildonBanner are removed
[hildon] / hildon / hildon-banner.c
index 9780b18..54fab3c 100644 (file)
@@ -198,6 +198,9 @@ hildon_banner_get_instance_for_widget           (GtkWidget *widget,
 static void
 hildon_banner_set_override_flag                 (HildonBanner *banner);
 
+static void
+reshow_banner                                   (HildonBanner *banner);
+
 static GtkWidget*
 hildon_banner_real_show_information             (GtkWidget *widget,
                                                  const gchar *text,
@@ -294,8 +297,6 @@ hildon_banner_timeout                           (gpointer data)
     GtkWidget *widget;
     gboolean continue_timeout = FALSE;
 
-    GDK_THREADS_ENTER ();
-
     g_assert (HILDON_IS_BANNER (data));
 
     widget = GTK_WIDGET (data);
@@ -305,14 +306,15 @@ hildon_banner_timeout                           (gpointer data)
 
     if (! continue_timeout) {
         HildonBannerPrivate *priv = HILDON_BANNER_GET_PRIVATE (data);
-        priv->timeout_id = 0;
+        if (priv->timeout_id) {
+            g_source_remove (priv->timeout_id);
+            priv->timeout_id = 0;
+        }
         gtk_widget_destroy (widget);
     }
 
     g_object_unref (widget);
 
-    GDK_THREADS_LEAVE ();
-
     return continue_timeout;
 }
 
@@ -338,7 +340,7 @@ hildon_banner_ensure_timeout                    (HildonBanner *self)
     g_assert (priv);
 
     if (priv->timeout_id == 0 && priv->is_timed && priv->timeout > 0)
-        priv->timeout_id = g_timeout_add (priv->timeout, 
+        priv->timeout_id = gdk_threads_add_timeout (priv->timeout,
                 hildon_banner_timeout, self);
 }
 
@@ -568,6 +570,8 @@ hildon_banner_map                               (GtkWidget *widget)
         /* Make the banner non-temporary _after_ mapping it, to avoid
          * being closed by other non-temporary windows */
         gtk_window_set_is_temporary (GTK_WINDOW (widget), FALSE);
+
+        gtk_window_move (GTK_WINDOW (widget), 0, HILDON_WINDOW_TITLEBAR_HEIGHT);
     }
 }
 #endif
@@ -675,9 +679,9 @@ screen_size_changed                            (GdkScreen *screen,
                                                 GtkWindow *banner)
 
 {
-    hildon_banner_bind_style (HILDON_BANNER (banner));
-    gtk_window_reshow_with_initial_size (banner);
-    force_to_wrap_truncated (HILDON_BANNER (banner));
+    HildonBanner *hbanner = HILDON_BANNER (banner);
+    hildon_banner_bind_style (hbanner);
+    reshow_banner (hbanner);
 }
 
 static void