ARG_HAS_FOCUS,
ARG_CAN_DEFAULT,
ARG_HAS_DEFAULT,
+ ARG_RECEIVES_DEFAULT,
ARG_COMPOSITE_CHILD,
ARG_STYLE,
ARG_EVENTS,
gtk_object_add_arg_type ("GtkWidget::has_focus", GTK_TYPE_BOOL, GTK_ARG_READWRITE, ARG_HAS_FOCUS);
gtk_object_add_arg_type ("GtkWidget::can_default", GTK_TYPE_BOOL, GTK_ARG_READWRITE, ARG_CAN_DEFAULT);
gtk_object_add_arg_type ("GtkWidget::has_default", GTK_TYPE_BOOL, GTK_ARG_READWRITE, ARG_HAS_DEFAULT);
+ gtk_object_add_arg_type ("GtkWidget::receives_default", GTK_TYPE_BOOL, GTK_ARG_READWRITE, ARG_RECEIVES_DEFAULT);
gtk_object_add_arg_type ("GtkWidget::composite_child", GTK_TYPE_BOOL, GTK_ARG_READWRITE, ARG_COMPOSITE_CHILD);
gtk_object_add_arg_type ("GtkWidget::style", GTK_TYPE_STYLE, GTK_ARG_READWRITE, ARG_STYLE);
gtk_object_add_arg_type ("GtkWidget::events", GTK_TYPE_GDK_EVENT_MASK, GTK_ARG_READWRITE, ARG_EVENTS);
object_class->type,
GTK_SIGNAL_OFFSET (GtkWidgetClass, selection_get),
gtk_marshal_NONE__POINTER_UINT_UINT,
- GTK_TYPE_NONE, 2,
+ GTK_TYPE_NONE, 3,
GTK_TYPE_SELECTION_DATA,
GTK_TYPE_UINT,
GTK_TYPE_UINT);
if (GTK_VALUE_BOOL (*arg))
gtk_widget_grab_default (widget);
break;
+ case ARG_RECEIVES_DEFAULT:
+ if (GTK_VALUE_BOOL (*arg))
+ GTK_WIDGET_SET_FLAGS (widget, GTK_RECEIVES_DEFAULT);
+ else
+ GTK_WIDGET_UNSET_FLAGS (widget, GTK_RECEIVES_DEFAULT);
+ break;
case ARG_COMPOSITE_CHILD:
if (GTK_VALUE_BOOL(*arg))
GTK_WIDGET_SET_FLAGS (widget, GTK_COMPOSITE_CHILD);
case ARG_HAS_DEFAULT:
GTK_VALUE_BOOL (*arg) = (GTK_WIDGET_HAS_DEFAULT (widget) != FALSE);
break;
+ case ARG_RECEIVES_DEFAULT:
+ GTK_VALUE_BOOL (*arg) = (GTK_WIDGET_RECEIVES_DEFAULT (widget) != FALSE);
+ break;
case ARG_COMPOSITE_CHILD:
GTK_VALUE_BOOL (*arg) = (GTK_WIDGET_COMPOSITE_CHILD (widget) != FALSE);
break;
g_return_if_fail (widget != NULL);
g_return_if_fail (GTK_IS_WIDGET (widget));
- gtk_widget_queue_draw_data (widget, x, y, width, height, NULL);
+ if (widget->window && gdk_window_is_viewable (widget->window))
+ gtk_widget_queue_draw_data (widget, x, y, width, height, NULL);
}
void
g_return_if_fail (widget != NULL);
g_return_if_fail (GTK_IS_WIDGET (widget));
- gtk_widget_queue_draw_data (widget, 0, 0, -1, -1, NULL);
+ if (widget->window && gdk_window_is_viewable (widget->window))
+ gtk_widget_queue_draw_data (widget, 0, 0, -1, -1, NULL);
}
void
g_return_if_fail (widget != NULL);
g_return_if_fail (GTK_IS_WIDGET (widget));
+ if (!(widget->window && gdk_window_is_viewable (widget->window)))
+ return;
+
/* Find the correct widget */
if (GTK_WIDGET_NO_WINDOW (widget))
if (rect->x < 0)
{
- rect->width += rect->x;
+ rect->width = (rect->width > -rect->x) ? rect->width + rect->x : 0;
rect->x = 0;
}
if (rect->y < 0)
{
- rect->height += rect->y;
+ rect->height = (rect->height > -rect->y) ? rect->width + rect->y : 0;
rect->y = 0;
}
if (rect->x + rect->width > width)
- rect->width = width - rect->x;
+ rect->width = (width > rect->x) ? width - rect->x : 0;
if (rect->y + rect->height > height)
- rect->height = height - rect->y;
+ rect->height = (height > rect->y) ? height - rect->y : 0;
}
if (!window)
}
static gint
-gtk_widget_idle_draw (gpointer data)
+gtk_widget_idle_draw (gpointer cb_data)
{
GSList *widget_list;
GSList *old_queue;
gtk_object_set_data_by_id (GTK_OBJECT (widget),
draw_data_tmp_key_id,
draw_data_list);
-
+
+ /* XXX: Since we are unsetting this flag here, further
+ * down the only way we can check if a redraw is queued
+ * on a given widget is by calling gtk_object_get_data.
+ * for speed purposes we might well want a private
+ * flag GTK_REDRAW_PROCESSING or something.
+ */
GTK_PRIVATE_UNSET_FLAG (widget, GTK_REDRAW_PENDING);
while (draw_data_list)
if (parent)
parent = parent->parent;
-
- if (parent && GTK_WIDGET_REDRAW_PENDING (parent))
+
+ if (parent)
parent_list = gtk_object_get_data_by_id (GTK_OBJECT (parent),
draw_data_tmp_key_id);
else
while (draw_data_list)
{
GtkDrawData *data = draw_data_list->data;
- gtk_widget_draw (widget, &data->rect);
+ if ((data->rect.width != 0) || (data->rect.height != 0))
+ gtk_widget_draw (widget, &data->rect);
if (draw_data_list->next)
draw_data_list = draw_data_list->next;
}
}
-void
-gtk_widget_thaw_accelerators (GtkWidget *widget)
-{
- g_message ("gtk_widget_thaw_accelerators() is deprecated");
-
- gtk_widget_unlock_accelerators (widget);
-}
-
-void
-gtk_widget_freeze_accelerators (GtkWidget *widget)
-{
- g_message ("gtk_widget_freeze_accelerators() is deprecated");
-
- gtk_widget_lock_accelerators (widget);
-}
-
void
gtk_widget_add_accelerator (GtkWidget *widget,
const gchar *accel_signal,
break;
case GDK_EXPOSE:
/* there is no sense in providing a widget with bogus expose events.
- * Widgets that are going to be resized don't need to be
- * exposed, since they will be redrawn anyways.
*/
- if (!event->any.window ||
- GTK_WIDGET_RESIZE_NEEDED (widget) ||
- (widget->parent && GTK_WIDGET_RESIZE_NEEDED (widget->parent)))
+ if (!event->any.window)
{
gtk_widget_unref (widget);
return TRUE;