menu: Fixate size calculated by gdk_window_move_to_rect()

When we receive a size from the move-to-rect implementation, force GTK
to continue using that size until reconfigured by move-to-rect, or
when remapped.

Fixes: #1651
This commit is contained in:
Jonas Ådahl 2019-02-06 19:30:54 +01:00
parent 7298e73c44
commit 57300b4960
2 changed files with 16 additions and 10 deletions

View File

@ -1398,13 +1398,18 @@ moved_to_rect_cb (GdkWindow *window,
gboolean flipped_y,
GtkMenu *menu)
{
g_signal_emit (menu,
menu_signals[POPPED_UP],
0,
flipped_rect,
final_rect,
flipped_x,
flipped_y);
GtkMenuPrivate *priv = menu->priv;
gtk_window_fixate_size (GTK_WINDOW (priv->toplevel));
if (!priv->emulated_move_to_rect)
g_signal_emit (menu,
menu_signals[POPPED_UP],
0,
flipped_rect,
final_rect,
flipped_x,
flipped_y);
}
static void
@ -5287,9 +5292,9 @@ gtk_menu_position (GtkMenu *menu,
g_signal_handlers_disconnect_by_func (toplevel, moved_to_rect_cb, menu);
if (!emulated_move_to_rect)
g_signal_connect (toplevel, "moved-to-rect", G_CALLBACK (moved_to_rect_cb),
menu);
g_signal_connect (toplevel, "moved-to-rect", G_CALLBACK (moved_to_rect_cb),
menu);
priv->emulated_move_to_rect = emulated_move_to_rect;
gdk_window_move_to_rect (toplevel,
&rect,

View File

@ -62,6 +62,7 @@ struct _GtkMenuPrivate
gint rect_anchor_dx;
gint rect_anchor_dy;
GdkWindowTypeHint menu_type_hint;
gboolean emulated_move_to_rect;
guint toggle_size;
guint accel_size;