diff --git a/docs/reference/gtk/meson.build b/docs/reference/gtk/meson.build
index 24ab257709..af14959544 100644
--- a/docs/reference/gtk/meson.build
+++ b/docs/reference/gtk/meson.build
@@ -176,7 +176,6 @@ private_headers = [
'gtkroundedboxprivate.h',
'gtkscalerprivate.h',
'gtksearchentryprivate.h',
- 'gtkset.h',
'gtksettingsprivate.h',
'gtkshortcutcontrollerprivate.h',
'gtkshortcutsshortcutprivate.h',
diff --git a/gtk/gtkset.c b/gtk/gtkset.c
deleted file mode 100644
index 18fab23c56..0000000000
--- a/gtk/gtkset.c
+++ /dev/null
@@ -1,383 +0,0 @@
-/*
- * Copyright © 2019 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see .
- *
- * Authors: Matthias Clasen
- */
-
-#include "gtkset.h"
-
-/* Store a set of unsigned integers as a sorted array of ranges.
- */
-
-typedef struct
-{
- guint first;
- guint n_items;
-} Range;
-
-struct _GtkSet
-{
- GArray *ranges;
-};
-
-typedef struct
-{
- GtkSet *set;
- Range *current;
- int idx;
- guint pos;
-} GtkRealSetIter;
-
-GtkSet *
-gtk_set_new (void)
-{
- GtkSet *set;
-
- set = g_new (GtkSet, 1);
- set->ranges = g_array_new (FALSE, FALSE, sizeof (Range));
-
- return set;
-}
-
-GtkSet *
-gtk_set_copy (GtkSet *set)
-{
- GtkSet *copy;
-
- copy = g_new (GtkSet, 1);
- copy->ranges = g_array_copy (set->ranges);
-
- return copy;
-}
-
-void
-gtk_set_free (GtkSet *set)
-{
- g_array_free (set->ranges, TRUE);
- g_free (set);
-}
-
-gboolean
-gtk_set_contains (GtkSet *set,
- guint item)
-{
- int i;
-
- for (i = 0; i < set->ranges->len; i++)
- {
- Range *r = &g_array_index (set->ranges, Range, i);
-
- if (item < r->first)
- return FALSE;
-
- if (item < r->first + r->n_items)
- return TRUE;
- }
-
- return FALSE;
-}
-
-void
-gtk_set_remove_all (GtkSet *set)
-{
- g_array_set_size (set->ranges, 0);
-}
-
-static int
-range_compare (Range *r, Range *s)
-{
- int ret = 0;
-
- if (r->first + r->n_items < s->first)
- ret = -1;
- else if (s->first + s->n_items < r->first)
- ret = 1;
-
- return ret;
-}
-
-void
-gtk_set_add_range (GtkSet *set,
- guint first_item,
- guint n_items)
-{
- int i;
- Range s;
- int first = -1;
- int last = -1;
-
- s.first = first_item;
- s.n_items = n_items;
-
- for (i = 0; i < set->ranges->len; i++)
- {
- Range *r = &g_array_index (set->ranges, Range, i);
- int cmp = range_compare (&s, r);
-
- if (cmp < 0)
- break;
-
- if (cmp == 0)
- {
- if (first < 0)
- first = i;
- last = i;
- }
- }
-
- if (first > -1)
- {
- Range *r;
- guint start;
- guint end;
-
- r = &g_array_index (set->ranges, Range, first);
- start = MIN (s.first, r->first);
-
- r = &g_array_index (set->ranges, Range, last);
- end = MAX (s.first + s.n_items - 1, r->first + r->n_items - 1);
-
- s.first = start;
- s.n_items = end - start + 1;
-
- g_array_remove_range (set->ranges, first, last - first + 1);
- g_array_insert_val (set->ranges, first, s);
- }
- else
- g_array_insert_val (set->ranges, i, s);
-}
-
-void
-gtk_set_remove_range (GtkSet *set,
- guint first_item,
- guint n_items)
-{
- Range s;
- int i;
- int first = -1;
- int last = -1;
-
- s.first = first_item;
- s.n_items = n_items;
-
- for (i = 0; i < set->ranges->len; i++)
- {
- Range *r = &g_array_index (set->ranges, Range, i);
- int cmp = range_compare (&s, r);
-
- if (cmp < 0)
- break;
-
- if (cmp == 0)
- {
- if (first < 0)
- first = i;
- last = i;
- }
- }
-
- if (first > -1)
- {
- Range *r;
- Range a[2];
- int k = 0;
-
- r = &g_array_index (set->ranges, Range, first);
- if (r->first < s.first)
- {
- a[k].first = r->first;
- a[k].n_items = s.first - r->first;
- k++;
- }
- r = &g_array_index (set->ranges, Range, last);
- if (r->first + r->n_items > s.first + s.n_items)
- {
- a[k].first = s.first + s.n_items;
- a[k].n_items = r->first + r->n_items - a[k].first;
- k++;
- }
- g_array_remove_range (set->ranges, first, last - first + 1);
- if (k > 0)
- g_array_insert_vals (set->ranges, first, a, k);
- }
-}
-
-void
-gtk_set_find_range (GtkSet *set,
- guint position,
- guint upper_bound,
- guint *start,
- guint *n_items,
- gboolean *contained)
-{
- int i;
- int last = 0;
-
- if (position >= upper_bound)
- {
- *start = 0;
- *n_items = 0;
- *contained = FALSE;
- return;
- }
-
- for (i = 0; i < set->ranges->len; i++)
- {
- Range *r = &g_array_index (set->ranges, Range, i);
-
- if (position < r->first)
- {
- *start = last;
- *n_items = r->first - last;
- *contained = FALSE;
-
- return;
- }
- else if (r->first <= position && position < r->first + r->n_items)
- {
- *start = r->first;
- *n_items = r->n_items;
- *contained = TRUE;
-
- return;
- }
- else
- last = r->first + r->n_items;
- }
-
- *start = last;
- *n_items = upper_bound - last;
- *contained = FALSE;
-}
-
-void
-gtk_set_add_item (GtkSet *set,
- guint item)
-{
- gtk_set_add_range (set, item, 1);
-}
-
-void
-gtk_set_remove_item (GtkSet *set,
- guint item)
-{
- gtk_set_remove_range (set, item, 1);
-}
-
-/* This is peculiar operation: Replace every number n >= first by n + shift
- * This is only supported for negative shifts if the shifting does not cause
- * any ranges to overlap.
- */
-void
-gtk_set_shift (GtkSet *set,
- guint first,
- int shift)
-{
- int i;
-
- for (i = 0; i < set->ranges->len; i++)
- {
- Range *r = &g_array_index (set->ranges, Range, i);
- if (r->first >= first)
- r->first += shift;
- }
-}
-
-void
-gtk_set_iter_init (GtkSetIter *iter,
- GtkSet *set)
-{
- GtkRealSetIter *ri = (GtkRealSetIter *)iter;
-
- ri->set = set;
- ri->idx = -1;
- ri->current = 0;
-}
-
-gboolean
-gtk_set_iter_next (GtkSetIter *iter,
- guint *item)
-{
- GtkRealSetIter *ri = (GtkRealSetIter *)iter;
-
- if (ri->idx == -1)
- {
-next_range:
- ri->idx++;
-
- if (ri->idx == ri->set->ranges->len)
- return FALSE;
-
- ri->current = &g_array_index (ri->set->ranges, Range, ri->idx);
- ri->pos = ri->current->first;
- }
- else
- {
- ri->pos++;
- if (ri->pos == ri->current->first + ri->current->n_items)
- goto next_range;
- }
-
- *item = ri->pos;
- return TRUE;
-}
-
-gboolean
-gtk_set_is_empty (GtkSet *set)
-{
- return set->ranges->len == 0;
-}
-
-guint
-gtk_set_get_min (GtkSet *set)
-{
- Range *r;
-
- if (gtk_set_is_empty (set))
- return 0;
-
- r = &g_array_index (set->ranges, Range, 0);
-
- return r->first;
-}
-
-guint
-gtk_set_get_max (GtkSet *set)
-{
- Range *r;
-
- if (gtk_set_is_empty (set))
- return 0;
-
- r = &g_array_index (set->ranges, Range, set->ranges->len - 1);
-
- return r->first + r->n_items - 1;
-}
-
-#if 0
-void
-gtk_set_dump (GtkSet *set)
-{
- int i;
-
- for (i = 0; i < set->ranges->len; i++)
- {
- Range *r = &g_array_index (set->ranges, Range, i);
- g_print (" %u:%u", r->first, r->n_items);
- }
- g_print ("\n");
-}
-#endif
diff --git a/gtk/gtkset.h b/gtk/gtkset.h
deleted file mode 100644
index 1ab6c6d1a2..0000000000
--- a/gtk/gtkset.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright © 2019 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see .
- *
- * Authors: Matthias Clasen
- */
-
-#ifndef __GTK_SET_H__
-#define __GTK_SET_H__
-
-#include
-
-typedef struct _GtkSet GtkSet;
-typedef struct _GtkSetIter GtkSetIter;
-
-struct _GtkSetIter
-{
- gpointer dummy1;
- gpointer dummy2;
- int dummy3;
- int dummy4;
-};
-
-GtkSet *gtk_set_new (void);
-void gtk_set_free (GtkSet *set);
-GtkSet *gtk_set_copy (GtkSet *set);
-
-gboolean gtk_set_contains (GtkSet *set,
- guint item);
-
-void gtk_set_remove_all (GtkSet *set);
-void gtk_set_add_item (GtkSet *set,
- guint item);
-void gtk_set_remove_item (GtkSet *set,
- guint item);
-void gtk_set_add_range (GtkSet *set,
- guint first,
- guint n);
-void gtk_set_remove_range (GtkSet *set,
- guint first,
- guint n);
-void gtk_set_find_range (GtkSet *set,
- guint position,
- guint upper_bound,
- guint *start,
- guint *n_items,
- gboolean *contained);
-
-void gtk_set_shift (GtkSet *set,
- guint first,
- int shift);
-
-void gtk_set_iter_init (GtkSetIter *iter,
- GtkSet *set);
-gboolean gtk_set_iter_next (GtkSetIter *iter,
- guint *item);
-
-gboolean gtk_set_is_empty (GtkSet *set);
-guint gtk_set_get_min (GtkSet *set);
-guint gtk_set_get_max (GtkSet *set);
-
-#endif /* __GTK_SET_H__ */
diff --git a/gtk/meson.build b/gtk/meson.build
index 1ece401c6f..4eb26952f6 100644
--- a/gtk/meson.build
+++ b/gtk/meson.build
@@ -134,7 +134,6 @@ gtk_private_sources = files([
'gtkscaler.c',
'gtksearchengine.c',
'gtksearchenginemodel.c',
- 'gtkset.c',
'gtksizerequestcache.c',
'gtkstyleanimation.c',
'gtkstylecascade.c',