fixed paste

main
Connor Lane Smith 2010-08-11 15:02:03 +01:00
parent 00a60cb7b2
commit 402dc2bc95
1 changed files with 8 additions and 7 deletions

15
dmenu.c
View File

@ -32,7 +32,7 @@ static void grabkeyboard(void);
static void insert(const char *s, ssize_t n); static void insert(const char *s, ssize_t n);
static void keypress(XKeyEvent *ev); static void keypress(XKeyEvent *ev);
static void match(void); static void match(void);
static void paste(void); static void paste(Atom atom);
static void readstdin(void); static void readstdin(void);
static void run(void); static void run(void);
static void setup(void); static void setup(void);
@ -52,7 +52,7 @@ static unsigned int lines = 0;
static unsigned int promptw; static unsigned int promptw;
static unsigned long normcol[ColLast]; static unsigned long normcol[ColLast];
static unsigned long selcol[ColLast]; static unsigned long selcol[ColLast];
static Atom utf8; static Atom clip, utf8;
static Bool topbar = True; static Bool topbar = True;
static DC *dc; static DC *dc;
static Item *items = NULL; static Item *items = NULL;
@ -228,7 +228,7 @@ keypress(XKeyEvent *ev) {
insert(NULL, 1-n); insert(NULL, 1-n);
break; break;
case XK_y: /* paste selection */ case XK_y: /* paste selection */
XConvertSelection(dc->dpy, XA_PRIMARY, utf8, None, win, CurrentTime); XConvertSelection(dc->dpy, XA_PRIMARY, utf8, clip, win, CurrentTime);
return; return;
} }
} }
@ -371,13 +371,13 @@ match(void) {
} }
void void
paste(void) { paste(Atom atom) {
char *p, *q; char *p, *q;
int di; int di;
unsigned long dl; unsigned long dl;
Atom da; Atom da;
XGetWindowProperty(dc->dpy, win, utf8, 0, sizeof text - cursor, True, XGetWindowProperty(dc->dpy, win, atom, 0, sizeof text - cursor, False,
utf8, &da, &di, &dl, &dl, (unsigned char **)&p); utf8, &da, &di, &dl, &dl, (unsigned char **)&p);
insert(p, (q = strchr(p, '\n')) ? q-p : strlen(p)); insert(p, (q = strchr(p, '\n')) ? q-p : strlen(p));
XFree(p); XFree(p);
@ -415,8 +415,8 @@ run(void) {
keypress(&ev.xkey); keypress(&ev.xkey);
break; break;
case SelectionNotify: case SelectionNotify:
if(ev.xselection.property == utf8) if(ev.xselection.property != None)
paste(); paste(ev.xselection.property);
break; break;
case VisibilityNotify: case VisibilityNotify:
if(ev.xvisibility.state != VisibilityUnobscured) if(ev.xvisibility.state != VisibilityUnobscured)
@ -437,6 +437,7 @@ setup(void) {
screen = DefaultScreen(dc->dpy); screen = DefaultScreen(dc->dpy);
root = RootWindow(dc->dpy, screen); root = RootWindow(dc->dpy, screen);
utf8 = XInternAtom(dc->dpy, "UTF8_STRING", False); utf8 = XInternAtom(dc->dpy, "UTF8_STRING", False);
clip = XInternAtom(dc->dpy, "_DMENU_STRING", False);
normcol[ColBG] = getcolor(dc, normbgcolor); normcol[ColBG] = getcolor(dc, normbgcolor);
normcol[ColFG] = getcolor(dc, normfgcolor); normcol[ColFG] = getcolor(dc, normfgcolor);