static void place_windows (GtkIconEntry *icon_entry, GtkAllocation *widget_alloc) { GtkIconEntryPosition left_icon_pos; GtkIconEntryPosition right_icon_pos; GtkAllocation left_icon_alloc; GtkAllocation right_icon_alloc; GtkAllocation text_area_alloc; GtkIconEntryPrivate *priv; gint y; priv = GTK_ICON_ENTRY_GET_PRIVATE (icon_entry); get_text_area_size (icon_entry, &text_area_alloc); /* DJW center text/icon * TODO flicker needs to be eliminated */ gdk_window_get_geometry (GTK_ENTRY (icon_entry)->text_area, NULL, &y, NULL, NULL, NULL); text_area_alloc.y = y; get_icon_allocation (icon_entry, TRUE, widget_alloc, &text_area_alloc, &left_icon_alloc, &left_icon_pos); get_icon_allocation (icon_entry, FALSE, widget_alloc, &text_area_alloc, &right_icon_alloc, &right_icon_pos); if (left_icon_alloc.width > 0) { text_area_alloc.x = left_icon_alloc.x + left_icon_alloc.width + ICON_MARGIN; } if (right_icon_alloc.width > 0) { text_area_alloc.width -= right_icon_alloc.width + ICON_MARGIN; } text_area_alloc.width -= text_area_alloc.x; gdk_window_move_resize (priv->icons[left_icon_pos].window, left_icon_alloc.x, left_icon_alloc.y, left_icon_alloc.width, left_icon_alloc.height); gdk_window_move_resize (priv->icons[right_icon_pos].window, right_icon_alloc.x, right_icon_alloc.y, right_icon_alloc.width, right_icon_alloc.height); gdk_window_move_resize (GTK_ENTRY (icon_entry)->text_area, text_area_alloc.x, text_area_alloc.y, text_area_alloc.width, text_area_alloc.height); }
static gint gtk_icon_entry_expose (GtkWidget *widget, GdkEventExpose *event) { GtkIconEntry *entry; GtkIconEntryPrivate *priv; g_return_val_if_fail (GTK_IS_ICON_ENTRY (widget), FALSE); g_return_val_if_fail (event != NULL, FALSE); entry = GTK_ICON_ENTRY (widget); priv = GTK_ICON_ENTRY_GET_PRIVATE (entry); if (GTK_WIDGET_DRAWABLE (widget)) { gboolean found = FALSE; int i; for (i = 0; i < MAX_ICONS && !found; i++) { EntryIconInfo *icon_info = &priv->icons[i]; if (event->window == icon_info->window) { gint width; GtkAllocation text_area_alloc; get_text_area_size (entry, &text_area_alloc); gdk_drawable_get_size (icon_info->window, &width, NULL); gtk_paint_flat_box (widget->style, icon_info->window, GTK_WIDGET_STATE (widget), GTK_SHADOW_NONE, NULL, widget, "entry_bg", 0, 0, width, text_area_alloc.height); draw_icon (widget, i); found = TRUE; } } if (!found) GTK_WIDGET_CLASS (parent_class)->expose_event (widget, event); } return FALSE; }
static void place_windows(SexyIconEntry *icon_entry, GtkAllocation *widget_alloc) { SexyIconEntryPosition left_icon_pos; SexyIconEntryPosition right_icon_pos; GtkAllocation left_icon_alloc; GtkAllocation right_icon_alloc; GtkAllocation text_area_alloc; get_text_area_size(icon_entry, &text_area_alloc); get_icon_allocation(icon_entry, TRUE, widget_alloc, &text_area_alloc, &left_icon_alloc, &left_icon_pos); get_icon_allocation(icon_entry, FALSE, widget_alloc, &text_area_alloc, &right_icon_alloc, &right_icon_pos); if (left_icon_alloc.width > 0) { text_area_alloc.x = left_icon_alloc.x + left_icon_alloc.width + ICON_MARGIN; } if (right_icon_alloc.width > 0) text_area_alloc.width -= right_icon_alloc.width + ICON_MARGIN; text_area_alloc.width -= text_area_alloc.x; gdk_window_move_resize(icon_entry->priv->icons[left_icon_pos].window, left_icon_alloc.x, left_icon_alloc.y, left_icon_alloc.width, left_icon_alloc.height); gdk_window_move_resize(icon_entry->priv->icons[right_icon_pos].window, right_icon_alloc.x, right_icon_alloc.y, right_icon_alloc.width, right_icon_alloc.height); gdk_window_move_resize(GTK_ENTRY(icon_entry)->text_area, text_area_alloc.x, text_area_alloc.y, text_area_alloc.width, text_area_alloc.height); }