+static gint
+tilda_find_next_free_window_number ()
+{
+ debug_enter ();
+
+ gint i, j;
+ gboolean found;
+
+ for (i=0; i<INT_MAX; ++i)
+ {
+ found = FALSE;
+
+ for (j=0; j<windows->len; ++j)
+ {
+ TildaWindow *tw = g_ptr_array_index (windows, j);
+
+ if (tw->number == i)
+ {
+ found = TRUE;
+ break;
+ }
+ }
+
+ if (!found)
+ return i;
+ }
+
+ return 0;
+}
+
+static TildaWindow *
+tilda_add_window ()
+{
+ debug_enter ();
+
+ TildaWindow *ret;
+ gint number;
+
+ number = tilda_find_next_free_window_number ();
+ ret = g_object_new (TILDA_TYPE_WINDOW, "number", number, NULL);
+
+ g_ptr_array_add (windows, ret);
+
+ debug_printf ("Adding window: 0x%x (number %d of %d)\n", ret, ret->number, windows->len-1);
+ return ret;
+}
+
+static void
+tilda_del_window (gint number)
+{
+ debug_enter ();
+
+ gint i;
+ TildaWindow *win;
+
+ for (i=0; i<windows->len; ++i)
+ {
+ win = g_ptr_array_index (windows, i);
+
+ if (win->number == number)
+ {
+ debug_printf ("Deleting window 0x%x (number %d of %d)\n", win, win->number, windows->len-1);
+ g_ptr_array_remove_index (windows, i);
+ g_object_unref (G_OBJECT(win));
+ break;
+ }
+ }
+}
+