## Tcl9.0.3/Tk9.0.3 Documentation > Tk C API > RestrictEv

### Tcl/Tk Applications | Tcl Commands | Tk Commands | [incr Tcl] Package Commands | SQLite3 Package Commands | TDBC Package Commands | tdbc::mysql Package Commands | tdbc::odbc Package Commands | tdbc::postgres Package Commands | tdbc::sqlite3 Package Commands | Thread Package Commands | Tcl C API | Tk C API | [incr Tcl] Package C API | TDBC Package C API

  NAME
    Tk_RestrictEvents — 行事を濾過し選択的に遅延する filter and selectively delay X events
  SYNOPSIS
    #include <tk.h>
    Tk_RestrictProc *
    Tk_RestrictEvents(proc, arg, prevArgPtr)
  引数 ARGUMENTS
    Tk_RestrictProc *proc (入力in)
    void *arg (i入力in)
    void **prevArgPtr (出力out)
  説明 DESCRIPTION
  KEYWORDS

### NAME

Tk_RestrictEvents — 行事を濾過し選択的に遅延する filter and selectively delay X events

### SYNOPSIS

#include <tk.h>
Tk_RestrictProc *
Tk_RestrictEvents(proc, arg, prevArgPtr)

### 引数 ARGUMENTS

Tk_RestrictProc *proc (入力in)
  入って来る X 行事を濾過する為の判断手続函数｡NULL は制限行事が全くないことを意味する｡ Predicate procedure to call to filter incoming X events. NULL means do not restrict events at all.

void *arg (i入力in)
  proc に渡される任意の引数｡ Arbitrary argument to pass to proc.

void **prevArgPtr (出力out)
  以前に制限されていた手続函数への引数の保存場所へのポインタ｡ Pointer to place to save argument to previous restrict procedure.

### 説明 DESCRIPTION

この手続函数は､応用譜が特定の X の行事を受取るためにのみ用意された､特定の状況で便利である｡ Tk_RestrictEvents が呼ばれた後､ Tcl_DoOneEvent は(それ故 Tk_MainLoop も)､ proc.を通して X 入力行事を濾過する｡Proc は与えられた行事がすぐさま処理されるか､幾らか後まで待たされるか(譬えば､行事制限が持上る)､棄却されるかを指し示す｡Proc は Tk_RestrictProc:型と合致する引数と結果を有する手続函数である: This procedure is useful in certain situations where applications are only prepared to receive certain X events. After Tk_RestrictEvents is called, Tcl_DoOneEvent (and hence Tk_MainLoop) will filter X input events through proc. Proc indicates whether a given event is to be processed immediately, deferred until some later time (e.g. when the event restriction is lifted), or discarded. Proc is a procedure with arguments and result that match the type Tk_RestrictProc:

    typedef Tk_RestrictAction Tk_RestrictProc(
            void *arg,
            XEvent *eventPtr);

arg 引数は Tk_RestrictEvents に渡した arg の複写である; それは行事を濾過するために必要な情報を伴う proc を提供する為に使われるかもしれない｡ eventPtr は考慮中の行事を指す｡proc は制限行動を返す(列挙型 Tk_RestrictAction )それは行事と共に Tcl_DoOneEvent がすべきことを指し示す｡もし返り値が TK_PROCESS_EVENT である場合､その行事はすぐさま処理される｡もし返り値が TK_DEFER_EVENT である場合､その行事は後で処理するために行事待ち行列に残される｡もし返り値が TK_DISCARD_EVENT である場合､その行事は行事待ち行列から取除かれ､処理されることなく棄却される｡ The arg argument is a copy of the arg passed to Tk_RestrictEvents; it may be used to provide proc with information it needs to filter events. The eventPtr points to an event under consideration. Proc returns a restrict action (enumerated type Tk_RestrictAction) that indicates what Tcl_DoOneEvent should do with the event. If the return value is TK_PROCESS_EVENT, then the event will be handled immediately. If the return value is TK_DEFER_EVENT, then the event will be left on the event queue for later processing. If the return value is TK_DISCARD_EVENT, then the event will be removed from the event queue and discarded without being processed.

Tk_RestrictEvents は､現在の行事制限手続函数に関する情報を返す為に返り値と prevClientDataPtr を使う( NULL 返り値は現在制限がないことを意味する)｡これ等の値は現在の制限の為にもはや何も必要がない時に以前の制限状態を再取得する為に使われ得る｡ Tk_RestrictEvents uses its return value and prevArgPtr to return information about the current event restriction procedure (a NULL return value means there are currently no restrictions). These values may be used to restore the previous restriction state when there is no longer any need for the current restriction.

Tk_RestrictEvents が必要な場所は非常に少ない｡大多数の場合､行事を制限する最良の方法は､ Tcl の bind 命令か､ C.から Tk_CreateEventHandler か Tk_DeleteEventHandler を呼出すかして､束縛を変更する事である｡ Tk_RestrictEvents が使われねばならない様な主な場所は､同期活動を遂行する時であろう(譬えば､特定の窓上に特定の行事が生じる事を待つ必要があるが､それ以外のどの行事に関するどの様な処理機能も起らないことを望むような場合)｡ このような状況での “明白な” 解は XNextEvent か XWindowEvent を呼ぶことであるが､このような手続函数は使用できない､理由は Tk は自身の待ち行列を保有し､それは X 行事待ち行列とは隔離されている｡その代わり､篩を設定する為の Tk_RestrictEvents を呼出すと､望ましい行事を取出す為に Tcl_DoOneEvent を呼出す｡ There are very few places where Tk_RestrictEvents is needed. In most cases, the best way to restrict events is by changing the bindings with the bind Tcl command or by calling Tk_CreateEventHandler and Tk_DeleteEventHandler from C. The main place where Tk_RestrictEvents must be used is when performing synchronous actions (for example, if you need to wait for a particular event to occur on a particular window but you do not want to invoke any handlers for any other events). The “obvious” solution in these situations is to call XNextEvent or XWindowEvent, but these procedures cannot be used because Tk keeps its own event queue that is separate from the X event queue. Instead, call Tk_RestrictEvents to set up a filter, then call Tcl_DoOneEvent to retrieve the desired event(s).

### KEYWORDS

delay, event, filter, restriction
Copyright © 1990 The Regents of the University of California.
Copyright © 1994-1996 Sun Microsystems, Inc.