summaryrefslogtreecommitdiff
path: root/gtk/gtkviewport.c
diff options
context:
space:
mode:
authorTristan Van Berkom <tristan.van.berkom@gmail.com>2010-08-30 14:56:28 +0900
committerTristan Van Berkom <tristan.van.berkom@gmail.com>2010-08-30 14:56:28 +0900
commit54d44a9bd04cfbed8426614fc69c027a46f41a14 (patch)
tree34bdf65a6e8d5d6d4016154345d1d803ba0da379 /gtk/gtkviewport.c
parentb3b22c31b997fb85b3319b392a1a69407703184c (diff)
parent67194ed77b153eb5a7eb6c596f3c20e274b7787a (diff)
downloadgtk+-native-layout.tar.gz
Merge branch 'master' into native-layoutnative-layout
Conflicts: gtk/gtkplug.c gtk/gtkscrolledwindow.c
Diffstat (limited to 'gtk/gtkviewport.c')
-rw-r--r--gtk/gtkviewport.c130
1 files changed, 78 insertions, 52 deletions
diff --git a/gtk/gtkviewport.c b/gtk/gtkviewport.c
index 71fd7b167c..59a5084c5e 100644
--- a/gtk/gtkviewport.c
+++ b/gtk/gtkviewport.c
@@ -51,7 +51,7 @@
* exactly this, so you can ignore the presence of the viewport.
*/
-struct _GtkViewportPriv
+struct _GtkViewportPrivate
{
GtkAdjustment *hadjustment;
GtkAdjustment *vadjustment;
@@ -183,7 +183,7 @@ gtk_viewport_class_init (GtkViewportClass *class)
GTK_TYPE_ADJUSTMENT,
GTK_TYPE_ADJUSTMENT);
- g_type_class_add_private (class, sizeof (GtkViewportPriv));
+ g_type_class_add_private (class, sizeof (GtkViewportPrivate));
}
static void
@@ -220,7 +220,7 @@ gtk_viewport_get_property (GObject *object,
GParamSpec *pspec)
{
GtkViewport *viewport = GTK_VIEWPORT (object);
- GtkViewportPriv *priv = viewport->priv;
+ GtkViewportPrivate *priv = viewport->priv;
switch (prop_id)
{
@@ -242,11 +242,11 @@ gtk_viewport_get_property (GObject *object,
static void
gtk_viewport_init (GtkViewport *viewport)
{
- GtkViewportPriv *priv;
+ GtkViewportPrivate *priv;
viewport->priv = G_TYPE_INSTANCE_GET_PRIVATE (viewport,
GTK_TYPE_VIEWPORT,
- GtkViewportPriv);
+ GtkViewportPrivate);
priv = viewport->priv;
gtk_widget_set_has_window (GTK_WIDGET (viewport), TRUE);
@@ -337,7 +337,7 @@ gtk_viewport_destroy (GtkObject *object)
GtkAdjustment*
gtk_viewport_get_hadjustment (GtkViewport *viewport)
{
- GtkViewportPriv *priv;
+ GtkViewportPrivate *priv;
g_return_val_if_fail (GTK_IS_VIEWPORT (viewport), NULL);
@@ -360,7 +360,7 @@ gtk_viewport_get_hadjustment (GtkViewport *viewport)
GtkAdjustment*
gtk_viewport_get_vadjustment (GtkViewport *viewport)
{
- GtkViewportPriv *priv;
+ GtkViewportPrivate *priv;
g_return_val_if_fail (GTK_IS_VIEWPORT (viewport), NULL);
@@ -376,11 +376,13 @@ static void
viewport_get_view_allocation (GtkViewport *viewport,
GtkAllocation *view_allocation)
{
- GtkViewportPriv *priv = viewport->priv;
+ GtkViewportPrivate *priv = viewport->priv;
+ GtkStyle *style;
GtkWidget *widget = GTK_WIDGET (viewport);
- GtkAllocation *allocation = &widget->allocation;
+ GtkAllocation allocation;
guint border_width;
+ gtk_widget_get_allocation (widget, &allocation);
border_width = gtk_container_get_border_width (GTK_CONTAINER (viewport));
view_allocation->x = 0;
@@ -388,12 +390,13 @@ viewport_get_view_allocation (GtkViewport *viewport,
if (priv->shadow_type != GTK_SHADOW_NONE)
{
- view_allocation->x = widget->style->xthickness;
- view_allocation->y = widget->style->ythickness;
+ style = gtk_widget_get_style (widget);
+ view_allocation->x = style->xthickness;
+ view_allocation->y = style->ythickness;
}
- view_allocation->width = MAX (1, allocation->width - view_allocation->x * 2 - border_width * 2);
- view_allocation->height = MAX (1, allocation->height - view_allocation->y * 2 - border_width * 2);
+ view_allocation->width = MAX (1, allocation.width - view_allocation->x * 2 - border_width * 2);
+ view_allocation->height = MAX (1, allocation.height - view_allocation->y * 2 - border_width * 2);
}
static void
@@ -587,20 +590,25 @@ void
gtk_viewport_set_shadow_type (GtkViewport *viewport,
GtkShadowType type)
{
- GtkViewportPriv *priv;
+ GtkViewportPrivate *priv;
+ GtkAllocation allocation;
+ GtkWidget *widget;
g_return_if_fail (GTK_IS_VIEWPORT (viewport));
+ widget = GTK_WIDGET (viewport);
priv = viewport->priv;
if ((GtkShadowType) priv->shadow_type != type)
{
priv->shadow_type = type;
- if (gtk_widget_get_visible (GTK_WIDGET (viewport)))
+ if (gtk_widget_get_visible (widget))
{
- gtk_widget_size_allocate (GTK_WIDGET (viewport), &(GTK_WIDGET (viewport)->allocation));
- gtk_widget_queue_draw (GTK_WIDGET (viewport));
+ gtk_widget_get_allocation (widget, &allocation);
+ gtk_widget_size_allocate (widget, &allocation);
+ gtk_widget_set_allocation (widget, &allocation);
+ gtk_widget_queue_draw (widget);
}
g_object_notify (G_OBJECT (viewport), "shadow-type");
@@ -664,12 +672,15 @@ static void
gtk_viewport_realize (GtkWidget *widget)
{
GtkViewport *viewport = GTK_VIEWPORT (widget);
- GtkViewportPriv *priv = viewport->priv;
+ GtkViewportPrivate *priv = viewport->priv;
GtkBin *bin = GTK_BIN (widget);
GtkAdjustment *hadjustment = gtk_viewport_get_hadjustment (viewport);
GtkAdjustment *vadjustment = gtk_viewport_get_vadjustment (viewport);
+ GtkAllocation allocation;
GtkAllocation view_allocation;
+ GtkStyle *style;
GtkWidget *child;
+ GdkWindow *window;
GdkWindowAttr attributes;
gint attributes_mask;
gint event_mask;
@@ -679,10 +690,12 @@ gtk_viewport_realize (GtkWidget *widget)
gtk_widget_set_realized (widget, TRUE);
- attributes.x = widget->allocation.x + border_width;
- attributes.y = widget->allocation.y + border_width;
- attributes.width = widget->allocation.width - border_width * 2;
- attributes.height = widget->allocation.height - border_width * 2;
+ gtk_widget_get_allocation (widget, &allocation);
+
+ attributes.x = allocation.x + border_width;
+ attributes.y = allocation.y + border_width;
+ attributes.width = allocation.width - border_width * 2;
+ attributes.height = allocation.height - border_width * 2;
attributes.window_type = GDK_WINDOW_CHILD;
attributes.wclass = GDK_INPUT_OUTPUT;
attributes.visual = gtk_widget_get_visual (widget);
@@ -695,9 +708,10 @@ gtk_viewport_realize (GtkWidget *widget)
attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
- widget->window = gdk_window_new (gtk_widget_get_parent_window (widget),
- &attributes, attributes_mask);
- gdk_window_set_user_data (widget->window, viewport);
+ window = gdk_window_new (gtk_widget_get_parent_window (widget),
+ &attributes, attributes_mask);
+ gtk_widget_set_window (widget, window);
+ gdk_window_set_user_data (window, viewport);
viewport_get_view_allocation (viewport, &view_allocation);
@@ -707,7 +721,8 @@ gtk_viewport_realize (GtkWidget *widget)
attributes.height = view_allocation.height;
attributes.event_mask = 0;
- priv->view_window = gdk_window_new (widget->window, &attributes, attributes_mask);
+ priv->view_window = gdk_window_new (window,
+ &attributes, attributes_mask);
gdk_window_set_user_data (priv->view_window, viewport);
gdk_window_set_back_pixmap (priv->view_window, NULL, FALSE);
@@ -726,13 +741,14 @@ gtk_viewport_realize (GtkWidget *widget)
if (child)
gtk_widget_set_parent_window (child, priv->bin_window);
- widget->style = gtk_style_attach (widget->style, widget->window);
- gtk_style_set_background (widget->style, widget->window, GTK_STATE_NORMAL);
- gtk_style_set_background (widget->style, priv->bin_window, GTK_STATE_NORMAL);
+ gtk_widget_style_attach (widget);
+ style = gtk_widget_get_style (widget);
+ gtk_style_set_background (style, window, GTK_STATE_NORMAL);
+ gtk_style_set_background (style, priv->bin_window, GTK_STATE_NORMAL);
/* Call paint here to allow a theme to set the background without flashing
*/
- gtk_paint_flat_box(widget->style, priv->bin_window, GTK_STATE_NORMAL,
+ gtk_paint_flat_box(style, priv->bin_window, GTK_STATE_NORMAL,
GTK_SHADOW_NONE,
NULL, widget, "viewportbin",
0, 0, -1, -1);
@@ -745,7 +761,7 @@ static void
gtk_viewport_unrealize (GtkWidget *widget)
{
GtkViewport *viewport = GTK_VIEWPORT (widget);
- GtkViewportPriv *priv = viewport->priv;
+ GtkViewportPrivate *priv = viewport->priv;
gdk_window_set_user_data (priv->view_window, NULL);
gdk_window_destroy (priv->view_window);
@@ -765,9 +781,10 @@ gtk_viewport_paint (GtkWidget *widget,
if (gtk_widget_is_drawable (widget))
{
GtkViewport *viewport = GTK_VIEWPORT (widget);
- GtkViewportPriv *priv = viewport->priv;
+ GtkViewportPrivate *priv = viewport->priv;
- gtk_paint_shadow (widget->style, widget->window,
+ gtk_paint_shadow (gtk_widget_get_style (widget),
+ gtk_widget_get_window (widget),
GTK_STATE_NORMAL, priv->shadow_type,
area, widget, "viewport",
0, 0, -1, -1);
@@ -783,13 +800,13 @@ gtk_viewport_expose (GtkWidget *widget,
if (gtk_widget_is_drawable (widget))
{
viewport = GTK_VIEWPORT (widget);
- GtkViewportPriv *priv = viewport->priv;
+ GtkViewportPrivate *priv = viewport->priv;
- if (event->window == widget->window)
+ if (event->window == gtk_widget_get_window (widget))
gtk_viewport_paint (widget, &event->area);
else if (event->window == priv->bin_window)
{
- gtk_paint_flat_box(widget->style, priv->bin_window,
+ gtk_paint_flat_box(gtk_widget_get_style (widget), priv->bin_window,
GTK_STATE_NORMAL, GTK_SHADOW_NONE,
&event->area, widget, "viewportbin",
0, 0, -1, -1);
@@ -807,7 +824,7 @@ gtk_viewport_add (GtkContainer *container,
{
GtkBin *bin = GTK_BIN (container);
GtkViewport *viewport = GTK_VIEWPORT (bin);
- GtkViewportPriv *priv = viewport->priv;
+ GtkViewportPrivate *priv = viewport->priv;
g_return_if_fail (gtk_bin_get_child (bin) == NULL);
@@ -820,8 +837,9 @@ static void
gtk_viewport_size_allocate (GtkWidget *widget,
GtkAllocation *allocation)
{
+ GtkAllocation widget_allocation;
GtkViewport *viewport = GTK_VIEWPORT (widget);
- GtkViewportPriv *priv = viewport->priv;
+ GtkViewportPrivate *priv = viewport->priv;
GtkBin *bin = GTK_BIN (widget);
guint border_width;
gboolean hadjustment_value_changed, vadjustment_value_changed;
@@ -835,14 +853,15 @@ gtk_viewport_size_allocate (GtkWidget *widget,
/* If our size changed, and we have a shadow, queue a redraw on widget->window to
* redraw the shadow correctly.
*/
+ gtk_widget_get_allocation (widget, &widget_allocation);
if (gtk_widget_get_mapped (widget) &&
priv->shadow_type != GTK_SHADOW_NONE &&
- (widget->allocation.width != allocation->width ||
- widget->allocation.height != allocation->height))
- gdk_window_invalidate_rect (widget->window, NULL, FALSE);
-
- widget->allocation = *allocation;
-
+ (widget_allocation.width != allocation->width ||
+ widget_allocation.height != allocation->height))
+ gdk_window_invalidate_rect (gtk_widget_get_window (widget), NULL, FALSE);
+
+ gtk_widget_set_allocation (widget, allocation);
+
viewport_set_hadjustment_values (viewport, &hadjustment_value_changed);
viewport_set_vadjustment_values (viewport, &vadjustment_value_changed);
@@ -853,7 +872,8 @@ gtk_viewport_size_allocate (GtkWidget *widget,
if (gtk_widget_get_realized (widget))
{
GtkAllocation view_allocation;
- gdk_window_move_resize (widget->window,
+
+ gdk_window_move_resize (gtk_widget_get_window (widget),
allocation->x + border_width,
allocation->y + border_width,
allocation->width - border_width * 2,
@@ -889,7 +909,7 @@ gtk_viewport_adjustment_value_changed (GtkAdjustment *adjustment,
gpointer data)
{
GtkViewport *viewport = GTK_VIEWPORT (data);
- GtkViewportPriv *priv = viewport->priv;
+ GtkViewportPrivate *priv = viewport->priv;
GtkBin *bin = GTK_BIN (data);
GtkWidget *child;
@@ -921,11 +941,15 @@ gtk_viewport_style_set (GtkWidget *widget,
if (gtk_widget_get_realized (widget) &&
gtk_widget_get_has_window (widget))
{
+ GtkStyle *style;
GtkViewport *viewport = GTK_VIEWPORT (widget);
- GtkViewportPriv *priv = viewport->priv;
+ GtkViewportPrivate *priv = viewport->priv;
- gtk_style_set_background (widget->style, priv->bin_window, GTK_STATE_NORMAL);
- gtk_style_set_background (widget->style, widget->window, widget->state);
+ style = gtk_widget_get_style (widget);
+ gtk_style_set_background (style, priv->bin_window, GTK_STATE_NORMAL);
+ gtk_style_set_background (style,
+ gtk_widget_get_window (widget),
+ gtk_widget_get_state (widget));
}
}
@@ -944,7 +968,8 @@ gtk_viewport_get_size (GtkSizeRequest *widget,
gint *natural_size)
{
GtkViewport *viewport = GTK_VIEWPORT (widget);
- GtkViewportPriv *priv = viewport->priv;
+ GtkViewportPrivate *priv = viewport->priv;
+ GtkStyle *style;
GtkWidget *child;
gint child_min, child_nat;
gint minimum, natural;
@@ -958,10 +983,11 @@ gtk_viewport_get_size (GtkSizeRequest *widget,
if (priv->shadow_type != GTK_SHADOW_NONE)
{
+ style = gtk_widget_get_style (GTK_WIDGET (widget));
if (orientation == GTK_ORIENTATION_HORIZONTAL)
- minimum += 2 * GTK_WIDGET (widget)->style->xthickness;
+ minimum += 2 * style->xthickness;
else
- minimum += 2 * GTK_WIDGET (widget)->style->ythickness;
+ minimum += 2 * style->ythickness;
}
natural = minimum;