Область действия и правила отката
На этой странице точно описано, как Input.Observer выбирает действие для жеста: какое окно берётся в расчёт, какая группа им владеет, когда вмешивается группа Глобальная и какое действие побеждает, если выполниться могут несколько. Горячие клавиши и подстановка текста следуют тем же правилам групп; различия перечислены в конце.
Термины
- Область действия: группа приложений, действия которой пробуются для жеста. У жеста одна область действия плюс глобальная группа как возможный откат.
- Группа-владелец: единственная группа приложений, к которой относится окно. См. Группы приложений.
- Резервный переход к глобальной группе: попытка действий глобальной группы, когда у группы-владельца
ничего нет. Им управляют два переключателя, и включены должны быть оба:
- Резервный переход к глобальной группе на странице Общие, карточка Когда жест распознан: для всех групп сразу (по умолчанию включён);
- Резервный переход к глобальной группе на карточке Что происходит в этих окнах каждой группы приложений: для этой группы (по умолчанию включён).
Окно, которое берётся в расчёт
Для жеста в расчёт берётся окно верхнего уровня под указателем в момент нажатия кнопки рисования:
- Куда штрих идёт потом, не важно. Штрих, начатый над Блокнотом и законченный над браузером, — жест Блокнота.
- Элемент управления внутри окна (текстовое поле, страница браузера) считается всем окном своей программы.
- Группа-владелец, проверка профиля и ячейка области определяются один раз, при нажатии. Заголовок окна, изменившийся во время рисования, или смена профиля во время жеста не меняют исход этого жеста.
Решение по шагам
При нажатии
-
Поиск группы-владельца. Группы проверяются в таком порядке до первой, правила которой соответствуют окну:
- все группы игнорирования сверху вниз на странице Группы игнорирования;
- все группы приложений сверху вниз на странице Группы приложений.
Пропускаются, как будто их нет: группа без Включено, группа без правил и группа игнорирования с параметром Только когда окно в полноэкранном режиме, окно которой сейчас не в полноэкранном режиме.
-
Окном владеет группа игнорирования: нажатие проходит насквозь. Больше ничего не проверяется: ни отката к глобальной группе, ни жеста, и для этого окна не выполняются ни горячие клавиши, ни подстановка текста. См. Группы игнорирования.
-
Окном владеет группа приложений: её область действия — эта группа, если включено Жесты работают здесь и группа действует в активном профиле (см. Профили). Иначе область действия — глобальная группа, но только если включены оба переключателя Резервный переход к глобальной группе; в противном случае нажатие проходит насквозь.
-
Окном не владеет ни одна группа: область действия — глобальная группа. Переключатели Резервный переход к глобальной группе здесь не важны: глобальная — собственная группа этого окна.
-
Глобальная как область действия работает, только если она Включено, у неё включено Жесты работают здесь и она действует в активном профиле. Иначе нажатие проходит насквозь.
-
Проверяются зоны исключения — для всех окон и для группы области действия. Нажатие внутри зоны возвращается окну. См. Зоны исключения.
-
Начинается захват. Ячейка области вычисляется сейчас — для группы области действия и отдельно для глобальной (см. Области).
Нажатие, прошедшее насквозь на шагах 2–6, передаётся дальше без изменений и без задержки, и след не рисуется.
При отпускании
-
Фигура. Штрих оценивается относительно фигур, которые используют триггеры группы области действия, а также глобальной группы, если группа области действия может откатываться. Побеждает лучшая оценка не ниже порога совпадения; иначе совпадения нет. См. Как сопоставляется штрих.
-
Действия группы области действия. Действия просматриваются в порядке списка, а триггеры каждого действия — по порядку. Триггер подходит, когда:
- это триггер-жест для победившей фигуры;
- его действие включено;
- его действие действует в активном профиле;
- нажатые модификаторы в точности совпадают с теми, которые он требует (см. Модификаторы и время нажатия);
- он принимает использованную кнопку рисования;
- если у группы включены области, он охватывает ячейку области, в которой было нажатие.
Если области выключены, побеждает первый подходящий триггер. Если включены, побеждает подходящий триггер с наименьшим числом ячеек, а среди равных — первый.
-
Резервный переход к глобальной группе — если на шаге 9 ничего не подошло и выполняется всё следующее: группа области действия не является глобальной, оба переключателя Резервный переход к глобальной группе включены, а глобальная группа включена, у неё включено Жесты работают здесь и она действует в активном профиле. Тогда действия глобальной группы проверяются точно так же, как на шаге 9, с собственной ячейкой области глобальной группы.
-
Выполнение победившего действия внутри действий «до» и «после» совпавшей группы. См. Действия «до» и «после».
-
Ничего не подошло: ничего не выполняется, нажатие не возвращается, а глобальное событие Нет совпадений выполняется, если вы его настроили.
Что побеждает, по порядку
| Вопрос | Правило |
|---|---|
| Окну соответствуют правила двух групп | Группа игнорирования побеждает любую группу приложений; в остальных случаях — та, что выше в своём списке. Окном всегда владеет только одна группа. |
| У группы-владельца нет действия для жеста | Действия глобальной группы, если откат разрешён. Никогда — группы приложений ниже. |
| Подходят и действие группы приложений, и глобальное действие | Всегда действие группы приложений, независимо от модификаторов, кнопок и областей. |
| Две фигуры получают оценку выше порога | Та, у которой оценка выше. |
| Подходят два действия одной группы (области выключены) | То, что выше в списке действий группы. |
| Подходят два действия одной группы (области включены) | То, чей триггер охватывает меньше ячеек; при равенстве — то, что выше в списке. |
| Подходят два триггера одного действия | Области выключены: первый триггер. Области включены: тот, что охватывает меньше ячеек; при равенстве — первый. В любом случае выполняется одно и то же действие, но применяются собственные параметры выбранного триггера, например Удерживаемые модификаторы. |
| Простой триггер и триггер, требующий Shift, для одной фигуры | Подойти может только один: простому во время жеста не нужен никакой модификатор, другому нужен Shift. |
Порядок действий меняется на странице Действия (Вверх и Вниз), а порядок групп приложений — на странице Группы приложений. Страница Группы приложений и редактор действий предупреждают, когда один триггер всегда скрывает другой.
Откат вкратце
| Ситуация | Без отката | С откатом (оба переключателя включены) |
|---|---|---|
| Окном не владеет ни одна группа | Глобальная | Глобальная |
| У группы-владельца выключено Жесты работают здесь | Нажатие проходит насквозь | Глобальная |
| Группа-владелец не действует в активном профиле | Нажатие проходит насквозь | Глобальная |
| У группы-владельца нет действия для штриха | Нет совпадений | Пробуются действия глобальной группы |
| Окном владеет группа игнорирования | Нажатие проходит насквозь | Нажатие проходит насквозь |
| Группа-владелец выключена (Включено выключено) | Окно сопоставляется с группами ниже, как будто этой группы нет | То же |
| Глобальная группа выключена | Нигде, где использовалась бы глобальная группа, ничего не выполняется | То же |
Пункт меню трея Глобальные действия — это переключатель Включено глобальной группы. Пока группа окна в фокусе не откатывается к глобальной, всплывающая подсказка значка в трее сообщает об этом и называет группу. См. Значок в трее.
Разобранные примеры
В примерах используется такая настройка:
| Список | Группа | Правила | Действия |
|---|---|---|---|
| Группы игнорирования | Удалённый рабочий стол | Имя программы точно равно mstsc.exe | нет |
| Группы приложений, 1-я | Браузеры | Имя программы точно равно chrome.exe | «Назад» на «Смахивание влево»; «Закрыть вкладку» на «Смахивание вниз» |
| Группы приложений, 2-я | Текстовые файлы | Заголовок окна заканчивается на .txt - Блокнот | «Сохранить» на «Смахивание вниз» |
| Группы приложений, 3-я | Блокнот | Имя программы точно равно notepad.exe | «Отменить» на «Смахивание влево» |
| — | Глобальная | нет | «Свернуть» на «Смахивание вниз»; «Развернуть» на «Смахивание вверх» |
Оба переключателя Резервный переход к глобальной группе включены, если в примере не сказано иное.
1. Фигура, которая есть у группы. Вы рисуете «Смахивание вниз» над Chrome. Группа «Браузеры» владеет Chrome, и у неё есть «Закрыть вкладку» на «Смахивание вниз», поэтому выполняется «Закрыть вкладку». Глобальное «Свернуть» на ту же фигуру не получает шанса: группа-владелец всегда побеждает.
2. Фигура, которая есть только у глобальной группы. Вы рисуете «Смахивание вверх» над Chrome. У «Браузеров» нет ничего для этой фигуры, поэтому жест откатывается к глобальной группе и выполняется «Развернуть» — в обрамлении действий «до» и «после» глобальной группы, а не «Браузеров».
3. Откат выключен. Выключите Резервный переход к глобальной группе у «Браузеров» и нарисуйте «Смахивание вверх» над Chrome. Фигуры глобальной группы больше не соревнуются, поэтому штрих сравнивается только со «Смахиванием влево» и «Смахиванием вниз». Если ни одна не достигает порога, совпадения нет и выполняется событие Нет совпадений. Если одна достигает (у небрежного штриха это возможно), выполняется её действие. Щелчок правой кнопкой в любом случае не возвращается.
4. Совпадают две группы; считается только первая. В Блокноте открыт файл notes.txt, поэтому его
заголовок — «notes.txt - Блокнот». Ему соответствуют и «Текстовые файлы», и «Блокнот»; «Текстовые файлы»
выше, поэтому владеют окном. Вы рисуете «Смахивание влево»: ни «Текстовые файлы», ни глобальная группа эту
фигуру не используют, поэтому её даже нет среди сравниваемых фигур, и совпадения нет. «Отменить» из группы
«Блокнот» для этого окна никогда не выполняется, потому что окно никогда не переходит к группе приложений
ниже. Чтобы получить здесь «Отменить», добавьте его в «Текстовые файлы» или переместите «Блокнот» выше
«Текстовых файлов».
5. Группа игнорирования. Вы рисуете над окном удалённого рабочего стола. Им владеет группа игнорирования, поэтому нажатие уходит прямо на удалённый компьютер: ни следа, ни глобальной группы. Пока это окно в фокусе, не выполняются ни действия горячих клавиш, ни подстановка текста.
6. Выключенная группа и группа с выключенными жестами. Выключите Включено у «Текстовых файлов» и нарисуйте «Смахивание влево» над «notes.txt - Блокнот»: теперь окном владеет «Блокнот», и выполняется «Отменить». Снова включите «Текстовые файлы», но выключите у них Жесты работают здесь: «Текстовые файлы» снова владеют окном, поэтому до «Блокнота» дело не доходит; жест уходит к глобальной группе, которая не использует «Смахивание влево», и ничего не выполняется.
7. Профили. Ограничьте «Браузеры» профилем «Работа» и не делайте активным ни один профиль. «Браузеры» по-прежнему владеют Chrome, но не действуют, поэтому жест над Chrome уходит к глобальной группе: «Смахивание вниз» выполняет «Свернуть», а не «Закрыть вкладку». Если у «Браузеров» выключен Резервный переход к глобальной группе, нажатие вместо этого проходит насквозь, а страница предупреждает Вне своих профилей её окна ничего не получают.
Горячие клавиши и подстановка текста
Горячие клавиши и подстановка текста используют те же группы игнорирования, порядок групп, переключатели Включено, профили, переключатели Резервный переход к глобальной группе, глобальную группу и действия «до» и «после». Отличается следующее:
| Жесты | Горячие клавиши | Подстановка текста | |
|---|---|---|---|
| Окно, которое берётся в расчёт | Окно верхнего уровня под указателем при нажатии | Окно в фокусе при нажатии клавиш | Окно в фокусе, когда вы заканчиваете ввод текста |
| Переключатель группы | Жесты работают здесь | Горячие клавиши работают здесь | нет (на странице Подстановка текста один переключатель для всего) |
| Области, кнопка рисования | Да | Нет | Нет |
| Когда определяется группа | Один раз, при нажатии | При каждом нажатии клавиш | При каждой подстановке |
Об остальных особенностях каждого из них см. Горячие клавиши и Подстановка текста.