|
|
@ -94,6 +94,9 @@ typedef struct {
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
typedef struct {
|
|
|
|
Atom xtarget;
|
|
|
|
Atom xtarget;
|
|
|
|
|
|
|
|
char *primary, *clipboard;
|
|
|
|
|
|
|
|
struct timespec tclick1;
|
|
|
|
|
|
|
|
struct timespec tclick2;
|
|
|
|
} XSelection;
|
|
|
|
} XSelection;
|
|
|
|
|
|
|
|
|
|
|
|
/* Font structure */
|
|
|
|
/* Font structure */
|
|
|
@ -234,11 +237,11 @@ clipcopy(const Arg *dummy)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
Atom clipboard;
|
|
|
|
Atom clipboard;
|
|
|
|
|
|
|
|
|
|
|
|
if (sel.clipboard != NULL)
|
|
|
|
if (xsel.clipboard != NULL)
|
|
|
|
free(sel.clipboard);
|
|
|
|
free(xsel.clipboard);
|
|
|
|
|
|
|
|
|
|
|
|
if (sel.primary != NULL) {
|
|
|
|
if (xsel.primary != NULL) {
|
|
|
|
sel.clipboard = xstrdup(sel.primary);
|
|
|
|
xsel.clipboard = xstrdup(xsel.primary);
|
|
|
|
clipboard = XInternAtom(xw.dpy, "CLIPBOARD", 0);
|
|
|
|
clipboard = XInternAtom(xw.dpy, "CLIPBOARD", 0);
|
|
|
|
XSetSelectionOwner(xw.dpy, clipboard, xw.win, CurrentTime);
|
|
|
|
XSetSelectionOwner(xw.dpy, clipboard, xw.win, CurrentTime);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -427,9 +430,9 @@ bpress(XEvent *e)
|
|
|
|
* If the user clicks below predefined timeouts specific
|
|
|
|
* If the user clicks below predefined timeouts specific
|
|
|
|
* snapping behaviour is exposed.
|
|
|
|
* snapping behaviour is exposed.
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
if (TIMEDIFF(now, sel.tclick2) <= tripleclicktimeout) {
|
|
|
|
if (TIMEDIFF(now, xsel.tclick2) <= tripleclicktimeout) {
|
|
|
|
sel.snap = SNAP_LINE;
|
|
|
|
sel.snap = SNAP_LINE;
|
|
|
|
} else if (TIMEDIFF(now, sel.tclick1) <= doubleclicktimeout) {
|
|
|
|
} else if (TIMEDIFF(now, xsel.tclick1) <= doubleclicktimeout) {
|
|
|
|
sel.snap = SNAP_WORD;
|
|
|
|
sel.snap = SNAP_WORD;
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
sel.snap = 0;
|
|
|
|
sel.snap = 0;
|
|
|
@ -439,8 +442,8 @@ bpress(XEvent *e)
|
|
|
|
if (sel.snap != 0)
|
|
|
|
if (sel.snap != 0)
|
|
|
|
sel.mode = SEL_READY;
|
|
|
|
sel.mode = SEL_READY;
|
|
|
|
tsetdirt(sel.nb.y, sel.ne.y);
|
|
|
|
tsetdirt(sel.nb.y, sel.ne.y);
|
|
|
|
sel.tclick2 = sel.tclick1;
|
|
|
|
xsel.tclick2 = xsel.tclick1;
|
|
|
|
sel.tclick1 = now;
|
|
|
|
xsel.tclick1 = now;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -594,9 +597,9 @@ selrequest(XEvent *e)
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
clipboard = XInternAtom(xw.dpy, "CLIPBOARD", 0);
|
|
|
|
clipboard = XInternAtom(xw.dpy, "CLIPBOARD", 0);
|
|
|
|
if (xsre->selection == XA_PRIMARY) {
|
|
|
|
if (xsre->selection == XA_PRIMARY) {
|
|
|
|
seltext = sel.primary;
|
|
|
|
seltext = xsel.primary;
|
|
|
|
} else if (xsre->selection == clipboard) {
|
|
|
|
} else if (xsre->selection == clipboard) {
|
|
|
|
seltext = sel.clipboard;
|
|
|
|
seltext = xsel.clipboard;
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
fprintf(stderr,
|
|
|
|
fprintf(stderr,
|
|
|
|
"Unhandled clipboard selection 0x%lx\n",
|
|
|
|
"Unhandled clipboard selection 0x%lx\n",
|
|
|
@ -620,8 +623,8 @@ selrequest(XEvent *e)
|
|
|
|
void
|
|
|
|
void
|
|
|
|
setsel(char *str, Time t)
|
|
|
|
setsel(char *str, Time t)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
free(sel.primary);
|
|
|
|
free(xsel.primary);
|
|
|
|
sel.primary = str;
|
|
|
|
xsel.primary = str;
|
|
|
|
|
|
|
|
|
|
|
|
XSetSelectionOwner(xw.dpy, XA_PRIMARY, xw.win, t);
|
|
|
|
XSetSelectionOwner(xw.dpy, XA_PRIMARY, xw.win, t);
|
|
|
|
if (XGetSelectionOwner(xw.dpy, XA_PRIMARY) != xw.win)
|
|
|
|
if (XGetSelectionOwner(xw.dpy, XA_PRIMARY) != xw.win)
|
|
|
@ -1127,6 +1130,10 @@ xinit(void)
|
|
|
|
xhints();
|
|
|
|
xhints();
|
|
|
|
XSync(xw.dpy, False);
|
|
|
|
XSync(xw.dpy, False);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
clock_gettime(CLOCK_MONOTONIC, &xsel.tclick1);
|
|
|
|
|
|
|
|
clock_gettime(CLOCK_MONOTONIC, &xsel.tclick2);
|
|
|
|
|
|
|
|
xsel.primary = NULL;
|
|
|
|
|
|
|
|
xsel.clipboard = NULL;
|
|
|
|
xsel.xtarget = XInternAtom(xw.dpy, "UTF8_STRING", 0);
|
|
|
|
xsel.xtarget = XInternAtom(xw.dpy, "UTF8_STRING", 0);
|
|
|
|
if (xsel.xtarget == None)
|
|
|
|
if (xsel.xtarget == None)
|
|
|
|
xsel.xtarget = XA_STRING;
|
|
|
|
xsel.xtarget = XA_STRING;
|
|
|
|