More X11 snarf tweaks.

Will we ever finish?
This commit is contained in:
rsc 2003-12-02 03:42:46 +00:00
parent 1555bd7aaa
commit e39b8b1928
5 changed files with 38 additions and 11 deletions

View file

@ -57,7 +57,7 @@ data set $file
attr add addr=$3 attr add addr=$3
plumb to edit plumb to edit
plumb start /usr/local/plan9/bin/B $file plumb start /usr/local/plan9/bin/B $file
#plumb client window $editor # plumb client window $editor
# .h files are looked up in /sys/include and passed to edit # .h files are looked up in /sys/include and passed to edit
type is text type is text
@ -66,7 +66,8 @@ arg isfile /sys/include/$1
data set $file data set $file
attr add addr=$3 attr add addr=$3
plumb to edit plumb to edit
plumb client window $editor plumb start /usr/local/plan9/bin/B $file
# plumb client window $editor
# .m files are looked up in /sys/module and passed to edit # .m files are looked up in /sys/module and passed to edit
type is text type is text
@ -75,7 +76,8 @@ arg isfile /sys/module/$1
data set $file data set $file
attr add addr=$3 attr add addr=$3
plumb to edit plumb to edit
plumb client window $editor plumb start /usr/local/plan9/bin/B $file
# plumb client window $editor
# faces -> new mail window for message # faces -> new mail window for message
type is text type is text

View file

@ -6,7 +6,7 @@ LDFLAGS=$LDFLAGS -lsec -lregexp9 -l9 -lbio -lfmt -lutf
<$PLAN9/src/mkmany <$PLAN9/src/mkmany
BUGGERED='CVS|oplumb|plumb|plumb2|mk|vac|9term|venti' BUGGERED='CVS|oplumb|plumb|plumb2|mk|vac|9term|venti|htmlfmt'
DIRS=`ls -l |sed -n 's/^d.* //p' |egrep -v "$BUGGERED"` DIRS=`ls -l |sed -n 's/^d.* //p' |egrep -v "$BUGGERED"`
<$PLAN9/src/mkdirs <$PLAN9/src/mkdirs

View file

@ -379,6 +379,10 @@ xattach(char *label)
* Look up clipboard atom. * Look up clipboard atom.
*/ */
_x.clipboard = XInternAtom(_x.display, "CLIPBOARD", False); _x.clipboard = XInternAtom(_x.display, "CLIPBOARD", False);
_x.utf8string = XInternAtom(_x.display, "UTF8_STRING", False);
_x.targets = XInternAtom(_x.display, "TARGETS", False);
_x.text = XInternAtom(_x.display, "TEXT", False);
_x.compoundtext = XInternAtom(_x.display, "COMPOUND_TEXT", False);
/* /*
* Lots of display connections for various procs. * Lots of display connections for various procs.

View file

@ -378,6 +378,9 @@ xgetsnarf(XDisplay *xd)
* come, and we have no way to time out. Instead, we will clear * come, and we have no way to time out. Instead, we will clear
* local property #1, request our buddy to fill it in for us, and poll * local property #1, request our buddy to fill it in for us, and poll
* until he's done or we get tired of waiting. * until he's done or we get tired of waiting.
*
* We should try to go for _x.utf8string instead of XA_STRING,
* but that would add to the polling.
*/ */
prop = 1; prop = 1;
XChangeProperty(xd, _x.drawable, prop, XA_STRING, 8, PropModeReplace, (uchar*)"", 0); XChangeProperty(xd, _x.drawable, prop, XA_STRING, 8, PropModeReplace, (uchar*)"", 0);
@ -392,7 +395,7 @@ xgetsnarf(XDisplay *xd)
break; break;
lastlen = len; lastlen = len;
} }
if(i == 30){ if(i == 10){
data = nil; data = nil;
goto out; goto out;
} }
@ -400,7 +403,7 @@ xgetsnarf(XDisplay *xd)
data = nil; data = nil;
XGetWindowProperty(xd, _x.drawable, prop, 0, SnarfSize/sizeof(ulong), 0, XGetWindowProperty(xd, _x.drawable, prop, 0, SnarfSize/sizeof(ulong), 0,
AnyPropertyType, &type, &fmt, &len, &dummy, &xdata); AnyPropertyType, &type, &fmt, &len, &dummy, &xdata);
if(type != XA_STRING || len == 0){ if((type != XA_STRING && type != _x.utf8string) || len == 0){
if(xdata) if(xdata)
XFree(xdata); XFree(xdata);
data = nil; data = nil;
@ -444,19 +447,33 @@ xputsnarf(XDisplay *xd, char *data)
int int
xselect(XEvent *e, XDisplay *xd) xselect(XEvent *e, XDisplay *xd)
{ {
char *name;
XEvent r; XEvent r;
XSelectionRequestEvent *xe; XSelectionRequestEvent *xe;
Atom a[4];
memset(&r, 0, sizeof r); memset(&r, 0, sizeof r);
xe = (XSelectionRequestEvent*)e; xe = (XSelectionRequestEvent*)e;
if(1 || xe->target == XA_STRING){ if(0) fprint(2, "xselect target=%d requestor=%d property=%d selection=%d\n",
xe->target, xe->requestor, xe->property, xe->selection);
r.xselection.property = xe->property;
if(xe->target == _x.targets){
a[0] = XA_STRING;
a[1] = _x.utf8string;
a[2] = _x.text;
a[3] = _x.compoundtext;
XChangeProperty(xd, xe->requestor, xe->property, xe->target,
8, PropModeReplace, (uchar*)a, sizeof a);
}else if(xe->target == XA_STRING || xe->target == _x.utf8string || xe->target == _x.text || xe->target == _x.compoundtext){
/* if the target is STRING we're supposed to reply with Latin1 XXX */
qlock(&clip.lk); qlock(&clip.lk);
XChangeProperty(xd, xe->requestor, xe->property, XA_STRING, 8, XChangeProperty(xd, xe->requestor, xe->property, xe->target,
PropModeReplace, (uchar*)clip.buf, strlen(clip.buf)+1); 8, PropModeReplace, (uchar*)clip.buf, strlen(clip.buf));
qunlock(&clip.lk); qunlock(&clip.lk);
r.xselection.property = xe->property;
}else{ }else{
fprint(2, "asked for a %d\n", xe->target); name = XGetAtomName(xd, xe->target);
fprint(2, "%s: cannot handle selection request for '%s' (%d)\n", argv0, name, (int)xe->target);
r.xselection.property = None; r.xselection.property = None;
} }

View file

@ -65,6 +65,10 @@ struct Xprivate {
XVisual *vis; XVisual *vis;
u32int white; u32int white;
Atom clipboard; Atom clipboard;
Atom utf8string;
Atom targets;
Atom text;
Atom compoundtext;
uint putsnarf; uint putsnarf;
uint assertsnarf; uint assertsnarf;
int destroyed; int destroyed;