+ Rect *a;
+
+ a = screen_area(c->desktop);
+ popup_position(focus_cycle_popup, CenterGravity,
+ a->x + a->width / 2, a->y + a->height / 2);
+/* popup_size(focus_cycle_popup, a->height/2, a->height/16);
+ popup_show(focus_cycle_popup, c->title,
+ client_icon(c, a->height/16, a->height/16));
+*/
+ /* XXX the size and the font extents need to be related on some level
+ */
+ popup_size(focus_cycle_popup, 320, 48);
+
+ /* use the transient's parent's title/icon */
+ while (c->transient_for && c->transient_for != TRAN_GROUP)
+ c = c->transient_for;
+
+ popup_show(focus_cycle_popup, (c->iconic ? c->icon_title : c->title),
+ client_icon(c, 48, 48));
+ }
+}
+
+Client *focus_cycle(gboolean forward, gboolean linear, gboolean done,
+ gboolean cancel)
+{
+ static Client *first = NULL;
+ static Client *t = NULL;
+ static GList *order = NULL;
+ GList *it, *start, *list;
+ Client *ft;
+
+ if (cancel) {
+ /*if (first) client_focus(first); XXX*/
+ if (focus_cycle_target)
+ frame_adjust_focus(focus_cycle_target->frame, FALSE);
+ if (focus_client)
+ frame_adjust_focus(focus_client->frame, TRUE);
+ goto done_cycle;
+ } else if (done) {
+ if (focus_cycle_target)
+ client_activate(focus_cycle_target);
+ goto done_cycle;