aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorrsc <devnull@localhost>2004-04-24 04:52:49 +0000
committerrsc <devnull@localhost>2004-04-24 04:52:49 +0000
commit78802e6993a0f44d7ac7ff7d0922d55d1b089dac (patch)
tree2131829fda5ff9ee9f8ef8c88695c361cc4ba335 /src
parent272fd660b41d7ec793bc9d8972878510f3b66055 (diff)
downloadplan9port-78802e6993a0f44d7ac7ff7d0922d55d1b089dac.tar.gz
plan9port-78802e6993a0f44d7ac7ff7d0922d55d1b089dac.tar.bz2
plan9port-78802e6993a0f44d7ac7ff7d0922d55d1b089dac.zip
various bug fixes
Diffstat (limited to 'src')
-rw-r--r--src/cmd/9term/9term.c4
-rw-r--r--src/cmd/auxstats/Linux.c12
-rw-r--r--src/cmd/rio/README2
-rw-r--r--src/cmd/rio/event.c15
-rw-r--r--src/cmd/rio/manage.c7
-rw-r--r--src/libdraw/x11-mouse.c26
-rwxr-xr-xsrc/libplumb/mesg.c8
7 files changed, 67 insertions, 7 deletions
diff --git a/src/cmd/9term/9term.c b/src/cmd/9term/9term.c
index df27261d..a77dc32b 100644
--- a/src/cmd/9term/9term.c
+++ b/src/cmd/9term/9term.c
@@ -544,9 +544,13 @@ mouse(void)
domenu2(2);
break;
case 4:
+ bouncemouse(&t.m);
+ break;
+ /*
if(aselect(&q0, &q1, plumbcolor) >= 0)
plumb(q0, q1);
break;
+ */
}
}
diff --git a/src/cmd/auxstats/Linux.c b/src/cmd/auxstats/Linux.c
index 06e9d422..d4c2a29c 100644
--- a/src/cmd/auxstats/Linux.c
+++ b/src/cmd/auxstats/Linux.c
@@ -55,6 +55,7 @@ xmeminfo(int first)
{
int i;
vlong tot, used;
+ vlong mtot, mfree;
static int fd = -1;
if(first){
@@ -63,9 +64,10 @@ xmeminfo(int first)
}
readfile(fd);
+ mtot = 0;
for(i=0; i<nline; i++){
tokens(i);
- if(ntok < 4)
+ if(ntok < 3)
continue;
tot = atoll(tok[1]);
used = atoll(tok[2]);
@@ -73,6 +75,14 @@ xmeminfo(int first)
Bprint(&bout, "mem =%lld %lld\n", used/1024, tot/1024);
else if(strcmp(tok[0], "Swap:") == 0)
Bprint(&bout, "swap =%lld %lld\n", used/1024, tot/1024);
+ else if(strcmp(tok[0], "MemTotal:") == 0)
+ mtot = atoll(tok[1]); /* kb */
+ else if(strcmp(tok[0], "MemFree:") == 0){
+ mfree = atoll(tok[1]);
+ if(mtot < mfree)
+ continue;
+ Bprint(&bout, "mem =%lld %lld\n", mtot-mfree, mtot);
+ }
}
}
diff --git a/src/cmd/rio/README b/src/cmd/rio/README
index 15c9a77d..5ec193b8 100644
--- a/src/cmd/rio/README
+++ b/src/cmd/rio/README
@@ -16,7 +16,7 @@ Current incompatibilities that would be nice to fix:
can put up the usual b3 menu.
Axel Belinfante contributed the code to handle border grabbing
-for resize.
+for resize and various other improvements.
The original README is below.
diff --git a/src/cmd/rio/event.c b/src/cmd/rio/event.c
index ff053776..a14c4acc 100644
--- a/src/cmd/rio/event.c
+++ b/src/cmd/rio/event.c
@@ -352,6 +352,7 @@ property(XPropertyEvent *e)
Atom a;
int delete;
Client *c;
+ long msize;
/* we don't set curtime as nothing here uses it */
a = e->atom;
@@ -378,6 +379,15 @@ property(XPropertyEvent *e)
case XA_WM_TRANSIENT_FOR:
gettrans(c);
return;
+ case XA_WM_HINTS:
+ case XA_WM_SIZE_HINTS:
+ case XA_WM_ZOOM_HINTS:
+ /* placeholders to not forget. ignore for now. -Axel */
+ return;
+ case XA_WM_NORMAL_HINTS:
+ if (XGetWMNormalHints(dpy, c->window, &c->size, &msize) == 0 || c->size.flags == 0)
+ c->size.flags = PSize; /* not specified - punt */
+ return;
}
if (a == _rio_hold_mode) {
c->hold = getiprop(c->window, _rio_hold_mode);
@@ -404,7 +414,12 @@ reparent(XReparentEvent *e)
if ((s = getscreen(e->parent)) != 0) {
c = getclient(e->window, 1);
if (c != 0 && (c->dx == 0 || c->dy == 0)) {
+ /* flush any errors */
+ ignore_badwindow = 1;
XGetWindowAttributes(dpy, c->window, &attr);
+ XSync(dpy, False);
+ ignore_badwindow = 0;
+
c->x = attr.x;
c->y = attr.y;
c->dx = attr.width;
diff --git a/src/cmd/rio/manage.c b/src/cmd/rio/manage.c
index 2c8f71c7..11892a06 100644
--- a/src/cmd/rio/manage.c
+++ b/src/cmd/rio/manage.c
@@ -359,8 +359,11 @@ getcmaps(Client *c)
XWindowAttributes attr;
if (!c->init) {
+ ignore_badwindow = 1;
XGetWindowAttributes(dpy, c->window, &attr);
c->cmap = attr.colormap;
+ XSync(dpy, False);
+ ignore_badwindow = 0;
}
n = _getprop(c->window, wm_colormaps, XA_WINDOW, 100L, (void*)&cw);
@@ -381,9 +384,13 @@ getcmaps(Client *c)
if (cw[i] == c->window)
c->wmcmaps[i] = c->cmap;
else {
+ /* flush any errors (e.g., caused by mozilla tabs) */
+ ignore_badwindow = 1;
XSelectInput(dpy, cw[i], ColormapChangeMask);
XGetWindowAttributes(dpy, cw[i], &attr);
c->wmcmaps[i] = attr.colormap;
+ XSync(dpy, False);
+ ignore_badwindow = 0;
}
}
}
diff --git a/src/libdraw/x11-mouse.c b/src/libdraw/x11-mouse.c
index df5bf7e9..4827423c 100644
--- a/src/libdraw/x11-mouse.c
+++ b/src/libdraw/x11-mouse.c
@@ -149,13 +149,21 @@ setcursor(Mousectl *mc, Cursor *c)
_xsetcursor(c);
}
+/*
+ * Send the mouse event back to the window manager.
+ * So that 9term can tell rio to pop up its button3 menu.
+ * Note that we're using _x.mousecon in a few places,
+ * so we have to be sure that the mouse proc isn't using it
+ * when we call! This is all a bit wonky and should be
+ * avoided unless you know what you're doing.
+ */
void
bouncemouse(Mouse *m)
{
XButtonEvent e;
+ XWindow dw;
e.type = ButtonPress;
- e.window = DefaultRootWindow(_x.display);
e.state = 0;
e.button = 0;
if(m->buttons&1)
@@ -164,10 +172,18 @@ bouncemouse(Mouse *m)
e.button = 2;
else if(m->buttons&4)
e.button = 3;
- e.x = m->xy.x;
- e.y = m->xy.y;
+ e.same_screen = 1;
+ XTranslateCoordinates(_x.display, _x.drawable,
+ DefaultRootWindow(_x.display),
+ m->xy.x, m->xy.y, &e.x_root, &e.y_root, &dw);
+ e.root = DefaultRootWindow(_x.mousecon);
+ e.window = e.root;
+ e.subwindow = None;
+ e.x = e.x_root;
+ e.y = e.y_root;
#undef time
e.time = CurrentTime;
- XSendEvent(_x.display, e.window, True, ButtonPressMask, (XEvent*)&e);
- XFlush(_x.display);
+ XUngrabPointer(_x.mousecon, m->msec);
+ XSendEvent(_x.mousecon, e.root, True, ButtonPressMask, (XEvent*)&e);
+ XFlush(_x.mousecon);
}
diff --git a/src/libplumb/mesg.c b/src/libplumb/mesg.c
index 4b278695..670059ca 100755
--- a/src/libplumb/mesg.c
+++ b/src/libplumb/mesg.c
@@ -64,6 +64,10 @@ plumbsendtofid(Fid *fid, Plumbmsg *m)
char *buf;
int n;
+ if(fid == nil){
+ werrstr("invalid fid");
+ return -1;
+ }
buf = plumbpack(m, &n);
if(buf == nil)
return -1;
@@ -75,6 +79,10 @@ plumbsendtofid(Fid *fid, Plumbmsg *m)
int
plumbsend(int fd, Plumbmsg *m)
{
+ if(fd == -1){
+ werrstr("invalid fd");
+ return -1;
+ }
if(fd != pfd){
werrstr("fd is not the plumber");
return -1;