Прервать перетаскивание из занятой программы

Прервать перетаскивание из занятой программы

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

  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

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

решение2

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

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

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

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

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

и..

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

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

Я уверен, что то же самое и в KDEделает немного поиски

На мероприятии Mozilla dev's Drop

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

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

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

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

Связанный контент