2009-04-01 Alberto Garcia <agarcia@igalia.com>
authorAlberto Garcia <agarcia@igalia.com>
Wed, 1 Apr 2009 10:55:46 +0000 (10:55 +0000)
committerAlberto Garcia <agarcia@igalia.com>
Wed, 1 Apr 2009 10:55:46 +0000 (10:55 +0000)
* src/hildon-app-menu-private.h
* src/hildon-app-menu.c
(hildon_app_menu_class_init):
Bring back the 'external-border' style property
(hildon_app_menu_class_init, hildon_app_menu_init)
(hildon_app_menu_apply_style, hildon_app_menu_size_request):
Set a fixed width-request for the menu, independent of the number
of items.

Fixes: NB#94957 (Smoothly opened application menu)

ChangeLog
src/hildon-app-menu-private.h
src/hildon-app-menu.c

index 7c2d7f2..a259b56 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2009-04-01  Alberto Garcia  <agarcia@igalia.com>
+
+       * src/hildon-app-menu-private.h
+       * src/hildon-app-menu.c
+       (hildon_app_menu_class_init):
+       Bring back the 'external-border' style property
+       (hildon_app_menu_class_init, hildon_app_menu_init)
+       (hildon_app_menu_apply_style, hildon_app_menu_size_request):
+       Set a fixed width-request for the menu, independent of the number
+       of items.
+
+       Fixes: NB#94957 (Smoothly opened application menu)
+
 2009-03-30  Alberto Garcia  <agarcia@igalia.com>
 
        * src/hildon-defines.h: Define HILDON_WINDOW_TITLEBAR_HEIGHT
index 2312632..dc9ba07 100644 (file)
@@ -36,6 +36,7 @@ struct                                          _HildonAppMenuPrivate
     GList *buttons;
     GList *filters;
     guint columns;
+    gint width_request;
     guint find_intruder_idle_id;
     guint hide_idle_id;
 };
index 9e00e71..6a3f95a 100644 (file)
@@ -728,6 +728,17 @@ grab_transfer_window_get                        (GtkWidget *widget)
 }
 
 static void
+hildon_app_menu_size_request                    (GtkWidget      *widget,
+                                                 GtkRequisition *requisition)
+{
+    HildonAppMenuPrivate *priv = HILDON_APP_MENU_GET_PRIVATE (widget);
+
+    GTK_WIDGET_CLASS (hildon_app_menu_parent_class)->size_request (widget, requisition);
+
+    requisition->width = priv->width_request;
+}
+
+static void
 hildon_app_menu_realize                         (GtkWidget *widget)
 {
     Atom property, window_type;
@@ -768,8 +779,9 @@ hildon_app_menu_unrealize                       (GtkWidget *widget)
 static void
 hildon_app_menu_apply_style                     (GtkWidget *widget)
 {
+    GdkScreen *screen;
     guint horizontal_spacing, vertical_spacing, filter_vertical_spacing;
-    guint inner_border;
+    guint inner_border, external_border;
     HildonAppMenuPrivate *priv;
 
     priv = HILDON_APP_MENU_GET_PRIVATE (widget);
@@ -779,6 +791,7 @@ hildon_app_menu_apply_style                     (GtkWidget *widget)
                           "vertical-spacing", &vertical_spacing,
                           "filter-vertical-spacing", &filter_vertical_spacing,
                           "inner-border", &inner_border,
+                          "external-border", &external_border,
                           NULL);
 
     /* Set spacings */
@@ -788,6 +801,15 @@ hildon_app_menu_apply_style                     (GtkWidget *widget)
 
     /* Set inner border */
     gtk_container_set_border_width (GTK_CONTAINER (widget), inner_border);
+
+    /* Compute width request */
+    screen = gtk_widget_get_screen (widget);
+    if (gdk_screen_get_width (screen) < gdk_screen_get_height (screen)) {
+        external_border = 0;
+    }
+    priv->width_request = gdk_screen_get_width (screen) - external_border * 2;
+    gtk_window_move (GTK_WINDOW (widget), external_border, 0);
+    gtk_widget_queue_resize (widget);
 }
 
 static void
@@ -963,6 +985,7 @@ hildon_app_menu_init                            (HildonAppMenu *menu)
     priv->buttons = NULL;
     priv->filters = NULL;
     priv->columns = 2;
+    priv->width_request = -1;
     priv->find_intruder_idle_id = 0;
     priv->hide_idle_id = 0;
 
@@ -1043,6 +1066,7 @@ hildon_app_menu_class_init                      (HildonAppMenuClass *klass)
     widget_class->button_release_event = hildon_app_menu_button_release;
     widget_class->style_set = hildon_app_menu_style_set;
     widget_class->delete_event = hildon_app_menu_delete_event_handler;
+    widget_class->size_request = hildon_app_menu_size_request;
 
     g_type_class_add_private (klass, sizeof (HildonAppMenuPrivate));
 
@@ -1081,4 +1105,14 @@ hildon_app_menu_class_init                      (HildonAppMenuClass *klass)
             "Border between menu edges and buttons",
             0, G_MAXUINT, 16,
             G_PARAM_READABLE));
+
+    gtk_widget_class_install_style_property (
+        widget_class,
+        g_param_spec_uint (
+            "external-border",
+            "Border between menu and screen edges (in horizontal mode)",
+            "Border between the right and left edges of the menu and "
+            "the screen edges (in horizontal mode)",
+            0, G_MAXUINT, 50,
+            G_PARAM_READABLE));
 }