Redisplay HildonBanner if the screen is rotated
authorAlberto Garcia <agarcia@igalia.com>
Wed, 20 May 2009 18:09:51 +0000 (20:09 +0200)
committerAlberto Garcia <agarcia@igalia.com>
Wed, 20 May 2009 18:11:19 +0000 (20:11 +0200)
* hildon/hildon-banner.c
(hildon_banner_realize, +hildon_banner_unrealize)
(+screen_size_changed, hildon_banner_class_init):
Redisplay the banner if the screen is rotated.

Fixes: NB#117870 ('Disconnect charger...' info banner is truncated
on transition from landscape to portrait)

ChangeLog
hildon/hildon-banner.c

index a82de1c..0dcacf2 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2009-05-20  Alberto Garcia  <agarcia@igalia.com>
+
+       * hildon/hildon-banner.c
+       (hildon_banner_realize, +hildon_banner_unrealize)
+       (+screen_size_changed, hildon_banner_class_init):
+       Redisplay the banner if the screen is rotated.
+
+       Fixes: NB#117870 ('Disconnect charger...' info banner is truncated
+       on transition from landscape to portrait)
+
 2009-05-20  Alejandro Pinheiro  <apinheiro@igalia.com>
 
        * hildon/hildon-banner.[ch]:
index 47f0915..5ff9ccf 100644 (file)
@@ -674,9 +674,18 @@ hildon_banner_check_position                    (GtkWidget *widget)
 }
 
 static void
+screen_size_changed                            (GdkScreen *screen,
+                                                GtkWindow *banner)
+
+{
+    gtk_window_reshow_with_initial_size (banner);
+}
+
+static void
 hildon_banner_realize                           (GtkWidget *widget)
 {
     GdkWindow *gdkwin;
+    GdkScreen *screen;
     GdkAtom atom;
     guint32 portrait = 1;
     const gchar *notification_type = "_HILDON_NOTIFICATION_TYPE_BANNER";
@@ -710,6 +719,18 @@ hildon_banner_realize                           (GtkWidget *widget)
       hildon_banner_set_override_flag (HILDON_BANNER (widget));
         priv->overrides_dnd = TRUE;
     }
+
+    screen = gtk_widget_get_screen (widget);
+    g_signal_connect (screen, "size-changed", G_CALLBACK (screen_size_changed), widget);
+}
+
+static void
+hildon_banner_unrealize                         (GtkWidget *widget)
+{
+    GdkScreen *screen = gtk_widget_get_screen (widget);
+    g_signal_handlers_disconnect_by_func (screen, G_CALLBACK (screen_size_changed), widget);
+
+    GTK_WIDGET_CLASS (hildon_banner_parent_class)->unrealize (widget);
 }
 
 static void 
@@ -733,6 +754,7 @@ hildon_banner_class_init                        (HildonBannerClass *klass)
     GTK_OBJECT_CLASS (klass)->destroy = hildon_banner_destroy;
     widget_class->map_event = hildon_banner_map_event;
     widget_class->realize = hildon_banner_realize;
+    widget_class->unrealize = hildon_banner_unrealize;
     widget_class->button_press_event = hildon_banner_button_press_event;
 #if defined(MAEMO_GTK)
     widget_class->map = hildon_banner_map;