gtk/gtkiconview.c: use accessor functions to access GtkWidget

This commit is contained in:
Javier Jardón 2010-08-11 23:10:57 +02:00
parent a48d28848e
commit 89e8f79f07

View File

@ -1325,20 +1325,22 @@ gtk_icon_view_get_property (GObject *object,
static void
gtk_icon_view_realize (GtkWidget *widget)
{
GtkIconView *icon_view;
GtkIconView *icon_view = GTK_ICON_VIEW (widget);
GtkAllocation allocation;
GdkWindow *window;
GdkWindowAttr attributes;
gint attributes_mask;
icon_view = GTK_ICON_VIEW (widget);
gtk_widget_set_realized (widget, TRUE);
gtk_widget_get_allocation (widget, &allocation);
/* Make the main, clipping window */
attributes.window_type = GDK_WINDOW_CHILD;
attributes.x = widget->allocation.x;
attributes.y = widget->allocation.y;
attributes.width = widget->allocation.width;
attributes.height = widget->allocation.height;
attributes.x = allocation.x;
attributes.y = allocation.y;
attributes.width = allocation.width;
attributes.height = allocation.height;
attributes.wclass = GDK_INPUT_OUTPUT;
attributes.visual = gtk_widget_get_visual (widget);
attributes.colormap = gtk_widget_get_colormap (widget);
@ -1346,16 +1348,19 @@ gtk_icon_view_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_back_pixmap (widget->window, NULL, FALSE);
gdk_window_set_user_data (widget->window, widget);
window = gdk_window_new (gtk_widget_get_parent_window (widget),
&attributes, attributes_mask);
gtk_widget_set_window (widget, window);
gdk_window_set_back_pixmap (window, NULL, FALSE);
gdk_window_set_user_data (window, widget);
gtk_widget_get_allocation (widget, &allocation);
/* Make the window for the icon view */
attributes.x = 0;
attributes.y = 0;
attributes.width = MAX (icon_view->priv->width, widget->allocation.width);
attributes.height = MAX (icon_view->priv->height, widget->allocation.height);
attributes.width = MAX (icon_view->priv->width, allocation.width);
attributes.height = MAX (icon_view->priv->height, allocation.height);
attributes.event_mask = (GDK_EXPOSURE_MASK |
GDK_SCROLL_MASK |
GDK_POINTER_MOTION_MASK |
@ -1365,12 +1370,13 @@ gtk_icon_view_realize (GtkWidget *widget)
GDK_KEY_RELEASE_MASK) |
gtk_widget_get_events (widget);
icon_view->priv->bin_window = gdk_window_new (widget->window,
icon_view->priv->bin_window = gdk_window_new (window,
&attributes, attributes_mask);
gdk_window_set_user_data (icon_view->priv->bin_window, widget);
widget->style = gtk_style_attach (widget->style, widget->window);
gdk_window_set_background (icon_view->priv->bin_window, &widget->style->base[widget->state]);
gtk_widget_style_attach (widget);
gdk_window_set_background (icon_view->priv->bin_window,
&gtk_widget_get_style (widget)->base[gtk_widget_get_state (widget)]);
gdk_window_show (icon_view->priv->bin_window);
}
@ -1394,11 +1400,16 @@ gtk_icon_view_state_changed (GtkWidget *widget,
GtkStateType previous_state)
{
GtkIconView *icon_view = GTK_ICON_VIEW (widget);
GtkStateType state;
GtkStyle *style;
if (gtk_widget_get_realized (widget))
{
gdk_window_set_background (widget->window, &widget->style->base[widget->state]);
gdk_window_set_background (icon_view->priv->bin_window, &widget->style->base[widget->state]);
style = gtk_widget_get_style (widget);
state = gtk_widget_get_state (widget);
gdk_window_set_background (gtk_widget_get_window (widget), &style->base[state]);
gdk_window_set_background (icon_view->priv->bin_window, &style->base[state]);
}
gtk_widget_queue_draw (widget);
@ -1409,11 +1420,16 @@ gtk_icon_view_style_set (GtkWidget *widget,
GtkStyle *previous_style)
{
GtkIconView *icon_view = GTK_ICON_VIEW (widget);
GtkStateType state;
GtkStyle *style;
if (gtk_widget_get_realized (widget))
{
gdk_window_set_background (widget->window, &widget->style->base[widget->state]);
gdk_window_set_background (icon_view->priv->bin_window, &widget->style->base[widget->state]);
style = gtk_widget_get_style (widget);
state = gtk_widget_get_state (widget);
gdk_window_set_background (gtk_widget_get_window (widget), &style->base[state]);
gdk_window_set_background (icon_view->priv->bin_window, &style->base[state]);
}
gtk_widget_queue_resize (widget);
@ -1483,11 +1499,11 @@ gtk_icon_view_size_allocate (GtkWidget *widget,
GtkAdjustment *hadjustment, *vadjustment;
widget->allocation = *allocation;
gtk_widget_set_allocation (widget, allocation);
if (gtk_widget_get_realized (widget))
{
gdk_window_move_resize (widget->window,
gdk_window_move_resize (gtk_widget_get_window (widget),
allocation->x, allocation->y,
allocation->width, allocation->height);
gdk_window_resize (icon_view->priv->bin_window,
@ -1600,53 +1616,49 @@ gtk_icon_view_expose (GtkWidget *widget,
if (dest_item)
{
GtkStateType state;
GtkStyle *style;
style = gtk_widget_get_style (widget);
state = gtk_widget_get_state (widget);
switch (dest_pos)
{
case GTK_ICON_VIEW_DROP_INTO:
gtk_paint_focus (widget->style,
icon_view->priv->bin_window,
gtk_widget_get_state (widget),
NULL,
gtk_paint_focus (style, icon_view->priv->bin_window,
state, NULL,
widget,
"iconview-drop-indicator",
dest_item->x, dest_item->y,
dest_item->width, dest_item->height);
break;
case GTK_ICON_VIEW_DROP_ABOVE:
gtk_paint_focus (widget->style,
icon_view->priv->bin_window,
gtk_widget_get_state (widget),
NULL,
gtk_paint_focus (style, icon_view->priv->bin_window,
state, NULL,
widget,
"iconview-drop-indicator",
dest_item->x, dest_item->y - 1,
dest_item->width, 2);
break;
case GTK_ICON_VIEW_DROP_LEFT:
gtk_paint_focus (widget->style,
icon_view->priv->bin_window,
gtk_widget_get_state (widget),
NULL,
gtk_paint_focus (style, icon_view->priv->bin_window,
state, NULL,
widget,
"iconview-drop-indicator",
dest_item->x - 1, dest_item->y,
2, dest_item->height);
break;
case GTK_ICON_VIEW_DROP_BELOW:
gtk_paint_focus (widget->style,
icon_view->priv->bin_window,
gtk_widget_get_state (widget),
NULL,
gtk_paint_focus (style, icon_view->priv->bin_window,
state, NULL,
widget,
"iconview-drop-indicator",
dest_item->x, dest_item->y + dest_item->height - 1,
dest_item->width, 2);
break;
case GTK_ICON_VIEW_DROP_RIGHT:
gtk_paint_focus (widget->style,
icon_view->priv->bin_window,
gtk_widget_get_state (widget),
NULL,
gtk_paint_focus (style, icon_view->priv->bin_window,
state, NULL,
widget,
"iconview-drop-indicator",
dest_item->x + dest_item->width - 1, dest_item->y,
@ -1695,6 +1707,7 @@ static gboolean
gtk_icon_view_motion (GtkWidget *widget,
GdkEventMotion *event)
{
GtkAllocation allocation;
GtkIconView *icon_view;
gint abs_y;
@ -1711,12 +1724,14 @@ gtk_icon_view_motion (GtkWidget *widget,
(icon_view->priv->vadjustment->upper -
icon_view->priv->vadjustment->lower));
if (abs_y < 0 || abs_y > widget->allocation.height)
gtk_widget_get_allocation (widget, &allocation);
if (abs_y < 0 || abs_y > allocation.height)
{
if (abs_y < 0)
icon_view->priv->scroll_value_diff = abs_y;
else
icon_view->priv->scroll_value_diff = abs_y - widget->allocation.height;
icon_view->priv->scroll_value_diff = abs_y - allocation.height;
icon_view->priv->event_last_x = event->x;
icon_view->priv->event_last_y = event->y;
@ -2686,6 +2701,8 @@ gtk_icon_view_layout_single_row (GtkIconView *icon_view,
gint *y,
gint *maximum_width)
{
GtkAllocation allocation;
GtkWidget *widget = GTK_WIDGET (icon_view);
gint focus_width;
gint x, current_width;
GList *items, *last_item;
@ -2695,7 +2712,7 @@ gtk_icon_view_layout_single_row (GtkIconView *icon_view,
gint i;
gboolean rtl;
rtl = gtk_widget_get_direction (GTK_WIDGET (icon_view)) == GTK_TEXT_DIR_RTL;
rtl = gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL;
max_height = g_new0 (gint, icon_view->priv->n_cells);
x = 0;
@ -2703,7 +2720,7 @@ gtk_icon_view_layout_single_row (GtkIconView *icon_view,
items = first_item;
current_width = 0;
gtk_widget_style_get (GTK_WIDGET (icon_view),
gtk_widget_style_get (widget,
"focus-line-width", &focus_width,
NULL);
@ -2724,7 +2741,9 @@ gtk_icon_view_layout_single_row (GtkIconView *icon_view,
if (items != first_item)
{
if ((icon_view->priv->columns <= 0 && current_width > GTK_WIDGET (icon_view)->allocation.width) ||
gtk_widget_get_allocation (widget, &allocation);
if ((icon_view->priv->columns <= 0 && current_width > allocation.width) ||
(icon_view->priv->columns > 0 && col >= icon_view->priv->columns))
break;
}
@ -2801,10 +2820,11 @@ gtk_icon_view_set_adjustment_upper (GtkAdjustment *adj,
static void
gtk_icon_view_layout (GtkIconView *icon_view)
{
gint y = 0, maximum_width = 0;
GList *icons;
GtkWidget *widget;
GtkAllocation allocation;
GtkRequisition requisition;
GtkWidget *widget;
GList *icons;
gint y = 0, maximum_width = 0;
gint row;
gint item_width;
@ -2870,10 +2890,11 @@ gtk_icon_view_layout (GtkIconView *icon_view)
icon_view->priv->height != requisition.height)
gtk_widget_queue_resize_no_redraw (widget);
gtk_widget_get_allocation (widget, &allocation);
if (gtk_widget_get_realized (GTK_WIDGET (icon_view)))
gdk_window_resize (icon_view->priv->bin_window,
MAX (icon_view->priv->width, widget->allocation.width),
MAX (icon_view->priv->height, widget->allocation.height));
MAX (icon_view->priv->width, allocation.width),
MAX (icon_view->priv->height, allocation.height));
if (icon_view->priv->scroll_to_path)
{
@ -3163,13 +3184,16 @@ gtk_icon_view_paint_item (GtkIconView *icon_view,
gint i;
GtkStateType state;
GtkCellRendererState flags;
GtkStyle *style;
GtkWidget *widget = GTK_WIDGET (icon_view);
if (icon_view->priv->model == NULL)
return;
gtk_icon_view_set_cell_data (icon_view, item);
gtk_widget_style_get (GTK_WIDGET (icon_view),
style = gtk_widget_get_style (widget);
gtk_widget_style_get (widget,
"focus-line-width", &focus_width,
NULL);
@ -3178,7 +3202,7 @@ gtk_icon_view_paint_item (GtkIconView *icon_view,
if (item->selected)
{
flags = GTK_CELL_RENDERER_SELECTED;
if (gtk_widget_has_focus (GTK_WIDGET (icon_view)))
if (gtk_widget_has_focus (widget))
state = GTK_STATE_SELECTED;
else
state = GTK_STATE_ACTIVE;
@ -3188,15 +3212,15 @@ gtk_icon_view_paint_item (GtkIconView *icon_view,
flags = 0;
state = GTK_STATE_NORMAL;
}
if (item->selected)
{
gtk_paint_flat_box (GTK_WIDGET (icon_view)->style,
(GdkWindow *) drawable,
gtk_paint_flat_box (style,
GDK_WINDOW (drawable),
GTK_STATE_SELECTED,
GTK_SHADOW_NONE,
area,
GTK_WIDGET (icon_view),
widget,
"icon_view_item",
x, y,
item->width, item->height);
@ -3210,18 +3234,18 @@ gtk_icon_view_paint_item (GtkIconView *icon_view,
continue;
gtk_icon_view_get_cell_area (icon_view, item, info, &cell_area);
cell_area.x = x - item->x + cell_area.x;
cell_area.y = y - item->y + cell_area.y;
gtk_cell_renderer_render (info->cell,
drawable,
GTK_WIDGET (icon_view),
widget,
&cell_area, &cell_area, area, flags);
}
if (draw_focus &&
gtk_widget_has_focus (GTK_WIDGET (icon_view)) &&
gtk_widget_has_focus (widget) &&
item == icon_view->priv->cursor_item)
{
for (l = icon_view->priv->cell_list, i = 0; l; l = l->next, i++)
@ -3242,11 +3266,11 @@ gtk_icon_view_paint_item (GtkIconView *icon_view,
if (i == icon_view->priv->cursor_cell)
{
gtk_paint_focus (GTK_WIDGET (icon_view)->style,
gtk_paint_focus (style,
drawable,
GTK_STATE_NORMAL,
area,
GTK_WIDGET (icon_view),
widget,
"icon_view",
x - item->x + box.x - padding,
y - item->y + box.y - padding,
@ -3260,11 +3284,11 @@ gtk_icon_view_paint_item (GtkIconView *icon_view,
* around the whole item.
*/
if (icon_view->priv->cursor_cell < 0)
gtk_paint_focus (GTK_WIDGET (icon_view)->style,
gtk_paint_focus (style,
drawable,
GTK_STATE_NORMAL,
area,
GTK_WIDGET (icon_view),
widget,
"icon_view",
x - padding,
y - padding,
@ -3297,7 +3321,7 @@ gtk_icon_view_paint_rubberband (GtkIconView *icon_view,
NULL);
if (!fill_color_gdk)
fill_color_gdk = gdk_color_copy (&GTK_WIDGET (icon_view)->style->base[GTK_STATE_SELECTED]);
fill_color_gdk = gdk_color_copy (&gtk_widget_get_style (GTK_WIDGET (icon_view))->base[GTK_STATE_SELECTED]);
cairo_set_source_rgba (cr,
fill_color_gdk->red / 65535.,
@ -4366,18 +4390,21 @@ gtk_icon_view_scroll_to_path (GtkIconView *icon_view,
gfloat col_align)
{
GtkIconViewItem *item = NULL;
GtkWidget *widget;
g_return_if_fail (GTK_IS_ICON_VIEW (icon_view));
g_return_if_fail (path != NULL);
g_return_if_fail (row_align >= 0.0 && row_align <= 1.0);
g_return_if_fail (col_align >= 0.0 && col_align <= 1.0);
widget = GTK_WIDGET (icon_view);
if (gtk_tree_path_get_depth (path) > 0)
item = g_list_nth_data (icon_view->priv->items,
gtk_tree_path_get_indices(path)[0]);
if (!item || item->width < 0 ||
!gtk_widget_get_realized (GTK_WIDGET (icon_view)))
!gtk_widget_get_realized (widget))
{
if (icon_view->priv->scroll_to_path)
gtk_tree_row_reference_free (icon_view->priv->scroll_to_path);
@ -4396,24 +4423,25 @@ gtk_icon_view_scroll_to_path (GtkIconView *icon_view,
if (use_align)
{
GtkAllocation allocation;
gint x, y;
gint focus_width;
gfloat offset;
gtk_widget_style_get (GTK_WIDGET (icon_view),
gtk_widget_style_get (widget,
"focus-line-width", &focus_width,
NULL);
gdk_window_get_position (icon_view->priv->bin_window, &x, &y);
offset = y + item->y - focus_width -
row_align * (GTK_WIDGET (icon_view)->allocation.height - item->height);
gtk_widget_get_allocation (widget, &allocation);
offset = y + item->y - focus_width - row_align * (allocation.height - item->height);
gtk_adjustment_set_value (icon_view->priv->vadjustment,
icon_view->priv->vadjustment->value + offset);
offset = x + item->x - focus_width -
col_align * (GTK_WIDGET (icon_view)->allocation.width - item->width);
offset = x + item->x - focus_width - col_align * (allocation.width - item->width);
gtk_adjustment_set_value (icon_view->priv->hadjustment,
icon_view->priv->hadjustment->value + offset);
@ -4430,32 +4458,36 @@ static void
gtk_icon_view_scroll_to_item (GtkIconView *icon_view,
GtkIconViewItem *item)
{
GtkAllocation allocation;
GtkWidget *widget = GTK_WIDGET (icon_view);
gint x, y, width, height;
gint focus_width;
gtk_widget_style_get (GTK_WIDGET (icon_view),
gtk_widget_style_get (widget,
"focus-line-width", &focus_width,
NULL);
gdk_drawable_get_size (GDK_DRAWABLE (icon_view->priv->bin_window),
&width, &height);
gdk_window_get_position (icon_view->priv->bin_window, &x, &y);
gtk_widget_get_allocation (widget, &allocation);
if (y + item->y - focus_width < 0)
gtk_adjustment_set_value (icon_view->priv->vadjustment,
icon_view->priv->vadjustment->value + y + item->y - focus_width);
else if (y + item->y + item->height + focus_width > GTK_WIDGET (icon_view)->allocation.height)
else if (y + item->y + item->height + focus_width > allocation.height)
gtk_adjustment_set_value (icon_view->priv->vadjustment,
icon_view->priv->vadjustment->value + y + item->y + item->height
+ focus_width - GTK_WIDGET (icon_view)->allocation.height);
+ focus_width - allocation.height);
if (x + item->x - focus_width < 0)
gtk_adjustment_set_value (icon_view->priv->hadjustment,
icon_view->priv->hadjustment->value + x + item->x - focus_width);
else if (x + item->x + item->width + focus_width > GTK_WIDGET (icon_view)->allocation.width)
icon_view->priv->hadjustment->value + x + item->x - focus_width);
else if (x + item->x + item->width + focus_width > allocation.width)
gtk_adjustment_set_value (icon_view->priv->hadjustment,
icon_view->priv->hadjustment->value + x + item->x + item->width
+ focus_width - GTK_WIDGET (icon_view)->allocation.width);
+ focus_width - allocation.width);
gtk_adjustment_changed (icon_view->priv->hadjustment);
gtk_adjustment_changed (icon_view->priv->vadjustment);
@ -6561,11 +6593,14 @@ remove_scroll_timeout (GtkIconView *icon_view)
static void
gtk_icon_view_autoscroll (GtkIconView *icon_view)
{
GdkWindow *window;
gint px, py, x, y, width, height;
gint hoffset, voffset;
gdk_window_get_pointer (GTK_WIDGET (icon_view)->window, &px, &py, NULL);
gdk_window_get_geometry (GTK_WIDGET (icon_view)->window, &x, &y, &width, &height, NULL);
window = gtk_widget_get_window (GTK_WIDGET (icon_view));
gdk_window_get_pointer (window, &px, &py, NULL);
gdk_window_get_geometry (window, &x, &y, &width, &height, NULL);
/* see if we are near the edge. */
voffset = py - (y + 2 * SCROLL_EDGE_SIZE);
@ -7466,8 +7501,7 @@ gtk_icon_view_create_drag_icon (GtkIconView *icon_view,
cr = gdk_cairo_create (drawable);
cairo_set_line_width (cr, 1.);
gdk_cairo_set_source_color
(cr, &widget->style->base[gtk_widget_get_state (widget)]);
gdk_cairo_set_source_color (cr, &gtk_widget_get_style (widget)->base[gtk_widget_get_state (widget)]);
cairo_rectangle (cr, 0, 0, item->width + 2, item->height + 2);
cairo_fill (cr);
@ -8629,6 +8663,7 @@ gtk_icon_view_item_accessible_remove_state (GtkIconViewItemAccessible *item,
static gboolean
gtk_icon_view_item_accessible_is_showing (GtkIconViewItemAccessible *item)
{
GtkAllocation allocation;
GtkIconView *icon_view;
GdkRectangle visible_rect;
gboolean is_showing;
@ -8644,6 +8679,8 @@ gtk_icon_view_item_accessible_is_showing (GtkIconViewItemAccessible *item)
if (item->item == NULL)
return FALSE;
gtk_widget_get_allocation (item->widget, &allocation);
icon_view = GTK_ICON_VIEW (item->widget);
visible_rect.x = 0;
if (icon_view->priv->hadjustment)
@ -8651,8 +8688,8 @@ gtk_icon_view_item_accessible_is_showing (GtkIconViewItemAccessible *item)
visible_rect.y = 0;
if (icon_view->priv->hadjustment)
visible_rect.y += icon_view->priv->vadjustment->value;
visible_rect.width = item->widget->allocation.width;
visible_rect.height = item->widget->allocation.height;
visible_rect.width = allocation.width;
visible_rect.height = allocation.height;
if (((item->item->x + item->item->width) < visible_rect.x) ||
((item->item->y + item->item->height) < (visible_rect.y)) ||