forked from AuroraMiddleware/gtk
Merge branch 'wip/chergert/popover-offset' into 'master'
popover: allow setting popup layout offset See merge request GNOME/gtk!2412
This commit is contained in:
commit
bfd8c5383f
@ -6270,6 +6270,8 @@ gtk_popover_set_autohide
|
||||
gtk_popover_get_autohide
|
||||
gtk_popover_set_has_arrow
|
||||
gtk_popover_get_has_arrow
|
||||
gtk_popover_set_offset
|
||||
gtk_popover_get_offset
|
||||
gtk_popover_set_default_widget
|
||||
<SUBSECTION Standard>
|
||||
GTK_TYPE_POPOVER
|
||||
|
@ -150,6 +150,9 @@ typedef struct {
|
||||
gboolean mnemonics_visible;
|
||||
gboolean disable_auto_mnemonics;
|
||||
|
||||
int x_offset;
|
||||
int y_offset;
|
||||
|
||||
guint mnemonics_display_timeout_id;
|
||||
|
||||
GtkWidget *child;
|
||||
@ -550,6 +553,9 @@ create_popup_layout (GtkPopover *popover)
|
||||
surface_anchor);
|
||||
gdk_popup_layout_set_anchor_hints (layout, anchor_hints);
|
||||
|
||||
if (priv->x_offset || priv->y_offset)
|
||||
gdk_popup_layout_set_offset (layout, priv->x_offset, priv->y_offset);
|
||||
|
||||
return layout;
|
||||
}
|
||||
|
||||
@ -2162,3 +2168,56 @@ gtk_popover_disable_auto_mnemonics (GtkPopover *popover)
|
||||
|
||||
priv->disable_auto_mnemonics = TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* gtk_popover_set_offset:
|
||||
* @popover: a #GtkPopover
|
||||
* @x_offset: the x offset to adjust the position by
|
||||
* @y_offset: the y offset to adjust the position by
|
||||
*
|
||||
* Sets the offset to use when calculating the position of the popover.
|
||||
*
|
||||
* These values are used when preparing the #GtkPopupLayout for positioning
|
||||
* the popover.
|
||||
*/
|
||||
void
|
||||
gtk_popover_set_offset (GtkPopover *popover,
|
||||
int x_offset,
|
||||
int y_offset)
|
||||
{
|
||||
GtkPopoverPrivate *priv = gtk_popover_get_instance_private (popover);
|
||||
|
||||
g_return_if_fail (GTK_IS_POPOVER (popover));
|
||||
|
||||
if (priv->x_offset != x_offset || priv->y_offset != y_offset)
|
||||
{
|
||||
priv->x_offset = x_offset;
|
||||
priv->y_offset = y_offset;
|
||||
|
||||
gtk_widget_queue_resize (GTK_WIDGET (popover));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* gtk_popover_get_offset:
|
||||
* @popover: a #GtkPopover
|
||||
* @x_offset: (out) (nullable): a location for the x_offset
|
||||
* @y_offset: (out) (nullable): a location for the y_offset
|
||||
*
|
||||
* Gets the offset previous set with gtk_popover_set_offset().
|
||||
*/
|
||||
void
|
||||
gtk_popover_get_offset (GtkPopover *popover,
|
||||
int *x_offset,
|
||||
int *y_offset)
|
||||
{
|
||||
GtkPopoverPrivate *priv = gtk_popover_get_instance_private (popover);
|
||||
|
||||
g_return_if_fail (GTK_IS_POPOVER (popover));
|
||||
|
||||
if (x_offset)
|
||||
*x_offset = priv->x_offset;
|
||||
|
||||
if (y_offset)
|
||||
*y_offset = priv->y_offset;
|
||||
}
|
||||
|
@ -103,6 +103,15 @@ void gtk_popover_popup (GtkPopover *popover);
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
void gtk_popover_popdown (GtkPopover *popover);
|
||||
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
void gtk_popover_set_offset (GtkPopover *popover,
|
||||
int x_offset,
|
||||
int y_offset);
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
void gtk_popover_get_offset (GtkPopover *popover,
|
||||
int *x_offset,
|
||||
int *y_offset);
|
||||
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
void gtk_popover_set_default_widget (GtkPopover *popover,
|
||||
GtkWidget *widget);
|
||||
|
Loading…
Reference in New Issue
Block a user