pinosaur
/
st.git
/ blobdiff
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Clean up #includes
[st.git]
/
x.c
diff --git
a/x.c
b/x.c
index
873ff08
..
d0acfee
100644
(file)
--- a/
x.c
+++ b/
x.c
@@
-1,15
+1,14
@@
/* See LICENSE for license details. */
#include <errno.h>
/* See LICENSE for license details. */
#include <errno.h>
+#include <limits.h>
#include <locale.h>
#include <signal.h>
#include <locale.h>
#include <signal.h>
-#include <stdint.h>
#include <sys/select.h>
#include <time.h>
#include <unistd.h>
#include <libgen.h>
#include <X11/Xatom.h>
#include <X11/Xlib.h>
#include <sys/select.h>
#include <time.h>
#include <unistd.h>
#include <libgen.h>
#include <X11/Xatom.h>
#include <X11/Xlib.h>
-#include <X11/Xutil.h>
#include <X11/cursorfont.h>
#include <X11/keysym.h>
#include <X11/Xft/Xft.h>
#include <X11/cursorfont.h>
#include <X11/keysym.h>
#include <X11/Xft/Xft.h>
@@
-75,6
+74,15
@@
typedef XftColor Color;
typedef XftGlyphFontSpec GlyphFontSpec;
/* Purely graphic info */
typedef XftGlyphFontSpec GlyphFontSpec;
/* Purely graphic info */
+typedef struct {
+ int tw, th; /* tty width and height */
+ int w, h; /* window width and height */
+ int ch; /* char height */
+ int cw; /* char width */
+ int mode; /* window state/mode flags */
+ int cursor; /* cursor style */
+} TermWindow;
+
typedef struct {
Display *dpy;
Colormap cmap;
typedef struct {
Display *dpy;
Colormap cmap;
@@
-133,6
+141,8
@@
static int xgeommasktogravity(int);
static void xinit(int, int);
static void cresize(int, int);
static void xresize(int, int);
static void xinit(int, int);
static void cresize(int, int);
static void xresize(int, int);
+static void xhints(void);
+static int xloadcolor(int, const char *, Color *);
static int xloadfont(Font *, FcPattern *);
static void xloadfonts(char *, double);
static void xunloadfont(Font *);
static int xloadfont(Font *, FcPattern *);
static void xloadfonts(char *, double);
static void xunloadfont(Font *);
@@
-227,6
+237,8
@@
static char *opt_line = NULL;
static char *opt_name = NULL;
static char *opt_title = NULL;
static char *opt_name = NULL;
static char *opt_title = NULL;
+static int oldbutton = 3; /* button event on startup: 3 = release */
+
void
clipcopy(const Arg *dummy)
{
void
clipcopy(const Arg *dummy)
{
@@
-1428,8
+1440,8
@@
xdrawcursor(int cx, int cy, Glyph g, int ox, int oy, Glyph og)
/* draw the new one */
if (IS_SET(MODE_FOCUSED)) {
switch (win.cursor) {
/* draw the new one */
if (IS_SET(MODE_FOCUSED)) {
switch (win.cursor) {
- case 7: /* st extension: snowman */
-
utf8decode("☃", &g.u, UTF_SIZ)
;
+ case 7: /* st extension: snowman
(U+2603)
*/
+
g.u = 0x2603
;
case 0: /* Blinking Block */
case 1: /* Blinking Block (Default) */
case 2: /* Steady Block */
case 0: /* Blinking Block */
case 1: /* Blinking Block (Default) */
case 2: /* Steady Block */
@@
-1733,8
+1745,7
@@
cmessage(XEvent *e)
win.mode &= ~MODE_FOCUSED;
}
} else if (e->xclient.data.l[0] == xw.wmdeletewin) {
win.mode &= ~MODE_FOCUSED;
}
} else if (e->xclient.data.l[0] == xw.wmdeletewin) {
- /* Send SIGHUP to shell */
- kill(pid, SIGHUP);
+ ttyhangup();
exit(0);
}
}
exit(0);
}
}
@@
-1755,6
+1766,7
@@
run(void)
int w = win.w, h = win.h;
fd_set rfd;
int xfd = XConnectionNumber(xw.dpy), xev, blinkset = 0, dodraw = 0;
int w = win.w, h = win.h;
fd_set rfd;
int xfd = XConnectionNumber(xw.dpy), xev, blinkset = 0, dodraw = 0;
+ int ttyfd;
struct timespec drawtimeout, *tv = NULL, now, last, lastblink;
long deltatime;
struct timespec drawtimeout, *tv = NULL, now, last, lastblink;
long deltatime;
@@
-1774,7
+1786,7
@@
run(void)
}
} while (ev.type != MapNotify);
}
} while (ev.type != MapNotify);
- tty
new(opt_line
, opt_io, opt_cmd);
+ tty
fd = ttynew(opt_line, shell
, opt_io, opt_cmd);
cresize(w, h);
clock_gettime(CLOCK_MONOTONIC, &last);
cresize(w, h);
clock_gettime(CLOCK_MONOTONIC, &last);
@@
-1782,15
+1794,15
@@
run(void)
for (xev = actionfps;;) {
FD_ZERO(&rfd);
for (xev = actionfps;;) {
FD_ZERO(&rfd);
- FD_SET(
cmd
fd, &rfd);
+ FD_SET(
tty
fd, &rfd);
FD_SET(xfd, &rfd);
FD_SET(xfd, &rfd);
- if (pselect(MAX(xfd,
cmd
fd)+1, &rfd, NULL, NULL, tv, NULL) < 0) {
+ if (pselect(MAX(xfd,
tty
fd)+1, &rfd, NULL, NULL, tv, NULL) < 0) {
if (errno == EINTR)
continue;
die("select failed: %s\n", strerror(errno));
}
if (errno == EINTR)
continue;
die("select failed: %s\n", strerror(errno));
}
- if (FD_ISSET(
cmd
fd, &rfd)) {
+ if (FD_ISSET(
tty
fd, &rfd)) {
ttyread();
if (blinktimeout) {
blinkset = tattrset(ATTR_BLINK);
ttyread();
if (blinktimeout) {
blinkset = tattrset(ATTR_BLINK);
@@
-1834,7
+1846,7
@@
run(void)
if (xev && !FD_ISSET(xfd, &rfd))
xev--;
if (xev && !FD_ISSET(xfd, &rfd))
xev--;
- if (!FD_ISSET(
cmd
fd, &rfd) && !FD_ISSET(xfd, &rfd)) {
+ if (!FD_ISSET(
tty
fd, &rfd) && !FD_ISSET(xfd, &rfd)) {
if (blinkset) {
if (TIMEDIFF(now, lastblink) \
> blinktimeout) {
if (blinkset) {
if (TIMEDIFF(now, lastblink) \
> blinktimeout) {