static ObFocusCyclePopup popup;
static gchar *popup_get_name (ObClient *c);
-static void popup_setup (ObFocusCyclePopup *p,gboolean all_desktops,
- gboolean dock_windows, gboolean desktop_windows);
-static void popup_render (ObFocusCyclePopup *p, const ObClient *c);
+static void popup_setup (ObFocusCyclePopup *p,
+ gboolean iconic_windows,
+ gboolean all_desktops,
+ gboolean dock_windows,
+ gboolean desktop_windows);
+static void popup_render (ObFocusCyclePopup *p,
+ const ObClient *c);
static Window create_window(Window parent, guint bwidth, gulong mask,
XSetWindowAttributes *attr)
RrAppearanceFree(popup.a_bg);
}
-static void popup_setup(ObFocusCyclePopup *p,gboolean all_desktops,
+static void popup_setup(ObFocusCyclePopup *p,
+ gboolean iconic_windows, gboolean all_desktops,
gboolean dock_windows, gboolean desktop_windows)
{
gint maxwidth, n;
ObClient *ft = it->data;
if (focus_cycle_target_valid(ft,
+ iconic_windows,
all_desktops,
dock_windows,
desktop_windows))
gint icon_rows;
gint textx, texty, textw, texth;
gint rgbax, rgbay, rgbaw, rgbah;
+ gint icons_center_x;
gint innerw, innerh;
gint i;
GList *it;
/* how many icons will fit in that row? make the width fit that */
w -= l + r;
- icons_per_row = w / ICON_SIZE;
+ icons_per_row = (w + ICON_SIZE - 1) / ICON_SIZE;
w = icons_per_row * ICON_SIZE + l + r;
/* how many rows do we need? */
rgbaw = w - ml - mr;
rgbah = h - mt - mb;
+ /* center the icons if there is less than one row */
+ if (icon_rows == 1)
+ icons_center_x = (w - p->n_targets * ICON_SIZE) / 2;
+ else
+ icons_center_x;
+
if (!p->mapped) {
/* position the background but don't draw it*/
XMoveResizeWindow(ob_display, p->bg, x, y, w, h);
if (target->client == c) {
/* save the target */
newtarget = target;
- newtargetx = l + (col * ICON_SIZE);
+ newtargetx = icons_center_x + l + (col * ICON_SIZE);
newtargety = t + (row * ICON_SIZE);
if (!p->mapped)
gint innerx, innery;
/* find the dimensions of the icon inside it */
- innerx = l + (col * ICON_SIZE);
+ innerx = icons_center_x + l + (col * ICON_SIZE);
innerx += ICON_HILITE_WIDTH + ICON_HILITE_MARGIN;
innery = t + (row * ICON_SIZE);
innery += ICON_HILITE_WIDTH + ICON_HILITE_MARGIN;
p->last_target = newtarget;
}
-void focus_cycle_popup_show(ObClient *c,
+void focus_cycle_popup_show(ObClient *c, gboolean iconic_windows,
gboolean all_desktops, gboolean dock_windows,
gboolean desktop_windows)
{
/* do this stuff only when the dialog is first showing */
if (!popup.mapped)
- popup_setup(&popup, all_desktops, dock_windows, desktop_windows);
+ popup_setup(&popup, iconic_windows, all_desktops,
+ dock_windows, desktop_windows);
g_assert(popup.targets != NULL);
popup_render(&popup, c);