From 4d74129c6123121d59c33089c8c5fec5dfd38c6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timm=20B=C3=A4der?= Date: Fri, 16 Jun 2017 11:19:52 +0200 Subject: [PATCH] entry: Use images for icons --- gtk/gtkentry.c | 440 +++++++++++-------------------------------------- 1 file changed, 93 insertions(+), 347 deletions(-) diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c index 13e63d0b09..7b5f63bce6 100644 --- a/gtk/gtkentry.c +++ b/gtk/gtkentry.c @@ -38,7 +38,6 @@ #include "gtkdndprivate.h" #include "gtkentry.h" #include "gtkentrybuffer.h" -#include "gtkiconhelperprivate.h" #include "gtkimcontextsimple.h" #include "gtkimmulticontext.h" #include "gtkintl.h" @@ -70,6 +69,7 @@ #include "gtkcssnodeprivate.h" #include "gtkcsscustomgadgetprivate.h" #include "gtkprogresstrackerprivate.h" +#include "gtkimageprivate.h" #include "a11y/gtkentryaccessible.h" @@ -278,17 +278,15 @@ struct _GtkEntryPrivate struct _EntryIconInfo { - GdkWindow *window; + GtkWidget *widget; + GtkWidget *image; gchar *tooltip; - guint insensitive : 1; guint nonactivatable : 1; - guint prelight : 1; guint in_drag : 1; guint pressed : 1; GdkDragAction actions; GtkTargetList *target_list; - GtkCssGadget *gadget; GdkEventSequence *current_sequence; GdkDevice *device; }; @@ -418,10 +416,6 @@ static void gtk_entry_snapshot (GtkWidget *widget, GtkSnapshot *snapshot); static gboolean gtk_entry_event (GtkWidget *widget, GdkEvent *event); -static gint gtk_entry_enter_notify (GtkWidget *widget, - GdkEventCrossing *event); -static gint gtk_entry_leave_notify (GtkWidget *widget, - GdkEventCrossing *event); static gint gtk_entry_key_press (GtkWidget *widget, GdkEventKey *event); static gint gtk_entry_key_release (GtkWidget *widget, @@ -664,7 +658,7 @@ static void buffer_connect_signals (GtkEntry *entry); static void buffer_disconnect_signals (GtkEntry *entry); static GtkEntryBuffer *get_buffer (GtkEntry *entry); -static void gtk_entry_measure (GtkWidget *gadget, +static void gtk_entry_measure (GtkWidget *widget, GtkOrientation orientation, int for_size, int *minimum, @@ -724,8 +718,6 @@ gtk_entry_class_init (GtkEntryClass *class) widget_class->measure = gtk_entry_measure; widget_class->size_allocate = gtk_entry_size_allocate; widget_class->snapshot = gtk_entry_snapshot; - widget_class->enter_notify_event = gtk_entry_enter_notify; - widget_class->leave_notify_event = gtk_entry_leave_notify; widget_class->event = gtk_entry_event; widget_class->key_press_event = gtk_entry_key_press; widget_class->key_release_event = gtk_entry_key_release; @@ -2546,11 +2538,11 @@ get_icon_width (GtkEntry *entry, if (!icon_info) return 0; - gtk_css_gadget_get_preferred_size (icon_info->gadget, - GTK_ORIENTATION_HORIZONTAL, - -1, - &width, NULL, - NULL, NULL); + gtk_widget_measure (icon_info->widget, + GTK_ORIENTATION_HORIZONTAL, + -1, + &width, NULL, + NULL, NULL); return width; } @@ -2669,7 +2661,7 @@ gtk_entry_finalize (GObject *object) if (icon_info->target_list != NULL) gtk_target_list_unref (icon_info->target_list); - g_clear_object (&icon_info->gadget); + gtk_widget_unparent (icon_info->widget); g_slice_free (EntryIconInfo, icon_info); } @@ -2816,26 +2808,18 @@ update_cursors (GtkWidget *widget) { if ((icon_info = priv->icons[i]) != NULL) { - if (!_gtk_icon_helper_get_is_empty (GTK_ICON_HELPER (icon_info->gadget)) && - icon_info->window != NULL) - gdk_window_show_unraised (icon_info->window); - - /* The icon windows are not children of the visible entry window, - * thus we can't just inherit the xterm cursor. Slight complication - * here is that for the entry, insensitive => arrow cursor, but for - * an icon in a sensitive entry, insensitive => xterm cursor. - */ + /* Set the cursor explicitly to the default one */ if (gtk_widget_is_sensitive (widget) && - (icon_info->insensitive || + (gtk_widget_get_sensitive (icon_info->widget) || (icon_info->nonactivatable && icon_info->target_list == NULL))) { - cursor = gdk_cursor_new_from_name (display, "text"); - gdk_window_set_cursor (icon_info->window, cursor); + cursor = gdk_cursor_new_from_name (display, "default"); + gtk_widget_set_cursor (icon_info->widget, cursor); g_clear_object (&cursor); } else { - gdk_window_set_cursor (icon_info->window, NULL); + gtk_widget_set_cursor (icon_info->widget, NULL); } } } @@ -2843,24 +2827,6 @@ update_cursors (GtkWidget *widget) set_text_cursor (widget); } -static void -realize_icon_info (GtkWidget *widget, - GtkEntryIconPosition icon_pos) -{ - GtkEntry *entry = GTK_ENTRY (widget); - GtkEntryPrivate *priv = entry->priv; - EntryIconInfo *icon_info = priv->icons[icon_pos]; - - g_return_if_fail (icon_info != NULL); - - icon_info->window = gdk_window_new_input (gtk_widget_get_window (widget), - GDK_ALL_EVENTS_MASK, - &(GdkRectangle) { 0, 0, 1, 1}); - gtk_widget_register_window (widget, icon_info->window); - - gtk_widget_queue_resize (widget); -} - static void update_icon_style (GtkWidget *widget, GtkEntryIconPosition icon_pos) @@ -2869,6 +2835,7 @@ update_icon_style (GtkWidget *widget, GtkEntryPrivate *priv = entry->priv; EntryIconInfo *icon_info = priv->icons[icon_pos]; const gchar *sides[2] = { GTK_STYLE_CLASS_LEFT, GTK_STYLE_CLASS_RIGHT }; + GtkStyleContext *context; if (icon_info == NULL) return; @@ -2876,31 +2843,9 @@ update_icon_style (GtkWidget *widget, if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL) icon_pos = 1 - icon_pos; - gtk_css_gadget_add_class (icon_info->gadget, sides[icon_pos]); - gtk_css_gadget_remove_class (icon_info->gadget, sides[1 - icon_pos]); -} - -static void -update_icon_state (GtkWidget *widget, - GtkEntryIconPosition icon_pos) -{ - GtkEntry *entry = GTK_ENTRY (widget); - GtkEntryPrivate *priv = entry->priv; - EntryIconInfo *icon_info = priv->icons[icon_pos]; - GtkStateFlags state; - - if (icon_info == NULL) - return; - - state = gtk_widget_get_state_flags (widget); - state &= ~(GTK_STATE_FLAG_PRELIGHT | GTK_STATE_FLAG_DROP_ACTIVE); - - if ((state & GTK_STATE_FLAG_INSENSITIVE) || icon_info->insensitive) - state |= GTK_STATE_FLAG_INSENSITIVE; - else if (icon_info->prelight) - state |= GTK_STATE_FLAG_PRELIGHT; - - gtk_css_gadget_set_state (icon_info->gadget, state); + context = gtk_widget_get_style_context (icon_info->widget); + gtk_style_context_add_class (context, sides[icon_pos]); + gtk_style_context_remove_class (context, sides[1 - icon_pos]); } static void @@ -2946,7 +2891,7 @@ update_node_ordering (GtkEntry *entry) { GtkCssNode *node; - node = gtk_css_gadget_get_node (icon_info->gadget); + node = gtk_widget_get_css_node (icon_info->widget); parent = gtk_css_node_get_parent (node); sibling = gtk_css_node_get_first_child (parent); if (node != sibling) @@ -2967,41 +2912,20 @@ construct_icon_info (GtkWidget *widget, icon_info = g_slice_new0 (EntryIconInfo); priv->icons[icon_pos] = icon_info; - icon_info->gadget = gtk_icon_helper_new_named ("image", widget); - _gtk_icon_helper_set_force_scale_pixbuf (GTK_ICON_HELPER (icon_info->gadget), TRUE); - gtk_css_node_set_parent (gtk_css_gadget_get_node (icon_info->gadget), - gtk_widget_get_css_node (widget)); + icon_info->widget = gtk_image_new (); + gtk_widget_set_parent (icon_info->widget, widget); - update_icon_state (widget, icon_pos); update_icon_style (widget, icon_pos); update_node_ordering (entry); - if (gtk_widget_get_realized (widget)) - realize_icon_info (widget, icon_pos); - return icon_info; } static void gtk_entry_map (GtkWidget *widget) { - GtkEntry *entry = GTK_ENTRY (widget); - GtkEntryPrivate *priv = entry->priv; - EntryIconInfo *icon_info = NULL; - gint i; - GTK_WIDGET_CLASS (gtk_entry_parent_class)->map (widget); - for (i = 0; i < MAX_ICONS; i++) - { - if ((icon_info = priv->icons[i]) != NULL) - { - if (!_gtk_icon_helper_get_is_empty (GTK_ICON_HELPER (icon_info->gadget)) && - icon_info->window != NULL) - gdk_window_show (icon_info->window); - } - } - update_cursors (widget); } @@ -3010,23 +2934,11 @@ gtk_entry_unmap (GtkWidget *widget) { GtkEntry *entry = GTK_ENTRY (widget); GtkEntryPrivate *priv = entry->priv; - EntryIconInfo *icon_info = NULL; - gint i; if (priv->text_handle) _gtk_text_handle_set_mode (priv->text_handle, GTK_TEXT_HANDLE_MODE_NONE); - for (i = 0; i < MAX_ICONS; i++) - { - if ((icon_info = priv->icons[i]) != NULL) - { - if (!_gtk_icon_helper_get_is_empty (GTK_ICON_HELPER (icon_info->gadget)) && - icon_info->window != NULL) - gdk_window_hide (icon_info->window); - } - } - GTK_WIDGET_CLASS (gtk_entry_parent_class)->unmap (widget); } @@ -3046,8 +2958,6 @@ gtk_entry_realize (GtkWidget *widget) { GtkEntry *entry; GtkEntryPrivate *priv; - EntryIconInfo *icon_info; - int i; GtkAllocation text_allocation; GTK_WIDGET_CLASS (gtk_entry_parent_class)->realize (widget); @@ -3061,19 +2971,6 @@ gtk_entry_realize (GtkWidget *widget) gtk_entry_adjust_scroll (entry); gtk_entry_update_primary_selection (entry); - - /* If the icon positions are already setup, create their windows. - * Otherwise if they don't exist yet, then construct_icon_info() - * will create the windows once the widget is already realized. - */ - for (i = 0; i < MAX_ICONS; i++) - { - if ((icon_info = priv->icons[i]) != NULL) - { - if (icon_info->window == NULL) - realize_icon_info (widget, i); - } - } } static void @@ -3082,8 +2979,6 @@ gtk_entry_unrealize (GtkWidget *widget) GtkEntry *entry = GTK_ENTRY (widget); GtkEntryPrivate *priv = entry->priv; GtkClipboard *clipboard; - EntryIconInfo *icon_info; - gint i; gtk_entry_reset_layout (entry); @@ -3100,19 +2995,6 @@ gtk_entry_unrealize (GtkWidget *widget) } GTK_WIDGET_CLASS (gtk_entry_parent_class)->unrealize (widget); - - for (i = 0; i < MAX_ICONS; i++) - { - if ((icon_info = priv->icons[i]) != NULL) - { - if (icon_info->window != NULL) - { - gtk_widget_unregister_window (widget, icon_info->window); - gdk_window_destroy (icon_info->window); - icon_info->window = NULL; - } - } - } } static void @@ -3195,11 +3077,11 @@ gtk_entry_measure (GtkWidget *widget, if (!icon_info) continue; - gtk_css_gadget_get_preferred_size (icon_info->gadget, - GTK_ORIENTATION_VERTICAL, - -1, - NULL, &h, - NULL, NULL); + gtk_widget_measure (icon_info->widget, + GTK_ORIENTATION_VERTICAL, + -1, + NULL, &h, + NULL, NULL); icon_height = MAX (icon_height, h); } @@ -3232,35 +3114,6 @@ gtk_entry_measure (GtkWidget *widget, } } -static void -place_windows (GtkEntry *entry) -{ - GtkEntryPrivate *priv = entry->priv; - EntryIconInfo *icon_info; - - icon_info = priv->icons[GTK_ENTRY_ICON_PRIMARY]; - if (icon_info) - { - GtkAllocation primary; - - gtk_css_gadget_get_border_allocation (icon_info->gadget, &primary, NULL); - gdk_window_move_resize (icon_info->window, - primary.x, primary.y, - primary.width, primary.height); - } - - icon_info = priv->icons[GTK_ENTRY_ICON_SECONDARY]; - if (icon_info) - { - GtkAllocation secondary; - - gtk_css_gadget_get_border_allocation (icon_info->gadget, &secondary, NULL); - gdk_window_move_resize (icon_info->window, - secondary.x, secondary.y, - secondary.width, secondary.height); - } -} - static void gtk_entry_size_allocate (GtkWidget *widget, GtkAllocation *allocation) @@ -3280,21 +3133,21 @@ gtk_entry_size_allocate (GtkWidget *widget, { EntryIconInfo *icon_info = priv->icons[i]; GtkAllocation icon_alloc; - gint dummy, width, height; + gint width, height; if (!icon_info) continue; - gtk_css_gadget_get_preferred_size (icon_info->gadget, - GTK_ORIENTATION_HORIZONTAL, - -1, - &dummy, &width, - NULL, NULL); - gtk_css_gadget_get_preferred_size (icon_info->gadget, - GTK_ORIENTATION_VERTICAL, - -1, - &dummy, &height, - NULL, NULL); + gtk_widget_measure (icon_info->widget, + GTK_ORIENTATION_HORIZONTAL, + -1, + NULL, &width, + NULL, NULL); + gtk_widget_measure (icon_info->widget, + GTK_ORIENTATION_VERTICAL, + -1, + NULL, &height, + NULL, NULL); if ((gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL && i == GTK_ENTRY_ICON_PRIMARY) || (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_LTR && i == GTK_ENTRY_ICON_SECONDARY)) @@ -3311,11 +3164,8 @@ gtk_entry_size_allocate (GtkWidget *widget, icon_alloc.height = height; priv->text_width -= width; - gtk_css_gadget_allocate (icon_info->gadget, - &icon_alloc, - gtk_widget_get_allocated_baseline (widget), - &child_clip); - + gtk_widget_size_allocate (icon_info->widget, &icon_alloc); + gtk_widget_get_clip (icon_info->widget, &child_clip); gdk_rectangle_union (&child_clip, &clip, &clip); } @@ -3361,7 +3211,6 @@ gtk_entry_size_allocate (GtkWidget *widget, { GtkEntryCompletion *completion; - place_windows (entry); gtk_entry_recompute (entry); completion = gtk_entry_get_completion (entry); @@ -3372,25 +3221,6 @@ gtk_entry_size_allocate (GtkWidget *widget, gtk_widget_set_clip (widget, &clip); } -static gboolean -should_prelight (GtkEntry *entry, - GtkEntryIconPosition icon_pos) -{ - GtkEntryPrivate *priv = entry->priv; - EntryIconInfo *icon_info = priv->icons[icon_pos]; - - if (!icon_info) - return FALSE; - - if (icon_info->nonactivatable && icon_info->target_list == NULL) - return FALSE; - - if (icon_info->pressed) - return FALSE; - - return TRUE; -} - static void gtk_entry_draw_undershoot (GtkEntry *entry, GtkSnapshot *snapshot) @@ -3418,11 +3248,11 @@ gtk_entry_draw_undershoot (GtkEntry *entry, int icon_idx = rtl ? 1 : 0; if (priv->icons[icon_idx] != NULL) { - gtk_css_gadget_get_preferred_size (priv->icons[icon_idx]->gadget, - GTK_ORIENTATION_HORIZONTAL, - -1, - &icon_width, NULL, - NULL, NULL); + gtk_widget_measure (priv->icons[icon_idx]->widget, + GTK_ORIENTATION_HORIZONTAL, + -1, + &icon_width, NULL, + NULL, NULL); } gtk_style_context_save_to_node (context, priv->undershoot_node[0]); @@ -3437,11 +3267,11 @@ gtk_entry_draw_undershoot (GtkEntry *entry, int icon_idx = rtl ? 0 : 1; if (priv->icons[icon_idx] != NULL) { - gtk_css_gadget_get_preferred_size (priv->icons[icon_idx]->gadget, - GTK_ORIENTATION_HORIZONTAL, - -1, - &icon_width, NULL, - NULL, NULL); + gtk_widget_measure (priv->icons[icon_idx]->widget, + GTK_ORIENTATION_HORIZONTAL, + -1, + &icon_width, NULL, + NULL, NULL); } gtk_style_context_save_to_node (context, priv->undershoot_node[1]); gtk_snapshot_render_background (snapshot, context, rect.x + rect.width - UNDERSHOOT_SIZE, rect.y, UNDERSHOOT_SIZE, rect.height); @@ -3499,73 +3329,12 @@ gtk_entry_snapshot (GtkWidget *widget, EntryIconInfo *icon_info = priv->icons[i]; if (icon_info != NULL) - gtk_css_gadget_snapshot (icon_info->gadget, snapshot); + gtk_widget_snapshot_child (widget, icon_info->widget, snapshot); } gtk_entry_draw_undershoot (entry, snapshot); } - -static gint -gtk_entry_enter_notify (GtkWidget *widget, - GdkEventCrossing *event) -{ - GtkEntry *entry = GTK_ENTRY (widget); - GtkEntryPrivate *priv = entry->priv; - gint i; - - for (i = 0; i < MAX_ICONS; i++) - { - EntryIconInfo *icon_info = priv->icons[i]; - - if (icon_info != NULL && event->window == icon_info->window) - { - if (should_prelight (entry, i)) - { - icon_info->prelight = TRUE; - update_icon_state (widget, i); - gtk_widget_queue_draw (widget); - } - - break; - } - } - - return GDK_EVENT_PROPAGATE; -} - -static gint -gtk_entry_leave_notify (GtkWidget *widget, - GdkEventCrossing *event) -{ - GtkEntry *entry = GTK_ENTRY (widget); - GtkEntryPrivate *priv = entry->priv; - gint i; - - for (i = 0; i < MAX_ICONS; i++) - { - EntryIconInfo *icon_info = priv->icons[i]; - - if (icon_info != NULL && event->window == icon_info->window) - { - /* a grab means that we may never see the button release */ - if (event->mode == GDK_CROSSING_GRAB || event->mode == GDK_CROSSING_GTK_GRAB) - icon_info->pressed = FALSE; - - if (should_prelight (entry, i)) - { - icon_info->prelight = FALSE; - update_icon_state (widget, i); - gtk_widget_queue_draw (widget); - } - - break; - } - } - - return GDK_EVENT_PROPAGATE; -} - static void gtk_entry_get_pixel_ranges (GtkEntry *entry, gint **ranges, @@ -3742,7 +3511,9 @@ gtk_entry_event (GtkWidget *widget, GdkEventSequence *sequence; GdkDevice *device; gdouble x, y; - gint i; + gint i = 0; + + gdk_event_get_coords (event, &x, &y); if (event->type == GDK_MOTION_NOTIFY && priv->mouse_cursor_obscured) @@ -3754,23 +3525,29 @@ gtk_entry_event (GtkWidget *widget, for (i = 0; i < MAX_ICONS; i++) { - if (priv->icons[i] && - priv->icons[i]->window == event->any.window) + GtkAllocation icon_alloc; + if (priv->icons[i]) { - icon_info = priv->icons[i]; - break; + gtk_widget_get_allocation (priv->icons[i]->widget, &icon_alloc); + + if (gdk_rectangle_contains_point (&icon_alloc, (int)x, (int)y)) + { + icon_info = priv->icons[i]; + break; + } } } if (!icon_info) return GDK_EVENT_PROPAGATE; - if (icon_info->insensitive) + + + if (!gtk_widget_get_sensitive (icon_info->widget)) return GDK_EVENT_STOP; sequence = gdk_event_get_event_sequence (event); device = gdk_event_get_device (event); - gdk_event_get_coords (event, &x, &y); switch (event->type) { @@ -3783,13 +3560,6 @@ gtk_entry_event (GtkWidget *widget, case GDK_BUTTON_PRESS: case GDK_2BUTTON_PRESS: case GDK_3BUTTON_PRESS: - if (should_prelight (GTK_ENTRY (widget), i)) - { - icon_info->prelight = FALSE; - update_icon_state (widget, i); - gtk_widget_queue_draw (widget); - } - priv->start_x = x; priv->start_y = y; icon_info->pressed = TRUE; @@ -3835,16 +3605,6 @@ gtk_entry_event (GtkWidget *widget, icon_info->pressed = FALSE; icon_info->device = NULL; - if (should_prelight (GTK_ENTRY (widget), i) && - x >= 0 && y >= 0 && - x < gdk_window_get_width (icon_info->window) && - y < gdk_window_get_height (icon_info->window)) - { - icon_info->prelight = TRUE; - update_icon_state (widget, i); - gtk_widget_queue_draw (widget); - } - if (!icon_info->nonactivatable) g_signal_emit (widget, signals[ICON_RELEASE], 0, i, event); @@ -4545,8 +4305,6 @@ gtk_entry_state_flags_changed (GtkWidget *widget, } update_node_state (entry); - update_icon_state (widget, GTK_ENTRY_ICON_PRIMARY); - update_icon_state (widget, GTK_ENTRY_ICON_SECONDARY); gtk_entry_update_cached_style_values (entry); } @@ -6832,26 +6590,18 @@ gtk_entry_clear (GtkEntry *entry, { GtkEntryPrivate *priv = entry->priv; EntryIconInfo *icon_info = priv->icons[icon_pos]; - GtkIconHelper *icon_helper; GtkImageType storage_type; if (icon_info == NULL) return; - icon_helper = GTK_ICON_HELPER (icon_info->gadget); - if (_gtk_icon_helper_get_is_empty (icon_helper)) + storage_type = gtk_image_get_storage_type (GTK_IMAGE (icon_info->widget)); + + if (storage_type == GTK_IMAGE_EMPTY) return; g_object_freeze_notify (G_OBJECT (entry)); - /* Explicitly check, as the pointer may become invalidated - * during destruction. - */ - if (GDK_IS_WINDOW (icon_info->window)) - gdk_window_hide (icon_info->window); - - storage_type = _gtk_icon_helper_get_storage_type (icon_helper); - switch (storage_type) { case GTK_IMAGE_PIXBUF: @@ -6880,7 +6630,7 @@ gtk_entry_clear (GtkEntry *entry, break; } - _gtk_icon_helper_clear (icon_helper); + gtk_image_clear (GTK_IMAGE (icon_info->widget)); g_object_notify_by_pspec (G_OBJECT (entry), entry_props[icon_pos == GTK_ENTRY_ICON_PRIMARY @@ -7780,9 +7530,7 @@ gtk_entry_set_icon_from_pixbuf (GtkEntry *entry, if (pixbuf) { - _gtk_icon_helper_set_pixbuf (GTK_ICON_HELPER (icon_info->gadget), pixbuf); - _gtk_icon_helper_set_icon_size (GTK_ICON_HELPER (icon_info->gadget), - GTK_ICON_SIZE_MENU); + gtk_image_set_from_pixbuf (GTK_IMAGE (icon_info->widget), pixbuf); if (icon_pos == GTK_ENTRY_ICON_PRIMARY) { @@ -7795,9 +7543,6 @@ gtk_entry_set_icon_from_pixbuf (GtkEntry *entry, g_object_notify_by_pspec (G_OBJECT (entry), entry_props[PROP_STORAGE_TYPE_SECONDARY]); } - if (gtk_widget_get_mapped (GTK_WIDGET (entry))) - gdk_window_show_unraised (icon_info->window); - g_object_unref (pixbuf); } else @@ -7846,7 +7591,7 @@ gtk_entry_set_icon_from_icon_name (GtkEntry *entry, if (icon_name != NULL) { - _gtk_icon_helper_set_icon_name (GTK_ICON_HELPER (icon_info->gadget), icon_name, GTK_ICON_SIZE_MENU); + gtk_image_set_from_icon_name (GTK_IMAGE (icon_info->widget), icon_name, GTK_ICON_SIZE_MENU); if (icon_pos == GTK_ENTRY_ICON_PRIMARY) { @@ -7858,9 +7603,6 @@ gtk_entry_set_icon_from_icon_name (GtkEntry *entry, g_object_notify_by_pspec (G_OBJECT (entry), entry_props[PROP_ICON_NAME_SECONDARY]); g_object_notify_by_pspec (G_OBJECT (entry), entry_props[PROP_STORAGE_TYPE_SECONDARY]); } - - if (gtk_widget_get_mapped (GTK_WIDGET (entry))) - gdk_window_show_unraised (icon_info->window); } else gtk_entry_clear (entry, icon_pos); @@ -7906,7 +7648,7 @@ gtk_entry_set_icon_from_gicon (GtkEntry *entry, if (icon) { - _gtk_icon_helper_set_gicon (GTK_ICON_HELPER (icon_info->gadget), icon, GTK_ICON_SIZE_MENU); + gtk_image_set_from_gicon (GTK_IMAGE (icon_info->widget), icon, GTK_ICON_SIZE_MENU); if (icon_pos == GTK_ENTRY_ICON_PRIMARY) { @@ -7918,9 +7660,6 @@ gtk_entry_set_icon_from_gicon (GtkEntry *entry, g_object_notify_by_pspec (G_OBJECT (entry), entry_props[PROP_GICON_SECONDARY]); g_object_notify_by_pspec (G_OBJECT (entry), entry_props[PROP_STORAGE_TYPE_SECONDARY]); } - - if (gtk_widget_get_mapped (GTK_WIDGET (entry))) - gdk_window_show_unraised (icon_info->window); } else gtk_entry_clear (entry, icon_pos); @@ -8033,7 +7772,7 @@ gtk_entry_get_icon_pixbuf (GtkEntry *entry, if (!icon_info) return NULL; - return _gtk_icon_helper_peek_pixbuf (GTK_ICON_HELPER (icon_info->gadget)); + return gtk_image_get_pixbuf (GTK_IMAGE (icon_info->widget)); } /** @@ -8056,6 +7795,8 @@ gtk_entry_get_icon_gicon (GtkEntry *entry, { GtkEntryPrivate *priv; EntryIconInfo *icon_info; + GIcon *icon; + GtkIconSize icon_size; g_return_val_if_fail (GTK_IS_ENTRY (entry), NULL); g_return_val_if_fail (IS_VALID_ICON_POSITION (icon_pos), NULL); @@ -8066,7 +7807,9 @@ gtk_entry_get_icon_gicon (GtkEntry *entry, if (!icon_info) return NULL; - return _gtk_icon_helper_peek_gicon (GTK_ICON_HELPER (icon_info->gadget)); + gtk_image_get_gicon (GTK_IMAGE (icon_info->widget), &icon, &icon_size); + + return icon; } /** @@ -8089,6 +7832,8 @@ gtk_entry_get_icon_name (GtkEntry *entry, { GtkEntryPrivate *priv; EntryIconInfo *icon_info; + const char *icon_name; + GtkIconSize icon_size; g_return_val_if_fail (GTK_IS_ENTRY (entry), NULL); g_return_val_if_fail (IS_VALID_ICON_POSITION (icon_pos), NULL); @@ -8099,7 +7844,9 @@ gtk_entry_get_icon_name (GtkEntry *entry, if (!icon_info) return NULL; - return _gtk_icon_helper_get_icon_name (GTK_ICON_HELPER (icon_info->gadget)); + gtk_image_get_icon_name (GTK_IMAGE (icon_info->widget), &icon_name, &icon_size); + + return icon_name; } /** @@ -8129,18 +7876,15 @@ gtk_entry_set_icon_sensitive (GtkEntry *entry, if ((icon_info = priv->icons[icon_pos]) == NULL) icon_info = construct_icon_info (GTK_WIDGET (entry), icon_pos); - if (icon_info->insensitive != !sensitive) + if (gtk_widget_get_sensitive (icon_info->widget) != sensitive) { - icon_info->insensitive = !sensitive; + gtk_widget_set_sensitive (icon_info->widget, sensitive); icon_info->pressed = FALSE; - icon_info->prelight = FALSE; if (gtk_widget_get_realized (GTK_WIDGET (entry))) update_cursors (GTK_WIDGET (entry)); - update_icon_state (GTK_WIDGET (entry), icon_pos); - g_object_notify_by_pspec (G_OBJECT (entry), entry_props[icon_pos == GTK_ENTRY_ICON_PRIMARY ? PROP_SENSITIVE_PRIMARY @@ -8173,8 +7917,10 @@ gtk_entry_get_icon_sensitive (GtkEntry *entry, icon_info = priv->icons[icon_pos]; - return (!icon_info || !icon_info->insensitive); + if (!icon_info) + return FALSE; + return gtk_widget_get_sensitive (icon_info->widget); } /** @@ -8207,7 +7953,7 @@ gtk_entry_get_icon_storage_type (GtkEntry *entry, if (!icon_info) return GTK_IMAGE_EMPTY; - return _gtk_icon_helper_get_storage_type (GTK_ICON_HELPER (icon_info->gadget)); + return gtk_image_get_storage_type (GTK_IMAGE (icon_info->widget)); } /** @@ -8246,7 +7992,7 @@ gtk_entry_get_icon_at_pos (GtkEntry *entry, if (icon_info == NULL) continue; - gtk_css_gadget_get_border_allocation (icon_info->gadget, &allocation, NULL); + gtk_widget_get_border_allocation (icon_info->widget, &allocation); if (x >= allocation.x && x < allocation.x + allocation.width && y >= allocation.y && y < allocation.y + allocation.height) return i; @@ -8378,7 +8124,7 @@ gtk_entry_get_icon_area (GtkEntry *entry, { GtkAllocation widget_allocation; gtk_widget_get_allocation (GTK_WIDGET (entry), &widget_allocation); - gtk_css_gadget_get_border_allocation (icon_info->gadget, icon_area, NULL); + gtk_widget_get_border_allocation (icon_info->widget, icon_area); icon_area->x -= widget_allocation.x; icon_area->y -= widget_allocation.y; } @@ -9043,7 +8789,7 @@ gtk_entry_drag_begin (GtkWidget *widget, if (icon_info->in_drag) { gtk_drag_set_icon_definition (context, - gtk_icon_helper_get_definition (GTK_ICON_HELPER (icon_info->gadget)), + gtk_image_get_definition (GTK_IMAGE (icon_info->widget)), -2, -2); return; }