mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-12-25 13:11:13 +00:00
Remove gtk_widget_size_allocate from gtk_menu_popup_for_device
GtkMenu calls gtk_widget_size_allocate on its GtkWindow during gtk_menu_popup_for_device if the menu has not been realised. This can cause the allocation of the GtkWindow and the size of the GdkWindow to become out of sync because a top level GtkWindow does not attempt to re-size the GdkWindow when its allocation is set. https://bugzilla.gnome.org/show_bug.cgi?id=695120
This commit is contained in:
parent
434dfc20c7
commit
1800dc4709
@ -1683,29 +1683,6 @@ gtk_menu_popup_for_device (GtkMenu *menu,
|
|||||||
*/
|
*/
|
||||||
gtk_menu_position (menu, TRUE);
|
gtk_menu_position (menu, TRUE);
|
||||||
|
|
||||||
/* Compute the size of the toplevel and realize it so we
|
|
||||||
* can scroll correctly.
|
|
||||||
*/
|
|
||||||
if (!gtk_widget_get_realized (GTK_WIDGET (menu)))
|
|
||||||
{
|
|
||||||
GtkRequisition tmp_request;
|
|
||||||
GtkAllocation tmp_allocation = { 0, };
|
|
||||||
|
|
||||||
/* Instead of trusting the menu position function to queue a
|
|
||||||
* resize when the menu goes out of bounds, invalidate the cached
|
|
||||||
* size here.
|
|
||||||
*/
|
|
||||||
gtk_widget_queue_resize (GTK_WIDGET (menu));
|
|
||||||
gtk_widget_get_preferred_size (priv->toplevel, &tmp_request, NULL);
|
|
||||||
|
|
||||||
tmp_allocation.width = tmp_request.width;
|
|
||||||
tmp_allocation.height = tmp_request.height;
|
|
||||||
|
|
||||||
gtk_widget_size_allocate (priv->toplevel, &tmp_allocation);
|
|
||||||
|
|
||||||
gtk_widget_realize (priv->toplevel);
|
|
||||||
}
|
|
||||||
|
|
||||||
gtk_menu_scroll_to (menu, priv->scroll_offset);
|
gtk_menu_scroll_to (menu, priv->scroll_offset);
|
||||||
|
|
||||||
/* if no item is selected, select the first one */
|
/* if no item is selected, select the first one */
|
||||||
@ -2581,7 +2558,7 @@ gtk_menu_realize (GtkWidget *widget)
|
|||||||
gtk_widget_get_allocation (widget, &allocation);
|
gtk_widget_get_allocation (widget, &allocation);
|
||||||
|
|
||||||
attributes.x = 0;
|
attributes.x = 0;
|
||||||
attributes.y = 0;
|
attributes.y = - priv->scroll_offset;
|
||||||
attributes.width = allocation.width + (2 * border_width) +
|
attributes.width = allocation.width + (2 * border_width) +
|
||||||
padding.left + padding.right;
|
padding.left + padding.right;
|
||||||
attributes.height = priv->requested_height - (2 * border_width) +
|
attributes.height = priv->requested_height - (2 * border_width) +
|
||||||
|
Loading…
Reference in New Issue
Block a user