popover: Drop ::relative-to

It is enough to just set the parent (and make the parent
call gtk_native_check_resize in size_allocate).

This commit removes the relative_to argument to the
constructors of GtkPopover and GtkPopoverMenu, and
updates all callers.
This commit is contained in:
Matthias Clasen 2020-02-24 07:21:46 -05:00
parent 259f465e01
commit a43d13aa74
51 changed files with 141 additions and 290 deletions

View File

@ -428,7 +428,7 @@ demo_application_window_init (DemoApplicationWindow *window)
gtk_widget_init_template (GTK_WIDGET (window));
popover = gtk_popover_menu_new_from_model (window->menubutton, window->toolmenu);
popover = gtk_popover_menu_new_from_model (window->toolmenu);
gtk_menu_button_set_popover (GTK_MENU_BUTTON (window->menubutton), popover);
g_action_map_add_action_entries (G_ACTION_MAP (window),

View File

@ -248,7 +248,8 @@ pressed_cb (GtkGesture *gesture,
item = g_menu_item_new (_("_Paste"), "clipboard.paste");
g_menu_append_item (menu, item);
popover = gtk_popover_menu_new_from_model (image, G_MENU_MODEL (menu));
popover = gtk_popover_menu_new_from_model (G_MENU_MODEL (menu));
gtk_widget_set_parent (popover, image);
gtk_popover_set_pointing_to (GTK_POPOVER (popover), &(GdkRectangle) { x, y, 1, 1});
gtk_popover_popup (GTK_POPOVER (popover));

View File

@ -271,7 +271,8 @@ pressed_cb (GtkGesture *gesture,
pos_x = x;
pos_y = y;
menu = gtk_popover_new (widget);
menu = gtk_popover_new ();
gtk_widget_set_parent (menu, widget);
gtk_popover_set_has_arrow (GTK_POPOVER (menu), FALSE);
gtk_popover_set_pointing_to (GTK_POPOVER (menu), &(GdkRectangle){ x, y, 1, 1});
box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);

View File

@ -158,7 +158,7 @@ static GtkWidget *
create_menu_button (void)
{
GtkWidget *w = gtk_menu_button_new ();
GtkWidget *popover = gtk_popover_new (NULL);
GtkWidget *popover = gtk_popover_new ();
gtk_container_add (GTK_CONTAINER (popover), gtk_button_new_with_label ("Hey!"));
gtk_popover_set_autohide (GTK_POPOVER (popover), FALSE);

View File

@ -22,7 +22,8 @@ create_popover (GtkWidget *parent,
{
GtkWidget *popover;
popover = gtk_popover_new (parent);
popover = gtk_popover_new ();
gtk_widget_set_parent (popover, parent);
gtk_popover_set_position (GTK_POPOVER (popover), pos);
gtk_container_add (GTK_CONTAINER (popover), child);
g_object_set (child, "margin", 6, NULL);

View File

@ -448,7 +448,7 @@ do_sliding_puzzle (GtkWidget *do_widget)
gtk_grid_attach (GTK_GRID (tweaks), apply, 1, 2, 1, 1);
g_signal_connect (apply, "clicked", G_CALLBACK (reconfigure), NULL);
popover = gtk_popover_new (NULL);
popover = gtk_popover_new ();
gtk_container_add (GTK_CONTAINER (popover), tweaks);
tweak = gtk_menu_button_new ();

View File

@ -1630,9 +1630,10 @@ static void
set_up_context_popover (GtkWidget *widget,
GMenuModel *model)
{
GtkWidget *popover = gtk_popover_menu_new_from_model (widget, model);
GtkWidget *popover = gtk_popover_menu_new_from_model (model);
GtkGesture *gesture;
gtk_widget_set_parent (popover, widget);
gtk_popover_set_has_arrow (GTK_POPOVER (popover), FALSE);
gesture = gtk_gesture_click_new ();
gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (gesture), GDK_BUTTON_SECONDARY);

View File

@ -5881,8 +5881,6 @@ GtkPopover
gtk_popover_new
gtk_popover_popup
gtk_popover_popdown
gtk_popover_set_relative_to
gtk_popover_get_relative_to
gtk_popover_set_pointing_to
gtk_popover_get_pointing_to
gtk_popover_set_position

View File

@ -152,7 +152,7 @@ create_menu_button (void)
image = gtk_image_new ();
gtk_image_set_from_icon_name (GTK_IMAGE (image), "emblem-system-symbolic");
gtk_container_add (GTK_CONTAINER (widget), image);
menu = gtk_popover_new (NULL);
menu = gtk_popover_new ();
gtk_menu_button_set_popover (GTK_MENU_BUTTON (widget), menu);
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 3);

View File

@ -27,56 +27,11 @@ typedef struct _GtkPopoverAccessiblePrivate GtkPopoverAccessiblePrivate;
struct _GtkPopoverAccessiblePrivate
{
GtkWidget *widget;
};
G_DEFINE_TYPE_WITH_CODE (GtkPopoverAccessible, gtk_popover_accessible, GTK_TYPE_CONTAINER_ACCESSIBLE,
G_ADD_PRIVATE (GtkPopoverAccessible))
static void
popover_update_relative_to (AtkObject *obj,
GtkPopover *popover)
{
GtkPopoverAccessiblePrivate *priv;
AtkObject *widget_accessible;
GtkWidget *widget;
priv = gtk_popover_accessible_get_instance_private (GTK_POPOVER_ACCESSIBLE (obj));
widget = gtk_popover_get_relative_to (popover);
if (priv->widget == widget)
return;
if (priv->widget)
{
g_object_remove_weak_pointer (G_OBJECT (priv->widget),
(gpointer*) &priv->widget);
widget_accessible = gtk_widget_get_accessible (priv->widget);
atk_object_remove_relationship (obj,
ATK_RELATION_POPUP_FOR,
widget_accessible);
}
priv->widget = widget;
if (widget)
{
AtkObject *parent;
parent = gtk_widget_get_accessible (widget);
if (parent)
atk_object_set_parent (obj, parent);
g_object_add_weak_pointer (G_OBJECT (priv->widget),
(gpointer*) &priv->widget);
widget_accessible = gtk_widget_get_accessible (widget);
atk_object_add_relationship (obj,
ATK_RELATION_POPUP_FOR,
widget_accessible);
}
}
static void
popover_update_modality (AtkObject *object,
GtkPopover *popover)
@ -94,9 +49,7 @@ popover_notify_cb (GtkPopover *popover,
popover_accessible = gtk_widget_get_accessible (GTK_WIDGET (popover));
if (strcmp (g_param_spec_get_name (pspec), "relative-to") == 0)
popover_update_relative_to (popover_accessible, popover);
else if (strcmp (g_param_spec_get_name (pspec), "modal") == 0)
if (strcmp (g_param_spec_get_name (pspec), "modal") == 0)
popover_update_modality (popover_accessible, popover);
}
@ -110,7 +63,6 @@ gtk_popover_accessible_initialize (AtkObject *obj,
g_signal_connect (popover, "notify",
G_CALLBACK (popover_notify_cb), obj);
popover_update_relative_to (obj, popover);
popover_update_modality (obj, popover);
obj->role = ATK_ROLE_PANEL;
@ -131,26 +83,11 @@ gtk_popover_accessible_ref_state_set (AtkObject *obj)
return state_set;
}
static void
gtk_popover_accessible_finalize (GObject *object)
{
GtkPopoverAccessiblePrivate *priv;
priv = gtk_popover_accessible_get_instance_private (GTK_POPOVER_ACCESSIBLE (object));
if (priv->widget)
g_object_remove_weak_pointer (G_OBJECT (priv->widget),
(gpointer*) &priv->widget);
G_OBJECT_CLASS (gtk_popover_accessible_parent_class)->finalize (object);
}
static void
gtk_popover_accessible_class_init (GtkPopoverAccessibleClass *klass)
{
AtkObjectClass *class = ATK_OBJECT_CLASS (klass);
GObjectClass *object_class = G_OBJECT_CLASS (klass);
object_class->finalize = gtk_popover_accessible_finalize;
class->initialize = gtk_popover_accessible_initialize;
class->ref_state_set = gtk_popover_accessible_ref_state_set;
}

View File

@ -259,7 +259,8 @@ do_popup (GtkColorSwatch *swatch)
g_clear_pointer (&priv->popover, gtk_widget_unparent);
model = gtk_color_swatch_get_menu_model (swatch);
priv->popover = gtk_popover_menu_new_from_model (GTK_WIDGET (swatch), model);
priv->popover = gtk_popover_menu_new_from_model (model);
gtk_widget_set_parent (priv->popover, GTK_WIDGET (swatch));
g_object_unref (model);
gtk_popover_popup (GTK_POPOVER (priv->popover));

View File

@ -305,7 +305,8 @@ show_variations (GtkEmojiChooser *chooser,
return;
parent_popover = gtk_widget_get_ancestor (child, GTK_TYPE_POPOVER);
popover = gtk_popover_new (child);
popover = gtk_popover_new ();
gtk_widget_set_parent (popover, child);
view = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
gtk_widget_add_css_class (view, "view");
box = gtk_flow_box_new ();

View File

@ -653,9 +653,8 @@ gtk_emoji_completion_new (GtkText *text)
{
GtkEmojiCompletion *completion;
completion = GTK_EMOJI_COMPLETION (g_object_new (GTK_TYPE_EMOJI_COMPLETION,
"relative-to", text,
NULL));
completion = GTK_EMOJI_COMPLETION (g_object_new (GTK_TYPE_EMOJI_COMPLETION, NULL));
gtk_widget_set_parent (GTK_WIDGET (completion), GTK_WIDGET (text));
connect_signals (completion, text);

View File

@ -582,7 +582,7 @@ gtk_entry_completion_constructed (GObject *object)
NULL);
/* pack it all */
priv->popup_window = gtk_popover_new (NULL);
priv->popup_window = gtk_popover_new ();
gtk_popover_set_position (GTK_POPOVER (priv->popup_window), GTK_POS_BOTTOM);
gtk_popover_set_autohide (GTK_POPOVER (priv->popup_window), FALSE);
gtk_popover_set_has_arrow (GTK_POPOVER (priv->popup_window), FALSE);
@ -2438,8 +2438,7 @@ _gtk_entry_completion_disconnect (GtkEntryCompletion *completion)
unset_accessible_relation (completion->priv->popup_window,
completion->priv->entry);
gtk_popover_set_relative_to (GTK_POPOVER (completion->priv->popup_window),
NULL);
gtk_widget_unparent (completion->priv->popup_window);
completion->priv->entry = NULL;
}
@ -2452,8 +2451,7 @@ _gtk_entry_completion_connect (GtkEntryCompletion *completion,
set_accessible_relation (completion->priv->popup_window,
completion->priv->entry);
gtk_popover_set_relative_to (GTK_POPOVER (completion->priv->popup_window),
completion->priv->entry);
gtk_widget_set_parent (completion->priv->popup_window, GTK_WIDGET (entry));
connect_completion_signals (completion);
}

View File

@ -2066,8 +2066,8 @@ file_list_build_popover (GtkFileChooserWidget *impl)
g_menu_append_section (menu, NULL, G_MENU_MODEL (section));
g_object_unref (section);
priv->browse_files_popover = gtk_popover_menu_new_from_model (priv->browse_files_tree_view,
G_MENU_MODEL (menu));
priv->browse_files_popover = gtk_popover_menu_new_from_model (G_MENU_MODEL (menu));
gtk_widget_set_parent (priv->browse_files_popover, priv->browse_files_tree_view);
g_object_unref (menu);
}
@ -3264,9 +3264,7 @@ gtk_file_chooser_widget_dispose (GObject *object)
cancel_all_operations (impl);
if (priv->rename_file_popover)
gtk_popover_set_relative_to (GTK_POPOVER (priv->rename_file_popover), NULL);
g_clear_pointer (&priv->rename_file_popover, gtk_widget_unparent);
g_clear_pointer (&priv->browse_files_popover, gtk_widget_destroy);
g_clear_object (&priv->extra_widget);
g_clear_pointer (&priv->bookmarks_manager, _gtk_bookmarks_manager_free);
@ -8007,7 +8005,6 @@ post_process_ui (GtkFileChooserWidget *impl)
gtk_popover_set_default_widget (GTK_POPOVER (priv->new_folder_popover), priv->new_folder_create_button);
gtk_popover_set_default_widget (GTK_POPOVER (priv->rename_file_popover), priv->rename_file_rename_button);
gtk_popover_set_relative_to (GTK_POPOVER (priv->rename_file_popover), priv->browse_files_tree_view);
priv->item_actions = G_ACTION_GROUP (g_simple_action_group_new ());
g_action_map_add_action_entries (G_ACTION_MAP (priv->item_actions),

View File

@ -6045,7 +6045,8 @@ gtk_label_do_popup (GtkLabel *label,
GMenuModel *model;
model = gtk_label_get_menu_model (label);
priv->popup_menu = gtk_popover_menu_new_from_model (GTK_WIDGET (label), model);
priv->popup_menu = gtk_popover_menu_new_from_model (model);
gtk_widget_set_parent (priv->popup_menu, GTK_WIDGET (label));
gtk_popover_set_position (GTK_POPOVER (priv->popup_menu), GTK_POS_BOTTOM);
gtk_popover_set_has_arrow (GTK_POPOVER (priv->popup_menu), FALSE);

View File

@ -421,7 +421,8 @@ gtk_link_button_do_popup (GtkLinkButton *link_button,
GMenuModel *model;
model = gtk_link_button_get_menu_model ();
priv->popup_menu = gtk_popover_menu_new_from_model (GTK_WIDGET (link_button), model);
priv->popup_menu = gtk_popover_menu_new_from_model (model);
gtk_widget_set_parent (priv->popup_menu, GTK_WIDGET (link_button));
gtk_popover_set_position (GTK_POPOVER (priv->popup_menu), GTK_POS_BOTTOM);
gtk_popover_set_has_arrow (GTK_POPOVER (priv->popup_menu), FALSE);

View File

@ -301,6 +301,7 @@ gtk_menu_button_measure (GtkWidget *widget,
for_size,
minimum, natural,
minimum_baseline, natural_baseline);
}
static void
@ -315,7 +316,6 @@ gtk_menu_button_size_allocate (GtkWidget *widget,
gtk_widget_size_allocate (priv->button,
&(GtkAllocation) { 0, 0, width, height },
baseline);
if (priv->popover)
gtk_native_check_resize (GTK_NATIVE (priv->popover));
}
@ -552,7 +552,7 @@ gtk_menu_button_set_menu_model (GtkMenuButton *menu_button,
{
GtkWidget *popover;
popover = gtk_popover_menu_new_from_model (GTK_WIDGET (menu_button), menu_model);
popover = gtk_popover_menu_new_from_model (menu_model);
gtk_menu_button_set_popover (menu_button, popover);
}
else
@ -752,7 +752,7 @@ gtk_menu_button_dispose (GObject *object)
g_signal_handlers_disconnect_by_func (priv->popover,
popover_destroy_cb,
object);
gtk_popover_set_relative_to (GTK_POPOVER (priv->popover), NULL);
gtk_widget_unparent (priv->popover);
priv->popover = NULL;
}
@ -803,14 +803,14 @@ gtk_menu_button_set_popover (GtkMenuButton *menu_button,
popover_destroy_cb,
menu_button);
gtk_popover_set_relative_to (GTK_POPOVER (priv->popover), NULL);
gtk_widget_unparent (priv->popover);
}
priv->popover = popover;
if (popover)
{
gtk_popover_set_relative_to (GTK_POPOVER (priv->popover), GTK_WIDGET (menu_button));
gtk_widget_set_parent (priv->popover, GTK_WIDGET (menu_button));
g_signal_connect_swapped (priv->popover, "closed",
G_CALLBACK (menu_deactivate_cb), menu_button);
g_signal_connect_swapped (priv->popover, "destroy",

View File

@ -303,7 +303,7 @@ gtk_menu_section_box_insert_func (GtkMenuTrackerItem *item,
model = _gtk_menu_tracker_item_get_link (item, G_MENU_LINK_SUBMENU);
submenu = gtk_popover_menu_new_from_model_full (NULL, model, box->flags);
submenu = gtk_popover_menu_new_from_model_full (model, box->flags);
gtk_popover_set_has_arrow (GTK_POPOVER (submenu), FALSE);
gtk_widget_set_valign (submenu, GTK_ALIGN_START);

View File

@ -699,13 +699,13 @@ gtk_model_button_set_popover (GtkModelButton *button,
GtkWidget *popover)
{
if (button->popover)
gtk_popover_set_relative_to (GTK_POPOVER (button->popover), NULL);
gtk_widget_unparent (button->popover);
button->popover = popover;
if (button->popover)
{
gtk_popover_set_relative_to (GTK_POPOVER (button->popover), GTK_WIDGET (button));
gtk_widget_set_parent (button->popover, GTK_WIDGET (button));
gtk_popover_set_position (GTK_POPOVER (button->popover), GTK_POS_RIGHT);
}

View File

@ -1413,7 +1413,8 @@ do_popup_menu_for_process_tree_view (GtkWidget *widget,
GtkWidget *item;
double x, y;
menu = gtk_popover_new (widget);
menu = gtk_popover_new ();
gtk_widget_set_parent (menu, widget);
gtk_style_context_add_class (gtk_widget_get_style_context (menu),
GTK_STYLE_CLASS_CONTEXT_MENU);

View File

@ -6531,7 +6531,8 @@ gtk_notebook_popup_enable (GtkNotebook *notebook)
if (priv->menu)
return;
priv->menu = gtk_popover_menu_new (priv->tabs_widget);
priv->menu = gtk_popover_menu_new ();
gtk_widget_set_parent (priv->menu, priv->tabs_widget);
priv->menu_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
gtk_popover_menu_add_submenu (GTK_POPOVER_MENU (priv->menu), priv->menu_box, "main");

View File

@ -2558,7 +2558,8 @@ create_rename_popover (GtkPlacesSidebar *sidebar)
if (sidebar->rename_popover)
return;
popover = gtk_popover_new (GTK_WIDGET (sidebar));
popover = gtk_popover_new ();
gtk_widget_set_parent (popover, GTK_WIDGET (sidebar));
/* Clean sidebar pointer when its destroyed, most of the times due to its
* relative_to associated row being destroyed */
g_signal_connect (popover, "destroy", G_CALLBACK (on_rename_popover_destroy), sidebar);
@ -2625,13 +2626,13 @@ update_popover_shadowing (GtkWidget *row,
static void
set_prelight (GtkPopover *popover)
{
update_popover_shadowing (gtk_popover_get_relative_to (popover), TRUE);
update_popover_shadowing (gtk_widget_get_parent (GTK_WIDGET (popover)), TRUE);
}
static void
unset_prelight (GtkPopover *popover)
{
update_popover_shadowing (gtk_popover_get_relative_to (popover), FALSE);
update_popover_shadowing (gtk_widget_get_parent (GTK_WIDGET (popover)), FALSE);
}
static void
@ -2661,7 +2662,7 @@ show_rename_popover (GtkSidebarRow *row)
sidebar->rename_uri = g_strdup (uri);
gtk_editable_set_text (GTK_EDITABLE (sidebar->rename_entry), name);
gtk_popover_set_relative_to (GTK_POPOVER (sidebar->rename_popover), GTK_WIDGET (row));
gtk_widget_set_parent (sidebar->rename_popover, GTK_WIDGET (row));
setup_popover_shadowing (sidebar->rename_popover);
gtk_popover_popup (GTK_POPOVER (sidebar->rename_popover));
@ -3513,7 +3514,8 @@ create_row_popover (GtkPlacesSidebar *sidebar,
}
#endif
sidebar->popover = gtk_popover_new (GTK_WIDGET (sidebar));
sidebar->popover = gtk_popover_new ();
gtk_widget_set_parent (sidebar->popover, GTK_WIDGET (sidebar));
/* Clean sidebar pointer when its destroyed, most of the times due to its
* relative_to associated row being destroyed */
g_signal_connect (sidebar->popover, "destroy", G_CALLBACK (on_row_popover_destroy), sidebar);
@ -3561,7 +3563,7 @@ show_row_popover (GtkSidebarRow *row)
create_row_popover (sidebar, row);
gtk_popover_set_relative_to (GTK_POPOVER (sidebar->popover), GTK_WIDGET (row));
gtk_widget_set_parent (sidebar->popover, GTK_WIDGET (row));
sidebar->context_row = row;
gtk_popover_popup (GTK_POPOVER (sidebar->popover));

View File

@ -1729,7 +1729,8 @@ popup_menu (GtkPlacesViewRow *row,
{
GMenuModel *model = get_menu_model ();
priv->popup_menu = gtk_popover_menu_new_from_model (GTK_WIDGET (view), model);
priv->popup_menu = gtk_popover_menu_new_from_model (model);
gtk_widget_set_parent (priv->popup_menu, GTK_WIDGET (view));
gtk_popover_set_position (GTK_POPOVER (priv->popup_menu), GTK_POS_BOTTOM);
gtk_popover_set_has_arrow (GTK_POPOVER (priv->popup_menu), FALSE);
@ -1739,7 +1740,7 @@ popup_menu (GtkPlacesViewRow *row,
}
gtk_widget_set_halign (priv->popup_menu, GTK_ALIGN_CENTER);
gtk_popover_set_relative_to (GTK_POPOVER (priv->popup_menu), GTK_WIDGET (row));
gtk_widget_set_parent (priv->popup_menu, GTK_WIDGET (row));
priv->row_for_action = row;
gtk_popover_popup (GTK_POPOVER (priv->popup_menu));

View File

@ -25,8 +25,7 @@
*
* GtkPopover is a bubble-like context window, primarily meant to
* provide context-dependent information or options. Popovers are
* attached to a widget, passed at construction time on gtk_popover_new(),
* or updated afterwards through gtk_popover_set_relative_to(), by
* attached to a widget, set with gtk_widget_set_parent(). By
* default they will point to the whole widget area, although this
* behavior can be changed through gtk_popover_set_pointing_to().
*
@ -143,7 +142,6 @@ typedef struct {
GtkWidget *default_widget;
GdkSurfaceState state;
GtkWidget *relative_to;
GdkRectangle pointing_to;
gboolean has_pointing_to;
guint surface_transform_changed_cb;
@ -169,8 +167,7 @@ enum {
static guint signals[LAST_SIGNAL] = { 0 };
enum {
PROP_RELATIVE_TO = 1,
PROP_POINTING_TO,
PROP_POINTING_TO = 1,
PROP_POSITION,
PROP_AUTOHIDE,
PROP_DEFAULT_WIDGET,
@ -416,8 +413,10 @@ create_popup_layout (GtkPopover *popover)
GdkGravity surface_anchor;
GdkAnchorHints anchor_hints;
GdkPopupLayout *layout;
GtkWidget *parent;
gtk_widget_get_surface_allocation (priv->relative_to, &rect);
parent = gtk_widget_get_parent (GTK_WIDGET (popover));
gtk_widget_get_surface_allocation (parent, &rect);
if (priv->has_pointing_to)
{
rect.x += priv->pointing_to.x;
@ -653,7 +652,7 @@ gtk_popover_activate_default (GtkPopover *popover)
GtkPopoverPrivate *priv = gtk_popover_get_instance_private (popover);
GtkWidget *focus_widget;
focus_widget = gtk_window_get_focus (GTK_WINDOW (gtk_widget_get_root (priv->relative_to)));
focus_widget = gtk_window_get_focus (GTK_WINDOW (gtk_widget_get_root (GTK_WIDGET (popover))));
if (!gtk_widget_is_ancestor (focus_widget, GTK_WIDGET (popover)))
focus_widget = NULL;
@ -744,10 +743,12 @@ gtk_popover_realize (GtkWidget *widget)
{
GtkPopover *popover = GTK_POPOVER (widget);
GtkPopoverPrivate *priv = gtk_popover_get_instance_private (popover);
GdkSurface *parent;
GdkSurface *parent_surface;
GtkWidget *parent;
parent = gtk_native_get_surface (gtk_widget_get_native (priv->relative_to));
priv->surface = gdk_surface_new_popup (parent, priv->autohide);
parent = gtk_widget_get_parent (widget);
parent_surface = gtk_native_get_surface (gtk_widget_get_native (parent));
priv->surface = gdk_surface_new_popup (parent_surface, priv->autohide);
gdk_surface_set_widget (priv->surface, widget);
@ -838,11 +839,13 @@ gtk_popover_map (GtkWidget *widget)
GtkPopover *popover = GTK_POPOVER (widget);
GtkPopoverPrivate *priv = gtk_popover_get_instance_private (popover);
GtkWidget *child;
GtkWidget *parent;
present_popup (popover);
parent = gtk_widget_get_parent (widget);
priv->surface_transform_changed_cb =
gtk_widget_add_surface_transform_changed_callback (priv->relative_to,
gtk_widget_add_surface_transform_changed_callback (parent,
surface_transform_changed_cb,
popover,
unset_surface_transform_changed_cb);
@ -860,8 +863,10 @@ gtk_popover_unmap (GtkWidget *widget)
GtkPopover *popover = GTK_POPOVER (widget);
GtkPopoverPrivate *priv = gtk_popover_get_instance_private (popover);
GtkWidget *child;
GtkWidget *parent;
gtk_widget_remove_surface_transform_changed_callback (priv->relative_to,
parent = gtk_widget_get_parent (widget);
gtk_widget_remove_surface_transform_changed_callback (parent,
priv->surface_transform_changed_cb);
priv->surface_transform_changed_cb = 0;
@ -926,11 +931,13 @@ gtk_popover_get_gap_coords (GtkPopover *popover,
int border_radius;
int popover_width, popover_height;
GtkCssStyle *style;
GtkWidget *parent;
popover_width = gtk_widget_get_allocated_width (widget);
popover_height = gtk_widget_get_allocated_height (widget);
parent = gtk_widget_get_parent (widget);
gtk_widget_get_surface_allocation (priv->relative_to, &rect);
gtk_widget_get_surface_allocation (parent, &rect);
if (priv->has_pointing_to)
{
rect.x += priv->pointing_to.x;
@ -1097,8 +1104,11 @@ gtk_popover_apply_tail_path (GtkPopover *popover,
gint tip_x, tip_y;
gint final_x, final_y;
GtkBorder border;
GtkWidget *parent;
if (!priv->relative_to)
parent = gtk_widget_get_parent (GTK_WIDGET (popover));
if (!parent)
return;
get_border (priv->arrow_node, &border);
@ -1364,10 +1374,6 @@ gtk_popover_set_property (GObject *object,
switch (prop_id)
{
case PROP_RELATIVE_TO:
gtk_popover_set_relative_to (popover, g_value_get_object (value));
break;
case PROP_POINTING_TO:
gtk_popover_set_pointing_to (popover, g_value_get_boxed (value));
break;
@ -1405,10 +1411,6 @@ gtk_popover_get_property (GObject *object,
switch (prop_id)
{
case PROP_RELATIVE_TO:
g_value_set_object (value, priv->relative_to);
break;
case PROP_POINTING_TO:
g_value_set_boxed (value, &priv->pointing_to);
break;
@ -1483,13 +1485,6 @@ gtk_popover_class_init (GtkPopoverClass *klass)
klass->activate_default = gtk_popover_activate_default;
properties[PROP_RELATIVE_TO] =
g_param_spec_object ("relative-to",
P_("Relative to"),
P_("Widget the bubble window points to"),
GTK_TYPE_WIDGET,
GTK_PARAM_READWRITE);
properties[PROP_POINTING_TO] =
g_param_spec_boxed ("pointing-to",
P_("Pointing to"),
@ -1551,24 +1546,9 @@ gtk_popover_class_init (GtkPopoverClass *klass)
}
GtkWidget *
gtk_popover_new (GtkWidget *relative_to)
gtk_popover_new (void)
{
return GTK_WIDGET (g_object_new (GTK_TYPE_POPOVER,
"relative-to", relative_to,
NULL));
}
static void
relative_to_size_changed (GtkWidget *widget,
int width,
int height,
int baseline,
GtkPopover *popover)
{
GtkPopoverPrivate *priv = gtk_popover_get_instance_private (popover);
if (priv->surface && gdk_surface_get_mapped (priv->surface))
present_popup (popover);
return g_object_new (GTK_TYPE_POPOVER, NULL);
}
void
@ -1610,79 +1590,13 @@ gtk_popover_native_interface_init (GtkNativeInterface *iface)
iface->check_resize = gtk_popover_native_check_resize;
}
/**
* gtk_popover_set_relative_to:
* @popover: a #GtkPopover
* @relative_to: (allow-none): a #GtkWidget
*
* Sets a new widget to be attached to @popover. If @popover is
* 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.
**/
void
gtk_popover_set_relative_to (GtkPopover *popover,
GtkWidget *relative_to)
{
GtkPopoverPrivate *priv = gtk_popover_get_instance_private (popover);
g_return_if_fail (GTK_IS_POPOVER (popover));
g_object_ref (popover);
if (priv->relative_to)
{
g_signal_handlers_disconnect_by_func (priv->relative_to,
relative_to_size_changed,
popover);
gtk_widget_unparent (GTK_WIDGET (popover));
}
priv->relative_to = relative_to;
if (priv->relative_to)
{
g_signal_connect_object (priv->relative_to, "size-allocate",
G_CALLBACK (relative_to_size_changed), popover, 0);
gtk_css_node_set_parent (gtk_widget_get_css_node (GTK_WIDGET (popover)),
gtk_widget_get_css_node (relative_to));
gtk_widget_set_parent (GTK_WIDGET (popover), relative_to);
}
g_object_notify_by_pspec (G_OBJECT (popover), properties[PROP_RELATIVE_TO]);
g_object_unref (popover);
}
/**
* gtk_popover_get_relative_to:
* @popover: a #GtkPopover
*
* Returns the widget @popover is currently attached to
*
* Returns: (transfer none): a #GtkWidget
**/
GtkWidget *
gtk_popover_get_relative_to (GtkPopover *popover)
{
GtkPopoverPrivate *priv = gtk_popover_get_instance_private (popover);
g_return_val_if_fail (GTK_IS_POPOVER (popover), NULL);
return priv->relative_to;
}
/**
* gtk_popover_set_pointing_to:
* @popover: a #GtkPopover
* @rect: rectangle to point to
*
* Sets the rectangle that @popover will point to, in the
* coordinate space of the widget @popover is attached to,
* see gtk_popover_set_relative_to().
* coordinate space of the @popover parent.
**/
void
gtk_popover_set_pointing_to (GtkPopover *popover,
@ -1726,11 +1640,12 @@ gtk_popover_get_pointing_to (GtkPopover *popover,
if (priv->has_pointing_to)
*rect = priv->pointing_to;
else if (priv->relative_to)
else
{
graphene_rect_t r;
GtkWidget *parent = gtk_widget_get_parent (GTK_WIDGET (popover));
if (!gtk_widget_compute_bounds (priv->relative_to, priv->relative_to, &r))
if (!gtk_widget_compute_bounds (parent, parent, &r))
return FALSE;
rect->x = floorf (r.origin.x);

View File

@ -60,13 +60,7 @@ GDK_AVAILABLE_IN_ALL
GType gtk_popover_get_type (void) G_GNUC_CONST;
GDK_AVAILABLE_IN_ALL
GtkWidget * gtk_popover_new (GtkWidget *relative_to);
GDK_AVAILABLE_IN_ALL
void gtk_popover_set_relative_to (GtkPopover *popover,
GtkWidget *relative_to);
GDK_AVAILABLE_IN_ALL
GtkWidget * gtk_popover_get_relative_to (GtkPopover *popover);
GtkWidget * gtk_popover_new (void);
GDK_AVAILABLE_IN_ALL
void gtk_popover_set_pointing_to (GtkPopover *popover,

View File

@ -461,21 +461,17 @@ gtk_popover_menu_class_init (GtkPopoverMenuClass *klass)
/**
* gtk_popover_menu_new:
* @relative_to: (allow-none): #GtkWidget the popover is related to
*
* Creates a new popover menu.
*
* Returns: a new #GtkPopoverMenu
*/
GtkWidget *
gtk_popover_menu_new (GtkWidget *relative_to)
gtk_popover_menu_new (void)
{
GtkWidget *popover;
g_return_val_if_fail (relative_to == NULL || GTK_IS_WIDGET (relative_to), NULL);
popover = g_object_new (GTK_TYPE_POPOVER_MENU,
"relative-to", relative_to,
"autohide", TRUE,
NULL);
@ -522,11 +518,10 @@ gtk_popover_menu_add_submenu (GtkPopoverMenu *popover,
/**
* gtk_popover_menu_new_from_model:
* @relative_to: (allow-none): #GtkWidget the popover is related to
* @model: (allow-none): a #GMenuModel, or %NULL
*
* Creates a #GtkPopoverMenu and populates it according to
* @model. The popover is pointed to the @relative_to widget.
* @model.
*
* The created buttons are connected to actions found in the
* #GtkApplicationWindow to which the popover belongs - typically
@ -543,27 +538,25 @@ gtk_popover_menu_add_submenu (GtkPopoverMenu *popover,
* Returns: the new #GtkPopoverMenu
*/
GtkWidget *
gtk_popover_menu_new_from_model (GtkWidget *relative_to,
GMenuModel *model)
gtk_popover_menu_new_from_model (GMenuModel *model)
{
return gtk_popover_menu_new_from_model_full (relative_to, model, 0);
return gtk_popover_menu_new_from_model_full (model, 0);
}
/**
* gtk_popover_menu_new_from_model_full:
* @relative_to: (allow-none): #GtkWidget the popover is related to
* @model: a #GMenuModel
* @flags: flags that affect how the menu is created
*
* Creates a #GtkPopoverMenu and populates it according to
* @model. The popover is pointed to the @relative_to widget.
* @model.
*
* The created buttons are connected to actions found in the
* action groups that are accessible from the @relative-to widget.
* action groups that are accessible from the parent widget.
* This includes the #GtkApplicationWindow to which the popover
* belongs. Actions can also be added using gtk_widget_insert_action_group()
* on the @relative-to widget or on any of its parent widgets.
* on the parent widget or on any of its parent widgets.
*
* The only flag that is supported currently is
* #GTK_POPOVER_MENU_NESTED, which makes GTK create traditional,
@ -572,16 +565,14 @@ gtk_popover_menu_new_from_model (GtkWidget *relative_to,
* Returns: (transfer full): the new #GtkPopoverMenu
*/
GtkWidget *
gtk_popover_menu_new_from_model_full (GtkWidget *relative_to,
GMenuModel *model,
gtk_popover_menu_new_from_model_full (GMenuModel *model,
GtkPopoverMenuFlags flags)
{
GtkWidget *popover;
g_return_val_if_fail (relative_to == NULL || GTK_IS_WIDGET (relative_to), NULL);
g_return_val_if_fail (model == NULL || G_IS_MENU_MODEL (model), NULL);
popover = gtk_popover_menu_new (relative_to);
popover = gtk_popover_menu_new ();
GTK_POPOVER_MENU (popover)->flags = flags;
gtk_popover_menu_set_menu_model (GTK_POPOVER_MENU (popover), model);

View File

@ -36,8 +36,7 @@ GDK_AVAILABLE_IN_ALL
GType gtk_popover_menu_get_type (void) G_GNUC_CONST;
GDK_AVAILABLE_IN_ALL
GtkWidget * gtk_popover_menu_new_from_model (GtkWidget *relative_to,
GMenuModel *model);
GtkWidget * gtk_popover_menu_new_from_model (GMenuModel *model);
/**
* GtkPopoverMenuFlags:
@ -53,8 +52,7 @@ typedef enum {
} GtkPopoverMenuFlags;
GDK_AVAILABLE_IN_ALL
GtkWidget * gtk_popover_menu_new_from_model_full (GtkWidget *relative_to,
GMenuModel *model,
GtkWidget * gtk_popover_menu_new_from_model_full (GMenuModel *model,
GtkPopoverMenuFlags flags);
GDK_AVAILABLE_IN_ALL

View File

@ -405,7 +405,8 @@ tracker_insert (GtkMenuTrackerItem *item,
G_BINDING_SYNC_CREATE);
model = _gtk_menu_tracker_item_get_link (item, G_MENU_LINK_SUBMENU);
popover = GTK_POPOVER (gtk_popover_menu_new_from_model_full (GTK_WIDGET (widget), model, GTK_POPOVER_MENU_NESTED));
popover = GTK_POPOVER (gtk_popover_menu_new_from_model_full (model, GTK_POPOVER_MENU_NESTED));
gtk_widget_set_parent (GTK_WIDGET (popover), GTK_WIDGET (widget));
gtk_popover_set_position (popover, GTK_POS_BOTTOM);
gtk_popover_set_has_arrow (popover, FALSE);
gtk_widget_set_halign (GTK_WIDGET (popover), GTK_ALIGN_START);

View File

@ -32,7 +32,7 @@ GtkWidget *gtk_popover_menu_get_parent_menu (GtkPopoverMenu *menu);
void gtk_popover_menu_set_parent_menu (GtkPopoverMenu *menu,
GtkWidget *parent);
GtkWidget * gtk_popover_menu_new (GtkWidget *relative_to);
GtkWidget * gtk_popover_menu_new (void);
void gtk_popover_menu_add_submenu (GtkPopoverMenu *popover,
GtkWidget *submenu,

View File

@ -376,7 +376,7 @@ gtk_scale_button_init (GtkScaleButton *button)
priv->applied_orientation = GTK_ORIENTATION_VERTICAL;
gtk_widget_init_template (GTK_WIDGET (button));
gtk_popover_set_relative_to (GTK_POPOVER (priv->dock), GTK_WIDGET (button));
gtk_widget_set_parent (priv->dock, GTK_WIDGET (button));
/* Need a local reference to the adjustment */
priv->adjustment = gtk_adjustment_new (0, 0, 100, 2, 20, 0);

View File

@ -932,7 +932,6 @@ gtk_shortcuts_window_init (GtkShortcutsWindow *self)
gtk_stack_add_named (priv->title_stack, GTK_WIDGET (priv->menu_button), "sections");
priv->popover = g_object_new (GTK_TYPE_POPOVER,
"relative-to", priv->menu_button,
"position", GTK_POS_BOTTOM,
NULL);
gtk_menu_button_set_popover (priv->menu_button, GTK_WIDGET (priv->popover));

View File

@ -1898,7 +1898,8 @@ gtk_text_ensure_magnifier (GtkText *self)
priv->magnifier = _gtk_magnifier_new (GTK_WIDGET (self));
gtk_widget_set_size_request (priv->magnifier, 100, 60);
_gtk_magnifier_set_magnification (GTK_MAGNIFIER (priv->magnifier), 2.0);
priv->magnifier_popover = gtk_popover_new (GTK_WIDGET (self));
priv->magnifier_popover = gtk_popover_new ();
gtk_widget_set_parent (priv->magnifier_popover, GTK_WIDGET (self));
gtk_widget_add_css_class (priv->magnifier_popover, "magnifier");
gtk_popover_set_autohide (GTK_POPOVER (priv->magnifier_popover), FALSE);
gtk_container_add (GTK_CONTAINER (priv->magnifier_popover),
@ -2527,7 +2528,8 @@ gtk_text_do_popup (GtkText *self,
GMenuModel *model;
model = gtk_text_get_menu_model (self);
priv->popup_menu = gtk_popover_menu_new_from_model (GTK_WIDGET (self), model);
priv->popup_menu = gtk_popover_menu_new_from_model (model);
gtk_widget_set_parent (priv->popup_menu, GTK_WIDGET (self));
gtk_popover_set_position (GTK_POPOVER (priv->popup_menu), GTK_POS_BOTTOM);
gtk_popover_set_has_arrow (GTK_POPOVER (priv->popup_menu), FALSE);
@ -6026,7 +6028,8 @@ gtk_text_selection_bubble_popup_show (gpointer user_data)
g_clear_pointer (&priv->selection_bubble, gtk_widget_unparent);
priv->selection_bubble = gtk_popover_new (GTK_WIDGET (self));
priv->selection_bubble = gtk_popover_new ();
gtk_widget_set_parent (priv->selection_bubble, GTK_WIDGET (self));
gtk_widget_add_css_class (priv->selection_bubble, GTK_STYLE_CLASS_TOUCH_SELECTION);
gtk_popover_set_position (GTK_POPOVER (priv->selection_bubble), GTK_POS_BOTTOM);
gtk_popover_set_autohide (GTK_POPOVER (priv->selection_bubble), FALSE);
@ -6788,7 +6791,7 @@ gtk_text_insert_emoji (GtkText *self)
chooser = gtk_emoji_chooser_new ();
g_object_set_data (G_OBJECT (self), "gtk-emoji-chooser", chooser);
gtk_popover_set_relative_to (GTK_POPOVER (chooser), GTK_WIDGET (self));
gtk_widget_set_parent (chooser, GTK_WIDGET (self));
g_signal_connect (chooser, "emoji-picked", G_CALLBACK (emoji_picked), self);
}

View File

@ -1756,7 +1756,8 @@ _gtk_text_view_ensure_magnifier (GtkTextView *text_view)
priv->magnifier = _gtk_magnifier_new (GTK_WIDGET (text_view));
_gtk_magnifier_set_magnification (GTK_MAGNIFIER (priv->magnifier), 2.0);
priv->magnifier_popover = gtk_popover_new (GTK_WIDGET (text_view));
priv->magnifier_popover = gtk_popover_new ();
gtk_widget_set_parent (priv->magnifier_popover, GTK_WIDGET (text_view));
gtk_widget_add_css_class (priv->magnifier_popover, "magnifier");
gtk_popover_set_autohide (GTK_POPOVER (priv->magnifier_popover), FALSE);
gtk_container_add (GTK_CONTAINER (priv->magnifier_popover),
@ -8633,7 +8634,8 @@ gtk_text_view_do_popup (GtkTextView *text_view,
GMenuModel *model;
model = gtk_text_view_get_menu_model (text_view);
priv->popup_menu = gtk_popover_menu_new_from_model (GTK_WIDGET (text_view), model);
priv->popup_menu = gtk_popover_menu_new_from_model (model);
gtk_widget_set_parent (priv->popup_menu, GTK_WIDGET (text_view));
gtk_popover_set_position (GTK_POPOVER (priv->popup_menu), GTK_POS_BOTTOM);
gtk_popover_set_has_arrow (GTK_POPOVER (priv->popup_menu), FALSE);
@ -8847,7 +8849,8 @@ gtk_text_view_selection_bubble_popup_show (gpointer user_data)
g_clear_pointer (&priv->selection_bubble, gtk_widget_unparent);
priv->selection_bubble = gtk_popover_new (GTK_WIDGET (text_view));
priv->selection_bubble = gtk_popover_new ();
gtk_widget_set_parent (priv->selection_bubble, GTK_WIDGET (text_view));
gtk_widget_add_css_class (priv->selection_bubble, GTK_STYLE_CLASS_TOUCH_SELECTION);
gtk_popover_set_position (GTK_POPOVER (priv->selection_bubble), GTK_POS_BOTTOM);
gtk_popover_set_autohide (GTK_POPOVER (priv->selection_bubble), FALSE);
@ -9646,7 +9649,7 @@ gtk_text_view_insert_emoji (GtkTextView *text_view)
chooser = gtk_emoji_chooser_new ();
g_object_set_data (G_OBJECT (text_view), "gtk-emoji-chooser", chooser);
gtk_popover_set_relative_to (GTK_POPOVER (chooser), GTK_WIDGET (text_view));
gtk_widget_set_parent (chooser, GTK_WIDGET (text_view));
g_signal_connect_swapped (chooser, "emoji-picked",
G_CALLBACK (gtk_text_view_insert_at_cursor), text_view);
}

View File

@ -10053,7 +10053,8 @@ gtk_tree_view_ensure_interactive_directory (GtkTreeView *tree_view)
if (tree_view->search_popover)
return;
tree_view->search_popover = gtk_popover_new (GTK_WIDGET (tree_view));
tree_view->search_popover = gtk_popover_new ();
gtk_widget_set_parent (tree_view->search_popover, GTK_WIDGET (tree_view));
gtk_popover_set_autohide (GTK_POPOVER (tree_view->search_popover), FALSE);
controller = gtk_event_controller_key_new ();

View File

@ -6750,7 +6750,8 @@ gtk_window_do_popup_fallback (GtkWindow *window,
minimized = (state & GDK_SURFACE_STATE_MINIMIZED) == GDK_SURFACE_STATE_MINIMIZED;
maximized = priv->maximized && !minimized;
priv->popup_menu = gtk_popover_menu_new (priv->title_box);
priv->popup_menu = gtk_popover_menu_new ();
gtk_widget_set_parent (priv->popup_menu, priv->title_box);
box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
gtk_popover_menu_add_submenu (GTK_POPOVER_MENU (priv->popup_menu), box, "main");

View File

@ -102,7 +102,8 @@ show_node_prop_editor (NodePropEditor *npe)
GtkWidget *popover;
GtkWidget *editor;
popover = gtk_popover_new (GTK_WIDGET (npe->cnt->priv->node_tree));
popover = gtk_popover_new ();
gtk_widget_set_parent (popover, GTK_WIDGET (npe->cnt->priv->node_tree));
gtk_popover_set_pointing_to (GTK_POPOVER (popover), &npe->rect);
editor = gtk_inspector_prop_editor_new (G_OBJECT (npe->node), npe->prop_name, NULL);

View File

@ -943,7 +943,7 @@ property_editor (GObject *object,
GFlagsClass *fclass;
gint j;
popover = gtk_popover_new (NULL);
popover = gtk_popover_new ();
prop_edit = gtk_menu_button_new ();
gtk_menu_button_set_popover (GTK_MENU_BUTTON (prop_edit), popover);
@ -1010,7 +1010,7 @@ property_editor (GObject *object,
GtkWidget *sw;
GListModel *model;
popover = gtk_popover_new (NULL);
popover = gtk_popover_new ();
prop_edit = gtk_menu_button_new ();
gtk_menu_button_set_popover (GTK_MENU_BUTTON (prop_edit), popover);

View File

@ -1163,7 +1163,8 @@ node_property_activated (GtkTreeView *tv,
if (texture == NULL || visible)
return;
popover = gtk_popover_new (GTK_WIDGET (tv));
popover = gtk_popover_new ();
gtk_widget_set_parent (popover, GTK_WIDGET (tv));
gtk_popover_set_pointing_to (GTK_POPOVER (popover), &rect);
image = gtk_image_new_from_paintable (GDK_PAINTABLE (texture));

View File

@ -22,11 +22,9 @@
</child>
</object>
</child>
</template>
<object class="GtkCellAreaBox" id="area"/>
<child>
<object class="GtkTreePopover" id="popup_widget">
<property name="cell-area">area</property>
<property name="relative-to">GtkComboBox</property>
<property name="cell-area"><object class="GtkCellAreaBox" id="area"/></property>
<property name="has-arrow">0</property>
<signal name="menu-activate" handler="gtk_combo_box_menu_activate" swapped="no"/>
<signal name="show" handler="gtk_combo_box_menu_show" swapped="no"/>
@ -38,4 +36,6 @@
</object>
</child>
</object>
</child>
</template>
</interface>

View File

@ -14,7 +14,6 @@
<property name="popup-completion">0</property>
</object>
<object class="GtkPopover" id="server_adresses_popover">
<property name="relative-to">address_entry</property>
<property name="position">top</property>
<child>
<object class="GtkBox">

View File

@ -194,7 +194,7 @@ main (int argc, char *argv[])
button = gtk_menu_button_new ();
gtk_menu_button_set_direction (GTK_MENU_BUTTON (button), GTK_ARROW_UP);
popover = gtk_popover_new (NULL);
popover = gtk_popover_new ();
label = gtk_label_new ("Popovers work too!");
gtk_container_add (GTK_CONTAINER (popover), label);

View File

@ -141,7 +141,7 @@ static void
do_copy (GtkWidget *button)
{
GtkWidget *popover = gtk_widget_get_ancestor (button, GTK_TYPE_POPOVER);
GtkWidget *image = gtk_popover_get_relative_to (GTK_POPOVER (popover));
GtkWidget *image = gtk_widget_get_parent (popover);
GdkDrop *drop = GDK_DROP (g_object_get_data (G_OBJECT (image), "drop"));
gtk_popover_popdown (GTK_POPOVER (popover));
@ -152,7 +152,7 @@ static void
do_cancel (GtkWidget *button)
{
GtkWidget *popover = gtk_widget_get_ancestor (button, GTK_TYPE_POPOVER);
GtkWidget *image = gtk_popover_get_relative_to (GTK_POPOVER (popover));
GtkWidget *image = gtk_widget_get_parent (popover);
GdkDrop *drop = GDK_DROP (g_object_get_data (G_OBJECT (image), "drop"));
gtk_popover_popdown (GTK_POPOVER (popover));
@ -170,7 +170,8 @@ ask_actions (GdkDrop *drop,
popover = g_object_get_data (G_OBJECT (image), "popover");
if (!popover)
{
popover = gtk_popover_new (image);
popover = gtk_popover_new ();
gtk_widget_set_parent (popover, image);
g_object_set_data (G_OBJECT (image), "popover", popover);
box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);

View File

@ -125,7 +125,7 @@ int main (int argc, char **argv)
GtkBuilder *builder = gtk_builder_new_from_string (menu_data, -1);
menu_model = G_MENU_MODEL (gtk_builder_get_object (builder, "menu_model"));
menu = gtk_popover_menu_new_from_model (NULL, menu_model);
menu = gtk_popover_menu_new_from_model (menu_model);
}
gtk_menu_button_set_popover (GTK_MENU_BUTTON (menubutton), menu);

View File

@ -340,7 +340,8 @@ do_popup_menu (GtkWidget *icon_list,
if (!path)
return;
menu = gtk_popover_new (icon_list);
menu = gtk_popover_new ();
gtk_widget_set_parent (menu, icon_list);
data = g_new0 (ItemData, 1);
data->icon_list = icon_view;

View File

@ -115,7 +115,7 @@ main (int argc, char *argv[])
gtk_menu_button_set_menu_model (GTK_MENU_BUTTON (button), model);
popover = GTK_WIDGET (gtk_menu_button_get_popover (GTK_MENU_BUTTON (button)));
popover1 = gtk_popover_menu_new_from_model_full (NULL, model, GTK_POPOVER_MENU_NESTED);
popover1 = gtk_popover_menu_new_from_model_full (model, GTK_POPOVER_MENU_NESTED);
gtk_menu_button_set_popover (GTK_MENU_BUTTON (button1), popover1);
g_object_unref (builder);

View File

@ -213,7 +213,7 @@ scrollable_policy (void)
gtk_widget_show (window);
/* Popover */
popover = gtk_popover_new (NULL);
popover = gtk_popover_new ();
widget = gtk_menu_button_new ();
gtk_menu_button_set_popover (GTK_MENU_BUTTON (widget), popover);

View File

@ -420,7 +420,7 @@ main (int argc, char *argv[])
gtk_widget_set_halign (button, GTK_ALIGN_CENTER);
gtk_menu_button_set_label (GTK_MENU_BUTTON (button), "Custom tooltip I");
gtk_container_add (GTK_CONTAINER (box), button);
popover = gtk_popover_new (NULL);
popover = gtk_popover_new ();
gtk_menu_button_set_popover (GTK_MENU_BUTTON (button), popover);
box2 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
gtk_container_add (GTK_CONTAINER (popover), box2);

View File

@ -31,13 +31,13 @@ test_popover_parent (void)
w = gtk_entry_new ();
p = gtk_popover_new (NULL);
p = gtk_popover_new ();
a = gtk_widget_get_accessible (p);
g_assert (a != NULL);
g_assert (atk_object_get_parent (a) == NULL);
gtk_popover_set_relative_to (GTK_POPOVER (p), w);
gtk_widget_set_parent (p, w);
g_assert (atk_object_get_parent (a) != NULL);

View File

@ -2181,7 +2181,7 @@ test_expose_object (void)
" </object>"
"</interface>";
menu = gtk_popover_new (NULL);
menu = gtk_popover_new ();
builder = gtk_builder_new ();
gtk_builder_expose_object (builder, "builder", G_OBJECT (builder));
gtk_builder_expose_object (builder, "external_menu", G_OBJECT (menu));

View File

@ -43,7 +43,7 @@ test_show_popover (void)
window = gtk_window_new ();
button = gtk_menu_button_new ();
popover = gtk_popover_new (NULL);
popover = gtk_popover_new ();
gtk_container_add (GTK_CONTAINER (popover), gtk_label_new ("Nu?"));
gtk_menu_button_set_popover (GTK_MENU_BUTTON (button), popover);
gtk_container_add (GTK_CONTAINER (window), button);