2018-02-05 17:22:04 +03:00
|
|
|
|
<!DOCTYPE html PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
<html>
|
|
|
|
|
<head>
|
|
|
|
|
<title>grab</title>
|
|
|
|
|
</head>
|
|
|
|
|
<body>
|
|
|
|
|
|
|
|
|
|
<h1>grab</h1>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<p>Направляет события, исходящие из клавиатуры и указателя
|
|
|
|
|
"Мыши" в модальное окно и его поддерево.</p>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<h2><a name=СИНТАКСИС></a>СИНТАКСИС</h2>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
|
|
|
|
<pre>
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<strong>grab ?-global?</strong> <em>окно</em>
|
|
|
|
|
<strong>grab</strong> <em>параметр</em> ?<em>арг арг</em>...?
|
2015-10-19 13:27:31 +03:00
|
|
|
|
</pre>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<h2><a name=ОПИСАНИЕ></a>ОПИСАНИЕ</h2>
|
|
|
|
|
|
|
|
|
|
<p>Команда реализует простые перехватчики событий ввода с
|
|
|
|
|
клавиатуры и "Мыши". Перехватчики Tk отличаются от
|
|
|
|
|
перехватчиков, описанных в документации Xlib. Когда для
|
|
|
|
|
некоторого окна задан перехватчик, Tk ограничивает все события,
|
|
|
|
|
исходящие от курсора, границами модального окна и его потомков в
|
|
|
|
|
иерархии окон Tk. Если курсор находится в пределах поддерева
|
|
|
|
|
модального окна, то курсор будет вести себя так, будто нет
|
|
|
|
|
никакого перехватчика вообще. Если курсор находится вне
|
|
|
|
|
поддерева модального окна, то события нажатия и освобождения
|
|
|
|
|
кнопок "Мыши" будут передаваться в <em> окно</em>, а
|
|
|
|
|
события входа в окно и выхода из окна будут
|
|
|
|
|
игнорироваться. Поддерево окон перехватчика "владеет"
|
|
|
|
|
курсором: прочие окна будут видны на экране, но будут
|
|
|
|
|
нечувствительны к нажатиям кнопок "Мыши" до тех пор,
|
|
|
|
|
пока не будет прекращен перехват. В поддерево модального окна
|
|
|
|
|
могут входить окна верхнего уровня; в этом случае все эти окна
|
|
|
|
|
верхнего уровня и их потомки обрабатывают события курсора
|
|
|
|
|
"Мыши" при перехвате обычным образом.</p>
|
|
|
|
|
|
|
|
|
|
<p>С помощью команды <strong>grab</strong> можно запустить или
|
|
|
|
|
прекратить перехват для указанного окна и получить сведения об
|
|
|
|
|
установленном для указанного окна перехватчике.</p>
|
|
|
|
|
|
|
|
|
|
<p>Есть два типа перехватчиков: локальные и глобальные. Локальный
|
|
|
|
|
перехватчик влияет только на перехватывающее приложение, остальные
|
|
|
|
|
приложения ведут себя таким образом, как если бы никакого перехвата
|
|
|
|
|
не было. По умолчанию перехватчики локальные. Глобальный
|
|
|
|
|
перехватчик блокирует все приложения на экране; чувствительность к
|
|
|
|
|
событиям указателя (нажатия и отпускания клавиши "Мыши",
|
|
|
|
|
движения указателя, входы в окно и выходы из него) сохраняют только
|
|
|
|
|
окна поддерева модального окна. При действии глобального
|
|
|
|
|
перехватчика менеджер окон также нечувствителен к событиям
|
|
|
|
|
указателя.</p>
|
|
|
|
|
|
|
|
|
|
<p>При действии локальных перехватчиков события клавиатуры
|
|
|
|
|
(нажатие и отпускание клавиш) передаются обычным образом:
|
|
|
|
|
менеджер окон следит за тем, какое из приложений получает
|
|
|
|
|
событие клавиатуры, и всякое такое событие, относящееся к
|
|
|
|
|
перехватывающему приложению, перенаправляется в окно в
|
|
|
|
|
фокусе. При действии глобального перехватчика Tk перенаправляет
|
|
|
|
|
все события клавиатуры в перехватывающее приложение. Какое окно
|
|
|
|
|
приложения получает событие клавиатуры, по-прежнему определяется
|
|
|
|
|
командой <a href=
|
|
|
|
|
tk.html#focus><strong>focus</strong></a>. Перехват событий
|
|
|
|
|
клавиатуры отменяется при прекращении действия перехватчика.</p>
|
|
|
|
|
|
|
|
|
|
<p>Перехватчики применяются к конкретным дисплеям. Если у
|
|
|
|
|
приложения есть окна на различных дисплеях, то оно может запустить
|
|
|
|
|
отдельный перехватчик на каждом дисплее. Перехватчик на конкретном
|
|
|
|
|
дисплее воздействует только на окно на этом дисплее. Несколько
|
|
|
|
|
приложений могут запустить на одном дисплее локальные перехватчики,
|
|
|
|
|
но глобальный перехватчик на дисплее может быть только один.</p>
|
|
|
|
|
|
|
|
|
|
<p>Команда <strong>grab</strong> может иметь одну из следующих
|
|
|
|
|
форм:</p>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
|
|
|
|
<dl>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<dt><strong>grab ?-global?</strong> <em>окно</em></dt>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<dd>Совпадает с описанной ниже командой <strong>grab
|
2015-10-19 13:27:31 +03:00
|
|
|
|
set</strong>.</dd>
|
|
|
|
|
|
|
|
|
|
<dt><strong>grab current</strong> <em>window</em></dt>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<dd>Если задан параметр <em>window</em>, то команда возвращает
|
|
|
|
|
имя текущего модального окна в данном приложении; если такого
|
|
|
|
|
окна нет, то команда возвращает пустую строку. Если параметр
|
|
|
|
|
<em>window</em> опущен, то команда возвращает список,
|
|
|
|
|
элементами которого являются все окна, захваченные данным
|
|
|
|
|
приложением на всех дисплеях; если таких окон нет, то команда
|
|
|
|
|
возвращает пустую строку.</dd>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<dt><strong>grab release</strong> <em>окно</em></dt>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<dd>Отменяет перехватчика на указанном окне; если в окне нет
|
|
|
|
|
перехватчика, то команда не выполняет никаких
|
|
|
|
|
действий. Команда возвращает пустую строку.</dd>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<dt><strong>grab set -global</strong> <em>окно</em></dt>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<dd>Устанавливает перехватчик на окно. Если задан параметр
|
|
|
|
|
<strong>-global</strong>, то перехватчик будет глобальным; в
|
|
|
|
|
противном случае он будет локальным. Если на дисплее окна у
|
|
|
|
|
приложения уже был перехватчик, то он автоматически
|
|
|
|
|
отменяется. Если на данном окне уже установлен перехватчик
|
|
|
|
|
того же вида (глобальный или локальный), что и запрошенный, то
|
|
|
|
|
команда не выполняет никаких действий. Команда возвращает
|
|
|
|
|
пустую строку.</dd>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<dt><strong>grab status</strong> <em>окно</em></dt>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<dd>Возвращает <strong>none</strong>, если в <em>окне</em> нет
|
|
|
|
|
перехватчика, <strong>local</strong>, если в <em>окне</em>
|
|
|
|
|
установлен глобальный перехватчик, <strong>global</strong>,
|
|
|
|
|
если в <em>окне</em> установлен глобальный перехватчик.</dd>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
|
|
|
|
</dl>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<h2><a name=ОШИБКИ></a>ОШИБКИ</h2>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<p>Реализация описанного выше эффекта простого перехватчика
|
|
|
|
|
оказалась чрезвычайно сложной и громоздкой. В текущей реализации
|
|
|
|
|
прямое использование приложениями перехватчиков Xlib небезопасно;
|
|
|
|
|
это нужно делать через процедуры Tk.</p>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<p>Если несколько приложений Tk управляются одним процессом, то на
|
|
|
|
|
данном дисплее только одно из этих приложений может иметь
|
|
|
|
|
локального перехватчика в каждый конкретный момент. Этого
|
|
|
|
|
ограничения нет для приложений, управляемых различными
|
|
|
|
|
процессами.</p>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
|
|
|
|
</body>
|
|
|
|
|
</html>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
|