From mboxrd@z Thu Jan 1 00:00:00 1970 Date: Sat, 4 Sep 2004 17:28:20 -0500 From: lists@vaned.net To: 9fans@cse.psu.edu Message-ID: <20040904222820.GA15588@vaned.net> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="mYCpIKhGyMATD0i+" Content-Disposition: inline User-Agent: Mutt/1.4.1i Subject: [9fans] plan9ports rio patch Topicbox-Message-UUID: de016f44-eacd-11e9-9e20-41e7f4b1d025 --mYCpIKhGyMATD0i+ Content-Type: text/plain; charset=us-ascii Content-Disposition: inline greetings list, i've attached a patch for the current source for rio from plan9ports. it appends a window id to menu items which are duplicated in the menu, making it easier to locate a certain client. somebody else might find it useful. -- glaive@vaned.net 4405 5BA1 62D1 9DA1 7774 B4A3 2CB2 3872 24ED 2441 --mYCpIKhGyMATD0i+ Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="rio-xid.diff" --- fns.h.orig Sat Sep 4 15:38:59 2004 +++ fns.h Sat Sep 4 15:39:24 2004 @@ -71,6 +71,7 @@ void unhide(); void unhidec(); void renamec(); +char *gethideid(); /* client.c */ void setactive(); --- menu.c.orig Sat Sep 4 15:32:09 2004 +++ menu.c Sat Sep 4 16:39:41 2004 @@ -34,6 +34,8 @@ version, }; +static char extid[14]; + void button(XButtonEvent *e) { @@ -282,4 +284,32 @@ b3items[B3FIXED+i] = name; return; } +} + +char * +gethideid(int n) +{ + Client *c; + int i; + + if (n >= numhidden) { + fprintf(stderr, "rio: gethideid: n %d numhidden %d\n", n, numhidden); + return 0; + } + c = hiddenc[n]; + if (!hidden(c)) { + fprintf(stderr, "rio: gethideid: not hidden: %s(0x%x)\n", + c->label, (int)c->window); + return 0; + } + for (i = 0; i < numhidden; i++) { + if (i == n) + continue; + if (strcmp(c->label, hiddenc[i]->label) == 0) + break; + } + if (i >= numhidden) + return 0; + snprintf(extid, sizeof(extid), " <0x%lx>", c->window); + return(extid); } --- grab.c.orig Sat Sep 4 14:57:45 2004 +++ grab.c Sat Sep 4 16:48:23 2004 @@ -47,14 +47,21 @@ } static void -drawstring(Display *dpy, ScreenInfo *s, Menu *m, int wide, int high, int i, int selected) +drawstring(Display *dpy, ScreenInfo *s, Menu *m, int wide, int high, int i, int selected, char *ext) { - int tx, ty; + int tx, txe, ty; + int twidth, n; - tx = (wide - XTextWidth(font, m->item[i], strlen(m->item[i])))/2; + twidth = n = XTextWidth(font, m->item[i], strlen(m->item[i])); + if (ext) + twidth += XTextWidth(font, ext, strlen(ext)); + tx = (wide - twidth)/2; + txe = tx + n; ty = i*high + font->ascent + 1; XFillRectangle(dpy, s->menuwin, selected ? s->gcmenubgs : s->gcmenubg, 0, i*high, wide, high); XDrawString(dpy, s->menuwin, selected ? s->gcmenufgs : s->gcmenufg, tx, ty, m->item[i], strlen(m->item[i])); + if (ext) + XDrawString(dpy, s->menuwin, selected ? s->gcmenufgs : s->gcmenufg, txe, ty, ext, strlen(ext)); } int @@ -63,6 +70,7 @@ XEvent ev; int i, n, cur, old, wide, high, status, drawn, warp; int x, y, dx, dy, xmax, ymax; + char *extptr; ScreenInfo *s; if (font == 0) @@ -74,6 +82,9 @@ dx = 0; for (n = 0; m->item[n]; n++) { wide = XTextWidth(font, m->item[n], strlen(m->item[n])) + 4; + if (m == &b3menu) + if ((n >= B3FIXED) && (extptr = gethideid(n - B3FIXED))) + wide += XTextWidth(font, extptr, strlen(extptr)); if (wide > dx) dx = wide; } @@ -164,14 +175,14 @@ if (cur == old) break; if (old >= 0 && old < n) - drawstring(dpy, s, m, wide, high, old, 0); + drawstring(dpy, s, m, wide, high, old, 0, (m == &b3menu && old >= B3FIXED) ? gethideid(old - B3FIXED) : 0); if (cur >= 0 && cur < n) - drawstring(dpy, s, m, wide, high, cur, 1); + drawstring(dpy, s, m, wide, high, cur, 1, (m == &b3menu && cur >= B3FIXED) ? gethideid(cur - B3FIXED) : 0); break; case Expose: XClearWindow(dpy, s->menuwin); for (i = 0; i < n; i++) - drawstring(dpy, s, m, wide, high, i, cur==i); + drawstring(dpy, s, m, wide, high, i, cur==i, (m == &b3menu && i >= B3FIXED) ? gethideid(i - B3FIXED) : 0); drawn = 1; } } --mYCpIKhGyMATD0i+--