popover: Accept NULL relative_to widgets
And document the fact that the popover will get destroyed if a NULL relative-to is given on a parented popover, if no extra references are kept. For gtk_popover_new*(), a NULL relative-to will leave the widget as a floating object, to be sunk by a later call to gtk_widget_set_relative_to(). https://bugzilla.gnome.org/show_bug.cgi?id=724407
This commit is contained in:
committed by
Matthias Clasen
parent
2f379604d1
commit
63bb834b2e
@ -1602,7 +1602,7 @@ gtk_popover_update_preferred_position (GtkPopover *popover,
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* gtk_popover_new:
|
* gtk_popover_new:
|
||||||
* @relative_to: #GtkWidget the popover is related to
|
* @relative_to (allow-none): #GtkWidget the popover is related to
|
||||||
*
|
*
|
||||||
* Creates a new popover to point to @relative_to
|
* Creates a new popover to point to @relative_to
|
||||||
*
|
*
|
||||||
@ -1613,6 +1613,8 @@ gtk_popover_update_preferred_position (GtkPopover *popover,
|
|||||||
GtkWidget *
|
GtkWidget *
|
||||||
gtk_popover_new (GtkWidget *relative_to)
|
gtk_popover_new (GtkWidget *relative_to)
|
||||||
{
|
{
|
||||||
|
g_return_val_if_fail (relative_to == NULL || GTK_IS_WIDGET (relative_to), NULL);
|
||||||
|
|
||||||
return g_object_new (GTK_TYPE_POPOVER,
|
return g_object_new (GTK_TYPE_POPOVER,
|
||||||
"relative-to", relative_to,
|
"relative-to", relative_to,
|
||||||
NULL);
|
NULL);
|
||||||
@ -1621,11 +1623,16 @@ gtk_popover_new (GtkWidget *relative_to)
|
|||||||
/**
|
/**
|
||||||
* gtk_popover_set_relative_to:
|
* gtk_popover_set_relative_to:
|
||||||
* @popover: a #GtkPopover
|
* @popover: a #GtkPopover
|
||||||
* @relative_to: a #GtkWidget
|
* @relative_to (allow-none): a #GtkWidget
|
||||||
*
|
*
|
||||||
* Sets a new widget to be attached to @popover. If @popover is
|
* Sets a new widget to be attached to @popover. If @popover is
|
||||||
* visible, the position will be updated.
|
* visible, the position will be updated.
|
||||||
*
|
*
|
||||||
|
* Note: the ownership of popovers is always given to their @relative_to
|
||||||
|
* widget, so if @relative_to is set to %NULL on an attached @popover, it
|
||||||
|
* will be detached from its previous widget, and consequently destroyed
|
||||||
|
* unless extra references are kept.
|
||||||
|
*
|
||||||
* Since: 3.12
|
* Since: 3.12
|
||||||
**/
|
**/
|
||||||
void
|
void
|
||||||
@ -1633,10 +1640,12 @@ gtk_popover_set_relative_to (GtkPopover *popover,
|
|||||||
GtkWidget *relative_to)
|
GtkWidget *relative_to)
|
||||||
{
|
{
|
||||||
g_return_if_fail (GTK_IS_POPOVER (popover));
|
g_return_if_fail (GTK_IS_POPOVER (popover));
|
||||||
g_return_if_fail (GTK_IS_WIDGET (relative_to));
|
g_return_if_fail (relative_to == NULL || GTK_IS_WIDGET (relative_to));
|
||||||
|
|
||||||
gtk_popover_update_relative_to (popover, relative_to);
|
gtk_popover_update_relative_to (popover, relative_to);
|
||||||
gtk_popover_update_position (popover);
|
|
||||||
|
if (relative_to)
|
||||||
|
gtk_popover_update_position (popover);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -2138,7 +2147,7 @@ gtk_popover_bind_model (GtkPopover *popover,
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* gtk_popover_new_from_model:
|
* gtk_popover_new_from_model:
|
||||||
* @relative_to: #GtkWidget the popover is related to
|
* @relative_to (allow-none): #GtkWidget the popover is related to
|
||||||
* @model: a #GMenuModel
|
* @model: a #GMenuModel
|
||||||
*
|
*
|
||||||
* Creates a #GtkPopover and populates it according to
|
* Creates a #GtkPopover and populates it according to
|
||||||
@ -2162,6 +2171,7 @@ gtk_popover_new_from_model (GtkWidget *relative_to,
|
|||||||
{
|
{
|
||||||
GtkWidget *popover;
|
GtkWidget *popover;
|
||||||
|
|
||||||
|
g_return_val_if_fail (relative_to == NULL || GTK_IS_WIDGET (relative_to), NULL);
|
||||||
g_return_val_if_fail (G_IS_MENU_MODEL (model), NULL);
|
g_return_val_if_fail (G_IS_MENU_MODEL (model), NULL);
|
||||||
|
|
||||||
popover = gtk_popover_new (relative_to);
|
popover = gtk_popover_new (relative_to);
|
||||||
|
|||||||
Reference in New Issue
Block a user