testcolumnview: Reordering in the column editor

Use Ctrl-Up/Down to move the column around.
This commit is contained in:
Matthias Clasen
2019-12-21 11:09:29 -05:00
parent 4c8de636ce
commit 36aaece297

View File

@@ -770,6 +770,55 @@ search_changed_cb (GtkSearchEntry *entry,
gtk_filter_changed (custom_filter, GTK_FILTER_CHANGE_DIFFERENT);
}
static void
move_column (GtkColumnView *list, gboolean down)
{
GListModel *columns;
guint position;
GtkColumnViewColumn *selected;
GtkColumnView *view;
columns = gtk_column_view_get_model (list);
position = gtk_single_selection_get_selected (GTK_SINGLE_SELECTION (columns));
selected = gtk_single_selection_get_selected_item (GTK_SINGLE_SELECTION (columns));
view = gtk_column_view_column_get_column_view (selected);
if (down && position + 1 < g_list_model_get_n_items (columns))
position++;
else if (!down && position > 0)
position--;
else
return;
gtk_column_view_insert_column (view, position, selected);
gtk_single_selection_set_selected (GTK_SINGLE_SELECTION (columns), position);
gtk_widget_grab_focus (GTK_WIDGET (list));
}
static gboolean
key_pressed_cb (GtkEventControllerKey *controller,
guint keyval,
guint keycode,
GdkModifierType modifiers,
GtkColumnView *list)
{
gboolean down;
if ((modifiers & GDK_CONTROL_MASK) == 0)
return FALSE;
if (keyval == GDK_KEY_Down)
down = TRUE;
else if (keyval == GDK_KEY_Up)
down = FALSE;
else
return FALSE;
move_column (list, down);
return TRUE;
}
int
main (int argc, char *argv[])
{
@@ -783,6 +832,8 @@ main (int argc, char *argv[])
GFile *root;
GtkBuilder *builder;
GtkColumnViewColumn *column;
GListModel *model;
GtkEventController *controller;
gtk_init ();
@@ -883,11 +934,19 @@ main (int argc, char *argv[])
gtk_column_view_append_column (GTK_COLUMN_VIEW (list), column);
g_object_unref (column);
gtk_column_view_set_model (GTK_COLUMN_VIEW (list), gtk_column_view_get_columns (GTK_COLUMN_VIEW (view)));
model = G_LIST_MODEL (gtk_single_selection_new (gtk_column_view_get_columns (GTK_COLUMN_VIEW (view))));
gtk_column_view_set_model (GTK_COLUMN_VIEW (list), model);
g_object_unref (model);
sw = gtk_scrolled_window_new (NULL, NULL);
gtk_container_add (GTK_CONTAINER (sw), list);
gtk_paned_pack2 (GTK_PANED (paned), sw, FALSE, TRUE);
controller = gtk_event_controller_key_new ();
g_signal_connect (controller, "key-pressed", G_CALLBACK (key_pressed_cb), list);
gtk_event_controller_set_propagation_phase (controller, GTK_PHASE_CAPTURE);
gtk_widget_add_controller (list, controller);
gtk_widget_show (win);
gtk_main ();