Privately export _gtk_scrolled_window_get_scrollbar_spacing().

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)
This commit is contained in:
Owen Taylor 2002-10-10 18:46:10 +00:00 committed by Owen Taylor
parent 28bc53032b
commit 4dad7105e6
9 changed files with 107 additions and 24 deletions

View 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

View 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

View 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

View 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

View 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

View 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

View 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);

View File

@ -68,10 +68,6 @@
#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;
}

View 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
}