diff options
author | Michael Januszewski <spock@gentoo.org> | 2004-01-31 16:18:35 +0000 |
---|---|---|
committer | Michael Januszewski <spock@gentoo.org> | 2004-01-31 16:18:35 +0000 |
commit | 955e194ca880f83b781ef4e064bccc152b7c3612 (patch) | |
tree | 9b63b02dcaf51c450409c184e0ffb3368bb415e6 /x11-terms/aterm | |
parent | Version bumped. Closes 39936. (diff) | |
download | historical-955e194ca880f83b781ef4e064bccc152b7c3612.tar.gz historical-955e194ca880f83b781ef4e064bccc152b7c3612.tar.bz2 historical-955e194ca880f83b781ef4e064bccc152b7c3612.zip |
Extended version of the patch, with support for INCR pasting.
Diffstat (limited to 'x11-terms/aterm')
-rw-r--r-- | x11-terms/aterm/files/aterm-0.4.2-copynpaste-r2.patch | 175 |
1 files changed, 175 insertions, 0 deletions
diff --git a/x11-terms/aterm/files/aterm-0.4.2-copynpaste-r2.patch b/x11-terms/aterm/files/aterm-0.4.2-copynpaste-r2.patch new file mode 100644 index 000000000000..7dc2b58b37c3 --- /dev/null +++ b/x11-terms/aterm/files/aterm-0.4.2-copynpaste-r2.patch @@ -0,0 +1,175 @@ +diff -Naur aterm-0.4.2-orig/configure aterm-0.4.2/configure +--- aterm-0.4.2-orig/configure 2001-09-06 18:38:07.000000000 +0200 ++++ aterm-0.4.2/configure 2004-01-31 11:41:42.000000000 +0100 +@@ -2609,7 +2609,7 @@ + ; \ + do + ac_save_LIBS=$LIBS +- LIBS="-L$ac_dir -lXpm $LIBS -lX11" ++ LIBS="-L$ac_dir -lXpm $LIBS -lX11 -lXmu" + cat > conftest.$ac_ext <<EOF + #line 2615 "configure" + #include "confdefs.h" +diff -Naur aterm-0.4.2-orig/src/command.c aterm-0.4.2/src/command.c +--- aterm-0.4.2-orig/src/command.c 2001-09-06 18:38:07.000000000 +0200 ++++ aterm-0.4.2/src/command.c 2004-01-31 11:41:42.000000000 +0100 +@@ -2653,7 +2653,7 @@ + switch (ev->xbutton.button) { + case Button1: + case Button3: +- selection_make(ev->xbutton.time); ++ selection_make(ev->xbutton.time, ev->xbutton.state); + break; + + case Button2: +diff -Naur aterm-0.4.2-orig/src/screen.c aterm-0.4.2/src/screen.c +--- aterm-0.4.2-orig/src/screen.c 2001-09-06 18:38:07.000000000 +0200 ++++ aterm-0.4.2/src/screen.c 2004-01-31 16:55:17.640053616 +0100 +@@ -44,7 +44,7 @@ + + #include <X11/Xatom.h> + #include <X11/Xmd.h> /* get the typedef for CARD32 */ +- ++#include <X11/Xmu/Atoms.h> + + static screen_t screen; + +@@ -2759,21 +2759,88 @@ + long nread; + unsigned long bytes_after, nitems; + unsigned char *data; ++ XTextProperty ct; + Atom actual_type; + int actual_fmt; +- ++ int dummy_count; ++ char **cl; ++ XEvent ev; ++ XWindowAttributes wa; ++ int setpropertyevent = 0; ++ + if (prop == None) + return; ++ + for (nread = 0, bytes_after = 1; bytes_after > 0; nread += nitems) { + if ((XGetWindowProperty(Xdisplay, win, prop, (nread / 4), PROP_SIZE, +- Delete, AnyPropertyType, &actual_type, +- &actual_fmt, &nitems, &bytes_after, +- &data) != Success)) { +- XFree(data); ++ False, AnyPropertyType, &ct.encoding, &ct.format, ++ &ct.nitems, &bytes_after, &ct.value) != Success)) { ++ XFree(ct.value); + return; + } +- PasteIt(data, nitems); +- XFree(data); ++ ++ if (ct.encoding == XInternAtom(Xdisplay, "INCR", False)) { ++ /* ++ * This is an INCR (incremental large) paste ++ */ ++ XGetWindowAttributes(Xdisplay, win, &wa); ++ if ((wa.your_event_mask | PropertyChangeMask) != wa.your_event_mask) { ++ /* We need to register the PropertyNotify event */ ++ XSelectInput(Xdisplay, win, (wa.your_event_mask | PropertyChangeMask) ); ++ setpropertyevent = 1; ++ } ++ XDeleteProperty(Xdisplay, win, prop); ++ while (1) { ++ XWindowEvent(Xdisplay, win, PropertyChangeMask, &ev); ++ if (ev.xproperty.state != PropertyNewValue) ++ continue; ++ if ((XGetWindowProperty(Xdisplay, win, prop, 0, PROP_SIZE, ++ True, AnyPropertyType, &ct.encoding, &ct.format, ++ &ct.nitems, &bytes_after, &ct.value) != Success)) { ++ XFree(ct.value); ++ /* error */ ++ break; ++ } ++ ++ if (ct.nitems == 0) { ++ /* end of INCR transfer */ ++ XFree(ct.value); ++ break; ++ } ++ else { ++ if (XmbTextPropertyToTextList(Xdisplay, &ct, &cl, &dummy_count) == Success && cl) { ++ PasteIt(cl[0], strlen(cl[0])); ++ XFreeStringList(cl); ++ } else { ++ PasteIt(ct.value, (unsigned int)ct.nitems); ++ } ++ ++ XFree(ct.value); ++ } ++ } ++ if (setpropertyevent == 1) { ++ /* We need to unregister the PropertyNotify event */ ++ XGetWindowAttributes(Xdisplay, win, &wa); ++ XSelectInput(Xdisplay, win, (wa.your_event_mask ^ PropertyChangeMask)); ++ setpropertyevent = 0; ++ } ++ } else { ++ /* ++ * This is a normal 1-time paste ++ */ ++ if (Delete) { ++ XDeleteProperty(Xdisplay, win, prop); ++ } ++ ++ if (XmbTextPropertyToTextList(Xdisplay, &ct, &cl, &dummy_count) == Success && cl) { ++ PasteIt(cl[0], strlen(cl[0])); ++ XFreeStringList(cl); ++ } else { ++ PasteIt(ct.value, (unsigned int)ct.nitems); ++ } ++ ++ XFree(ct.value); ++ } + } + } + +@@ -2787,6 +2854,9 @@ + selection_request(Time tm, int x, int y) + { + Atom prop; ++ Atom xa; ++ ++ xa = XInternAtom(Xdisplay, "COMPOUND_TEXT", False); + + if (x < 0 || x >= TermWin.width || y < 0 || y >= TermWin.height) + return; /* outside window */ +@@ -2797,7 +2867,7 @@ + selection_paste(Xroot, XA_CUT_BUFFER0, False); + } else { + prop = XInternAtom(Xdisplay, "VT_SELECTION", False); +- XConvertSelection(Xdisplay, XA_PRIMARY, XA_STRING, prop, TermWin.vt, ++ XConvertSelection(Xdisplay, XA_PRIMARY, xa, prop, TermWin.vt, + tm); + } + } +@@ -2827,7 +2897,7 @@ + */ + /* PROTO */ + void +-selection_make(Time tm) ++selection_make(Time tm, unsigned int key_state) + { + int i, col, end_col, row, end_row; + unsigned char *new_selection_text; +@@ -2894,7 +2964,13 @@ + FREE(selection.text); + selection.text = new_selection_text; + +- XSetSelectionOwner(Xdisplay, XA_PRIMARY, TermWin.vt, tm); ++ // selecting with ALT will put the text to clipboard ++ if (key_state & Mod1Mask) { ++ XSetSelectionOwner(Xdisplay, XA_CLIPBOARD(Xdisplay), TermWin.vt, tm); ++ } else { ++ XSetSelectionOwner(Xdisplay, XA_PRIMARY, TermWin.vt, tm); ++ } ++ + if (XGetSelectionOwner(Xdisplay, XA_PRIMARY) != TermWin.vt) + print_error("can't get primary selection"); + XChangeProperty(Xdisplay, Xroot, XA_CUT_BUFFER0, XA_STRING, 8, |