static Window create_window(Window parent, guint bwidth, gulong mask,
XSetWindowAttributes *attr)
{
- return XCreateWindow(ob_display, parent, 0, 0, 1, 1, bwidth,
+ return XCreateWindow(obt_display, parent, 0, 0, 1, 1, bwidth,
RrDepth(ob_rr_inst), InputOutput,
RrVisual(ob_rr_inst), mask, attr);
}
{
XSetWindowAttributes attrib;
- single_popup = icon_popup_new(TRUE);
+ single_popup = icon_popup_new();
- popup.obwin.type = Window_Internal;
+ popup.obwin.type = OB_WINDOW_CLASS_INTERNAL;
popup.a_bg = RrAppearanceCopy(ob_rr_theme->osd_hilite_bg);
popup.a_text = RrAppearanceCopy(ob_rr_theme->osd_hilite_label);
popup.a_icon = RrAppearanceCopy(ob_rr_theme->a_clear_tex);
attrib.override_redirect = True;
attrib.border_pixel=RrColorPixel(ob_rr_theme->osd_border_color);
- popup.bg = create_window(RootWindow(ob_display, ob_screen),
- ob_rr_theme->obwidth,
+ popup.bg = create_window(obt_root(ob_screen), ob_rr_theme->obwidth,
CWOverrideRedirect | CWBorderPixel, &attrib);
popup.text = create_window(popup.bg, 0, 0, NULL);
popup.hilite_rgba = NULL;
- XMapWindow(ob_display, popup.text);
+ XMapWindow(obt_display, popup.text);
stacking_add(INTERNAL_AS_WINDOW(&popup));
+ window_add(&popup.bg, INTERNAL_AS_WINDOW(&popup));
}
void focus_cycle_popup_shutdown(gboolean reconfig)
{
icon_popup_free(single_popup);
+ window_remove(popup.bg);
stacking_remove(INTERNAL_AS_WINDOW(&popup));
while(popup.targets) {
ObFocusCyclePopupTarget *t = popup.targets->data;
g_free(t->text);
- XDestroyWindow(ob_display, t->win);
+ XDestroyWindow(obt_display, t->win);
popup.targets = g_list_delete_link(popup.targets, popup.targets);
}
g_free(popup.hilite_rgba);
+ popup.hilite_rgba = NULL;
- XDestroyWindow(ob_display, popup.text);
- XDestroyWindow(ob_display, popup.bg);
+ XDestroyWindow(obt_display, popup.text);
+ XDestroyWindow(obt_display, popup.bg);
RrAppearanceFree(popup.a_icon);
RrAppearanceFree(popup.a_text);
for (it = g_list_last(focus_order); it; it = g_list_previous(it)) {
ObClient *ft = it->data;
- if (focus_valid_target(ft,
+ if (focus_valid_target(ft, TRUE,
iconic_windows,
all_desktops,
dock_windows,
t->text = text;
t->win = create_window(p->bg, 0, 0, NULL);
- XMapWindow(ob_display, t->win);
+ XMapWindow(obt_display, t->win);
p->targets = g_list_prepend(p->targets, t);
++n;
if (!p->mapped) {
/* position the background but don't draw it*/
- XMoveResizeWindow(ob_display, p->bg, x, y, w, h);
+ XMoveResizeWindow(obt_display, p->bg, x, y, w, h);
/* set up the hilite texture for the background */
p->a_bg->texture[0].data.rgba.width = rgbaw;
p->a_bg->texture[0].data.rgba.data = p->hilite_rgba;
/* position the text, but don't draw it */
- XMoveResizeWindow(ob_display, p->text, textx, texty, textw, texth);
+ XMoveResizeWindow(obt_display, p->text, textx, texty, textw, texth);
p->a_text->surface.parentx = textx;
p->a_text->surface.parenty = texty;
}
they can pick up the hilite changes in the backgroud */
if (!p->mapped || newtarget == target || p->last_target == target) {
const ObClientIcon *icon;
- ObClientIcon *thumb;
const gint row = i / icons_per_row; /* starting from 0 */
const gint col = i % icons_per_row; /* starting from 0 */
gint innerx, innery;
innery += ICON_HILITE_WIDTH + ICON_HILITE_MARGIN;
/* move the icon */
- XMoveResizeWindow(ob_display, target->win,
+ XMoveResizeWindow(obt_display, target->win,
innerx, innery, innerw, innerh);
/* get the icon from the client */
- if ((thumb = client_thumbnail(target->client))) {
- p->a_icon->texture[0].data.rgba.width = thumb->width;
- p->a_icon->texture[0].data.rgba.height = thumb->height;
- p->a_icon->texture[0].data.rgba.alpha =
- target->client->iconic ? OB_ICONIC_ALPHA : 0xff;
- p->a_icon->texture[0].data.rgba.data = thumb->data;
- } else {
- icon = client_icon(target->client, innerw, innerh);
- p->a_icon->texture[0].data.rgba.width = icon->width;
- p->a_icon->texture[0].data.rgba.height = icon->height;
- p->a_icon->texture[0].data.rgba.alpha =
- target->client->iconic ? OB_ICONIC_ALPHA : 0xff;
- p->a_icon->texture[0].data.rgba.data = icon->data;
- }
+ icon = client_icon(target->client, innerw, innerh);
+ p->a_icon->texture[0].data.rgba.width = icon->width;
+ p->a_icon->texture[0].data.rgba.height = icon->height;
+ p->a_icon->texture[0].data.rgba.alpha =
+ target->client->iconic ? OB_ICONIC_ALPHA : 0xff;
+ p->a_icon->texture[0].data.rgba.data = icon->data;
/* draw the icon */
p->a_icon->surface.parentx = innerx;
p->a_icon->surface.parenty = innery;
RrPaint(p->a_icon, target->win, innerw, innerh);
-
- clienticon_free(thumb);
}
}
if (!popup.mapped) {
/* show the dialog */
- XMapWindow(ob_display, popup.bg);
- XFlush(ob_display);
+ XMapWindow(obt_display, popup.bg);
+ XFlush(obt_display);
popup.mapped = TRUE;
+ screen_hide_desktop_popup();
}
}
-void focus_cycle_popup_hide()
+void focus_cycle_popup_hide(void)
{
gulong ignore_start;
ignore_start = event_start_ignore_all_enters();
- XUnmapWindow(ob_display, popup.bg);
- XFlush(ob_display);
+ XUnmapWindow(obt_display, popup.bg);
+ XFlush(obt_display);
event_end_ignore_all_enters(ignore_start);
ObFocusCyclePopupTarget *t = popup.targets->data;
g_free(t->text);
- XDestroyWindow(ob_display, t->win);
+ XDestroyWindow(obt_display, t->win);
+ g_free(t);
popup.targets = g_list_delete_link(popup.targets, popup.targets);
}
text = popup_get_name(c);
icon_popup_show(single_popup, text, client_icon(c, ICON_SIZE, ICON_SIZE));
g_free(text);
+ screen_hide_desktop_popup();
}
-void focus_cycle_popup_single_hide()
+void focus_cycle_popup_single_hide(void)
{
icon_popup_hide(single_popup);
}