]> Pileus Git - ~andy/gtk/commitdiff
Privately export _gtk_scrolled_window_get_scrollbar_spacing().
authorOwen Taylor <otaylor@redhat.com>
Thu, 10 Oct 2002 18:46:10 +0000 (18:46 +0000)
committerOwen Taylor <otaylor@src.gnome.org>
Thu, 10 Oct 2002 18:46:10 +0000 (18:46 +0000)
Thu Oct 10 14:35:31 2002  Owen Taylor  <otaylor@redhat.com>

        * gtk/gtkscrolledwindow.[ch]: Privately export
        _gtk_scrolled_window_get_scrollbar_spacing().

        * gtk/gtkcombo.c: Properly account from scrollbar
        spacing when computing the size of the popup window.
        (#84955, Marco Pesenti Gritti)

ChangeLog
ChangeLog.pre-2-10
ChangeLog.pre-2-2
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
gtk/gtkcombo.c
gtk/gtkscrolledwindow.c
gtk/gtkscrolledwindow.h

index 8ba95656d951e1d06d7c477faa2e9a6f9ffb35fd..c83cf7a0e42b50e937aa32a1d843cb500902eb5a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+Thu Oct 10 14:35:31 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * gtk/gtkscrolledwindow.[ch]: Privately export
+       _gtk_scrolled_window_get_scrollbar_spacing().
+
+       * gtk/gtkcombo.c: Properly account from scrollbar
+       spacing when computing the size of the popup window.
+       (#84955, Marco Pesenti Gritti)
+
 Wed Oct  9 17:40:13 2002  Manish Singh  <yosh@gimp.org>
 
        * gtk/gtkaccelmap.c gtk/gtkfixed.[ch] gtk/gtkkeyhash.c gtk/gtkmenu.c
index 8ba95656d951e1d06d7c477faa2e9a6f9ffb35fd..c83cf7a0e42b50e937aa32a1d843cb500902eb5a 100644 (file)
@@ -1,3 +1,12 @@
+Thu Oct 10 14:35:31 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * gtk/gtkscrolledwindow.[ch]: Privately export
+       _gtk_scrolled_window_get_scrollbar_spacing().
+
+       * gtk/gtkcombo.c: Properly account from scrollbar
+       spacing when computing the size of the popup window.
+       (#84955, Marco Pesenti Gritti)
+
 Wed Oct  9 17:40:13 2002  Manish Singh  <yosh@gimp.org>
 
        * gtk/gtkaccelmap.c gtk/gtkfixed.[ch] gtk/gtkkeyhash.c gtk/gtkmenu.c
index 8ba95656d951e1d06d7c477faa2e9a6f9ffb35fd..c83cf7a0e42b50e937aa32a1d843cb500902eb5a 100644 (file)
@@ -1,3 +1,12 @@
+Thu Oct 10 14:35:31 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * gtk/gtkscrolledwindow.[ch]: Privately export
+       _gtk_scrolled_window_get_scrollbar_spacing().
+
+       * gtk/gtkcombo.c: Properly account from scrollbar
+       spacing when computing the size of the popup window.
+       (#84955, Marco Pesenti Gritti)
+
 Wed Oct  9 17:40:13 2002  Manish Singh  <yosh@gimp.org>
 
        * gtk/gtkaccelmap.c gtk/gtkfixed.[ch] gtk/gtkkeyhash.c gtk/gtkmenu.c
index 8ba95656d951e1d06d7c477faa2e9a6f9ffb35fd..c83cf7a0e42b50e937aa32a1d843cb500902eb5a 100644 (file)
@@ -1,3 +1,12 @@
+Thu Oct 10 14:35:31 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * gtk/gtkscrolledwindow.[ch]: Privately export
+       _gtk_scrolled_window_get_scrollbar_spacing().
+
+       * gtk/gtkcombo.c: Properly account from scrollbar
+       spacing when computing the size of the popup window.
+       (#84955, Marco Pesenti Gritti)
+
 Wed Oct  9 17:40:13 2002  Manish Singh  <yosh@gimp.org>
 
        * gtk/gtkaccelmap.c gtk/gtkfixed.[ch] gtk/gtkkeyhash.c gtk/gtkmenu.c
index 8ba95656d951e1d06d7c477faa2e9a6f9ffb35fd..c83cf7a0e42b50e937aa32a1d843cb500902eb5a 100644 (file)
@@ -1,3 +1,12 @@
+Thu Oct 10 14:35:31 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * gtk/gtkscrolledwindow.[ch]: Privately export
+       _gtk_scrolled_window_get_scrollbar_spacing().
+
+       * gtk/gtkcombo.c: Properly account from scrollbar
+       spacing when computing the size of the popup window.
+       (#84955, Marco Pesenti Gritti)
+
 Wed Oct  9 17:40:13 2002  Manish Singh  <yosh@gimp.org>
 
        * gtk/gtkaccelmap.c gtk/gtkfixed.[ch] gtk/gtkkeyhash.c gtk/gtkmenu.c
index 8ba95656d951e1d06d7c477faa2e9a6f9ffb35fd..c83cf7a0e42b50e937aa32a1d843cb500902eb5a 100644 (file)
@@ -1,3 +1,12 @@
+Thu Oct 10 14:35:31 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * gtk/gtkscrolledwindow.[ch]: Privately export
+       _gtk_scrolled_window_get_scrollbar_spacing().
+
+       * gtk/gtkcombo.c: Properly account from scrollbar
+       spacing when computing the size of the popup window.
+       (#84955, Marco Pesenti Gritti)
+
 Wed Oct  9 17:40:13 2002  Manish Singh  <yosh@gimp.org>
 
        * gtk/gtkaccelmap.c gtk/gtkfixed.[ch] gtk/gtkkeyhash.c gtk/gtkmenu.c
index 09e43c8c1b6226dc3194601c1eff0a0bd59fec68..a1676bb040f65bd8e0e1befe24ce202d1df681d6 100644 (file)
@@ -426,11 +426,14 @@ gtk_combo_get_pos (GtkCombo * combo, gint * x, gint * y, gint * height, gint * w
   gint work_height;
   gint old_height;
   gint old_width;
+  gint scrollbar_spacing;
   
   widget = GTK_WIDGET (combo);
   popup  = GTK_SCROLLED_WINDOW (combo->popup);
   popwin = GTK_BIN (combo->popwin);
-  
+
+  scrollbar_spacing = _gtk_scrolled_window_get_scrollbar_spacing (popup);
+
   gdk_window_get_origin (combo->entry->window, x, y);
   real_height = MIN (combo->entry->requisition.height, 
                     combo->entry->allocation.height);
@@ -454,7 +457,7 @@ gtk_combo_get_pos (GtkCombo * combo, gint * x, gint * y, gint * height, gint * w
                 2 * GTK_CONTAINER (popwin->child)->border_width +
                 2 * GTK_CONTAINER (combo->popup)->border_width +
                 2 * GTK_CONTAINER (GTK_BIN (popup)->child)->border_width +
-                2 * GTK_BIN (popup)->child->style->xthickness);
+                2 * GTK_BIN (popup)->child->style->ythickness);
   
   do 
     {
@@ -464,21 +467,26 @@ gtk_combo_get_pos (GtkCombo * combo, gint * x, gint * y, gint * height, gint * w
       if (!show_hscroll &&
          alloc_width < list_requisition.width)
        {
-         work_height += (popup->hscrollbar->requisition.height +
-                         GTK_SCROLLED_WINDOW_GET_CLASS (combo->popup)->scrollbar_spacing);
+         GtkRequisition requisition;
+         
+         gtk_widget_size_request (popup->hscrollbar, &requisition);
+         work_height += (requisition.height + scrollbar_spacing);
+         
          show_hscroll = TRUE;
        }
       if (!show_vscroll && 
          work_height + list_requisition.height > avail_height)
        {
+         GtkRequisition requisition;
+         
          if (work_height + min_height > avail_height && 
              *y - real_height > avail_height)
            {
              *y -= (work_height + list_requisition.height + real_height);
              break;
            }
-         alloc_width -= (popup->vscrollbar->requisition.width +
-                         GTK_SCROLLED_WINDOW_GET_CLASS (combo->popup)->scrollbar_spacing);
+         gtk_widget_size_request (popup->hscrollbar, &requisition);
+         alloc_width -= (requisition.width + scrollbar_spacing);
          show_vscroll = TRUE;
        }
     } while (old_width != alloc_width || old_height != work_height);
index 7de757150e23dc236c27b93c67a27d070c709b92..3dde39a52dcf02040af5e282f3c6f18a447c4860 100644 (file)
 
 #define DEFAULT_SCROLLBAR_SPACING  3
 
-#define SCROLLBAR_SPACING(w)                                                           \
-  (GTK_SCROLLED_WINDOW_GET_CLASS (w)->scrollbar_spacing >= 0 ?                         \
-   GTK_SCROLLED_WINDOW_GET_CLASS (w)->scrollbar_spacing : DEFAULT_SCROLLBAR_SPACING)
-
 enum {
   PROP_0,
   PROP_HADJUSTMENT,
@@ -912,6 +908,7 @@ gtk_scrolled_window_size_request (GtkWidget      *widget,
   GtkBin *bin;
   gint extra_width;
   gint extra_height;
+  gint scrollbar_spacing;
   GtkRequisition hscrollbar_requisition;
   GtkRequisition vscrollbar_requisition;
   GtkRequisition child_requisition;
@@ -922,6 +919,8 @@ gtk_scrolled_window_size_request (GtkWidget      *widget,
   scrolled_window = GTK_SCROLLED_WINDOW (widget);
   bin = GTK_BIN (scrolled_window);
 
+  scrollbar_spacing = _gtk_scrolled_window_get_scrollbar_spacing (scrolled_window);
+
   extra_width = 0;
   extra_height = 0;
   requisition->width = 0;
@@ -972,7 +971,7 @@ gtk_scrolled_window_size_request (GtkWidget      *widget,
     {
       requisition->width = MAX (requisition->width, hscrollbar_requisition.width);
       if (!extra_height || scrolled_window->hscrollbar_policy == GTK_POLICY_ALWAYS)
-       extra_height = SCROLLBAR_SPACING (scrolled_window) + hscrollbar_requisition.height;
+       extra_height = scrollbar_spacing + hscrollbar_requisition.height;
     }
 
   if (scrolled_window->vscrollbar_policy == GTK_POLICY_AUTOMATIC ||
@@ -980,7 +979,7 @@ gtk_scrolled_window_size_request (GtkWidget      *widget,
     {
       requisition->height = MAX (requisition->height, vscrollbar_requisition.height);
       if (!extra_height || scrolled_window->vscrollbar_policy == GTK_POLICY_ALWAYS)
-       extra_width = SCROLLBAR_SPACING (scrolled_window) + vscrollbar_requisition.width;
+       extra_width = scrollbar_spacing + vscrollbar_requisition.width;
     }
 
   requisition->width += GTK_CONTAINER (widget)->border_width * 2 + MAX (0, extra_width);
@@ -998,11 +997,13 @@ gtk_scrolled_window_relative_allocation (GtkWidget     *widget,
                                         GtkAllocation *allocation)
 {
   GtkScrolledWindow *scrolled_window;
+  gint scrollbar_spacing;
 
   g_return_if_fail (widget != NULL);
   g_return_if_fail (allocation != NULL);
 
   scrolled_window = GTK_SCROLLED_WINDOW (widget);
+  scrollbar_spacing = _gtk_scrolled_window_get_scrollbar_spacing (scrolled_window);
 
   allocation->x = GTK_CONTAINER (widget)->border_width;
   allocation->y = GTK_CONTAINER (widget)->border_width;
@@ -1024,12 +1025,9 @@ gtk_scrolled_window_relative_allocation (GtkWidget     *widget,
   
       if (scrolled_window->window_placement == GTK_CORNER_TOP_RIGHT ||
          scrolled_window->window_placement == GTK_CORNER_BOTTOM_RIGHT)
-       allocation->x += (vscrollbar_requisition.width +
-                         SCROLLBAR_SPACING (scrolled_window));
+       allocation->x += (vscrollbar_requisition.width +  scrollbar_spacing);
 
-      allocation->width = MAX (1, (gint)allocation->width -
-                              ((gint)vscrollbar_requisition.width +
-                               (gint)SCROLLBAR_SPACING (scrolled_window)));
+      allocation->width = MAX (1, allocation->width - (vscrollbar_requisition.width + scrollbar_spacing));
     }
   if (scrolled_window->hscrollbar_visible)
     {
@@ -1039,12 +1037,9 @@ gtk_scrolled_window_relative_allocation (GtkWidget     *widget,
   
       if (scrolled_window->window_placement == GTK_CORNER_BOTTOM_LEFT ||
          scrolled_window->window_placement == GTK_CORNER_BOTTOM_RIGHT)
-       allocation->y += (hscrollbar_requisition.height +
-                         SCROLLBAR_SPACING (scrolled_window));
+       allocation->y += (hscrollbar_requisition.height + scrollbar_spacing);
 
-      allocation->height = MAX (1, (gint)allocation->height -
-                               ((gint)hscrollbar_requisition.height +
-                                (gint)SCROLLBAR_SPACING (scrolled_window)));
+      allocation->height = MAX (1, allocation->height - (hscrollbar_requisition.height + scrollbar_spacing));
     }
 }
 
@@ -1056,6 +1051,7 @@ gtk_scrolled_window_size_allocate (GtkWidget     *widget,
   GtkBin *bin;
   GtkAllocation relative_allocation;
   GtkAllocation child_allocation;
+  gint scrollbar_spacing;
   
   g_return_if_fail (GTK_IS_SCROLLED_WINDOW (widget));
   g_return_if_fail (allocation != NULL);
@@ -1063,6 +1059,8 @@ gtk_scrolled_window_size_allocate (GtkWidget     *widget,
   scrolled_window = GTK_SCROLLED_WINDOW (widget);
   bin = GTK_BIN (scrolled_window);
 
+  scrollbar_spacing = _gtk_scrolled_window_get_scrollbar_spacing (scrolled_window);
+
   widget->allocation = *allocation;
 
   if (scrolled_window->hscrollbar_policy == GTK_POLICY_ALWAYS)
@@ -1132,7 +1130,7 @@ gtk_scrolled_window_size_allocate (GtkWidget     *widget,
          scrolled_window->window_placement == GTK_CORNER_TOP_RIGHT)
        child_allocation.y = (relative_allocation.y +
                              relative_allocation.height +
-                             SCROLLBAR_SPACING (scrolled_window) +
+                             scrollbar_spacing +
                              (scrolled_window->shadow_type == GTK_SHADOW_NONE ?
                               0 : widget->style->ythickness));
       else
@@ -1167,7 +1165,7 @@ gtk_scrolled_window_size_allocate (GtkWidget     *widget,
          scrolled_window->window_placement == GTK_CORNER_BOTTOM_LEFT)
        child_allocation.x = (relative_allocation.x +
                              relative_allocation.width +
-                             SCROLLBAR_SPACING (scrolled_window) +
+                             scrollbar_spacing +
                              (scrolled_window->shadow_type == GTK_SHADOW_NONE ?
                               0 : widget->style->xthickness));
       else
@@ -1367,3 +1365,25 @@ gtk_scrolled_window_add_with_viewport (GtkScrolledWindow *scrolled_window,
   gtk_widget_show (viewport);
   gtk_container_add (GTK_CONTAINER (viewport), child);
 }
+
+/**
+ * _gtk_scrolled_window_get_spacing:
+ * @scrolled_window: a scrolled window
+ * 
+ * Gets the spacing between the scrolled window's scrollbars and
+ * the scrolled widget. Used by GtkCombo
+ * 
+ * Return value: the spacing, in pixels.
+ **/
+gint
+_gtk_scrolled_window_get_scrollbar_spacing (GtkScrolledWindow *scrolled_window)
+{
+  GtkScrolledWindowClass *class;
+    
+  g_return_val_if_fail (GTK_IS_SCROLLED_WINDOW (scrolled_window), 0);
+
+  class = GTK_SCROLLED_WINDOW_GET_CLASS (scrolled_window);
+
+  return class->scrollbar_spacing >= 0 ? class->scrollbar_spacing : DEFAULT_SCROLLBAR_SPACING;
+}
+
index 894915be0a239dd0feb674832c4b2de02855cd85..b3a74aa43bfa6a392de0ad797f89413ff1d37370 100644 (file)
@@ -120,6 +120,7 @@ GtkShadowType  gtk_scrolled_window_get_shadow_type   (GtkScrolledWindow *scrolle
 void          gtk_scrolled_window_add_with_viewport (GtkScrolledWindow *scrolled_window,
                                                      GtkWidget         *child);
 
+gint _gtk_scrolled_window_get_scrollbar_spacing (GtkScrolledWindow *scrolled_window);
 
 #ifdef __cplusplus
 }