inspector: Remove list model support from the property editor

This makes the inspector lock up when used with any production
size list model, and blocks access to properties of the model
itself. Instead, we'll make the model available as an object
and add a data tab for list model contents, like we already
do for tree models.
This commit is contained in:
Matthias Clasen 2020-06-30 14:22:01 -04:00
parent 72d3a9042c
commit bbb28196e5

View File

@ -769,36 +769,6 @@ font_changed (GObject *object, GParamSpec *pspec, gpointer data)
pango_font_description_free (fb_font_desc);
}
static void
item_properties (GtkButton *button, GtkInspectorPropEditor *self)
{
GObject *item;
item = g_object_get_data (G_OBJECT (button), "item");
g_signal_emit (self, signals[SHOW_OBJECT], 0, item, "Item", "properties");
}
static GtkWidget *
create_row (gpointer item,
gpointer user_data)
{
GtkWidget *row, *label, *button;
char *name;
name = object_label (G_OBJECT (item), NULL);
label = gtk_label_new (name);
g_free (name);
button = gtk_button_new_with_label (_("Properties"));
g_object_set_data (G_OBJECT (button), "item", item);
g_signal_connect (button, "clicked", G_CALLBACK (item_properties), user_data);
row = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5);
gtk_box_append (GTK_BOX (row), label);
gtk_box_append (GTK_BOX (row), button);
return row;
}
static GtkWidget *
property_editor (GObject *object,
GParamSpec *spec,
@ -1003,39 +973,6 @@ property_editor (GObject *object,
G_CALLBACK (pointer_changed),
prop_edit, G_OBJECT (prop_edit));
}
else if (type == G_TYPE_PARAM_OBJECT &&
g_type_is_a (G_PARAM_SPEC_VALUE_TYPE (spec), G_TYPE_LIST_MODEL))
{
GtkWidget *popover;
GtkWidget *box;
GtkWidget *sw;
GListModel *model;
popover = gtk_popover_new ();
prop_edit = gtk_menu_button_new ();
gtk_menu_button_set_popover (GTK_MENU_BUTTON (prop_edit), popover);
sw = gtk_scrolled_window_new ();
gtk_popover_set_child (GTK_POPOVER (popover), sw);
g_object_set (sw,
"hexpand", TRUE,
"vexpand", TRUE,
"hscrollbar-policy", GTK_POLICY_NEVER,
"vscrollbar-policy", GTK_POLICY_NEVER,
NULL);
g_object_get (object, spec->name, &model, NULL);
if (g_list_model_get_n_items (model) >= 10)
g_object_set (prop_edit, "vscrollbar-policy", GTK_POLICY_AUTOMATIC, NULL);
box = gtk_list_box_new ();
gtk_list_box_set_selection_mode (GTK_LIST_BOX (box), GTK_SELECTION_NONE);
gtk_list_box_bind_model (GTK_LIST_BOX (box), model, create_row, self, NULL);
g_object_unref (model);
gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (sw), box);
}
else if (type == G_TYPE_PARAM_OBJECT)
{
GtkWidget *label, *button;