Windows 上的 Gtkmm 剪贴板文本不正确
Gtkmm clipboard text incorrect on Windows
我有一个 gtkmm 应用程序,它从 VNC 客户端 (gtk-vnc) to/from 主机共享一个剪贴板。
作为参考,这里是相关代码:
signal_vnc_server_cut_text().connect([this](const Glib::ustring &text) {
auto clipboard = Gtk::Clipboard::get();
m_clipboard_text = text;
/* Works correctly on Windows and Linux */
clipboard->set_text(text);
clipboard->store();
});
Gtk::Clipboard::get()->signal_owner_change().connect([this](GdkEventOwnerChange *) {
auto clipboard = Gtk::Clipboard::get();
auto text = clipboard->wait_for_text();
/* text is correct on Linux, but see below for Windows */
std::cout << "Clipboard got: " << text << std::endl;
if (!text.empty() && text != m_clipboard_text)
client_cut_text(text);
});
当前代码在 Linux 主机上按预期工作(可以双向复制和粘贴)。但是,在 Windows 上,每当我尝试从主机复制时,wait_for_text()
returns 应用程序启动时复制缓冲区中的任何文本。从 Windows 上的客户端复制确实得到了正确的文本(然后我可以将其粘贴到主机上),但是一旦我再次从主机复制,剪贴板数据就会重置为从一开始就存在的任何内容。
我是不是遗漏了什么,或者这是一个 Gtk 错误?
我做了一些挖掘,这似乎是一个 GTK 错误,特别是与此错误修复相关:
https://bugzilla.gnome.org/show_bug.cgi?id=781814
还原更改或将 wait_for_text 替换为模拟此补丁之前行为的自定义版本可解决剪贴板异常问题。
我有一个 gtkmm 应用程序,它从 VNC 客户端 (gtk-vnc) to/from 主机共享一个剪贴板。 作为参考,这里是相关代码:
signal_vnc_server_cut_text().connect([this](const Glib::ustring &text) {
auto clipboard = Gtk::Clipboard::get();
m_clipboard_text = text;
/* Works correctly on Windows and Linux */
clipboard->set_text(text);
clipboard->store();
});
Gtk::Clipboard::get()->signal_owner_change().connect([this](GdkEventOwnerChange *) {
auto clipboard = Gtk::Clipboard::get();
auto text = clipboard->wait_for_text();
/* text is correct on Linux, but see below for Windows */
std::cout << "Clipboard got: " << text << std::endl;
if (!text.empty() && text != m_clipboard_text)
client_cut_text(text);
});
当前代码在 Linux 主机上按预期工作(可以双向复制和粘贴)。但是,在 Windows 上,每当我尝试从主机复制时,wait_for_text()
returns 应用程序启动时复制缓冲区中的任何文本。从 Windows 上的客户端复制确实得到了正确的文本(然后我可以将其粘贴到主机上),但是一旦我再次从主机复制,剪贴板数据就会重置为从一开始就存在的任何内容。
我是不是遗漏了什么,或者这是一个 Gtk 错误?
我做了一些挖掘,这似乎是一个 GTK 错误,特别是与此错误修复相关: https://bugzilla.gnome.org/show_bug.cgi?id=781814
还原更改或将 wait_for_text 替换为模拟此补丁之前行为的自定义版本可解决剪贴板异常问题。