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


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

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


4
2017-09-14 03:22


Источник


Очень скоро слишком рано даже знать, сможет ли Wayland полностью заменить X - Uri Herrera
Вы понимаете, что можете просто использовать что-то вроде parcellite и буфер обмена будет сохранен после закрытия окон. - WhyNotHugo


Ответы:


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

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

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

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

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

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

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

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

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
2017-09-14 04:30



Вот аналогичное объяснение: bugs.launchpad.net/ubuntu/+bug/11334/comments/231 - Sergey
я не думаю, Windows работает именно так. Он предоставляет буфер обмена данные в каждом формате, в котором он хочет, чтобы данные были доступны. - Nathan Osman
@George Edison: хорошо, хорошо, в Windows приложение Можно ведут себя аналогично описанной мной логике (т. е. обрабатывают данные по запросу) или, альтернативно, использовать режим «отправить данные в буфер обмена и забыть» - см. описание функции SetClipboardData в MSDN - Sergey
Смотрите также WM_RENDERALLFORMATS message - это эквивалент Windows SAVE_TARGETS. Итак, если есть менеджер буфера обмена, и приложения соответствуют спецификации - с точки зрения пользователя поведение приложений XWindow должно быть таким же, как и в Windows. - Sergey
Aaaand ... вот как работает Pasteboard на MacOS X - копируется только один формат, другие предоставляются по запросу. Что также несколько похоже на то, что делает XWindow, хотя и не полностью идентичное. - Sergey