Перейти к основному содержимому

Область действия и правила отката

На этой странице точно описано, как Input.Observer выбирает действие для жеста: какое окно берётся в расчёт, какая группа им владеет, когда вмешивается группа Глобальная и какое действие побеждает, если выполниться могут несколько. Горячие клавиши и подстановка текста следуют тем же правилам групп; различия перечислены в конце.

Термины​

  • Область действия: группа приложений, действия которой пробуются для жеста. У жеста одна область действия плюс глобальная группа как возможный откат.
  • Группа-владелец: единственная группа приложений, к которой относится окно. См. Группы приложений.
  • Резервный переход к глобальной группе: попытка действий глобальной группы, когда у группы-владельца ничего нет. Им управляют два переключателя, и включены должны быть оба:
    • Резервный переход к глобальной группе на странице Общие, карточка Когда жест распознан: для всех групп сразу (по умолчанию включён);
    • Резервный переход к глобальной группе на карточке Что происходит в этих окнах каждой группы приложений: для этой группы (по умолчанию включён).

Окно, которое берётся в расчёт​

Для жеста в расчёт берётся окно верхнего уровня под указателем в момент нажатия кнопки рисования:

  • Куда штрих идёт потом, не важно. Штрих, начатый над Блокнотом и законченный над браузером, — жест Блокнота.
  • Элемент управления внутри окна (текстовое поле, страница браузера) считается всем окном своей программы.
  • Группа-владелец, проверка профиля и ячейка области определяются один раз, при нажатии. Заголовок окна, изменившийся во время рисования, или смена профиля во время жеста не меняют исход этого жеста.

Решение по шагам​

При нажатии​

  1. Поиск группы-владельца. Группы проверяются в таком порядке до первой, правила которой соответствуют окну:

    1. все группы игнорирования сверху вниз на странице Группы игнорирования;
    2. все группы приложений сверху вниз на странице Группы приложений.

    Пропускаются, как будто их нет: группа без Включено, группа без правил и группа игнорирования с параметром Только когда окно в полноэкранном режиме, окно которой сейчас не в полноэкранном режиме.

  2. Окном владеет группа игнорирования: нажатие проходит насквозь. Больше ничего не проверяется: ни отката к глобальной группе, ни жеста, и для этого окна не выполняются ни горячие клавиши, ни подстановка текста. См. Группы игнорирования.

  3. Окном владеет группа приложений: её область действия — эта группа, если включено Жесты работают здесь и группа действует в активном профиле (см. Профили). Иначе область действия — глобальная группа, но только если включены оба переключателя Резервный переход к глобальной группе; в противном случае нажатие проходит насквозь.

  4. Окном не владеет ни одна группа: область действия — глобальная группа. Переключатели Резервный переход к глобальной группе здесь не важны: глобальная — собственная группа этого окна.

  5. Глобальная как область действия работает, только если она Включено, у неё включено Жесты работают здесь и она действует в активном профиле. Иначе нажатие проходит насквозь.

  6. Проверяются зоны исключения — для всех окон и для группы области действия. Нажатие внутри зоны возвращается окну. См. Зоны исключения.

  7. Начинается захват. Ячейка области вычисляется сейчас — для группы области действия и отдельно для глобальной (см. Области).

Нажатие, прошедшее насквозь на шагах 2–6, передаётся дальше без изменений и без задержки, и след не рисуется.

При отпускании​

  1. Фигура. Штрих оценивается относительно фигур, которые используют триггеры группы области действия, а также глобальной группы, если группа области действия может откатываться. Побеждает лучшая оценка не ниже порога совпадения; иначе совпадения нет. См. Как сопоставляется штрих.

  2. Действия группы области действия. Действия просматриваются в порядке списка, а триггеры каждого действия — по порядку. Триггер подходит, когда:

    • это триггер-жест для победившей фигуры;
    • его действие включено;
    • его действие действует в активном профиле;
    • нажатые модификаторы в точности совпадают с теми, которые он требует (см. Модификаторы и время нажатия);
    • он принимает использованную кнопку рисования;
    • если у группы включены области, он охватывает ячейку области, в которой было нажатие.

    Если области выключены, побеждает первый подходящий триггер. Если включены, побеждает подходящий триггер с наименьшим числом ячеек, а среди равных — первый.

  3. Резервный переход к глобальной группе — если на шаге 9 ничего не подошло и выполняется всё следующее: группа области действия не является глобальной, оба переключателя Резервный переход к глобальной группе включены, а глобальная группа включена, у неё включено Жесты работают здесь и она действует в активном профиле. Тогда действия глобальной группы проверяются точно так же, как на шаге 9, с собственной ячейкой области глобальной группы.

  4. Выполнение победившего действия внутри действий «до» и «после» совпавшей группы. См. Действия «до» и «после».

  5. Ничего не подошло: ничего не выполняется, нажатие не возвращается, а глобальное событие Нет совпадений выполняется, если вы его настроили.

Что побеждает, по порядку​

ВопросПравило
Окну соответствуют правила двух группГруппа игнорирования побеждает любую группу приложений; в остальных случаях — та, что выше в своём списке. Окном всегда владеет только одна группа.
У группы-владельца нет действия для жестаДействия глобальной группы, если откат разрешён. Никогда — группы приложений ниже.
Подходят и действие группы приложений, и глобальное действиеВсегда действие группы приложений, независимо от модификаторов, кнопок и областей.
Две фигуры получают оценку выше порогаТа, у которой оценка выше.
Подходят два действия одной группы (области выключены)То, что выше в списке действий группы.
Подходят два действия одной группы (области включены)То, чей триггер охватывает меньше ячеек; при равенстве — то, что выше в списке.
Подходят два триггера одного действияОбласти выключены: первый триггер. Области включены: тот, что охватывает меньше ячеек; при равенстве — первый. В любом случае выполняется одно и то же действие, но применяются собственные параметры выбранного триггера, например Удерживаемые модификаторы.
Простой триггер и триггер, требующий 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 уходит к глобальной группе: «Смахивание вниз» выполняет «Свернуть», а не «Закрыть вкладку». Если у «Браузеров» выключен Резервный переход к глобальной группе, нажатие вместо этого проходит насквозь, а страница предупреждает Вне своих профилей её окна ничего не получают.

Горячие клавиши и подстановка текста​

Горячие клавиши и подстановка текста используют те же группы игнорирования, порядок групп, переключатели Включено, профили, переключатели Резервный переход к глобальной группе, глобальную группу и действия «до» и «после». Отличается следующее:

ЖестыГорячие клавишиПодстановка текста
Окно, которое берётся в расчётОкно верхнего уровня под указателем при нажатииОкно в фокусе при нажатии клавишОкно в фокусе, когда вы заканчиваете ввод текста
Переключатель группыЖесты работают здесьГорячие клавиши работают здесьнет (на странице Подстановка текста один переключатель для всего)
Области, кнопка рисованияДаНетНет
Когда определяется группаОдин раз, при нажатииПри каждом нажатии клавишПри каждой подстановке

Об остальных особенностях каждого из них см. Горячие клавиши и Подстановка текста.