7

Когда происходит следующее:

  1. Я запускаю операцию перетаскивания, начиная с приложения ABC.
  2. Приложение ABC блокируется (временно)
  3. Я отпускаю кнопку мыши

затем, пока приложение ABC не закончит обработку, у меня возникнут следующие проблемы:

  • Другие программы не могут "схватить" указатель мыши
  • Курсор перетаскивания остается активным
  • Я не могу ничего нажать
  • Я не могу открыть панель gnome или меню GNOME
  • Я не могу нажимать определенные клавиши (включая пробел, ввод, клавиши со стрелками)

Очевидно, что тогда я не могу выполнять другую работу в ожидании завершения приложения.

Ситуация, когда это происходит, когда у меня открыто ~ 500 вкладок Firefox, при перетаскивании вкладок иногда зависает на полчаса или около того.

Обходной путь - использовать терминал, нажав Ctrl-Alt-F1, войдите в систему, запустите killall ABC чтобы завершить работу приложения-нарушителя, и нажмите Ctrl-Alt-F7, чтобы вернуться в графическое окружение. Но я бы предпочел не убивать ABC, а дать ему закончить обработку и вернуть мою мышь обратно.

Итак, возможно ли принудительно прервать перетаскивание / отсоединение / отсоединение указателя мыши из занятой программы, не прерывая процесс?

2 ответа2

5

Фактически, это возможно (по крайней мере, в последних версиях X).

Вы можете сделать это, нажав клавишу XF86Ungrab , введенную в этом коммите .

По умолчанию этот ключ не привязан ни к какому физическому ключу или комбинации клавиш (он был отключен в 2012 году после того, как о нем сообщили как о дыре в безопасности, поскольку он позволяет любому обходить экраны блокировки, ломая их захваты). На некоторых других установках это связано с ярлыком, который использует цифровую клавиатуру. Очевидно, что это не будет работать на ноутбуках, у которых нет клавиатуры.

Но вы все равно можете активировать keysym с помощью xdotool:

setxkbmap -option grab:break_actions
xdotool key XF86Ungrab

Это работает с X.org версии 2:1.11.4-0ubuntu10.8 в Ubuntu Precise.

1

В большинстве операционных систем или оконных систем вы можете прервать обработчик перетаскивания мышью, нажав кнопку Escape. И иногда вы можете отменить даже, найдя или используя цель "перетаскивания", как в главном меню Mac OS. Например, в большинстве Windows вы заметите изменения курсора на кружок со строкой через него, как в классическом знаке "Не курить" или "Не дайвинг" в реальном мире;)

В случае OP они используют GNOME / Firefox:

В Gnome, в большинстве случаев нажатие клавиши escape перед отпуском кнопки мыши отменяет событие перетаскивания. Это даже часть их принципов разработки:

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

Разрешить отменять все операции с мышью до их завершения. Нажатие клавиши Esc должно отменить любую выполняемую операцию мыши, такую как перетаскивание файла в файловом менеджере или рисование фигуры в приложении для рисования.

а также..

Разрешить пользователю отменить операцию перетаскивания всеми этими методами:

  • нажав клавишу Esc, прежде чем отпустить кнопку мыши, уронив объект
  • вернуться в исходное положение, выполнив перетаскивание запроса и выбрав
  • Отмена во всплывающем меню (см. Раздел 10.1.3.1.2 - Перетаскивание запроса)
  • падение объекта на недопустимую цель сброса.

Я уверен , что это то же самое в KDE от делать несколько запросов

На событии Drop of Mozilla dev

drop Событие drop вызывается для элемента, где произошло падение в конце операции перетаскивания. Слушатель будет отвечать за извлечение перетаскиваемых данных и вставку их в место отбрасывания. Это событие будет срабатывать только при желании сброса. Он не будет срабатывать, если пользователь отменил операцию перетаскивания, например, нажатием клавиши Escape, или если кнопка мыши была отпущена, когда мышь не находилась над допустимой целью перетаскивания. Для получения информации об этом см. Выполнение отбрасывания.

Я никогда не говорил, что это будет работать все время в КАЖДОЙ настройке, например, я не думаю, что это работает на Ubuntu, который отчасти хромает. Я помню, как событие перетаскивания прервало работу с клавишей Escape, так как в Windows начиная с версии 3.1.

Во всех операционных системах MS Windows практически во всех (правильно закодированных) приложениях:- нажатие клавиши escape перед отпусканием кнопки мыши во время события перетаскивания мыши приведет к отмене / отмене функции обработчика.

Например, в Google Chrome на Windows7:- перетащите вкладку с панели инструментов, как будто вы собираетесь отсоединить ее, и, прежде чем отпустить, нажмите клавишу Escape на клавиатуре. Следует прервать перетаскивание и вернуть вкладку.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .