summaryrefslogtreecommitdiff
path: root/gtk
diff options
context:
space:
mode:
authorOwen Taylor <otaylor@redhat.com>2002-10-10 18:46:10 +0000
committerOwen Taylor <otaylor@src.gnome.org>2002-10-10 18:46:10 +0000
commit4dad7105e6a0429a1a25c4da05f74a0d935b2ae0 (patch)
tree7d064bfaea089fa71309c321ed21903b622728f8 /gtk
parent28bc53032b1bea0fe22798a8542f8036d3f735b3 (diff)
downloadgdk-pixbuf-4dad7105e6a0429a1a25c4da05f74a0d935b2ae0.tar.gz
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)
Diffstat (limited to 'gtk')
-rw-r--r--gtk/gtkcombo.c20
-rw-r--r--gtk/gtkscrolledwindow.c56
-rw-r--r--gtk/gtkscrolledwindow.h1
3 files changed, 53 insertions, 24 deletions
diff --git a/gtk/gtkcombo.c b/gtk/gtkcombo.c
index 09e43c8c1..a1676bb04 100644
--- a/gtk/gtkcombo.c
+++ b/gtk/gtkcombo.c
@@ -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);
diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c
index 7de757150..3dde39a52 100644
--- a/gtk/gtkscrolledwindow.c
+++ b/gtk/gtkscrolledwindow.c
@@ -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;
+}
+
diff --git a/gtk/gtkscrolledwindow.h b/gtk/gtkscrolledwindow.h
index 894915be0..b3a74aa43 100644
--- a/gtk/gtkscrolledwindow.h
+++ b/gtk/gtkscrolledwindow.h
@@ -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
}