static VALUE rg_get_icon_area(VALUE self, VALUE icon_pos) { GdkRectangle icon_area; gtk_entry_get_icon_area(_SELF(self), RVAL2GTKENTRYICONPOSITION(icon_pos), &icon_area); return GOBJ2RVAL(&icon_area); }
static void entry_icon_press_cb (GtkEntry *entry, GtkEntryIconPosition icon_pos, GdkEvent *event, gpointer user_data) { GtkWidget *popover = user_data; cairo_rectangle_int_t rect; gtk_entry_get_icon_area (entry, icon_pos, &rect); gtk_popover_set_pointing_to (GTK_POPOVER (popover), &rect); gtk_widget_show (popover); g_object_set_data (G_OBJECT (entry), "popover-icon-pos", GUINT_TO_POINTER (icon_pos)); }
static void entry_size_allocate_cb (GtkEntry *entry, GtkAllocation *allocation, gpointer user_data) { GtkEntryIconPosition popover_pos; GtkPopover *popover = user_data; cairo_rectangle_int_t rect; if (gtk_widget_is_visible (GTK_WIDGET (popover))) { popover_pos = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (entry), "popover-icon-pos")); gtk_entry_get_icon_area (entry, popover_pos, &rect); gtk_popover_set_pointing_to (GTK_POPOVER (popover), &rect); } }
static GtkWidget* get_popup (EogZoomEntry *zoom_entry) { GdkRectangle rect; if (zoom_entry->priv->popup) return zoom_entry->priv->popup; zoom_entry->priv->popup = gtk_popover_new_from_model (GTK_WIDGET (zoom_entry), G_MENU_MODEL (zoom_entry->priv->menu)); g_signal_connect (zoom_entry->priv->popup, "closed", G_CALLBACK (popup_menu_closed), zoom_entry); gtk_entry_get_icon_area (GTK_ENTRY (zoom_entry->priv->value_entry), GTK_ENTRY_ICON_SECONDARY, &rect); gtk_popover_set_relative_to (GTK_POPOVER (zoom_entry->priv->popup), zoom_entry->priv->value_entry); gtk_popover_set_pointing_to (GTK_POPOVER (zoom_entry->priv->popup), &rect); gtk_popover_set_position (GTK_POPOVER (zoom_entry->priv->popup), GTK_POS_BOTTOM); gtk_widget_set_size_request (zoom_entry->priv->popup, 150, -1); return zoom_entry->priv->popup; }