- if (GTK_PROGRESS (pbar)->activity_mode)
- {
- guint size;
-
- /* advance the block */
-
- if (pbar->orientation == GTK_PROGRESS_LEFT_TO_RIGHT ||
- pbar->orientation == GTK_PROGRESS_RIGHT_TO_LEFT)
- {
- /* Update our activity step. */
-
- pbar->activity_step = widget->allocation.width * pbar->pulse_fraction;
-
- size = MAX (2, widget->allocation.width / pbar->activity_blocks);
-
- if (pbar->activity_dir == 0)
- {
- pbar->activity_pos += pbar->activity_step;
- if (pbar->activity_pos + size >=
- widget->allocation.width -
- widget->style->xthickness)
- {
- pbar->activity_pos = widget->allocation.width -
- widget->style->xthickness - size;
- pbar->activity_dir = 1;
- }
- }
- else
- {
- pbar->activity_pos -= pbar->activity_step;
- if (pbar->activity_pos <= widget->style->xthickness)
- {
- pbar->activity_pos = widget->style->xthickness;
- pbar->activity_dir = 0;
- }
- }
- }
- else
- {
- /* Update our activity step. */
-
- pbar->activity_step = widget->allocation.height * pbar->pulse_fraction;
-
- size = MAX (2, widget->allocation.height / pbar->activity_blocks);
-
- if (pbar->activity_dir == 0)
- {
- pbar->activity_pos += pbar->activity_step;
- if (pbar->activity_pos + size >=
- widget->allocation.height -
- widget->style->ythickness)
- {
- pbar->activity_pos = widget->allocation.height -
- widget->style->ythickness - size;
- pbar->activity_dir = 1;
- }
- }
- else
- {
- pbar->activity_pos -= pbar->activity_step;
- if (pbar->activity_pos <= widget->style->ythickness)
- {
- pbar->activity_pos = widget->style->ythickness;
- pbar->activity_dir = 0;
- }
- }
- }
- }
- pbar->dirty = TRUE;
- gtk_widget_queue_draw (GTK_WIDGET (progress));
- }
- else
- {
- gint in_block;
-
- in_block = -1 + (gint)(gtk_progress_get_current_percentage (progress) *
- (gdouble)pbar->blocks);
-
- if (pbar->in_block != in_block)
- {
- pbar->in_block = in_block;
- pbar->dirty = TRUE;
- gtk_widget_queue_draw (GTK_WIDGET (progress));
- }
+ GtkAllocation allocation;
+ GtkStyleContext *context;
+ GtkStateFlags state;
+ GtkBorder padding;
+ gint size;
+
+ gtk_widget_get_allocation (widget, &allocation);
+ context = gtk_widget_get_style_context (widget);
+ state = gtk_widget_get_state_flags (widget);
+ gtk_style_context_get_padding (context, state, &padding);
+
+ /* advance the block */
+ if (priv->orientation == GTK_ORIENTATION_HORIZONTAL)
+ {
+ /* Update our activity step. */
+ priv->activity_step = allocation.width * priv->pulse_fraction;
+
+ size = MAX (2, allocation.width / priv->activity_blocks);
+
+ if (priv->activity_dir == 0)
+ {
+ priv->activity_pos += priv->activity_step;
+ if (priv->activity_pos + size >= allocation.width - padding.left)
+ {
+ priv->activity_pos = allocation.width - padding.left - size;
+ priv->activity_dir = 1;
+ }
+ }
+ else
+ {
+ priv->activity_pos -= priv->activity_step;
+ if (priv->activity_pos <= padding.left)
+ {
+ priv->activity_pos = padding.left;
+ priv->activity_dir = 0;
+ }
+ }
+ }
+ else
+ {
+ /* Update our activity step. */
+ priv->activity_step = allocation.height * priv->pulse_fraction;
+
+ size = MAX (2, allocation.height / priv->activity_blocks);
+
+ if (priv->activity_dir == 0)
+ {
+ priv->activity_pos += priv->activity_step;
+ if (priv->activity_pos + size >= allocation.height - padding.top)
+ {
+ priv->activity_pos = allocation.height - padding.top - size;
+ priv->activity_dir = 1;
+ }
+ }
+ else
+ {
+ priv->activity_pos -= priv->activity_step;
+ if (priv->activity_pos <= padding.top)
+ {
+ priv->activity_pos = padding.top;
+ priv->activity_dir = 0;
+ }
+ }
+ }