Abortar arrastar e soltar de um programa ocupado

Abortar arrastar e soltar de um programa ocupado

Quando acontecer o seguinte:

  1. Eu inicio uma operação de arrastar e soltar, começando pelo aplicativo ABC.
  2. Aplicativo ABC trava (temporariamente)
  3. Eu solto o botão do mouse

então, até que a aplicação ABC termine o processamento, tenho os seguintes problemas:

  • Outros programas não conseguem “agarrar” o ponteiro do mouse
  • O cursor de arrastar e soltar permanece ativo
  • Não consigo clicar em nada
  • Não consigo abrir o painel do gnome ou o menu do GNOME
  • Não consigo pressionar certas teclas (incluindo espaço, enter, teclas de seta)

Obviamente, não posso fazer outro trabalho enquanto aguardo a conclusão do aplicativo.

Uma situação em que isso ocorre é quando tenho cerca de 500 guias do Firefox abertas; ao arrastar as guias, às vezes ele congela por meia hora ou mais.

Uma solução alternativa é usar um terminal pressionando Ctrl-Alt-F1, fazer login, executar killall ABCpara encerrar o aplicativo incorreto e pressionar Ctrl-Alt-F7 para voltar ao ambiente gráfico. Mas eu preferiria não ter que matar o ABC, deixando-o terminar o processamento enquanto recupero o mouse.

Então,é possível abortar à força um arrastar e soltar / soltar o ponteiro do mouse de um programa ocupado, sem matar o processo?

Responder1

Na verdade, é possível fazer isso (pelo menos com versões recentes do X).

Você pode fazer isso pressionando a XF86Ungrabtecla, introduzida emeste commit.

Por padrão, este símbolo de chave não está vinculado a nenhuma chave física ou combinação de teclas (ele foi desativado em 2012 depois de ser relatado como uma falha de segurança, pois permite que qualquer pessoa contorne as telas de bloqueio quebrando suas garras). Em algumas outras configurações, ele está vinculado a um atalho que usa o teclado numérico. Obviamente, isso não funcionará em laptops sem teclado.

Mas você ainda pode ativar o keysym usando xdotool:

setxkbmap -option grab:break_actions
xdotool key XF86Ungrab

Isso funciona com o X.org versão 2:1.11.4-0ubuntu10.8 no Ubuntu Precise.

Responder2

Na maioria dos sistemas operacionais ou sistemas de janelas, você pode cancelar o manipulador de arrastar do mouse pressionando o botão Escape. E às vezes você pode cancelar o evento encontrando ou usando umalvo "arrastar cancelar"como o menu superior do Mac os. Por exemplo, na maioria do Windows, você notará mudanças no cursor para um círculo com uma linha atravessando-o, como uma placa clássica de Proibido Fumar ou Proibido Mergulhar no mundo real;)

No caso do OP, eles estão usando GNOME/Firefox:

EmGnomo, na maioria dos casos, pressionar a tecla Escape antes de soltar o botão do mouse (deveria) cancelar o evento de arrastar/soltar. Faz até parte de suas diretrizes de desenvolvimento:

http://developer.gnome.org/hig-book/3.2/input-mouse.html.en#drag-drop-override

Permitir que todas as operações do mouse sejam canceladas antes de serem concluídas. Pressionar a tecla Esc deve cancelar qualquer operação do mouse em andamento, como arrastar e soltar um arquivo em um gerenciador de arquivos ou desenhar uma forma em um aplicativo de desenho.

e..

Permita que o usuário cancele uma operação de arrastar e soltar por todos estes métodos:

  • pressionando Esc antes de soltar o botão do mouse soltando o objeto
  • de volta ao seu local original, arrastando a consulta e selecionando
  • Cancelar no menu pop-up (veja Seção 10.1.3.1.2 ― Consultar Arrastar)
  • soltar o objeto em um destino de soltar inválido.

Tenho certeza de que é o mesmo no KDE defazendo um pouco pesquisas

No evento Drop do desenvolvedor Mozilla

derrubar O evento drop é acionado no elemento onde ocorreu o drop no final da operação de arrastar. Um ouvinte seria responsável por recuperar os dados que estão sendo arrastados e inseri-los no local de armazenamento. Este evento só será acionado se um drop for desejado. Ele não será acionado se o usuário cancelar a operação de arrastar, por exemplo, pressionando a tecla Escape, ou se o botão do mouse for liberado enquanto o mouse não estiver sobre um destino de soltar válido. Para obter informações sobre isso, consulte Executando um Drop.

Eu nunca disse que isso funcionaria o tempo todo em TODAS as configurações, por exemplo, não acho que isso funcione no Ubuntu, o que é meio chato. Lembro-me do aborto do evento de arrastar trabalhando com a tecla Escape desde então no Wondersversão 3.1.

Em todos os sistemas operacionais MS Windows, em quase todos os aplicativos (adequadamente codificados): - pressionar a tecla Escape antes de soltar o botão do mouse durante um evento de arrastar/soltar do mouse cancelará/abortará a função do manipulador.

Por exemplo, no Google Chrome no Windows7: - arraste uma guia para fora da barra de ferramentas como se fosse desanexá-la e, antes de soltá-la, pressione a tecla Escape do teclado. Deve abortar o arrasto e retornar sua guia.

informação relacionada