+++ /dev/null
-diff -uNr aterm-0.4.2-orig/autoconf/Make.common.in aterm-0.4.2/autoconf/Make.common.in
---- aterm-0.4.2-orig/autoconf/Make.common.in 2001-09-06 18:38:07.000000000 +0200
-+++ aterm-0.4.2/autoconf/Make.common.in 2004-05-03 01:50:40.995441752 +0200
-@@ -59,7 +59,7 @@
- XINC = @X_CFLAGS@ @XPM_CFLAGS@
-
- # extra libraries needed by X on some systems, X library location
--XLIB = @AFTERSTEP_LIBS@ @X_LIBS@ @X_PRE_LIBS@ @X_EXTRA_LIBS@ @XPM_LIBS@ -lX11
-+XLIB = @AFTERSTEP_LIBS@ @X_LIBS@ @X_PRE_LIBS@ @X_EXTRA_LIBS@ @XPM_LIBS@ -lX11 -lXmu
-
- # End of common section of the Makefile
- #-------------------------------------------------------------------------
-diff -uNr aterm-0.4.2-orig/src/command.c aterm-0.4.2/src/command.c
---- aterm-0.4.2-orig/src/command.c 2004-05-03 01:38:01.000000000 +0200
-+++ aterm-0.4.2/src/command.c 2004-05-03 01:46:54.413887384 +0200
-@@ -2651,7 +2651,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 -uNr aterm-0.4.2-orig/src/command.c.orig aterm-0.4.2/src/command.c.orig
---- aterm-0.4.2-orig/src/command.c.orig 2001-09-06 18:38:07.000000000 +0200
-+++ aterm-0.4.2/src/command.c.orig 2004-05-03 01:46:54.421886168 +0200
-@@ -425,9 +425,8 @@
- signal(sig, SIG_DFL);
-
- #ifdef UTMP_SUPPORT
-- privileges(RESTORE);
-- cleanutent();
-- privileges(IGNORE);
-+ if (!(Options & Opt_utmpInhibit))
-+ removeFromUtmp();
- #endif
-
- kill(getpid(), sig);
-@@ -452,7 +451,8 @@
- chown(ttydev, ttyfd_stat.st_uid, ttyfd_stat.st_gid);
- #endif
- #ifdef UTMP_SUPPORT
-- cleanutent();
-+ if (!(Options & Opt_utmpInhibit))
-+ removeFromUtmp();
- #endif
- privileges(IGNORE);
- }
-@@ -1060,10 +1060,8 @@
- exit(EXIT_FAILURE);
- }
- #ifdef UTMP_SUPPORT
-- privileges(RESTORE);
- if (!(Options & Opt_utmpInhibit))
-- makeutent(ttydev, display_name); /* stamp /etc/utmp */
-- privileges(IGNORE);
-+ addToUtmp(ttydev, display_name, ptyfd);
- #endif
-
- return ptyfd;
-diff -uNr 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-05-03 01:46:54.433884344 +0200
-@@ -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,34 @@
- long nread;
- unsigned long bytes_after, nitems;
- unsigned char *data;
-+ XTextProperty ct;
- Atom actual_type;
- int actual_fmt;
-+ int dummy_count;
-+ char **cl;
-
- 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);
-+ Delete, AnyPropertyType, &ct.encoding, &ct.format,
-+ &ct.nitems, &bytes_after, &ct.value) != Success)) {
-+ XFree(ct.value);
- return;
- }
-- PasteIt(data, nitems);
-- XFree(data);
-+
-+ 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);
-+ }
-+
-+ nread += ct.nitems;
-+
-+ if (ct.value)
-+ XFree(ct.value);
- }
- }
-
-@@ -2787,6 +2800,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 +2813,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 +2843,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 +2910,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,
-@@ -3329,11 +3351,21 @@
- selection_send(XSelectionRequestEvent * rq)
- {
- XEvent ev;
-- Atom32 target_list[2];
-+ Atom32 target_list[4];
-+ Atom target;
- static Atom xa_targets = None;
--
-+ static Atom xa_compound_text = None;
-+ static Atom xa_text = None;
-+ XTextProperty ct;
-+ XICCEncodingStyle style;
-+ char *cl[4];
-+
-+ if (xa_text == None)
-+ xa_text = XInternAtom(Xdisplay, "TEXT", False);
-+ if (xa_compound_text == None)
-+ xa_compound_text = XInternAtom(Xdisplay, "COMPOUND_TEXT", False);
- if (xa_targets == None)
-- xa_targets = XInternAtom(Xdisplay, "TARGETS", False);
-+ xa_targets = XInternAtom(Xdisplay, "TARGETS", False);
-
- ev.xselection.type = SelectionNotify;
- ev.xselection.property = None;
-@@ -3344,18 +3376,37 @@
- ev.xselection.time = rq->time;
-
- if (rq->target == xa_targets) {
-- target_list[0] = (Atom32) xa_targets;
-- target_list[1] = (Atom32) XA_STRING;
-+ target_list[0] = (Atom32) xa_targets;
-+ target_list[1] = (Atom32) XA_STRING;
-+ target_list[2] = (Atom32) xa_text;
-+ target_list[3] = (Atom32) xa_compound_text;
-+
- XChangeProperty(Xdisplay, rq->requestor, rq->property, rq->target,
-- (8 * sizeof(target_list[0])), PropModeReplace,
-- (unsigned char *)target_list,
-- (sizeof(target_list) / sizeof(target_list[0])));
-- ev.xselection.property = rq->property;
-- } else if (rq->target == XA_STRING) {
-- XChangeProperty(Xdisplay, rq->requestor, rq->property, rq->target,
-- 8, PropModeReplace, selection.text, selection.len);
-- ev.xselection.property = rq->property;
-+ (8 * sizeof(target_list[0])), PropModeReplace,
-+ (unsigned char *)target_list,
-+ (sizeof(target_list) / sizeof(target_list[0])));
-+ ev.xselection.property = rq->property;
-+
-+ } else if (rq->target == XA_STRING
-+ || rq->target == xa_compound_text
-+ || rq->target == xa_text) {
-+
-+ if (rq->target == XA_STRING) {
-+ style = XStringStyle;
-+ target = XA_STRING;
-+ } else {
-+ target = xa_compound_text;
-+ style = (rq->target == xa_compound_text) ? XCompoundTextStyle
-+ : XStdICCTextStyle;
-+ }
-+
-+ cl[0] = selection.text;
-+ XmbTextListToTextProperty(Xdisplay, cl, 1, style, &ct);
-+ XChangeProperty(Xdisplay, rq->requestor, rq->property,
-+ target, 8, PropModeReplace, ct.value, ct.nitems);
-+ ev.xselection.property = rq->property;
- }
-+
- XSendEvent(Xdisplay, rq->requestor, False, 0, &ev);
- }
-