當出現以下情況時:
- 我從應用程式 ABC 開始拖放操作。
- 應用程式 ABC 鎖定(暫時)
- 我放開滑鼠按鈕
然後,直到應用程式 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 節 ― 查詢拖曳)
- 將物件放置在無效的放置目標上。
降低 drop 事件在拖曳操作結束時發生放置的元素上觸發。偵聽器將負責檢索被拖曳的資料並將其插入到放置位置。僅當需要掉落時才會觸發此事件。如果使用者取消拖曳操作(例如按 Esc 鍵),或在滑鼠未位於有效放置目標上方時釋放滑鼠按鈕,則不會觸發該操作。有關此信息,請參閱執行刪除。
我從來沒有說過這在每個設定中都可以一直工作,例如我不認為這在 Ubuntu 上工作,這有點蹩腳。我記得自從在 windows 中以來,拖曳事件中止使用 Escape 鍵3.1版。
在所有 MS Windows 作業系統中,幾乎所有(正確編碼的)應用程式中: - 在拖曳/放置滑鼠事件期間釋放滑鼠按鈕之前按下退出鍵將取消/中止處理程序功能。
例如,在 Windows7 上的 Google Chrome 中: - 將標籤拖離工具列,就好像您要將其分開一樣,在放手之前,按鍵盤上的 Esc 鍵。它應該中止拖曳並返回您的選項卡。