From: pcg Date: Tue, 10 Feb 2004 00:40:39 +0000 (+0000) Subject: *** empty log message *** X-Git-Url: http://git.openbox.org/?a=commitdiff_plain;h=21249c4bb7ec9425b178816fd37c1244d6ba27d5;p=dana%2Furxvt.git *** empty log message *** --- diff --git a/src/command.C b/src/command.C index c7d93c47..a8c900a1 100644 --- a/src/command.C +++ b/src/command.C @@ -1362,7 +1362,7 @@ rxvt_term::x_cb (XEvent &ev) break; case SelectionClear: - selection_clear (); + display->set_selection_owner (0); break; case SelectionNotify: diff --git a/src/rxvtcolor.C b/src/rxvtcolor.C index 61331132..9e9287ed 100644 --- a/src/rxvtcolor.C +++ b/src/rxvtcolor.C @@ -9,6 +9,7 @@ rxvt_display::rxvt_display (const char *name) : x_watcher (this, &rxvt_display::x_event) +, selection_owner (0) { this->name = STRDUP (name); } @@ -91,6 +92,14 @@ void rxvt_display::unreg (xevent_watcher *w) xw[w->active - 1] = 0; } +void rxvt_display::set_selection_owner (rxvt_term *owner) +{ + if (selection_owner && selection_owner != owner) + selection_owner->selection_clear (); + + selection_owner = owner; +} + ///////////////////////////////////////////////////////////////////////////// rxvt_displays displays; diff --git a/src/rxvtcolor.h b/src/rxvtcolor.h index ad0eb02e..b9110d75 100644 --- a/src/rxvtcolor.h +++ b/src/rxvtcolor.h @@ -14,13 +14,15 @@ #include "callback.h" -struct rxvt_vars; +struct rxvt_term; struct xevent_watcher; struct rxvt_display { int referenced; char *name; + + rxvt_term *selection_owner; io_manager_vec xw; io_watcher x_watcher; void x_event (io_watcher &w, short revents); @@ -41,6 +43,8 @@ struct rxvt_display { rxvt_display (const char *name); ~rxvt_display (); + + void set_selection_owner (rxvt_term *owner); }; struct xevent_watcher : watcher, callback1 { diff --git a/src/screen.C b/src/screen.C index 8133f7e5..2b782940 100644 --- a/src/screen.C +++ b/src/screen.C @@ -2833,11 +2833,12 @@ rxvt_term::selection_make (Time tm) selection.text = new_selection_text; - XSetSelectionOwner(display->display, XA_PRIMARY, TermWin.vt, tm); - if (XGetSelectionOwner(display->display, XA_PRIMARY) != TermWin.vt) + XSetSelectionOwner (display->display, XA_PRIMARY, TermWin.vt, tm); + if (XGetSelectionOwner (display->display, XA_PRIMARY) == TermWin.vt) + display->set_selection_owner (this); + else rxvt_print_error("can't get primary selection"); - { XTextProperty ct; char *cl = (char *)selection.text;