static void xdrawcursor(void);
static int xgeommasktogravity(int);
static void xinit(void);
+static void cresize(int, int);
+static void xresize(int, int);
static int xloadfont(Font *, FcPattern *);
static void xloadfonts(char *, double);
static void xunloadfont(Font *);
static void xunloadfonts(void);
static void xsetenv(void);
static void xseturgency(int);
+static int x2col(int);
+static int y2row(int);
static void expose(XEvent *);
static void visibility(XEvent *);
static void selnotify(XEvent *);
static void selclear_(XEvent *);
static void selrequest(XEvent *);
-
static void selcopy(Time);
static void getbuttoninfo(XEvent *);
static void mousereport(XEvent *);
+static char *kmap(KeySym, uint);
+static int match(uint, uint);
static void run(void);
static void usage(void);
static XWindow xw;
static XSelection xsel;
+enum window_state {
+ WIN_VISIBLE = 1,
+ WIN_FOCUSED = 2
+};
+
/* Font Ring Cache */
enum {
FRC_NORMAL,
xunloadfonts();
xloadfonts(usedfont, arg->f);
cresize(0, 0);
- ttyresize();
+ ttyresize(win.tw, win.th);
redraw();
xhints();
}
}
}
+int
+x2col(int x)
+{
+ x -= borderpx;
+ x /= win.cw;
+
+ return LIMIT(x, 0, term.col-1);
+}
+
+int
+y2row(int y)
+{
+ y -= borderpx;
+ y /= win.ch;
+
+ return LIMIT(y, 0, term.row-1);
+}
+
void
getbuttoninfo(XEvent *e)
{
tsetdirt(MIN(sel.nb.y, oldsby), MAX(sel.ne.y, oldsey));
}
+void
+cresize(int width, int height)
+{
+ int col, row;
+
+ if (width != 0)
+ win.w = width;
+ if (height != 0)
+ win.h = height;
+
+ col = (win.w - 2 * borderpx) / win.cw;
+ row = (win.h - 2 * borderpx) / win.ch;
+
+ tresize(col, row);
+ xresize(col, row);
+}
+
void
xresize(int col, int row)
{
}
}
+int
+match(uint mask, uint state)
+{
+ return mask == XK_ANY_MOD || mask == (state & ~ignoremod);
+}
+
+char*
+kmap(KeySym k, uint state)
+{
+ Key *kp;
+ int i;
+
+ /* Check for mapped keys out of X11 function keys. */
+ for (i = 0; i < mappedkeyslen; i++) {
+ if (mappedkeys[i] == k)
+ break;
+ }
+ if (i == mappedkeyslen) {
+ if ((k & 0xFFFF) < 0xFD00)
+ return NULL;
+ }
+
+ for (kp = key; kp < key + keyslen; kp++) {
+ if (kp->k != k)
+ continue;
+
+ if (!match(kp->mask, state))
+ continue;
+
+ if (IS_SET(MODE_APPKEYPAD) ? kp->appkey < 0 : kp->appkey > 0)
+ continue;
+ if (term.numlock && kp->appkey == 2)
+ continue;
+
+ if (IS_SET(MODE_APPCURSOR) ? kp->appcursor < 0 : kp->appcursor > 0)
+ continue;
+
+ if (IS_SET(MODE_CRLF) ? kp->crlf < 0 : kp->crlf > 0)
+ continue;
+
+ return kp->s;
+ }
+
+ return NULL;
+}
+
void
kpress(XEvent *ev)
{
return;
cresize(e->xconfigure.width, e->xconfigure.height);
- ttyresize();
+ ttyresize(win.tw, win.th);
}
void
cresize(w, h);
ttynew();
- ttyresize();
+ ttyresize(win.tw, win.th);
clock_gettime(CLOCK_MONOTONIC, &last);
lastblink = last;