<pre style='margin:0'>
Herby Gillot (herbygillot) pushed a commit to branch master
in repository macports-ports.
</pre>
<p><a href="https://github.com/macports/macports-ports/commit/9b6603b321f0e188b31debb5ac1982550b040a30">https://github.com/macports/macports-ports/commit/9b6603b321f0e188b31debb5ac1982550b040a30</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 9b6603b321f0e188b31debb5ac1982550b040a30
</span>Author: Sergey Fedorov <barracuda@macos-powerpc.org>
AuthorDate: Wed Dec 11 16:21:02 2024 +0800
<span style='display:block; white-space:pre;color:#404040;'> mlterm: misc improvements, revbump
</span>---
x11/mlterm/Portfile | 33 +-
x11/mlterm/files/patch-clipboard.diff | 1006 +++++++++++++++++++++++++++++++++
2 files changed, 1034 insertions(+), 5 deletions(-)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/x11/mlterm/Portfile b/x11/mlterm/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index 7f49502f72c..7343c551ca6 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/x11/mlterm/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/x11/mlterm/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,10 +1,11 @@
</span> # -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4
PortSystem 1.0
<span style='display:block; white-space:pre;background:#e0ffe0;'>+PortGroup openssl 1.0
</span>
name mlterm
version 3.9.3
<span style='display:block; white-space:pre;background:#ffe0e0;'>-revision 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+revision 2
</span> checksums rmd160 baa6d8db248019df2da5d846797151322c517629 \
sha256 b5b76721391de134bd64afb7de6b4256805cf2fc883a2bf2e5d29602ac1b50d9 \
size 4272090
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -30,14 +31,34 @@ long_description ${name} is a multi-lingual terminal emulator written \
</span> homepage https://mlterm.sourceforge.net
master_sites sourceforge:project/mlterm/01release/mlterm-${version}
<span style='display:block; white-space:pre;background:#e0ffe0;'>+patch.pre_args-replace \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -p0 -p1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Upstream patch:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# https://github.com/arakiken/mlterm/issues/20
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+patchfiles-append patch-clipboard.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> depends_build-append \
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ port:gettext \
</span> path:bin/pkg-config:pkgconfig
<span style='display:block; white-space:pre;background:#ffe0e0;'>-depends_lib-append port:libssh2 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+depends_lib-append port:fontconfig \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ port:freetype \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ path:lib/pkgconfig/gdk-pixbuf-2.0.pc:gdk-pixbuf2 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ port:gettext-runtime \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ path:lib/pkgconfig/harfbuzz.pc:harfbuzz \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ port:libsixel \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ port:libssh2 \
</span> port:Xft2 \
<span style='display:block; white-space:pre;background:#ffe0e0;'>- port:xorg-libsm
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ port:xorg-libsm \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ port:xorg-libX11
</span>
configure.args-append \
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ --disable-fribidi \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ --enable-compact-truecolor \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ --enable-fontconfig \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ --enable-image \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ --enable-otl \
</span> --enable-ssh2 \
--with-gui=xlib \
--with-imagelib=gdk-pixbuf \
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -51,7 +72,7 @@ post-destroot {
</span>
variant bidi description {Enable bidirectional support} {
depends_lib-append port:fribidi
<span style='display:block; white-space:pre;background:#ffe0e0;'>- configure.args-append --enable-fribidi
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ configure.args-replace --disable-fribidi --enable-fribidi
</span> }
variant gtk2 conflicts gtk3 description {Build with GTK2} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -60,7 +81,8 @@ variant gtk2 conflicts gtk3 description {Build with GTK2} {
</span> }
variant gtk3 conflicts gtk2 description {Build with GTK3} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- depends_lib-append path:lib/pkgconfig/gtk+-3.0.pc:gtk3
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ depends_lib-append path:lib/pkgconfig/gtk+-3.0.pc:gtk3 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ port:vte
</span> configure.args-append --with-gtk=3.0
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -70,6 +92,7 @@ variant sdl2 description {Use SDL2 GUI} {
</span> configure.args-replace --with-gui=xlib --with-gui=sdl2
}
<span style='display:block; white-space:pre;background:#e0ffe0;'>+# Upstream default is gtk3
</span> if {![variant_isset gtk2] && ![variant_isset gtk3]} {
default_variants +gtk3
}
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/x11/mlterm/files/patch-clipboard.diff b/x11/mlterm/files/patch-clipboard.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..7d73253fff2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/x11/mlterm/files/patch-clipboard.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,1006 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From f275093173892e05254da50b2e95b0a68926b972 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: arakiken <arakiken@users.sf.net>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Tue, 12 Sep 2023 13:57:05 +0900
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH] * doc/en/PROTOCOL, doc/ja/README.ja, man/mlterm.1, etc/main,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ etc/main.ja, etc/key: Updated. * rescanproto.sh:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ primary-selection-unstable-v1.xml is parsed. * ui_shortcut.[ch];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ COPY_CLIPBOARD is added. * tool/mlconfig/main.c, mc_flags.[ch], mc_io_file.c:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ use_clipboard option is removed. * ui_main_config.c: use_clipboard option
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ is removed. * ui_window.h, */ui_window.c, ui_screen.c: -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_selection_flag_t is added to arguments of ui_window_set_selection_owner(),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_window_is_selection_owner(), ui_window_{xct|utf}_selection_request().
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ - ui_set_use_clipboard_selection() and ui_is_using_clipboard_selection()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ are removed. * wayland/ui_display.[ch]: ui_display_{own|clear}_clipboard()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ and ui_display_request_text_clipboard() are added. * xlib/ui_display.[ch]:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_display_{own|clear}_clipboard() are added. * wayland/ui_display.c,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ primary-selection-unstable-v1.[ch]: wp-primary-selection protocol is
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ supported. * xdg-decoration-unstable-v1-client-protocol.c,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ xdg-shell-client-protocol.[ch], xdg-shell-unstable-v6-client-protocol.c:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Updated. * ui_selection.h: ui_sel_type_t -> ui_sel_mode_t
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/contrib/tool/mlcc/main.c b/contrib/tool/mlcc/main.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 304e85c41..12d174aed 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/contrib/tool/mlcc/main.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/contrib/tool/mlcc/main.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -347,7 +347,6 @@ int init_data(config_data_t *data) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ entry_radio_add(section, "Bel mode", "bel_mode", "none/sound/visual");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ entry_bool_add(section, "Combining", "use_dynamic_comb");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ entry_bool_add(section, "Fullwidth", "use_multi_column_char");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- entry_bool_add(section, "Clipboard", "use_clipboard");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/doc/en/PROTOCOL b/doc/en/PROTOCOL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 0f84a117d..fbb64d540 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/doc/en/PROTOCOL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/doc/en/PROTOCOL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -52,7 +52,7 @@ version 20230401
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ tabsize | trim_trailing_newline_in_pasting | type_engine | ul_color |
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ underline_offset | unicode_full_width_areas | unicode_half_width_areas |
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ unicode_noconv_areas | use_alt_buffer | use_ansi_colors | use_anti_alias |
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- use_auto_detect | use_bold_font | use_clipboard | use_combining | use_ctl |
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ use_auto_detect | use_bold_font | use_combining | use_ctl |
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ use_dynamic_comb | use_italic_font | use_local_echo | use_multi_column_char |
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ use_ot_layout | use_transbg | use_urgent_bell | use_variable_column_width |
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ use_vertical_cursor | vertical_mode | vt_color_mode | vt_seq_format |
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -74,7 +74,7 @@ version 20230401
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ trim_trailing_newline_in_pasting | type_engine | ul_color | underline_offset |
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ unicode_full_width_areas | unicode_half_width_areas | unicode_noconv_areas |
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ use_aafont | use_alt_buffer | use_ansi_colors | use_anti_alias |
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- use_auto_detect | use_bold_font | use_clipboard | use_combining | use_ctl |
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ use_auto_detect | use_bold_font | use_combining | use_ctl |
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ use_dynamic_comb | use_italic_font | use_local_echo | use_multi_column_char |
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ use_ot_layout | use_transbg | use_variable_column_width | use_vertical_cursor |
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ vertical_mode | vt_seq_format | wall_picture | word_separators
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/etc/key b/etc/key
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index f9b283e60..b0d5712ed 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/etc/key
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/etc/key
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -16,7 +16,8 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Control+Shift+Down=SCROLL_DOWN_TO_MARK
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Control+Shift+m=SET_MARK
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Shift+Insert=INSERT_SELECTION
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# UNUSED=INSERT_CLIPBOARD
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# Shift+Control+v=INSERT_CLIPBOARD
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# Shift+Control+c=COPY_CLIPBOARD
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Pause=RESET
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Control+Shift+Return=COPY_MODE
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Control+Button1="menu:mlterm-menu"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/etc/main b/etc/main
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index c43c4b63c..02ee71909 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/etc/main
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/etc/main
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -244,8 +244,6 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # (raw,ttyrec)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # vt_seq_format = raw
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# use_clipboard = true
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # logging_msg = true
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # default_server =
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/man/mlterm.1 b/man/mlterm.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index fb99bf268..bf1e18cb3 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/man/mlterm.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/man/mlterm.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1836,9 +1836,6 @@ Use anti alias font.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ \fBuse_bold_font=\fIbool\fR (\fB\-\-bdfont\fR)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Use bold font for characters with the bold attribute.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ .TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-\fBuse_clipboard=\fIbool\fR (\fB\-P\fR, \fB\-\-clip\fR)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-Use CLIPBOARD (not only PRIMARY) selection.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ \fBuse_combining=\fIbool\fR (\fB\-m\fR, \fB\-\-comb\fR)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Enable combining characters.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ .TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2076,6 +2073,7 @@ You can specify Button1, Button2, Button3, Button4 or Button5 as \fIKEY\fR.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ \fBSET_MARK\fR,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ \fBINSERT_SELECTION\fR,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ \fBINSERT_CLIPBOARD\fR,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++\fBCOPY_CLIPBOARD\fR,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ \fBRESET\fR,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ \fBCOPY_MODE\fR,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ \fB"\fISTRING\fB"\fR,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2151,7 +2149,10 @@ Set mark to the current line (default \fBControl+Shift+m\fR).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Insert selection (default \fBShift+Insert\fR).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ .TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ \fBINSERT_CLIPBOARD\fR
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-Insert clipboard (default \fBUNUSED\fR). (Available on x11 alone)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++Insert clipboard (default \fBShift+Control+v\fR). (Available on x11 and wayland)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++.TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++\fBCOPY_CLIPBOARD\fR
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++Copy selected text to clipboard (default \fBShift+Control+c\fR). (Available on x11 and wayland)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ .TP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ \fBRESET\fR
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Reset terminal (default \fBPause\fR).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/tool/mlconfig/main.c b/tool/mlconfig/main.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index d7e133fff..ed274cb13 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/tool/mlconfig/main.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/tool/mlconfig/main.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -104,9 +104,6 @@ static int update(mc_io_t io) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ mc_update_flag_mode(MC_FLAG_COMB);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ mc_update_flag_mode(MC_FLAG_DYNCOMB);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ mc_update_flag_mode(MC_FLAG_RECVUCS);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if (strcmp(gui, "xlib") == 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- mc_update_flag_mode(MC_FLAG_CLIPBOARD);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ mc_update_flag_mode(MC_FLAG_LOCALECHO);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ mc_update_flag_mode(MC_FLAG_BLINKCURSOR);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ mc_update_flag_mode(MC_FLAG_STATICBACKSCROLL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -934,12 +931,6 @@ static int show(void)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ gtk_widget_show(hbox);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if (strcmp(gui, "xlib") == 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- config_widget = mc_flag_config_widget_new(MC_FLAG_CLIPBOARD);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- gtk_widget_show(config_widget);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- gtk_box_pack_start(GTK_BOX(hbox), config_widget, FALSE, FALSE, 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ config_widget = mc_flag_config_widget_new(MC_FLAG_LOCALECHO);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ gtk_widget_show(config_widget);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ gtk_box_pack_start(GTK_BOX(hbox), config_widget, FALSE, FALSE, 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/tool/mlconfig/mc_flags.c b/tool/mlconfig/mc_flags.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index a5735b57e..e9ab119ff 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/tool/mlconfig/mc_flags.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/tool/mlconfig/mc_flags.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -22,7 +22,7 @@ static int is_changed[MC_FLAG_MODES];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static char *config_keys[MC_FLAG_MODES] = {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "type_engine", "type_engine", "use_anti_alias", "use_variable_column_width", "use_combining",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "use_dynamic_comb", "receive_string_via_ucs", "use_multi_column_char", "use_ctl",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "col_size_of_width_a", "use_clipboard", "use_local_echo", "blink_cursor",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "col_size_of_width_a", "use_local_echo", "blink_cursor",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "static_backscroll_mode", "regard_uri_as_word",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "use_ot_layout", "trim_trailing_newline_in_pasting", "broadcast",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -31,7 +31,7 @@ static char *labels[MC_FLAG_MODES] = {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ N_("Xft"), N_("Cairo"), N_("Anti Alias"), N_("Variable column width"), N_("Combining"),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ N_("Combining = 1 (or 0) logical column(s)"), N_("Process received strings via Unicode"),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ N_("Fullwidth = 2 (or 1) logical column(s)"), N_("Complex Text Layout"),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- N_("Ambiguouswidth = fullwidth"), N_("CLIPBOARD Selection"), N_("Local echo"),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ N_("Ambiguouswidth = fullwidth"), N_("Local echo"),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ N_("Blink cursor"), N_("Don't scroll automatically in scrolling back"),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ N_("Select URI by double click"), N_("OpenType Layout"),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ N_("Trim trailing CR/LF in pasting"), N_("Send keys to all windows"),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/tool/mlconfig/mc_flags.h b/tool/mlconfig/mc_flags.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 584b2441e..1f15bd32d 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/tool/mlconfig/mc_flags.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/tool/mlconfig/mc_flags.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -17,14 +17,13 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define MC_FLAG_MCOL 7
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define MC_FLAG_CTL 8
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define MC_FLAG_AWIDTH 9
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#define MC_FLAG_CLIPBOARD 10
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#define MC_FLAG_LOCALECHO 11
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#define MC_FLAG_BLINKCURSOR 12
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#define MC_FLAG_STATICBACKSCROLL 13
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#define MC_FLAG_REGARDURIASWORD 14
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#define MC_FLAG_OTLAYOUT 15
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#define MC_FLAG_TRIMNEWLINE 16
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#define MC_FLAG_BROADCAST 17
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define MC_FLAG_LOCALECHO 10
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define MC_FLAG_BLINKCURSOR 11
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define MC_FLAG_STATICBACKSCROLL 12
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define MC_FLAG_REGARDURIASWORD 13
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define MC_FLAG_OTLAYOUT 14
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define MC_FLAG_TRIMNEWLINE 15
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define MC_FLAG_BROADCAST 16
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ GtkWidget *mc_flag_config_widget_new(int id);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/tool/mlconfig/mc_io_file.c b/tool/mlconfig/mc_io_file.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 06b5f3a7b..7aa797ff9 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/tool/mlconfig/mc_io_file.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/tool/mlconfig/mc_io_file.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -324,7 +324,6 @@ int mc_get_flag_value_file(const char *key) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ { "use_anti_alias", 0 },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ { "use_auto_detect", 0 },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ { "use_bold_font", 0 },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- { "use_clipboard", 0 },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ { "use_combining", 1 },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ { "use_ctl", 1 },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ { "use_dynamic_comb", 0 },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/uitoolkit/Makefile.in b/uitoolkit/Makefile.in
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 12e353287..8c93a5312 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/uitoolkit/Makefile.in
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/uitoolkit/Makefile.in
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -40,6 +40,7 @@ OBJ2_console = ui.o ui_event_source.o ui_im_status_screen.o
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ OBJ2_wayland = ui.o ui_event_source.o ui_decsp_font.o ui_im_status_screen.o \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ xdg-shell-unstable-v6-client-protocol.o \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ xdg-shell-client-protocol.o gtk-primary-selection.o \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ primary-selection-unstable-v1-client-protocol.o \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ xdg-decoration-unstable-v1-client-protocol.o
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ OBJ2_sdl2 = ui.o ui_event_source.o ui_decsp_font.o ui_im_status_screen.o syswminfo.o
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/uitoolkit/beos/ui_window.c b/uitoolkit/beos/ui_window.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 8f76a3e06..8431bc33f 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/uitoolkit/beos/ui_window.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/uitoolkit/beos/ui_window.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1234,11 +1234,7 @@ void ui_window_draw_rect_frame(ui_window_t *win, int x1, int y1, int x2, int y2)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-void ui_set_use_clipboard_selection(int use_it) {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-int ui_is_using_clipboard_selection(void) { return 0; }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-int ui_window_set_selection_owner(ui_window_t *win, Time time) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++int ui_window_set_selection_owner(ui_window_t *win, Time time, ui_selection_flag_t selection) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (ui_window_is_selection_owner(win)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* Already owner */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1256,9 +1252,11 @@ int ui_window_set_selection_owner(ui_window_t *win, Time time) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-int ui_window_xct_selection_request(ui_window_t *win, Time time) { return 0; }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++int ui_window_xct_selection_request(ui_window_t *win, Time time, ui_selection_flag_t selection) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-int ui_window_utf_selection_request(ui_window_t *win, Time time) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++int ui_window_utf_selection_request(ui_window_t *win, Time time, ui_selection_flag_t selection) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (win->utf_selection_notified) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ u_char *str;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ size_t len;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/uitoolkit/console/ui_window.c b/uitoolkit/console/ui_window.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 4b1adaff8..32eb56a52 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/uitoolkit/console/ui_window.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/uitoolkit/console/ui_window.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1319,11 +1319,7 @@ void ui_window_draw_rect_frame(ui_window_t *win, int x1, int y1, int x2, int y2)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_window_fill_with(win, &win->fg_color, x2, y1, 1, y2 - y1 + 1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-void ui_set_use_clipboard_selection(int use_it) {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-int ui_is_using_clipboard_selection(void) { return 0; }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-int ui_window_set_selection_owner(ui_window_t *win, Time time) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++int ui_window_set_selection_owner(ui_window_t *win, Time time, ui_selection_flag_t selection) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (ui_window_is_selection_owner(win)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* Already owner */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1333,7 +1329,7 @@ int ui_window_set_selection_owner(ui_window_t *win, Time time) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return ui_display_own_selection(win->disp, win);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-int ui_window_xct_selection_request(ui_window_t *win, Time time) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++int ui_window_xct_selection_request(ui_window_t *win, Time time, ui_selection_flag_t selection) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ u_int count;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ u_int num_displays;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_display_t **displays = ui_get_opened_displays(&num_displays);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1355,7 +1351,7 @@ int ui_window_xct_selection_request(ui_window_t *win, Time time) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-int ui_window_utf_selection_request(ui_window_t *win, Time time) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++int ui_window_utf_selection_request(ui_window_t *win, Time time, ui_selection_flag_t selection) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ u_int count;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ u_int num_displays;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_display_t **displays = ui_get_opened_displays(&num_displays);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/uitoolkit/fb/ui_window.c b/uitoolkit/fb/ui_window.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index bb0177377..9be19cc59 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/uitoolkit/fb/ui_window.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/uitoolkit/fb/ui_window.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1292,6 +1292,7 @@ void ui_window_final(ui_window_t *win) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ free(win->children);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_display_clear_selection(win->disp, win);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ui_display_clear_clipboard(win->disp, win);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (win->window_finalized) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ (*win->window_finalized)(win);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2372,18 +2373,16 @@ void ui_window_draw_rect_frame(ui_window_t *win, int x1, int y1, int x2, int y2)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_window_fill_with(win, &win->fg_color, x2, y1, 1, y2 - y1 + 1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-/* These functions are defined in ui_display.c on wayland. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#ifndef USE_WAYLAND
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-void ui_set_use_clipboard_selection(int use_it) {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-int ui_is_using_clipboard_selection(void) { return 0; }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-int ui_window_set_selection_owner(ui_window_t *win, Time time) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++int ui_window_set_selection_owner(ui_window_t *win, Time time, ui_selection_flag_t selection) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #ifndef USE_SDL2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if (ui_window_is_selection_owner(win)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (ui_window_is_selection_owner(win, selection)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* Already owner */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef USE_WAYLAND
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (selection == SEL_CLIPBOARD) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ui_display_own_clipboard(win->disp, win);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ } else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_display_own_selection(win->disp, win);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2398,7 +2397,7 @@ int ui_window_set_selection_owner(ui_window_t *win, Time time) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-int ui_window_xct_selection_request(ui_window_t *win, Time time) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++int ui_window_xct_selection_request(ui_window_t *win, Time time, ui_selection_flag_t selection) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #if defined(__ANDROID__) || defined(USE_WAYLAND)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2413,10 +2412,16 @@ int ui_window_xct_selection_request(ui_window_t *win, Time time) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-int ui_window_utf_selection_request(ui_window_t *win, Time time) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++int ui_window_utf_selection_request(ui_window_t *win, Time time, ui_selection_flag_t selection) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #if defined(__ANDROID__)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_display_request_text_selection();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#elif defined(USE_WAYLAND) || defined(USE_SDL2)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#elif defined(USE_WAYLAND)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (selection == SEL_CLIPBOARD) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ui_display_request_text_clipboard(win->disp);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ui_display_request_text_selection(win->disp);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#elif defined(USE_SDL2)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_display_request_text_selection(win->disp);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (win->disp->selection_owner && win->disp->selection_owner->utf_selection_requested) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/uitoolkit/quartz/ui_window.c b/uitoolkit/quartz/ui_window.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 769e146f8..bfdb3f575 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/uitoolkit/quartz/ui_window.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/uitoolkit/quartz/ui_window.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1166,11 +1166,7 @@ void ui_window_draw_rect_frame(ui_window_t *win, int x1, int y1, int x2, int y2)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ x2 + win->hmargin, y2 + win->vmargin);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-void ui_set_use_clipboard_selection(int use_it) {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-int ui_is_using_clipboard_selection(void) { return 0; }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-int ui_window_set_selection_owner(ui_window_t *win, Time time) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++int ui_window_set_selection_owner(ui_window_t *win, Time time, ui_selection_flag_t selection) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #ifdef COCOA_TOUCH
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (win->utf_selection_requested) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ (*win->utf_selection_requested)(win, NULL, time);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1192,9 +1188,11 @@ int ui_window_set_selection_owner(ui_window_t *win, Time time) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-int ui_window_xct_selection_request(ui_window_t *win, Time time) { return 0; }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++int ui_window_xct_selection_request(ui_window_t *win, Time time, ui_selection_flag_t selection) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-int ui_window_utf_selection_request(ui_window_t *win, Time time) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++int ui_window_utf_selection_request(ui_window_t *win, Time time, ui_selection_flag_t selection) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (win->utf_selection_notified) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ const char *str;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/uitoolkit/ui_display.h b/uitoolkit/ui_display.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 71b145fa1..39e75620e 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/uitoolkit/ui_display.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/uitoolkit/ui_display.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -47,6 +47,9 @@ typedef struct ui_display {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ u_int num_roots;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_window_ptr_t selection_owner;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if defined(USE_XLIB) || defined(USE_WAYLAND)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ui_window_ptr_t clipboard_owner;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_modifier_mapping_t modmap;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/uitoolkit/ui_main_config.c b/uitoolkit/ui_main_config.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index ed2c89c54..5e5213716 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/uitoolkit/ui_main_config.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/uitoolkit/ui_main_config.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -133,8 +133,6 @@ void ui_prepare_for_main_config(bl_conf_t *conf) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ bl_conf_add_opt(conf, '\0', "role", 0, "wm_role", "application role [none]");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ bl_conf_add_opt(conf, 'O', "sbmod", 0, "scrollbar_mode",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "scrollbar mode (none/left/right/autohide) [none]");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- bl_conf_add_opt(conf, 'P', "clip", 1, "use_clipboard",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "use CLIPBOARD (not only PRIMARY) selection [true]");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ bl_conf_add_opt(conf, 'Q', "vcur", 1, "use_vertical_cursor",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "rearrange cursor key for vertical mode [true]");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ bl_conf_add_opt(conf, 'S', "sbview", 0, "scrollbar_view_name",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1247,14 +1245,6 @@ void ui_main_config_init(ui_main_config_t *main_config, bl_conf_t *conf, int arg
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if ((value = bl_conf_get_value(conf, "use_clipboard"))) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- int flag = true_or_false(value);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if (flag != -1) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ui_set_use_clipboard_selection(flag);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #ifndef __ANDROID__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (!(value = bl_conf_get_value(conf, "auto_restart")) || strcmp(value, "false") != 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ vt_set_auto_restart_cmd(bl_get_prog_path());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/uitoolkit/ui_screen.c b/uitoolkit/ui_screen.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 0984586a6..dc6a84955 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/uitoolkit/ui_screen.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/uitoolkit/ui_screen.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1729,8 +1729,8 @@ static u_int convert_nl_to_cr3(WCHAR *str, u_int len) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-static int yank_event_received(ui_screen_t *screen, Time time) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if (ui_window_is_selection_owner(&screen->window)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static int yank_event_received(ui_screen_t *screen, Time time, ui_selection_flag_t selection) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (ui_window_is_selection_owner(&screen->window, selection)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ u_int len;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (screen->sel.sel_str == NULL || screen->sel.sel_len == 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1767,11 +1767,11 @@ static int yank_event_received(ui_screen_t *screen, Time time) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (encoding == VT_UTF8 ||
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ (IS_UCS_SUBSET_ENCODING(encoding) && screen->receive_string_via_ucs)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- return ui_window_utf_selection_request(&screen->window, time) ||
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ui_window_xct_selection_request(&screen->window, time);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return ui_window_utf_selection_request(&screen->window, time, selection) ||
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ui_window_xct_selection_request(&screen->window, time, selection);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- return ui_window_xct_selection_request(&screen->window, time) ||
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ui_window_utf_selection_request(&screen->window, time);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return ui_window_xct_selection_request(&screen->window, time, selection) ||
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ui_window_utf_selection_request(&screen->window, time, selection);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2009,15 +2009,15 @@ static int shortcut_match(ui_screen_t *screen, KeySym ksym, u_int state) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (ui_shortcut_match(screen->shortcut, INSERT_SELECTION, ksym, state)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- yank_event_received(screen, CurrentTime);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ yank_event_received(screen, CurrentTime, SEL_PRIMARY);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #if defined(USE_XLIB) || defined(USE_WAYLAND)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ else if (ui_shortcut_match(screen->shortcut, INSERT_CLIPBOARD, ksym, state)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- int flag = ui_is_using_clipboard_selection();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ui_set_use_clipboard_selection(2);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- yank_event_received(screen, CurrentTime);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ui_set_use_clipboard_selection(flag);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ yank_event_received(screen, CurrentTime, SEL_CLIPBOARD);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ } else if (ui_shortcut_match(screen->shortcut, COPY_CLIPBOARD, ksym, state)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (screen->sel.sel_str && screen->sel.sel_len > 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ui_window_set_selection_owner(&screen->window, CurrentTime, SEL_CLIPBOARD);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ else if (ui_shortcut_match(screen->shortcut, RESET, ksym, state)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2219,7 +2219,7 @@ static u_int get_beg_in_rtl_line(vt_line_t *line) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return count;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-static void start_selection(ui_screen_t*, int, int, ui_sel_type_t, int);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static void start_selection(ui_screen_t*, int, int, ui_sel_mode_t, int);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static int selecting(ui_screen_t*, int, int);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static int copymode_move_vertical(ui_screen_t *screen, int step /* != 0 */) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2424,6 +2424,10 @@ static void copymode_key(ui_screen_t *screen, int ksym, u_int state, u_char *str
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if ((line = vt_term_get_line(screen->term, screen->copymode->cursor_row))) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ line->mark ^= 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ } else if (ui_shortcut_match(screen->shortcut, COPY_CLIPBOARD, ksym, state)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (screen->sel.sel_str && screen->sel.sel_len > 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ui_window_set_selection_owner(&screen->window, CurrentTime, SEL_CLIPBOARD);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else if (ksym == XK_Left || ksym == 'h') {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (vt_line_is_rtl(line) &&
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ screen->copymode->cursor_char_index <= get_beg_in_rtl_line(line)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2473,7 +2477,9 @@ static void copymode_key(ui_screen_t *screen, int ksym, u_int state, u_char *str
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_sel_clear(&screen->sel);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -3286,7 +3292,7 @@ static void report_mouse_tracking(ui_screen_t *screen, int x, int y, int button,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Functions related to selection.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-static void start_selection(ui_screen_t *screen, int col_r, int row_r, ui_sel_type_t type,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static void start_selection(ui_screen_t *screen, int col_r, int row_r, ui_sel_mode_t mode,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ int is_rect) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ int col_l;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ int row_l;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -3330,7 +3336,7 @@ static void start_selection(ui_screen_t *screen, int col_r, int row_r, ui_sel_ty
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ row_l = row_r;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ui_start_selection(&screen->sel, col_l, row_l, col_r, row_r, type, is_rect);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ui_start_selection(&screen->sel, col_l, row_l, col_r, row_r, mode, is_rect);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_window_update(&screen->window, UPDATE_SCREEN);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -3864,7 +3870,7 @@ static void button_released(ui_window_t *win, XButtonEvent *event) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* FIXME: should check whether a menu is really active? */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- yank_event_received(screen, event->time);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ yank_event_received(screen, event->time, SEL_PRIMARY);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -4967,12 +4973,6 @@ static void get_config_intern(ui_screen_t *screen, char *dev, /* can be NULL */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else if (strcmp(key, "gui") == 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ value = GUI_TYPE;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- } else if (strcmp(key, "use_clipboard") == 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if (ui_is_using_clipboard_selection()) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- value = "true";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- value = "false";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else if (strcmp(key, "allow_osc52") == 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (screen->xterm_listener.set_selection) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ value = "true";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -5251,7 +5251,7 @@ static int select_in_window(void *p, vt_char_t **chars, u_int *len, int beg_char
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if (!ui_window_set_selection_owner(&screen->window, CurrentTime)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (!ui_window_set_selection_owner(&screen->window, CurrentTime, SEL_PRIMARY)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ vt_str_destroy(*chars, size);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -5304,6 +5304,7 @@ static void line_scrolled_out(void *p) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ vt_line_t *line;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ /* See 'beg = INLINEPIC_AVAIL_ROW' in cleanup_inline_pictures() in ui_picture.c */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if ((line = vt_term_get_line(screen->term, INLINEPIC_AVAIL_ROW))) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ vt_line_clear_picture(line);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -6159,25 +6160,18 @@ static void xterm_set_selection(void *p,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ vt_char_t *str, /* Should be free'ed by the event listener. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ u_int len, u_char *targets) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_screen_t *screen;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- int use_clip_orig;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ui_selection_flag_t selection;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ screen = p;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- use_clip_orig = ui_is_using_clipboard_selection();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (strchr(targets, 'c')) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if (!use_clip_orig) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ui_set_use_clipboard_selection(1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- } else if (!strchr(targets, 's') && strchr(targets, 'p')) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- /* 'p' is specified while 'c' and 's' aren't specified. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if (use_clip_orig) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ui_set_use_clipboard_selection(0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ selection = SEL_CLIPBOARD;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ /* XXX secondary('q'), select('s') and cut-buffers('s') are regarded as primary('p') */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ selection = SEL_PRIMARY;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if (ui_window_set_selection_owner(&screen->window, CurrentTime)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (ui_window_set_selection_owner(&screen->window, CurrentTime, selection)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (screen->sel.sel_str) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ vt_str_destroy(screen->sel.sel_str, screen->sel.sel_len);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -6185,10 +6179,6 @@ static void xterm_set_selection(void *p,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ screen->sel.sel_str = str;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ screen->sel.sel_len = len;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if (use_clip_orig != ui_is_using_clipboard_selection()) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ui_set_use_clipboard_selection(use_clip_orig);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static int xterm_get_rgb(void *p, u_int8_t *red, u_int8_t *green, u_int8_t *blue,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -7079,15 +7069,8 @@ int ui_screen_exec_cmd(ui_screen_t *screen, char *cmd) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * processing_vtseq == 0 : stop processing vtseq.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (screen->processing_vtseq <= 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- int flag = ui_is_using_clipboard_selection();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if (arg && strncmp(arg, "clip", 4) == 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ui_set_use_clipboard_selection(2);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- yank_event_received(screen, CurrentTime);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ui_set_use_clipboard_selection(flag);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ yank_event_received(screen, CurrentTime,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ (arg && strncmp(arg, "clip", 4) == 0) ? SEL_CLIPBOARD : SEL_PRIMARY);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else if (strcmp(cmd, "open_pty") == 0 || strcmp(cmd, "select_pty") == 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (HAS_SYSTEM_LISTENER(screen, open_pty)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -7493,12 +7476,6 @@ int ui_screen_set_config(ui_screen_t *screen, char *dev, /* can be NULL */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else if (strcmp(key, "icon_path") == 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ vt_term_set_icon_path(term, value);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set_icon(screen);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- } else if (strcmp(key, "use_clipboard") == 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- int flag;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if ((flag = true_or_false(value)) != -1) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ui_set_use_clipboard_selection(flag);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else if (strcmp(key, "auto_restart") == 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ vt_set_auto_restart_cmd(strcmp(value, "false") == 0 ? NULL : value);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else if (strcmp(key, "allow_osc52") == 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/uitoolkit/ui_selection.c b/uitoolkit/ui_selection.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 1eb4b7ef8..88446dbe4 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/uitoolkit/ui_selection.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/uitoolkit/ui_selection.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -208,9 +208,9 @@ void ui_sel_final(ui_selection_t *sel) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ void ui_start_selection(ui_selection_t *sel, int col_l, int row_l, int col_r, int row_r,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ui_sel_type_t type, int is_rect) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ui_sel_mode_t mode, int is_rect) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sel->is_reversed = 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- sel->is_selecting = type;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ sel->is_selecting = mode;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sel->is_rect = is_rect;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sel->base_col_r = sel->beg_col = sel->end_col = sel->prev_col = col_r;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/uitoolkit/ui_selection.h b/uitoolkit/ui_selection.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 568c40f39..f4dd4b169 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/uitoolkit/ui_selection.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/uitoolkit/ui_selection.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -11,7 +11,7 @@ typedef enum {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ SEL_WORD = 0x2,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ SEL_LINE = 0x3,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-} ui_sel_type_t;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++} ui_sel_mode_t;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ typedef struct ui_sel_event_listener {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ void *self;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -48,7 +48,7 @@ typedef struct ui_selection {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ int prev_col;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ int prev_row;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- int8_t is_selecting; /* ui_sel_type_t is stored */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ int8_t is_selecting; /* ui_sel_mode_t is stored */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ int8_t is_reversed;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ int8_t is_locked;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ int8_t is_rect;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -60,7 +60,7 @@ void ui_sel_init(ui_selection_t *sel, ui_sel_event_listener_t *listener);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ void ui_sel_final(ui_selection_t *sel);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ void ui_start_selection(ui_selection_t *sel, int col_l, int row_l, int col_r, int row_r,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ui_sel_type_t type, int is_rect);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ui_sel_mode_t mode, int is_rect);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ int ui_selecting(ui_selection_t *sel, int col, int row);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/uitoolkit/ui_shortcut.c b/uitoolkit/ui_shortcut.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 359ec9be3..2f3d29ea1 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/uitoolkit/ui_shortcut.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/uitoolkit/ui_shortcut.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -61,6 +61,7 @@ static key_func_table_t key_func_table[] = {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ { "INSERT_SELECTION", INSERT_SELECTION, },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #if defined(USE_XLIB) || defined(USE_WAYLAND)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ { "INSERT_CLIPBOARD", INSERT_CLIPBOARD, },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ { "COPY_CLIPBOARD", COPY_CLIPBOARD, },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ { "RESET", RESET, },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ { "COPY_MODE", COPY_MODE, },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -178,7 +179,9 @@ void ui_shortcut_init(ui_shortcut_t *shortcut) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #if defined(USE_XLIB) || defined(USE_WAYLAND)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* INSERT_CLIPBOARD */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- { 0, 0, 0, },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ { 'v', ControlMask|ShiftMask, 1, },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ /* COPY_CLIPBOARD */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ { 'c', ControlMask|ShiftMask, 1, },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* RESET */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/uitoolkit/ui_shortcut.h b/uitoolkit/ui_shortcut.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 9bbfefebb..05980e8a0 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/uitoolkit/ui_shortcut.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/uitoolkit/ui_shortcut.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -31,6 +31,7 @@ typedef enum ui_key_func {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ INSERT_SELECTION,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #if defined(USE_XLIB) || defined(USE_WAYLAND)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ INSERT_CLIPBOARD,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ COPY_CLIPBOARD,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ RESET,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ COPY_MODE,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/uitoolkit/ui_window.h b/uitoolkit/ui_window.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 7e764fdf9..20fd42d6c 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/uitoolkit/ui_window.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/uitoolkit/ui_window.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -49,6 +49,11 @@ typedef enum ui_sizehint_flag {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ SIZEHINT_HEIGHT = 0x2,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } ui_sizehint_flag_t;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++typedef enum ui_selection_flag {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ SEL_PRIMARY = 0x0,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ SEL_CLIPBOARD = 0x1, /* for xlib/wayland */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++} ui_selection_flag_t;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ typedef struct ui_xim_event_listener {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ void *self;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -405,19 +410,20 @@ void ui_window_ft_draw_string32(ui_window_t *win, ui_font_t *font, ui_color_t *f
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ void ui_window_draw_rect_frame(ui_window_t *win, int x1, int y1, int x2, int y2);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-void ui_set_use_clipboard_selection(int use_it);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-int ui_is_using_clipboard_selection(void);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-int ui_window_set_selection_owner(ui_window_t *win, Time time);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++int ui_window_set_selection_owner(ui_window_t *win, Time time, ui_selection_flag_t selection);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#define ui_window_is_selection_owner(win) ((win) == (win)->disp->selection_owner)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-int ui_window_string_selection_request(ui_window_t *win, Time time);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if defined(USE_XLIB) || defined(USE_WAYLAND)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define ui_window_is_selection_owner(win, selection) \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ((selection) == SEL_CLIPBOARD ? (win) == (win)->disp->clipboard_owner : \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ (win) == (win)->disp->selection_owner)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define ui_window_is_selection_owner(win, selection) \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ((win) == (win)->disp->selection_owner)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-int ui_window_xct_selection_request(ui_window_t *win, Time time);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++int ui_window_xct_selection_request(ui_window_t *win, Time time, ui_selection_flag_t selection);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-int ui_window_utf_selection_request(ui_window_t *win, Time time);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++int ui_window_utf_selection_request(ui_window_t *win, Time time, ui_selection_flag_t selection);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ void ui_window_send_picture_selection(ui_window_t *win, Pixmap pixmap, u_int width, u_int height);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/uitoolkit/xlib/ui_display.c b/uitoolkit/xlib/ui_display.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 84eb8a0c3..a0e0d8cad 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/uitoolkit/xlib/ui_display.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/uitoolkit/xlib/ui_display.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -495,6 +495,41 @@ int ui_display_clear_selection(ui_display_t *disp, /* NULL means all selection o
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++int ui_display_own_clipboard(ui_display_t *disp, ui_window_t *win) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (disp->clipboard_owner) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ui_display_clear_clipboard(disp, disp->clipboard_owner);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ disp->clipboard_owner = win;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++int ui_display_clear_clipboard(ui_display_t *disp, /* NULL means all clipboard owner windows. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ui_window_t *win) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (disp == NULL) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ u_int count;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ for (count = 0; count < num_displays; count++) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ui_display_clear_clipboard(displays[count], displays[count]->clipboard_owner);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (disp->clipboard_owner == NULL || disp->clipboard_owner != win) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (disp->clipboard_owner->selection_cleared) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ (*disp->clipboard_owner->selection_cleared)(disp->clipboard_owner);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ disp->clipboard_owner = NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ XModifierKeymap *ui_display_get_modifier_mapping(ui_display_t *disp) { return disp->modmap.map; }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ void ui_display_update_modifier_mapping(ui_display_t *disp, u_int serial) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/uitoolkit/xlib/ui_display.h b/uitoolkit/xlib/ui_display.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index efee5c4d4..5839e87c4 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/uitoolkit/xlib/ui_display.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/uitoolkit/xlib/ui_display.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -9,4 +9,8 @@ Cursor ui_display_get_cursor(ui_display_t *disp, u_int shape);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ XVisualInfo *ui_display_get_visual_info(ui_display_t *disp);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++int ui_display_own_clipboard(ui_display_t *disp, ui_window_ptr_t win);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++int ui_display_clear_clipboard(ui_display_t *disp, ui_window_ptr_t win);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/uitoolkit/xlib/ui_window.c b/uitoolkit/xlib/ui_window.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 1ee0d99fd..95dfd205b 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/uitoolkit/xlib/ui_window.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/uitoolkit/xlib/ui_window.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -100,7 +100,6 @@ typedef struct {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static int click_interval = 250; /* millisecond, same as xterm. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* ParentRelative isn't used for transparency by default */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static int use_inherit_transparent = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-static int use_clipboard = 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static int use_urgent_bell = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static struct {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -663,7 +662,7 @@ static void scroll_region(ui_window_t *win, int src_x, int src_y, u_int width, u
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ win->wait_copy_area_response = 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-static int send_selection(ui_window_t *win, XSelectionRequestEvent *req_ev, u_char *sel_data,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static void send_selection(ui_window_t *win, XSelectionRequestEvent *req_ev, u_char *sel_data,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ size_t sel_len, Atom sel_type, int sel_format) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ XEvent res_ev;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -691,8 +690,6 @@ static int send_selection(ui_window_t *win, XSelectionRequestEvent *req_ev, u_ch
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ XSendEvent(win->disp->display, res_ev.xselection.requestor, False, 0, &res_ev);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- return 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static int right_shift(u_long mask) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -967,6 +964,7 @@ void ui_window_final(ui_window_t *win) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (win->my_window) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_display_clear_selection(win->disp, win);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ui_display_clear_clipboard(win->disp, win);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_xic_deactivate(win);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2329,7 +2327,11 @@ int ui_window_receive_event(ui_window_t *win, XEvent *event) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ else if (event->type == SelectionClear) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* Call win->selection_cleared in ui_display_clear_selection. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ui_display_clear_selection(win->disp, win);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (event->xselectionclear.selection == XA_CLIPBOARD(win->disp->display)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ui_display_clear_clipboard(win->disp, win);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ui_display_clear_selection(win->disp, win);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ free(sel_bmp);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sel_bmp = NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2354,8 +2356,7 @@ int ui_window_receive_event(ui_window_t *win, XEvent *event) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (event->xselectionrequest.target == XA_STRING) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (win->xct_selection_requested) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- (*win->xct_selection_requested)(win, &event->xselectionrequest,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- event->xselectionrequest.target);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ (*win->xct_selection_requested)(win, &event->xselectionrequest, XA_STRING);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else if (event->xselectionrequest.target == xa_text ||
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ event->xselectionrequest.target == xa_compound_text) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2410,11 +2411,15 @@ int ui_window_receive_event(ui_window_t *win, XEvent *event) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ event->xselection.property == XA_NONE(win->disp->display)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Atom xa_selection;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if (use_clipboard == 2) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- xa_selection = XA_CLIPBOARD(win->disp->display);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (event->xselection.selection != XA_PRIMARY &&
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ event->xselection.selection != XA_CLIPBOARD(win->disp->display)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ /* Need? */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ xa_selection = XA_PRIMARY;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ xa_selection = event->xselection.selection;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Selection request failed.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2917,38 +2922,22 @@ void ui_window_draw_rect_frame(ui_window_t *win, int x1, int y1, int x2, int y2)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ XDrawLines(win->disp->display, win->my_window, win->gc->gc, points, 5, CoordModeOrigin);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-void ui_set_use_clipboard_selection(int use_it) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if (use_clipboard == use_it) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- return;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if (use_clipboard == 0 && use_it == 1) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- /*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- * disp->selection_owner is reset.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- * If it isn't reset and value of 'use_clipboard' option is changed from false
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- * to true dynamically, ui_window_set_selection_owner() returns before calling
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- * XSetSelectionOwner().
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ui_display_clear_selection(NULL, NULL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- use_clipboard = use_it;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-int ui_is_using_clipboard_selection(void) { return use_clipboard; }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-int ui_window_set_selection_owner(ui_window_t *win, Time time) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if (ui_window_is_selection_owner(win)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++int ui_window_set_selection_owner(ui_window_t *win, Time time, ui_selection_flag_t selection) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ Atom xa_selection;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (ui_window_is_selection_owner(win, selection)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* Already owner */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- XSetSelectionOwner(win->disp->display, XA_PRIMARY, win->my_window, time);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if (use_clipboard) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- XSetSelectionOwner(win->disp->display, XA_CLIPBOARD(win->disp->display), win->my_window, time);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (selection == SEL_CLIPBOARD) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ xa_selection = XA_CLIPBOARD(win->disp->display);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ xa_selection = XA_PRIMARY;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ XSetSelectionOwner(win->disp->display, xa_selection, win->my_window, time);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #ifdef DEBUG
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ bl_debug_printf(BL_DEBUG_TAG " XA_PRIMARY => %lu, XA_CLIPBOARD => %lu (mywin %lu)\n",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ XGetSelectionOwner(win->disp->display, XA_PRIMARY),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2956,17 +2945,18 @@ int ui_window_set_selection_owner(ui_window_t *win, Time time) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ win->my_window);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if (win->my_window != XGetSelectionOwner(win->disp->display, XA_PRIMARY) &&
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- (!use_clipboard ||
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- win->my_window !=
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- XGetSelectionOwner(win->disp->display, XA_CLIPBOARD(win->disp->display)))) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (win->my_window != XGetSelectionOwner(win->disp->display, xa_selection)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (selection == SEL_CLIPBOARD) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return ui_display_own_clipboard(win->disp, win);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return ui_display_own_selection(win->disp, win);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-int ui_window_xct_selection_request(ui_window_t *win, Time time) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++int ui_window_xct_selection_request(ui_window_t *win, Time time, ui_selection_flag_t selection) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Display *display = win->disp->display;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2977,16 +2967,16 @@ int ui_window_xct_selection_request(ui_window_t *win, Time time) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * e6b5a5e6b9a5e695b464e69593e695ace791a3e6bda9e589aee785a5e695b5e791
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * b3e2b4a0e790a0e789a1e695a7e281b4e690a50a
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- XConvertSelection(display, use_clipboard == 2 ? XA_CLIPBOARD(display) : XA_PRIMARY,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ XConvertSelection(display, selection == SEL_CLIPBOARD ? XA_CLIPBOARD(display) : XA_PRIMARY,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ XA_COMPOUND_TEXT(display), XA_SELECTION_PROP(display), win->my_window, time);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-int ui_window_utf_selection_request(ui_window_t *win, Time time) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++int ui_window_utf_selection_request(ui_window_t *win, Time time, ui_selection_flag_t selection) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Display *display = win->disp->display;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- XConvertSelection(display, use_clipboard == 2 ? XA_CLIPBOARD(display) : XA_PRIMARY,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ XConvertSelection(display, selection == SEL_CLIPBOARD ? XA_CLIPBOARD(display) : XA_PRIMARY,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ XA_UTF8_STRING(display), XA_SELECTION_PROP(display), win->my_window, time);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -3060,7 +3050,8 @@ void ui_window_send_picture_selection(ui_window_t *win, Pixmap pixmap, u_int wid
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ui_window_set_selection_owner(win, CurrentTime);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ui_window_set_selection_owner(win, CurrentTime, SEL_PRIMARY);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ui_window_set_selection_owner(win, CurrentTime, SEL_CLIPBOARD);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ bl_msg_printf("Set a clicked picture to the clipboard.\n");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span></pre><pre style='margin:0'>
</pre>