A mudança para o Wayland não pode ser colada de janelas fechadas?

4

Eu recentemente li sobre como o Xorg é culpado pelo um bug infame no qual um usuário não pode copiar e colar de uma janela depois de tê-lo fechado. E eu também sei sobre a eventual mudança planejada para Wayland como um substituto para X .

Se este bug é um resultado de X, e X será substituído por Wayland, então é possível que uma correção chegue naquele momento? Estou curioso para saber se isso é tecnicamente possível e se está atualmente nos planos para isso.

    
por Christopher Kyle Horton 14.09.2011 / 05:22

1 resposta

4

Bem, eu não acho que seja um bug como tal, é um recurso que tem algumas conseqüências indesejadas :) Além disso, meu entendimento é que outros "gerenciadores de clipboard", ou seja, em Windows e MacOS X , funcionam de maneira muito semelhante - quando a operação de cópia é realizada, o aplicativo apenas notifica o gerenciador da área de transferência - "ei, eu tenho algo" sem passar os dados reais (embora nos sistemas operacionais mencionados acima um aplicativo possa armazenar fisicamente os dados na área de transferência - folhas XWindow isso para um "gerenciador de área de transferência", que é um aplicativo separado).

A razão para isso ficará clara se você considerar que os dados copiados geralmente precisam ser convertidos de um formato para outro antes de serem colados. Exemplo: você está copiando um quadro de texto de um programa de publicação e colá-lo no mesmo programa - o resultado preserva o tamanho do quadro de texto, bordas, transformações etc. Depois, cola a mesma coisa em um processador de texto - o resultado é algum texto com formatação rica, mas obviamente as propriedades do quadro de texto são perdidas porque o processador de texto não sabe nada sobre isso. Então você cola a mesma coisa em um editor de texto - o resultado é apenas texto sem formatação.

Agora, como funciona? Como o formato de dados proprietário do programa de publicação está sendo convertido em algo que o processador de texto entende ou apenas para texto simples? Obviamente, a conversão não pode ser feita pelo servidor X porque não sabe nada sobre todos os possíveis formatos de dados, também, o aplicativo receive não pode fazer a conversão pelo mesmo motivo.

Meu entendimento do processo é que quando algo é copiado, o aplicativo notifica o gerenciador da área de transferência sobre os formatos em que ele pode fornecer os dados: "Ei, eu tenho algo que eu posso converter em meu formato proprietário. , rich text ou texto simples ".

Outra aplicação, em seguida, verifica se há algo na área de transferência em um formato que ele entenda:

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

Em seguida, quando a ação Colar é selecionada, o resultado final é que o aplicativo fonte é solicitado a fornecer os dados no formato necessário.

Quando o aplicativo está sendo encerrado, o padrão diz que pode salvar os dados no gerenciador da área de transferência:

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.

Então, meu entendimento é que é responsabilidade do aplicativo salvar os dados. Como tal, é provavelmente improvável que o Wayland melhore qualquer coisa a este respeito:)

    
por Sergey 14.09.2011 / 06:30