void
holdbar(const Arg *arg)
{
	selmon->showbar = 1;
	updateholdbarpos(selmon);
	#if BARPADDING_PATCH
	XMoveResizeWindow(dpy, selmon->barwin, selmon->wx + sp, selmon->by + vp, selmon->ww -  2 * sp, bh);
	#else
	XMoveResizeWindow(dpy, selmon->barwin, selmon->wx, selmon->by, selmon->ww, bh);
	#endif // BARPADDING_PATCH
	#if EXTRABAR_PATCH
	#if BARPADDING_PATCH
	XMoveResizeWindow(dpy, selmon->extrabarwin, selmon->wx + sp, selmon->eby - vp, selmon->ww - 2 * sp, bh);
	#else
	XMoveResizeWindow(dpy, selmon->extrabarwin, selmon->wx, selmon->eby, selmon->ww, bh);
	#endif // BARPADDING_PATCH
	#endif // EXTRABAR_PATCH
}

void
keyrelease(XEvent *e)
{
	if (XEventsQueued(dpy, QueuedAfterReading)) {
		XEvent ne;
		XPeekEvent(dpy, &ne);

		if (ne.type == KeyPress && ne.xkey.time == e->xkey.time &&
				ne.xkey.keycode == e->xkey.keycode) {
			XNextEvent(dpy, &ne);
			return;
		}
	}
	if (e->xkey.keycode == XKeysymToKeycode(dpy, HOLDKEY)) {
		selmon->showbar = 0;
		updateholdbarpos(selmon);
		#if BARPADDING_PATCH
		XMoveResizeWindow(dpy, selmon->barwin, selmon->wx + sp, selmon->by + vp, selmon->ww -  2 * sp, bh);
		#else
		XMoveResizeWindow(dpy, selmon->barwin, selmon->wx, selmon->by, selmon->ww, bh);
		#endif // BARPADDING_PATCH
		#if EXTRABAR_PATCH
		#if BARPADDING_PATCH
		XMoveResizeWindow(dpy, selmon->extrabarwin, selmon->wx + sp, selmon->eby - vp, selmon->ww - 2 * sp, bh);
		#else
		XMoveResizeWindow(dpy, selmon->extrabarwin, selmon->wx, selmon->eby, selmon->ww, bh);
		#endif // BARPADDING_PATCH
		#endif // EXTRABAR_PATCH
		arrange(selmon);
	}
	#if COMBO_PATCH
	combo = 0;
	#endif // COMBO_PATCH
}

void
updateholdbarpos(Monitor *m)
{
	m->wy = m->my;
	m->wh = m->mh;
	#if EXTRABAR_PATCH
	#if BARPADDING_PATCH
	m->wh = m->wh - vertpad * m->showbar * 2 - bh * m->showbar * 2;
	m->wy = m->showbar ? m->wy + bh + vertpad: m->wy;
	if (m->showbar) {
		m->by = m->topbar ? m->wy - bh - vertpad: m->wy + m->wh + vertpad;
		m->eby = m->topbar ? m->wy + m->wh + vertpad: m->wy - bh - vertpad;
	} else {
		m->by = -bh - vertpad;
		m->eby = -bh - vertpad;
	}
	#else
	m->wh = m->wh - bh * m->showbar * 2;
	m->wy = m->showbar ? m->wy + bh : m->wy;
	if (m->showbar) {
		m->by = m->topbar ? m->wy - bh : m->wy + m->wh;
		m->eby = m->topbar ? m->wy + m->wh : m->wy - bh;
	} else {
		m->by = -bh;
		m->eby = -bh;
	}
	#endif // BARPADDING_PATCH
	#elif BARPADDING_PATCH
	if (m->showbar) {
		m->wh = m->wh - vertpad - bh;
		m->by = m->topbar ? m->wy : m->wy + m->wh + vertpad;
		m->wy = m->topbar ? m->wy + bh + vp : m->wy;
	} else
		m->by = -bh - vp;
	#else
	if (m->showbar) {
		m->wh -= bh;
		m->by = m->topbar ? m->wy : m->wy + m->wh;
		m->wy = m->topbar ? m->wy + bh : m->wy;
	} else
		m->by = -bh;
	#endif // EXTRABAR_PATCH
}