中止繁忙程序中的拖曳操作

中止繁忙程序中的拖曳操作

當出現以下情況時:

  1. 我從應用程式 ABC 開始拖放操作。
  2. 應用程式 ABC 鎖定(暫時)
  3. 我放開滑鼠按鈕

然後,直到應用程式 ABC 完成處理,我遇到以下問題:

  • 其他程式無法「抓住」滑鼠指針
  • 拖放遊標保持活動狀態
  • 我無法點擊任何東西
  • 我無法打開 gnome 面板或 GNOME 選單
  • 我無法按某些鍵(包括空白鍵、Enter 鍵、箭頭鍵)

顯然,在等待應用程式完成時我不能做其他工作。

發生這種情況的情況是,當我打開大約 500 個 Firefox 選項卡時,拖曳選項卡時有時會凍結半小時左右。

解決方法是按 Ctrl-Alt-F1 使用終端,登錄,運行killall ABC以終止有問題的應用程序,然後按 Ctrl-Alt-F7 返回圖形環境。但我寧願不必殺死 ABC,而是讓它完成處理,同時拿回我的滑鼠。

所以,是否可以強制中止拖放/從繁忙的程式中取消抓取滑鼠指標,而不殺死進程?

答案1

事實上,可以做到這一點(至少對於最新版本的 X)。

您可以按XF86Ungrab中介紹的鍵來執行此操作這次提交

預設情況下,這個鍵符不綁定到任何實體鍵或鍵組合(它在 2012 年被報告為安全漏洞後被禁用,因為它允許任何人透過破壞他們的抓取來繞過鎖定螢幕)。在某些其他設定中,它綁定到使用數字鍵盤的快捷方式。顯然,這不適用於沒有鍵盤的筆記型電腦。

但您仍然可以使用以下命令啟動鍵盤符號xdotool

setxkbmap -option grab:break_actions
xdotool key XF86Ungrab

這適用於 Ubuntu Precise 上的 X.org 版本 2:1.11.4-0ubuntu10.8。

答案2

在大多數作業系統或視窗系統中,您可以按下 Escape 按鈕中止滑鼠拖曳處理程序。有時您可以透過尋找或使用「拖曳取消」目標就像 Mac os 的頂部選單一樣。例如,在大多數 Windows 中,您會注意到遊標變為帶有線的圓圈,就像現實世界中經典的禁止吸煙標誌或禁止潛水類型的標誌;)

就 OP 而言,他們使用的是 GNOME / Firefox:

侏儒,在大多數情況下,在放開滑鼠按鈕之前按下退出鍵將(應該)取消拖曳/放事件。這甚至是他們開髮指南的一部分:

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

允許所有滑鼠操作在完成之前取消。按 Esc 鍵應取消正在進行的任何滑鼠操作,例如在檔案管理器中拖放文件,或在繪圖應用程式中繪製形狀。

和..

允許使用者透過所有這些方法取消拖放操作:

  • 在釋放滑鼠按鈕放下物件之前按 Esc 鍵
  • 返回其原始位置執行查詢拖曳並選擇
  • 在彈出式選單上取消(請參閱第 10.1.3.1.2 節 ― 查詢拖曳)
  • 將物件放置在無效的放置目標上。

我確信 KDE 中的情況是一樣的正在做 一些 搜尋

關於 Mozilla 開發者的 Drop 事件

降低 drop 事件在拖曳操作結束時發生放置的元素上觸發。偵聽器將負責檢索被拖曳的資料並將其插入到放置位置。僅當需要掉落時才會觸發此事件。如果使用者取消拖曳操作(例如按 Esc 鍵),或在滑鼠未位於有效放置目標上方時釋放滑鼠按鈕,則不會觸發該操作。有關此信息,請參閱執行刪除。

我從來沒有說過這在每個設定中都可以一直工作,例如我不認為這在 Ubuntu 上工作,這有點蹩腳。我記得自從在 windows 中以來,拖曳事件中止使用 Escape 鍵3.1版

在所有 MS Windows 作業系統中,幾乎所有(正確編碼的)應用程式中: - 在拖曳/放置滑鼠事件期間釋放滑鼠按鈕之前按下退出鍵將取消/中止處理程序功能。

例如,在 Windows7 上的 Google Chrome 中: - 將標籤拖離工具列,就好像您要將其分開一樣,在放手之前,按鍵盤上的 Esc 鍵。它應該中止拖曳並返回您的選項卡。

相關內容