diff options
-rw-r--r-- | gtk/gtkentry.c | 33 | ||||
-rw-r--r-- | gtk/gtkentryprivate.h | 3 |
2 files changed, 36 insertions, 0 deletions
diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c index 532d3896fe..3717dcea2a 100644 --- a/gtk/gtkentry.c +++ b/gtk/gtkentry.c @@ -3723,3 +3723,36 @@ gtk_entry_get_extra_menu (GtkEntry *entry) return gtk_text_get_extra_menu (GTK_TEXT (priv->text)); } + +/*< private > + * gtk_entry_activate_icon: + * @entry: a #GtkEntry + * @pos: the icon position + * + * Emits the #GtkEntry::icon-press and #GtkEntry::icon-release signals on + * the @entry icon at the given @pos, if the icon is set and activatable. + * + * Returns: %TRUE if the signal was emitted + */ +gboolean +gtk_entry_activate_icon (GtkEntry *entry, + GtkEntryIconPosition pos) +{ + GtkEntryPrivate *priv = gtk_entry_get_instance_private (entry); + EntryIconInfo *icon_info; + + g_return_val_if_fail (GTK_IS_ENTRY (entry), FALSE); + + icon_info = priv->icons[pos]; + + if (icon_info != NULL && + gtk_image_get_storage_type (GTK_IMAGE (icon_info->widget)) != GTK_IMAGE_EMPTY && + !icon_info->nonactivatable) + { + g_signal_emit (entry, signals[ICON_PRESS], 0, pos); + g_signal_emit (entry, signals[ICON_RELEASE], 0, pos); + return TRUE; + } + + return FALSE; +} diff --git a/gtk/gtkentryprivate.h b/gtk/gtkentryprivate.h index eb98ac938d..05e4c6addb 100644 --- a/gtk/gtkentryprivate.h +++ b/gtk/gtkentryprivate.h @@ -106,6 +106,9 @@ GtkIMContext * _gtk_entry_get_im_context (GtkEntry *entry); GtkEventController * gtk_entry_get_key_controller (GtkEntry *entry); GtkText *gtk_entry_get_text_widget (GtkEntry *entry); +gboolean gtk_entry_activate_icon (GtkEntry *entry, + GtkEntryIconPosition pos); + G_END_DECLS #endif /* __GTK_ENTRY_PRIVATE_H__ */ |