]> Pileus Git - ~andy/gtk/commitdiff
set to 200 instead of 225 Impose a minimum width on items that have a
authorSoeren Sandmann <sandmann@daimi.au.dk>
Wed, 19 Nov 2003 19:44:45 +0000 (19:44 +0000)
committerSøren Sandmann Pedersen <ssp@src.gnome.org>
Wed, 19 Nov 2003 19:44:45 +0000 (19:44 +0000)
Wed Nov 19 18:15:00 2003  Soeren Sandmann  <sandmann@daimi.au.dk>

* gtk/gtkmenu.c (DEFAULT_POPUP_DELAY): set to 200 instead of 225
* gtk/gtkmenuitem.c (get_minimum_width): Impose a minimum width
on items that have a submenu. (#120104).

Wed Nov 19 18:11:08 2003  Soeren Sandmann  <sandmann@daimi.au.dk>

* gtk/gtktoolbar.c (struct _ToolbarContent): Add a new
"ItemState" field indicating the overflowed-ness etc. of the item.
(gtk_toolbar_size_allocate): update the field here.

ChangeLog
ChangeLog.pre-2-10
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
gtk/gtkmenu.c
gtk/gtkmenuitem.c
gtk/gtktoolbar.c

index 600a1c2ccdcaaf66ad4e4635c602132a78f0bd15..c5bfee466b8175ab643adba5fa899cf1a3fb7b48 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+Wed Nov 19 18:15:00 2003  Soeren Sandmann  <sandmann@daimi.au.dk>
+
+       * gtk/gtkmenu.c (DEFAULT_POPUP_DELAY): set to 200 instead of 225
+       * gtk/gtkmenuitem.c (get_minimum_width): Impose a minimum width
+       on items that have a submenu. (#120104).
+
+Wed Nov 19 18:11:08 2003  Soeren Sandmann  <sandmann@daimi.au.dk>
+
+       * gtk/gtktoolbar.c (struct _ToolbarContent): Add a new
+       "ItemState" field indicating the overflowed-ness etc. of the item.
+       (gtk_toolbar_size_allocate): update the field here.
+
 2003-11-19  Federico Mena Quintero  <federico@ximian.com>
 
        * gtk/gtkfilesystem.h (struct _GtkFileSystemIface): Added a
index 600a1c2ccdcaaf66ad4e4635c602132a78f0bd15..c5bfee466b8175ab643adba5fa899cf1a3fb7b48 100644 (file)
@@ -1,3 +1,15 @@
+Wed Nov 19 18:15:00 2003  Soeren Sandmann  <sandmann@daimi.au.dk>
+
+       * gtk/gtkmenu.c (DEFAULT_POPUP_DELAY): set to 200 instead of 225
+       * gtk/gtkmenuitem.c (get_minimum_width): Impose a minimum width
+       on items that have a submenu. (#120104).
+
+Wed Nov 19 18:11:08 2003  Soeren Sandmann  <sandmann@daimi.au.dk>
+
+       * gtk/gtktoolbar.c (struct _ToolbarContent): Add a new
+       "ItemState" field indicating the overflowed-ness etc. of the item.
+       (gtk_toolbar_size_allocate): update the field here.
+
 2003-11-19  Federico Mena Quintero  <federico@ximian.com>
 
        * gtk/gtkfilesystem.h (struct _GtkFileSystemIface): Added a
index 600a1c2ccdcaaf66ad4e4635c602132a78f0bd15..c5bfee466b8175ab643adba5fa899cf1a3fb7b48 100644 (file)
@@ -1,3 +1,15 @@
+Wed Nov 19 18:15:00 2003  Soeren Sandmann  <sandmann@daimi.au.dk>
+
+       * gtk/gtkmenu.c (DEFAULT_POPUP_DELAY): set to 200 instead of 225
+       * gtk/gtkmenuitem.c (get_minimum_width): Impose a minimum width
+       on items that have a submenu. (#120104).
+
+Wed Nov 19 18:11:08 2003  Soeren Sandmann  <sandmann@daimi.au.dk>
+
+       * gtk/gtktoolbar.c (struct _ToolbarContent): Add a new
+       "ItemState" field indicating the overflowed-ness etc. of the item.
+       (gtk_toolbar_size_allocate): update the field here.
+
 2003-11-19  Federico Mena Quintero  <federico@ximian.com>
 
        * gtk/gtkfilesystem.h (struct _GtkFileSystemIface): Added a
index 600a1c2ccdcaaf66ad4e4635c602132a78f0bd15..c5bfee466b8175ab643adba5fa899cf1a3fb7b48 100644 (file)
@@ -1,3 +1,15 @@
+Wed Nov 19 18:15:00 2003  Soeren Sandmann  <sandmann@daimi.au.dk>
+
+       * gtk/gtkmenu.c (DEFAULT_POPUP_DELAY): set to 200 instead of 225
+       * gtk/gtkmenuitem.c (get_minimum_width): Impose a minimum width
+       on items that have a submenu. (#120104).
+
+Wed Nov 19 18:11:08 2003  Soeren Sandmann  <sandmann@daimi.au.dk>
+
+       * gtk/gtktoolbar.c (struct _ToolbarContent): Add a new
+       "ItemState" field indicating the overflowed-ness etc. of the item.
+       (gtk_toolbar_size_allocate): update the field here.
+
 2003-11-19  Federico Mena Quintero  <federico@ximian.com>
 
        * gtk/gtkfilesystem.h (struct _GtkFileSystemIface): Added a
index 600a1c2ccdcaaf66ad4e4635c602132a78f0bd15..c5bfee466b8175ab643adba5fa899cf1a3fb7b48 100644 (file)
@@ -1,3 +1,15 @@
+Wed Nov 19 18:15:00 2003  Soeren Sandmann  <sandmann@daimi.au.dk>
+
+       * gtk/gtkmenu.c (DEFAULT_POPUP_DELAY): set to 200 instead of 225
+       * gtk/gtkmenuitem.c (get_minimum_width): Impose a minimum width
+       on items that have a submenu. (#120104).
+
+Wed Nov 19 18:11:08 2003  Soeren Sandmann  <sandmann@daimi.au.dk>
+
+       * gtk/gtktoolbar.c (struct _ToolbarContent): Add a new
+       "ItemState" field indicating the overflowed-ness etc. of the item.
+       (gtk_toolbar_size_allocate): update the field here.
+
 2003-11-19  Federico Mena Quintero  <federico@ximian.com>
 
        * gtk/gtkfilesystem.h (struct _GtkFileSystemIface): Added a
index 2a2603b546f531c50bd8684c85d00b00b2316d73..4e303f56c580178a3625653ba6c82c001071c068 100644 (file)
@@ -47,7 +47,7 @@
 #define MENU_ITEM_CLASS(w)   GTK_MENU_ITEM_GET_CLASS (w)
 #define        MENU_NEEDS_RESIZE(m) GTK_MENU_SHELL (m)->menu_flag
 
-#define DEFAULT_POPUP_DELAY    225
+#define DEFAULT_POPUP_DELAY    200
 #define DEFAULT_POPDOWN_DELAY  1000
 
 #define NAVIGATION_REGION_OVERSHOOT 50  /* How much the navigation region
index 3cb2b948f5dff4d3028d012f3f08ff5d1242b087..3058706b9787e9e62c71bf93acd363287e07b9e0 100644 (file)
@@ -465,6 +465,26 @@ gtk_menu_item_accel_width_foreach (GtkWidget *widget,
                           data);
 }
 
+static gint
+get_minimum_width (GtkWidget *widget)
+{
+  PangoContext *context;
+  PangoFontMetrics *metrics;
+  gint height;
+
+  context = gtk_widget_get_pango_context (widget);
+  metrics = pango_context_get_metrics (context,
+                                      widget->style->font_desc,
+                                      pango_context_get_language (context));
+
+  height = pango_font_metrics_get_ascent (metrics) +
+      pango_font_metrics_get_descent (metrics);
+  
+  pango_font_metrics_unref (metrics);
+
+  return PANGO_PIXELS (7 * height);
+}
+
 static void
 gtk_menu_item_size_request (GtkWidget      *widget,
                            GtkRequisition *requisition)
@@ -508,6 +528,8 @@ gtk_menu_item_size_request (GtkWidget      *widget,
 
          requisition->width += child_requisition.height;
          requisition->width += arrow_spacing;
+
+         requisition->width = MAX (requisition->width, get_minimum_width (widget));
        }
     }
   else
index 77532815f450ac56f2ca2d314d21b0a3fc99001c..88bbea8d77dbf34f24d3834f7c1891739e8f2cb4 100644 (file)
@@ -191,15 +191,23 @@ typedef enum {
 
 #define GTK_TOOLBAR_GET_PRIVATE(o)  (G_TYPE_INSTANCE_GET_PRIVATE ((o), GTK_TYPE_TOOLBAR, GtkToolbarPrivate))
 
+typedef enum {
+  NOT_ALLOCATED,
+  NORMAL,
+  HIDDEN,
+  OVERFLOWN,
+} ItemState;
+
 struct _ToolbarContent
 {
-  GtkToolItem *item;
-  guint        is_overflow : 1;
-  guint        is_placeholder : 1;
-  gint        start_width;
-  gint        goal_width;
-  gint        start_height;
-  gint         goal_height;
+  GtkToolItem * item;
+  guint         is_placeholder : 1;
+  gint         start_width;
+  gint         goal_width;
+  gint         start_height;
+  gint          goal_height;
+  GtkAllocation start_allocation;
+  ItemState     state;
 };
 
 struct _GtkToolbarPrivate
@@ -217,13 +225,15 @@ struct _GtkToolbarPrivate
   ApiMode    api_mode;
   GtkSettings *settings;
   int        idle_id;
-  GTimer   *timer;
   gboolean   need_sync;
   gboolean   leaving_dnd;
   gboolean   in_dnd;
   gint      n_overflow_items_when_dnd_started;
   GtkToolItem *highlight_tool_item;
   gint      max_homogeneous_pixels;
+
+  GTimer   *timer;
+  gboolean  is_sliding;
 };
 
 static GtkContainerClass *parent_class = NULL;
@@ -1023,6 +1033,7 @@ gtk_toolbar_size_allocate (GtkWidget     *widget,
   GtkToolbar *toolbar = GTK_TOOLBAR (widget);
   GtkToolbarPrivate *priv = GTK_TOOLBAR_GET_PRIVATE (toolbar);
   GtkAllocation *allocations;
+  ItemState *new_states;
   GtkAllocation arrow_allocation;
   gint arrow_size;
   gint size, pos, short_size;
@@ -1083,6 +1094,7 @@ gtk_toolbar_size_allocate (GtkWidget     *widget,
 
   n_items = g_list_length (priv->content);
   allocations = g_new0 (GtkAllocation, n_items);
+  new_states = g_new0 (ItemState, n_items);
 
   needed_size = 0;
   for (list = priv->content; list != NULL; list = list->next)
@@ -1112,20 +1124,23 @@ gtk_toolbar_size_allocate (GtkWidget     *widget,
       gint item_size;
 
       if (!toolbar_item_visible (toolbar, item))
-       continue;
+       {
+         new_states[i] = HIDDEN;
+         continue;
+       }
 
       item_size = get_item_size (toolbar, GTK_WIDGET (item));
       if (item_size <= size && !overflowing)
        {
          size -= item_size;
          allocations[i].width = item_size;
-         content->is_overflow = FALSE;
+         new_states[i] = NORMAL;
        }
       else
        {
          ++n_overflowed;
-         content->is_overflow = TRUE;
          overflowing = TRUE;
+         new_states[i] = OVERFLOWN;
        }
     }
 
@@ -1146,17 +1161,13 @@ gtk_toolbar_size_allocate (GtkWidget     *widget,
   if (!(priv->in_dnd && n_overflowed > priv->n_overflow_items_when_dnd_started))
     {
       n_expand_items = 0;
-      for (list = priv->content; list != NULL; list = list->next)
+      for (i = 0, list = priv->content; list != NULL; list = list->next, ++i)
        {
          ToolbarContent *content = list->data;
          GtkToolItem *item = content->item;
          
-         if (toolbar_item_visible (toolbar, item) &&
-             gtk_tool_item_get_expand (item) &&
-             !content->is_overflow)
-           {
-             n_expand_items++;
-           }
+         if (gtk_tool_item_get_expand (item) && new_states[i] == NORMAL)
+           n_expand_items++;
        }
       
       for (list = priv->content, i = 0; list != NULL; list = list->next, ++i)
@@ -1164,9 +1175,7 @@ gtk_toolbar_size_allocate (GtkWidget     *widget,
          ToolbarContent *content = list->data;
          GtkToolItem *item = content->item;
          
-         if (toolbar_item_visible (toolbar, item) &&
-             gtk_tool_item_get_expand (item) &&
-             !content->is_overflow)
+         if (gtk_tool_item_get_expand (item) && new_states[i] == NORMAL)
            {
              gint extra = size / n_expand_items;
              if (size % n_expand_items != 0)
@@ -1185,10 +1194,7 @@ gtk_toolbar_size_allocate (GtkWidget     *widget,
   pos = border_width;
   for (list = priv->content, i = 0; list != NULL; list = list->next, ++i)
     {
-      ToolbarContent *content = list->data;
-      GtkToolItem *item = content->item;
-      
-      if (toolbar_item_visible (toolbar, item) && !content->is_overflow)
+      if (new_states[i] == NORMAL)
        {
          allocations[i].x = pos;
          allocations[i].y = border_width;
@@ -1254,7 +1260,7 @@ gtk_toolbar_size_allocate (GtkWidget     *widget,
       ToolbarContent *content = list->data;
       GtkToolItem *item = content->item;
       
-      if (toolbar_item_visible (toolbar, item) && !content->is_overflow)
+      if (new_states[i] == NORMAL)
        {
          gtk_widget_size_allocate (GTK_WIDGET (item), &(allocations[i]));
          gtk_widget_set_child_visible (GTK_WIDGET (item), TRUE);
@@ -1263,6 +1269,8 @@ gtk_toolbar_size_allocate (GtkWidget     *widget,
        {
          gtk_widget_set_child_visible (GTK_WIDGET (item), FALSE);
        }
+
+      content->state = new_states[i];
     }
 
   if (need_arrow)
@@ -1277,6 +1285,7 @@ gtk_toolbar_size_allocate (GtkWidget     *widget,
     }
   
   g_free (allocations);
+  g_free (new_states);
 }
 
 static void
@@ -1552,9 +1561,8 @@ find_drop_index (GtkToolbar *toolbar,
   for (list = priv->content; list != NULL; list = list->next)
     {
       ToolbarContent *content = list->data;
-      GtkToolItem *item = content->item;
 
-      if (toolbar_item_visible (toolbar, item) && !content->is_overflow)
+      if (content->state == NORMAL)
        interesting_content = g_list_prepend (interesting_content, content);
     }
   interesting_content = g_list_reverse (interesting_content);
@@ -1911,11 +1919,8 @@ gtk_toolbar_set_drop_highlight_item (GtkToolbar  *toolbar,
       for (list = priv->content; list != NULL; list = list->next)
        {
          content = list->data;
-         if (content->is_overflow &&
-             toolbar_item_visible (toolbar, content->item))
-           {
-             priv->n_overflow_items_when_dnd_started++;
-           }
+         if (content->state == OVERFLOWN)
+           priv->n_overflow_items_when_dnd_started++;
        }
     }
   
@@ -2249,7 +2254,7 @@ show_menu (GtkToolbar     *toolbar,
       ToolbarContent *content = list->data;
       GtkToolItem *item = content->item;
 
-      if (toolbar_item_visible (toolbar, item) && content->is_overflow)
+      if (content->state == OVERFLOWN)
        {
          GtkWidget *menu_item = gtk_tool_item_retrieve_proxy_menu_item (item);
 
@@ -2415,9 +2420,9 @@ gtk_toolbar_insert_tool_item (GtkToolbar  *toolbar,
   GtkToolbarPrivate *priv = GTK_TOOLBAR_GET_PRIVATE (toolbar);
   ToolbarContent *content = g_new0 (ToolbarContent, 1);
 
-  content->is_overflow = FALSE;
   content->is_placeholder = is_placeholder;
   content->item = item;
+  content->state = NOT_ALLOCATED;
   toolbar->num_children++;
 
   priv->content = g_list_insert (priv->content, content, pos);