Я недавнопочитайте о том, в чем виноват Xorgдляпечально известная ошибкав котором пользователь не может копировать и вставлять из окна после того, как он его закрыл. И я также знаю о запланированном в конечном итоге переходе наWayland как замена X.
Если этот баг является результатом X, и X будет заменен на Wayland, то возможно ли, что исправление выйдет в то время? Мне интересно, возможно ли это технически, и есть ли это в планах на данный момент.
решение1
Ну, я не думаю, что это ошибка как таковая, это скорее особенность, которая имеет некоторые непреднамеренные последствия :) Более того, я понимаю, что другие "менеджеры буфера обмена", т. е. вОкнаиMac OS X, работают очень похожим образом - когда выполняется операция копирования, приложение просто уведомляет менеджер буфера обмена - "эй, у меня кое-что есть" без передачи фактических данных (хотя в вышеупомянутых ОС приложениеможетФизически хранить данные в буфере обмена — XWindow оставляет эту задачу «менеджеру буфера обмена», который является отдельным приложением.
Причина этого станет ясна, если учесть, что копируемые данные часто необходимо преобразовывать из одного формата в другой перед вставкой. Пример: вы копируете текстовый фрейм из программы публикации и вставляете его в ту же программу — результат сохраняет размер текстового фрейма, границы, преобразования и т. д. Затем вы вставляете то же самое в текстовый процессор — результатом является текст с расширенным форматированием, но, очевидно, свойства текстового фрейма теряются, поскольку текстовый процессор ничего об этом не знает. Затем вы вставляете то же самое в текстовый редактор — результатом является просто текст без какого-либо форматирования.
Теперь, как это работает? Как формат данных, используемый издательской программой, преобразуется в то, что понимает текстовый процессор, или просто в обычный текст? Очевидно, что преобразование не может быть выполнено X-сервером, поскольку он ничего не знает обо всех возможных форматах данных, а такжеполучениеприложение не может выполнить преобразование по той же причине.
Насколько я понимаю, процесс заключается в том, что когда что-то копируется, приложение уведомляет менеджер буфера обмена о форматах, в которых оно может предоставить данные: «Эй, у меня есть кое-что, что я могу преобразовать в свой собственный формат, форматированный текст или обычный текст».
Затем другое приложение проверяет, есть ли в буфере обмена какие-либо данные в формате, который оно понимает:
if (clipboad.contains_data_in_formats("image", "rich text", "plain text")) {
enable_Paste_menu_item();
}
Затем, когда выбрано действие Вставить, конечный результат будет таким:источникЗаявка должна быть предоставлена в требуемом формате.
При выходе из приложения,стандартговорит, что может сохранять данные в менеджере буфера обмена:
If a client needs to exit while owning the CLIPBOARD selection,
it should request the clipboard manager to take over the ownership
of the clipboard, using the SAVE_TARGETS mechanism. If there is no
clipboard manager, or if the SAVE_TARGETS conversion fails, the
application should simply exit.
Итак, я понимаю, что сохранение данных — это обязанность приложения. Таким образом, вряд ли Wayland что-то улучшит в этом отношении :)