widget: create parent muxers lazily

We need to create a muxer eagerly for every
widget that has class actions, since those
are otherwise missed in the action lookup
on the muxer side. But otherwise, there is
no reason to create parent muxers aggressively,
as long as we update the parent muxers on
root/unroot.

This reduces the number of muxers we create
in widget-factory from 210 to around 50.
This commit is contained in:
Matthias Clasen
2019-06-23 17:22:02 +00:00
parent 996f011ed8
commit 3ebe30bf32

View File

@@ -2891,6 +2891,8 @@ gtk_widget_root (GtkWidget *widget)
if (priv->surface_transform_data)
add_parent_surface_transform_changed_listener (widget);
_gtk_widget_update_parent_muxer (widget);
GTK_WIDGET_GET_CLASS (widget)->root (widget);
if (!GTK_IS_ROOT (widget))
@@ -2911,6 +2913,8 @@ gtk_widget_unroot (GtkWidget *widget)
surface_transform_data->tracked_parent)
remove_parent_surface_transform_changed_listener (widget);
_gtk_widget_update_parent_muxer (widget);
GTK_WIDGET_GET_CLASS (widget)->unroot (widget);
if (priv->context)
@@ -11862,7 +11866,7 @@ gtk_widget_get_modifier_mask (GtkWidget *widget,
static GtkActionMuxer *
gtk_widget_get_parent_muxer (GtkWidget *widget,
gboolean create)
gboolean create)
{
GtkWidget *parent;
@@ -11890,7 +11894,7 @@ _gtk_widget_update_parent_muxer (GtkWidget *widget)
return;
gtk_action_muxer_set_parent (muxer,
gtk_widget_get_parent_muxer (widget, TRUE));
gtk_widget_get_parent_muxer (widget, FALSE));
}
GtkActionMuxer *