139 lines
9.5 KiB
HTML
139 lines
9.5 KiB
HTML
<!DOCTYPE html PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN>
|
||
<html>
|
||
<head>
|
||
<title>grab</title>
|
||
</head>
|
||
<body>
|
||
|
||
<h1>grab</h1>
|
||
|
||
<p>Направляет события, исходящие из клавиатуры и указателя
|
||
"Мыши" в модальное окно и его поддерево.</p>
|
||
|
||
|
||
<h2><a name=СИНТАКСИС></a>СИНТАКСИС</h2>
|
||
|
||
<pre>
|
||
<strong>grab ?-global?</strong> <em>окно</em>
|
||
<strong>grab</strong> <em>параметр</em> ?<em>арг арг</em>...?
|
||
</pre>
|
||
|
||
<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>
|
||
|
||
<dl>
|
||
|
||
<dt><strong>grab ?-global?</strong> <em>окно</em></dt>
|
||
|
||
<dd>Совпадает с описанной ниже командой <strong>grab
|
||
set</strong>.</dd>
|
||
|
||
<dt><strong>grab current</strong> <em>window</em></dt>
|
||
|
||
<dd>Если задан параметр <em>window</em>, то команда возвращает
|
||
имя текущего модального окна в данном приложении; если такого
|
||
окна нет, то команда возвращает пустую строку. Если параметр
|
||
<em>window</em> опущен, то команда возвращает список,
|
||
элементами которого являются все окна, захваченные данным
|
||
приложением на всех дисплеях; если таких окон нет, то команда
|
||
возвращает пустую строку.</dd>
|
||
|
||
<dt><strong>grab release</strong> <em>окно</em></dt>
|
||
|
||
<dd>Отменяет перехватчика на указанном окне; если в окне нет
|
||
перехватчика, то команда не выполняет никаких
|
||
действий. Команда возвращает пустую строку.</dd>
|
||
|
||
<dt><strong>grab set -global</strong> <em>окно</em></dt>
|
||
|
||
<dd>Устанавливает перехватчик на окно. Если задан параметр
|
||
<strong>-global</strong>, то перехватчик будет глобальным; в
|
||
противном случае он будет локальным. Если на дисплее окна у
|
||
приложения уже был перехватчик, то он автоматически
|
||
отменяется. Если на данном окне уже установлен перехватчик
|
||
того же вида (глобальный или локальный), что и запрошенный, то
|
||
команда не выполняет никаких действий. Команда возвращает
|
||
пустую строку.</dd>
|
||
|
||
<dt><strong>grab status</strong> <em>окно</em></dt>
|
||
|
||
<dd>Возвращает <strong>none</strong>, если в <em>окне</em> нет
|
||
перехватчика, <strong>local</strong>, если в <em>окне</em>
|
||
установлен глобальный перехватчик, <strong>global</strong>,
|
||
если в <em>окне</em> установлен глобальный перехватчик.</dd>
|
||
|
||
</dl>
|
||
|
||
<h2><a name=ОШИБКИ></a>ОШИБКИ</h2>
|
||
|
||
<p>Реализация описанного выше эффекта простого перехватчика
|
||
оказалась чрезвычайно сложной и громоздкой. В текущей реализации
|
||
прямое использование приложениями перехватчиков Xlib небезопасно;
|
||
это нужно делать через процедуры Tk.</p>
|
||
|
||
<p>Если несколько приложений Tk управляются одним процессом, то на
|
||
данном дисплее только одно из этих приложений может иметь
|
||
локального перехватчика в каждый конкретный момент. Этого
|
||
ограничения нет для приложений, управляемых различными
|
||
процессами.</p>
|
||
|
||
</body>
|
||
</html>
|
||
|
||
|