Переключится ли переход на Wayland на невозможность вставки из закрытых окон?

Недавно я прочитал о том, как Xorg обвиняет в печально известной ошибке , в которой пользователь не может копировать и вставлять из окна после их закрытия. И я также знаю о запланированном возможном переходе на Wayland в качестве замены для X .

Если эта ошибка является результатом X, а X будет заменена Wayland, то возможно ли, что в это время исправит? Мне любопытно, насколько это технически возможно, и если в настоящее время он планирует это сделать.

4
задан 10 May 2012 в 07:37

1 ответ

Ну, я не думаю, что это ошибка как таковая, это скорее функция, которая имеет некоторые непредвиденные последствия. Более того, я понимаю, что другие «менеджеры буфера обмена», то есть в Windows и MacOS X, работают в очень аналогичным образом - при выполнении операции копирования приложение просто уведомляет менеджера буфера обмена - «эй, у меня есть что-то», не передавая фактические данные (хотя в вышеупомянутых операционных системах приложение может физически хранить данные в буфере обмена - XWindow оставляет это для «менеджера буфера обмена», который представляет собой отдельное приложение).

Причина этого станет понятной, если учесть, что скопированные данные часто должны быть преобразованы из одного формата в другой, прежде чем вставляться. Пример: вы копируете текстовый фрейм из программы публикации и вставляете его в одну и ту же программу - результат сохраняет размер текстового фрейма, границы, преобразования и т. Д. Затем вы вставляете то же самое в текстовый процессор - результатом является некоторый текст с богатым форматированием, но, очевидно, свойства текстового фрейма теряются, потому что текстовый процессор ничего не знает об этом. Затем вы вставляете то же самое в текстовый редактор - результат - это просто текст без форматирования.

Теперь, как это работает? Как преобразованный формат данных издательской программы преобразуется в то, что понимает текстовый процессор, или просто для обычного текста? Очевидно, что преобразование не может быть выполнено сервером X, потому что он ничего не знает обо всех возможных форматах данных, также может приложение не может выполнить преобразование по той же причине. [!d5 ]

Мое понимание процесса заключается в том, что когда что-то копируется, приложение уведомляет менеджера буфера обмена о форматах, в которых он может предоставить данные: «Эй, у меня есть кое-что, что я могу преобразовать в свою собственность, формат, богатый текст или обычный текст ».

Другое приложение затем проверяет, есть ли что-нибудь в буфере обмена в формате, который он понимает:

if (clipboad.contains_data_in_formats("image", "rich text", "plain text")) {
    enable_Paste_menu_item();
}

Затем, когда выбрано действие« Вставить » , конечный результат заключается в том, что исходному приложению предлагается предоставить данные в требуемом формате.

Когда приложение выходит, Windows говорит, что он может сохранять данные в буфере обмена менеджер:

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 улучшит что-нибудь в этом отношении:)

4
ответ дан 25 May 2018 в 18:51
  • 1
    Вот аналогичное объяснение: bugs.launchpad.net/ubuntu/+bug/11334/comments/231 – Sergey 14 September 2011 в 09:48
  • 2
    Я не думаю, что Windows работает именно так. Он предоставляет буфер обмена данными в каждом формате, в котором он хочет, чтобы данные были доступны. – Nathan Osman 19 October 2011 в 23:13
  • 3
    @George Edison: ну, хорошо, в Windows приложение может вести себя подобно описанной логике (т. Е. Отображать данные по запросу) или, альтернативно, использовать «отправить данные в буфер обмена и забыть» ; mode - см. описание функции SetClipboardData в MSDN – Sergey 20 October 2011 в 04:52
  • 4
    См. Также сообщение WM_RENDERALLFORMATS - это эквивалент Windows SAVE_TARGETS. Итак, если есть менеджер буфера обмена, и приложения соответствуют спецификации - с точки зрения пользователя поведение приложений XWindow должно быть таким же, как и в Windows. – Sergey 20 October 2011 в 05:00
  • 5
    Aaaand ... вот , как Pasteboard работает на MacOS X - копируется только один формат, другие предоставляются по запросу. Что также несколько похоже на то, что делает XWindow, хотя и не полностью идентичное. – Sergey 20 October 2011 в 05:28

Другие вопросы по тегам:

Похожие вопросы: