Drag-and-Drop aus einem aktiven Programm abbrechen

Drag-and-Drop aus einem aktiven Programm abbrechen

Wenn Folgendes passiert:

  1. Ich starte eine Drag-and-Drop-Operation, ausgehend von der Anwendung ABC.
  2. Anwendung ABC hängt sich (vorübergehend) auf
  3. Ich lasse die Maustaste los

dann habe ich, bis die Anwendung ABC die Verarbeitung abgeschlossen hat, die folgenden Probleme:

  • Andere Programme können den Mauszeiger nicht "greifen"
  • Der Drag-and-Drop-Cursor bleibt aktiv
  • Ich kann nichts anklicken
  • Ich kann das Gnome-Panel oder das GNOME-Menü nicht öffnen
  • Ich kann bestimmte Tasten nicht drücken (einschließlich Leertaste, Eingabetaste, Pfeiltasten)

Natürlich kann ich dann, während ich auf die Fertigstellung der Bewerbung warte, keine andere Arbeit erledigen.

Dies tritt beispielsweise auf, wenn ich etwa 500 Firefox-Tabs geöffnet habe. Beim Ziehen der Tabs friert es manchmal für etwa eine halbe Stunde ein.

Eine Problemumgehung besteht darin, ein Terminal zu verwenden, indem Sie Strg-Alt-F1 drücken, sich anmelden, killall ABCdie fehlerhafte Anwendung mit Ausführen beenden und Strg-Alt-F7 drücken, um zur grafischen Umgebung zurückzukehren. Aber ich möchte ABC lieber nicht beenden, sondern die Verarbeitung zu Ende laufen lassen, während ich meine Maus zurückbekomme.

Also,Ist es möglich, Drag & Drop abzubrechen bzw. den Mauszeiger aus einem aktiven Programm heraus zu lösen?, ohne den Prozess zu beenden?

Antwort1

Tatsächlich ist dies möglich (zumindest mit neueren Versionen von X).

Sie können dies tun, indem Sie die XF86UngrabTaste drücken, die indieses Commit.

Standardmäßig ist dieses Keysym nicht an eine physische Taste oder Tastenkombination gebunden (es wurde 2012 deaktiviert, nachdem es als Sicherheitslücke gemeldet wurde, da es jedem ermöglicht, Sperrbildschirme zu umgehen, indem er deren Griffe durchbricht). Bei einigen anderen Setups ist es an eine Tastenkombination gebunden, die den Ziffernblock verwendet. Das funktioniert natürlich nicht auf Laptops ohne Ziffernblock.

Sie können das Keysym aber trotzdem wie folgt aktivieren xdotool:

setxkbmap -option grab:break_actions
xdotool key XF86Ungrab

Dies funktioniert mit X.org Version 2:1.11.4-0ubuntu10.8 unter Ubuntu Precise.

Antwort2

In den meisten Betriebssystemen oder Fenstersystemen können Sie einen Maus-Drag-Handler abbrechen, indem Sie die Escape-Taste drücken. Und manchmal können Sie den Vorgang abbrechen, indem Sie einenZiel „Ziehen Abbrechen“wie das Hauptmenü von Mac OS. In den meisten Windows-Versionen beispielsweise werden Sie bemerken, dass sich der Cursor in einen Kreis mit einem Strich durch ihn ändert, wie ein klassisches Rauchverbotsschild oder ein Tauchverbotsschild in der realen Welt ;)

Im Fall von OP verwenden sie GNOME/Firefox:

InGnom, in den meisten Fällen wird das Drücken der Escape-Taste vor dem Loslassen der Maustaste das Drag&Drop-Ereignis abbrechen (sollte es). Es ist sogar Teil ihrer Entwicklerrichtlinien:

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

Ermöglicht das Abbrechen aller Mausoperationen vor ihrem Abschluss. Durch Drücken der Esc-Taste können alle laufenden Mausoperationen, wie z. B. das Ziehen und Ablegen einer Datei in einem Dateimanager oder das Zeichnen einer Form in einer Zeichenanwendung, abgebrochen werden.

Und..

Ermöglichen Sie dem Benutzer, einen Drag & Drop-Vorgang mit allen folgenden Methoden abzubrechen:

  • Drücken der Esc-Taste vor dem Loslassen der Maustaste und Ablegen des Objekts
  • Zurück an die ursprüngliche Position durch Ziehen einer Abfrage und Auswählen
  • Abbrechen im Popup-Menü (siehe Abschnitt 10.1.3.1.2 ― Abfrage ziehen)
  • Ablegen des Objekts auf einem ungültigen Ablageziel.

Ich bin sicher, dass es in KDE dasselbe ist.tun ein paar Suchvorgänge

Zum Drop-Event des Mozilla-Entwicklers

fallen Das Drop-Ereignis wird am Ende des Drag-Vorgangs für das Element ausgelöst, bei dem der Drop erfolgte. Ein Listener ist dafür verantwortlich, die gezogenen Daten abzurufen und an der Drop-Position einzufügen. Dieses Ereignis wird nur ausgelöst, wenn ein Drop gewünscht wird. Es wird nicht ausgelöst, wenn der Benutzer den Drag-Vorgang abgebrochen hat, z. B. durch Drücken der Escape-Taste, oder wenn die Maustaste losgelassen wurde, während sich die Maus nicht über einem gültigen Drop-Ziel befand. Informationen hierzu finden Sie unter Durchführen eines Drops.

Ich habe nie gesagt, dass dies in JEDEM Setup immer funktionieren würde. Ich glaube beispielsweise nicht, dass dies unter Ubuntu funktioniert, was ziemlich lahm ist. Ich erinnere mich, dass das Abbrechen des Drag-Events mit der Escape-Taste unter Windows funktionierte.Version 3.1.

In allen MS Windows-Betriebssystemen und in fast allen (ordnungsgemäß codierten) Anwendungen gilt: - Das Drücken der Escape-Taste vor dem Loslassen der Maustaste während eines Drag & Drop-Mausereignisses bricht die Handlerfunktion ab.

Beispielsweise in Google Chrome unter Windows 7: - Ziehen Sie eine Registerkarte aus der Symbolleiste, als ob Sie sie trennen möchten, und drücken Sie vor dem Loslassen die Escape-Taste auf Ihrer Tastatur. Dadurch sollte das Ziehen abgebrochen und Ihre Registerkarte zurückgegeben werden.

verwandte Informationen