Cancelar arrastrar y soltar desde un programa ocupado

Cancelar arrastrar y soltar desde un programa ocupado

Cuando sucede lo siguiente:

  1. Inicio una operación de arrastrar y soltar, comenzando desde la aplicación ABC.
  2. La aplicación ABC se bloquea (temporalmente)
  3. suelto el boton del raton

Luego, hasta que la aplicación ABC termine de procesarse, tengo los siguientes problemas:

  • Otros programas no pueden "agarrar" el puntero del mouse
  • El cursor de arrastrar y soltar permanece activo
  • no puedo hacer clic en nada
  • No puedo abrir el panel de gnome o el menú de GNOME
  • No puedo presionar ciertas teclas (incluyendo espacio, enter, teclas de flecha)

Obviamente, entonces no puedo hacer otro trabajo mientras espero que finalice la solicitud.

Una situación en la que esto ocurre es cuando tengo ~500 pestañas de Firefox abiertas, cuando arrastro pestañas a veces se congela durante aproximadamente media hora.

Una solución alternativa es utilizar una terminal presionando Ctrl-Alt-F1, iniciar sesión, ejecutar killall ABCpara eliminar la aplicación infractora y presionar Ctrl-Alt-F7 para volver al entorno gráfico. Pero preferiría no tener que matar ABC, sino dejar que termine de procesarse y recuperar mi mouse.

Entonces,¿Es posible cancelar por la fuerza arrastrar y soltar / quitar el puntero del mouse de un programa ocupado?, sin matar el proceso?

Respuesta1

De hecho, es posible hacer esto (al menos con versiones recientes de X).

Puedes hacerlo pulsando la XF86Ungrabtecla, introducida eneste compromiso.

De forma predeterminada, este símbolo de clave no está vinculado a ninguna clave física o combinación de teclas (se deshabilitó en 2012 después de que se informara como un agujero de seguridad, ya que permite a cualquiera eludir las pantallas de bloqueo rompiendo sus agarres). En algunas otras configuraciones, está vinculado a un acceso directo que utiliza el teclado numérico. Obviamente, eso no funcionará en computadoras portátiles que carecen de teclado.

Pero aún puedes activar el keyym usando xdotool:

setxkbmap -option grab:break_actions
xdotool key XF86Ungrab

Esto funciona con X.org versión 2:1.11.4-0ubuntu10.8 en Ubuntu Precise.

Respuesta2

En la mayoría de los sistemas operativos o sistemas de ventanas, puede cancelar un controlador de arrastre del mouse presionando el botón Escape. Y a veces puedes cancelar el par buscando o usando unObjetivo "arrastrar cancelar"como el menú superior de Mac os. Por ejemplo, en la mayoría de Windows, notará que el cursor cambia a un círculo con una línea que lo atraviesa, como un letrero clásico de No fumar o de No bucear en el mundo real;)

En el caso de OP, están usando GNOME/Firefox:

EnGnomo, en la mayoría de los casos, presionar la tecla Escape antes de soltar el botón del mouse cancelará (debería) el evento de arrastrar/soltar. Incluso es parte de sus pautas de desarrollo:

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

Permita que todas las operaciones del mouse se cancelen antes de que se completen. Al presionar la tecla Esc se debe cancelar cualquier operación del mouse en curso, como arrastrar y soltar un archivo en un administrador de archivos o dibujar una forma en una aplicación de dibujo.

y..

Permita al usuario cancelar una operación de arrastrar y soltar mediante todos estos métodos:

  • presionando Esc antes de soltar el botón del mouse y soltar el objeto
  • de nuevo en su ubicación original realizando una consulta, arrastrando y seleccionando
  • Cancelar en el menú emergente (consulte la Sección 10.1.3.1.2: Arrastre de consultas)
  • dejar caer el objeto en un objetivo de caída no válido.

Estoy seguro de que es lo mismo en KDE desdehaciendo algunos búsquedas

Sobre el evento de lanzamiento del desarrollador de Mozilla

gota El evento de caída se activa en el elemento donde se produjo la caída al final de la operación de arrastre. Un oyente sería responsable de recuperar los datos que se arrastran e insertarlos en la ubicación de colocación. Este evento solo se activará si se desea una caída. No se activará si el usuario canceló la operación de arrastre, por ejemplo, presionando la tecla Escape, o si se soltó el botón del mouse mientras el mouse no estaba sobre un objetivo de colocación válido. Para obtener información sobre esto, consulte Realizar una caída.

Nunca dije que esto funcionaría todo el tiempo en CADA configuración, por ejemplo, no creo que esto funcione en Ubuntu, lo cual es un poco aburrido. Recuerdo que el evento de arrastre abortó trabajando con la tecla Escape desde en Windows desdeversión 3.1.

En todos los sistemas operativos MS Windows en casi todas las aplicaciones (codificadas correctamente): - presionar la tecla Escape antes de soltar el botón del mouse durante un evento de arrastrar/soltar cancelará/abortará la función del controlador.

Por ejemplo, en Google Chrome en Windows7: - arrastre una pestaña fuera de la barra de herramientas como si fuera a separarla y antes de soltarla, presione la tecla Escape del teclado. Debería cancelar el arrastre y devolver la pestaña.

información relacionada