从繁忙的程序中中止拖放操作

从繁忙的程序中中止拖放操作

当发生以下情况时:

  1. 我开始拖放操作,从应用程序 ABC 开始。
  2. 应用程序 ABC 锁定(暂时)
  3. 我松开鼠标按钮

然后,直到应用程序 ABC 完成处理为止,我遇到以下问题:

  • 其他程序无法“抓取”鼠标指针
  • 拖放光标保持活动状态
  • 我无法点击任何东西
  • 我无法打开 gnome-panel 或 GNOME 菜单
  • 我无法按某些键(包括空格键、回车键、箭头键)

显然,在等待应用程序完成时我无法做其他工作。

发生这种情况的情况是,当我打开了大约 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

在大多数操作系统或窗口系统中,您可以通过按 Esc 按钮来中止鼠标拖动处理程序。有时,您可以通过查找或使用“拖动取消”目标就像 Mac 操作系统的顶部菜单。例如,在大多数 Windows 中,您会注意到光标变为带有线条的圆圈,就像现实世界中经典的“禁止吸烟”标志或“禁止潜水”类型的标志 ;)

对于 OP 来说,他们使用的是 GNOME / Firefox:

侏儒,在大多数情况下,在松开鼠标按钮之前按下 Esc 键将(应该)取消拖放事件。这甚至是他们开发指南的一部分:

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 事件

降低 拖拽操作结束时,放置事件在发生放置的元素上触发。侦听器负责检索被拖拽的数据并将其插入到放置位置。只有需要放置时才会触发此事件。如果用户取消拖拽操作(例如按下 Esc 键),或者在鼠标未位于有效放置目标上时释放鼠标按钮,则不会触发此事件。有关此内容的信息,请参阅执行放置。

我从未说过这在任何设置下都会有效,例如,我不认为这在 Ubuntu 上有效,这有点蹩脚。我记得自从 windows 中以来,拖动事件中止与 Esc 键一起工作版本 3.1

在所有 MS Windows 操作系统中,几乎所有(正确编码的)应用程序: - 在拖放鼠标事件期间按下 Esc 键然后释放鼠标按钮将取消/中止处理程序函数。

例如,在 Windows7 上的 Google Chrome 中:- 将选项卡拖出工具栏,就像要将其分离一样,在松开之前,按下键盘上的 Esc 键。它应该会中止拖动并返回您的选项卡。

相关内容