Gtkmm剪贴板文本在Windows上不正确

时间:2017-10-26 00:05:41

标签: c++ clipboard gtkmm gtkmm3

我有一个gtkmm应用程序,它从VNC客户端(gtk-vnc)与主机共享剪贴板。 供参考,以下是相关代码:

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()都会在应用程序启动时返回复制缓冲区中的任何文本。在Windows上从客户端进行复制确实得到了正确的文本(我可以将其粘贴在主机上),但是一旦我再次从主机复制,剪贴板数据就会重置为从一开始就存在的任何内容。

我错过了什么,或者这是一个Gtk错误?

1 个答案:

答案 0 :(得分:0)

我做了一些挖掘,这似乎是一个GTK错误,特别与此错误修正有关: https://bugzilla.gnome.org/show_bug.cgi?id=781814

恢复更改或将wait_for_text替换为模拟此修补程序之前的行为的自定义版本,可以解决剪贴板的异常问题。