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>
 | ||
| 
 | ||
| 
 | 
