mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-11-17 23:10:22 +00:00
treemenu: Implement height-for-width properly
This commit is contained in:
parent
9d7a442b8b
commit
46ed450a29
@ -73,6 +73,14 @@ static void gtk_tree_menu_get_preferred_width (GtkWidget
|
||||
static void gtk_tree_menu_get_preferred_height (GtkWidget *widget,
|
||||
gint *minimum_size,
|
||||
gint *natural_size);
|
||||
static void gtk_tree_menu_get_preferred_width_for_height (GtkWidget *widget,
|
||||
gint for_height,
|
||||
gint *minimum_size,
|
||||
gint *natural_size);
|
||||
static void gtk_tree_menu_get_preferred_height_for_width (GtkWidget *widget,
|
||||
gint for_width,
|
||||
gint *minimum_size,
|
||||
gint *natural_size);
|
||||
|
||||
/* GtkCellLayoutIface */
|
||||
static void gtk_tree_menu_cell_layout_init (GtkCellLayoutIface *iface);
|
||||
@ -227,6 +235,8 @@ _gtk_tree_menu_class_init (GtkTreeMenuClass *class)
|
||||
|
||||
widget_class->get_preferred_width = gtk_tree_menu_get_preferred_width;
|
||||
widget_class->get_preferred_height = gtk_tree_menu_get_preferred_height;
|
||||
widget_class->get_preferred_width_for_height = gtk_tree_menu_get_preferred_width_for_height;
|
||||
widget_class->get_preferred_height_for_width = gtk_tree_menu_get_preferred_height_for_width;
|
||||
|
||||
/*
|
||||
* GtkTreeMenu::menu-activate:
|
||||
@ -617,6 +627,49 @@ gtk_tree_menu_get_preferred_height (GtkWidget *widget,
|
||||
g_signal_handler_unblock (priv->context, priv->size_changed_id);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_tree_menu_get_preferred_width_for_height (GtkWidget *widget,
|
||||
gint for_height,
|
||||
gint *minimum_size,
|
||||
gint *natural_size)
|
||||
{
|
||||
GtkTreeMenu *menu = GTK_TREE_MENU (widget);
|
||||
GtkTreeMenuPrivate *priv = menu->priv;
|
||||
|
||||
/* We leave the requesting work up to the cellviews which operate in the same
|
||||
* context, reserving space for the submenu indicator if any of the items have
|
||||
* submenus ensures that every cellview will receive the same allocated width.
|
||||
*
|
||||
* Since GtkMenu does hieght-for-width correctly, we know that the width of
|
||||
* every cell will be requested before the height-for-widths are requested.
|
||||
*/
|
||||
g_signal_handler_block (priv->context, priv->size_changed_id);
|
||||
|
||||
sync_reserve_submenu_size (menu);
|
||||
|
||||
GTK_WIDGET_CLASS (_gtk_tree_menu_parent_class)->get_preferred_width_for_height (widget, for_height, minimum_size, natural_size);
|
||||
|
||||
g_signal_handler_unblock (priv->context, priv->size_changed_id);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_tree_menu_get_preferred_height_for_width (GtkWidget *widget,
|
||||
gint for_width,
|
||||
gint *minimum_size,
|
||||
gint *natural_size)
|
||||
{
|
||||
GtkTreeMenu *menu = GTK_TREE_MENU (widget);
|
||||
GtkTreeMenuPrivate *priv = menu->priv;
|
||||
|
||||
g_signal_handler_block (priv->context, priv->size_changed_id);
|
||||
|
||||
sync_reserve_submenu_size (menu);
|
||||
|
||||
GTK_WIDGET_CLASS (_gtk_tree_menu_parent_class)->get_preferred_height_for_width (widget, for_width, minimum_size, natural_size);
|
||||
|
||||
g_signal_handler_unblock (priv->context, priv->size_changed_id);
|
||||
}
|
||||
|
||||
/****************************************************************
|
||||
* GtkCellLayoutIface *
|
||||
****************************************************************/
|
||||
|
Loading…
Reference in New Issue
Block a user