home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / X / mit / doc / CLX / s12.doc < prev    next >
Encoding:
Interleaf document  |  1989-10-18  |  151.9 KB  |  5,028 lines

  1. <!OPS, Version = 5.2>
  2.  
  3. <!Document,
  4.     Print Rev Bars =    no,
  5.     Final Output Device =    "ps",
  6.     Default Printer =    "nearest-adps">
  7.  
  8. <!Font Definitions,
  9.     F2 = Times 10 Italic,
  10.     F3 = Times 10,
  11.     F4 = Times 8 Italic,
  12.     F5 = Times 18 Bold,
  13.     F6 = Times 10 Bold,
  14.     F7 = Times 18,
  15.     F8 = Times 12 Bold,
  16.     F9 = Symbol_B 8>
  17.  
  18. <!Page,
  19.     Bottom Margin =        1 inches,
  20.     Left Margin =        1 inches,
  21.     Right Margin =        1.15 inches,
  22.     First Page =        Right,
  23.     Starting Page # =     Inherit,
  24.     Page # Prefix =        "12<#1e>",
  25.     Hyphenation =        on,
  26.     Consecutive Hyphens =    2,
  27.     Vert. Just. =        off>
  28.  
  29. <!Autonumber Stream, List, 2,
  30.     Level 2 Suffix =    ,
  31.     Level 2 Starting Value = 0,
  32.     Level 2 Show =        no>
  33.  
  34. <!Autonumber Stream, Outline, 3,
  35.     Level 1 Symbol Type =    UPPER ROMAN,
  36.     Level 2 Symbol Type =    UPPER ALPHA>
  37.  
  38. <!Autonumber Stream, figure, 2,
  39.     Level 1 Prefix =    "Figure ",
  40.     Level 1 Suffix =    "<#1e>",
  41.     Level 1 Show =        no,
  42.     Level 2 Suffix =    ,
  43.     Level 2 Starting Value = 0,
  44.     Level 2 Show =        no>
  45.  
  46. <!Autonumber Stream, figurelet, 2,
  47.     Level 1 Symbol Type =    UPPER ALPHA,
  48.     Level 1 Prefix =    "Figure ",
  49.     Level 1 Suffix =    "<#1e>",
  50.     Level 1 Show =        no,
  51.     Level 2 Suffix =    "<#04>">
  52.  
  53. <!Autonumber Stream, invisible, 1,
  54.     Level 1 Suffix =    ,
  55.     Level 1 Show =        no>
  56.  
  57. <!Autonumber Stream, item, 2,
  58.     Level 2 Symbol Type =    LOWER ALPHA,
  59.     Level 2 Trail =        yes>
  60.  
  61. <!Autonumber Stream, paralet, 4,
  62.     Level 1 Symbol Type =    UPPER ALPHA,
  63.     Level 1 Suffix =    ,
  64.     Level 1 Show =        no,
  65.     Level 2 Prefix =    .,
  66.     Level 2 Suffix =    ,
  67.     Level 3 Prefix =    .,
  68.     Level 3 Suffix =    ,
  69.     Level 4 Prefix =    .,
  70.     Level 4 Suffix =    >
  71.  
  72. <!Autonumber Stream, paranum, 4,
  73.     Level 1 Suffix =    ,
  74.     Level 1 Show =        no,
  75.     Level 2 Prefix =    .,
  76.     Level 2 Suffix =    ,
  77.     Level 3 Prefix =    .,
  78.     Level 3 Suffix =    ,
  79.     Level 4 Prefix =    .,
  80.     Level 4 Suffix =    >
  81.  
  82. <!Autonumber Stream, table, 2,
  83.     Level 1 Prefix =    "Table ",
  84.     Level 1 Suffix =    "<#1e>",
  85.     Level 1 Show =        no,
  86.     Level 2 Suffix =    >
  87.  
  88. <!Autonumber Stream, tablelet, 2,
  89.     Level 1 Symbol Type =    UPPER ALPHA,
  90.     Level 1 Prefix =    "Table ",
  91.     Level 1 Suffix =    "<#1e>",
  92.     Level 1 Show =        no,
  93.     Level 2 Suffix =    "<#04>">
  94.  
  95. <!Class, arg,
  96.     Bottom Margin =        0.08 inches,
  97.     Left Margin =        1.85 inches,
  98.     First Indent =        -0.25 inches,
  99.     Line Spacing =        1.121 lines,
  100.     Font =            F2,
  101.     Left Tab =        -0.25/0 inches>
  102.  
  103. <!Class, bullet,
  104.     Bottom Margin =        0.153 inches,
  105.     Left Margin =        1.85 inches,
  106.     First Indent =        -0.25 inches,
  107.     Line Spacing =        1.121 lines,
  108.     Font =            F3,
  109.     Allow Page Break Within = no,
  110.     Left Tab =        -0.50/0 inches>
  111.  
  112. <!Class, caption,
  113.     Top Margin =        0.07 inches,
  114.     Bottom Margin =        0.07 inches,
  115.     Line Spacing =        1.100 lines,
  116.     Font =            F4>
  117.  
  118. <!Class, endrule,
  119.     Bottom Margin =        0.15 inches,
  120.     Left Margin =        1.60 inches,
  121.     Line Spacing =        1.121 lines,
  122.     Alignment =        Left,
  123.     Font =            F3,
  124.     Hyphenation =        off,
  125.     Allow Page Break Within = no,
  126.     Left Tab =        0/1.75/2.30/3.50/7.50 inches>
  127.  
  128. <!Class, fig,
  129.     Top Margin =        0.07 inches,
  130.     Bottom Margin =        0.07 inches,
  131.     Line Spacing =        1.100 lines,
  132.     Alignment =        Left,
  133.     Font =            F5>
  134.  
  135. <!Class, indentA,
  136.     Bottom Margin =        0.08 inches,
  137.     Left Margin =        1.85 inches,
  138.     Line Spacing =        1.121 lines,
  139.     Font =            F3,
  140.     Allow Page Break Within = no,
  141.     Left Tab =        -0.50/0 inches>
  142.  
  143. <!Class, indentB,
  144.     Bottom Margin =        0.153 inches,
  145.     Left Margin =        2.10 inches,
  146.     Line Spacing =        1.121 lines,
  147.     Font =            F3,
  148.     Allow Page Break Within = no,
  149.     Left Tab =        -0.50/0 inches>
  150.  
  151. <!Class, item,
  152.     Bottom Margin =        0.153 inches,
  153.     Left Margin =        1.85 inches,
  154.     First Indent =        -0.25 inches,
  155.     Line Spacing =        1.121 lines,
  156.     Font =            F3,
  157.     Allow Page Break Within = no,
  158.     Left Tab =        0 inches,
  159.     Right Tab =        -0.50 inches,
  160.     Autonumber Name =    item>
  161.  
  162. <!Class, keyword2,
  163.     Bottom Margin =        0.153 inches,
  164.     Left Margin =        1.85 inches,
  165.     First Indent =        -0.25 inches,
  166.     Line Spacing =        1.121 lines,
  167.     Font =            F6,
  168.     Left Tab =        -0.50/0 inches>
  169.  
  170. <!Class, newpage,
  171.     Bottom Margin =        0 inches,
  172.     Line Spacing =        1 lines,
  173.     Alignment =        Left,
  174.     Font =            F7,
  175.     Hyphenation =        off,
  176.     New Page =        yes,
  177.     Left Tab =        >
  178.  
  179. <!Class, "note",
  180.     Top Margin =        0.177 inches,
  181.     Bottom Margin =        0.334 inches,
  182.     Left Margin =        1.60 inches,
  183.     Line Spacing =        1.121 lines,
  184.     Font =            F3,
  185.     Allow Page Break Within = no,
  186.     Left Tab =        0 inches,
  187.     Right Tab =        6.50 inches>
  188.  
  189. <!Class, p1para,
  190.     Bottom Margin =        0.153 inches,
  191.     Left Margin =        1.60 inches,
  192.     First Indent =        -1.60 inches,
  193.     Line Spacing =        1.121 lines,
  194.     Alignment =        Left,
  195.     Font =            F8,
  196.     Allow Page Break Within = no,
  197.     Allow Page Break After = no,
  198.     Left Tab =        -1.70/0 inches>
  199.  
  200. <!Class, p1rule,
  201.     Bottom Margin =        0 inches,
  202.     Line Spacing =        1 lines,
  203.     Font =            F3,
  204.     Hyphenation =        off,
  205.     Allow Page Break After = no,
  206.     Left Tab =        0/0.75*13 inches>
  207.  
  208. <!Class, p1stacked,
  209.     Bottom Margin =        0 inches,
  210.     Left Margin =        1.60 inches,
  211.     First Indent =        -1.60 inches,
  212.     Line Spacing =        1 lines,
  213.     Font =            F6,
  214.     Allow Page Break Within = no,
  215.     Allow Page Break After = no,
  216.     Left Tab =        -1.60/-0.17/0 inches>
  217.  
  218. <!Class, p2para,
  219.     Bottom Margin =        0.153 inches,
  220.     Left Margin =        1.60 inches,
  221.     First Indent =        -1.60 inches,
  222.     Line Spacing =        1.121 lines,
  223.     Alignment =        Left,
  224.     Font =            F6,
  225.     Allow Page Break Within = no,
  226.     Allow Page Break After = no,
  227.     Left Tab =        0 inches,
  228.     Right Tab =        -1.60/-0.17 inches,
  229.     TOC Doc Name =        TOC>
  230.  
  231. <!Class, p2rule,
  232.     Bottom Margin =        0 inches,
  233.     Left Margin =        1.60 inches,
  234.     Line Spacing =        1 lines,
  235.     Alignment =        Left,
  236.     Font =            F3,
  237.     Hyphenation =        off,
  238.     Allow Page Break After = no,
  239.     Left Tab =        0/0.75*13 inches>
  240.  
  241. <!Class, p2stacked,
  242.     Bottom Margin =        0 inches,
  243.     Left Margin =        1.60 inches,
  244.     First Indent =        -1.60 inches,
  245.     Line Spacing =        1.121 lines,
  246.     Font =            F6,
  247.     Allow Page Break Within = no,
  248.     Allow Page Break After = no,
  249.     Left Tab =        0 inches,
  250.     Right Tab =        -1.60/-0.17 inches>
  251.  
  252. <!Class, para,
  253.     Bottom Margin =        0.153 inches,
  254.     Left Margin =        1.60 inches,
  255.     Line Spacing =        1.121 lines,
  256.     Font =            F3,
  257.     Allow Page Break Within = no,
  258.     Left Tab =        0/0.75*13 inches>
  259.  
  260. <!Class, return,
  261.     Bottom Margin =        0.077 inches,
  262.     Left Margin =        1.60 inches,
  263.     First Indent =        -0.90 inches,
  264.     Line Spacing =        1.121 lines,
  265.     Alignment =        Left,
  266.     Font =            F6,
  267.     Hyphenation =        off,
  268.     Allow Page Break Within = no,
  269.     Allow Page Break After = no,
  270.     Left Tab =        -0.90/0 inches,
  271.     Right Tab =        7.50 inches>
  272.  
  273. <!Class, ritabhd1,
  274.     Bottom Margin =        0 inches,
  275.     Left Margin =        1.60 inches,
  276.     Line Spacing =        1.121 lines,
  277.     Alignment =        Left,
  278.     Font =            F6,
  279.     Hyphenation =        off,
  280.     Allow Page Break Within = no,
  281.     Allow Page Break After = no,
  282.     Left Tab =        0/1.30/2.30/3.50/7.50 inches>
  283.  
  284. <!Class, sbullet,
  285.     Bottom Margin =        0.153 inches,
  286.     Left Margin =        2.10 inches,
  287.     First Indent =        -0.25 inches,
  288.     Line Spacing =        1.121 lines,
  289.     Font =            F3,
  290.     Allow Page Break Within = no,
  291.     Left Tab =        -0.50/0 inches>
  292.  
  293. <!Class, secno,
  294.     Top Margin =        0.07 inches,
  295.     Bottom Margin =        0.07 inches,
  296.     Line Spacing =        1.100 lines,
  297.     Alignment =        Left,
  298.     Font =            F5,
  299.     Autonumber Name =    paranum>
  300.  
  301. <!Class, secrule,
  302.     Bottom Margin =        0 inches,
  303.     Line Spacing =        1 lines,
  304.     Font =            F3,
  305.     Hyphenation =        off,
  306.     Allow Page Break After = no,
  307.     Left Tab =        0/0.75*13 inches,
  308.     Autonumber Name =    table>
  309.  
  310. <!Class, sectitle,
  311.     Bottom Margin =        0 inches,
  312.     Line Spacing =        1 lines,
  313.     Alignment =        Right,
  314.     Font =            F5,
  315.     Hyphenation =        off,
  316.     New Page =        yes,
  317.     Left Tab =        0/0.75*13 inches>
  318.  
  319. <!Class, ssbullet,
  320.     Bottom Margin =        0.153 inches,
  321.     Left Margin =        2.35 inches,
  322.     First Indent =        -0.25 inches,
  323.     Line Spacing =        1.121 lines,
  324.     Font =            F3,
  325.     Allow Page Break Within = no,
  326.     Left Tab =        -0.50/0 inches>
  327.  
  328. <!Class, syntax,
  329.     Bottom Margin =        0.077 inches,
  330.     Left Margin =        1.60 inches,
  331.     First Indent =        -0.90 inches,
  332.     Line Spacing =        1.121 lines,
  333.     Alignment =        Left,
  334.     Font =            F6,
  335.     Hyphenation =        off,
  336.     Allow Page Break Within = no,
  337.     Allow Page Break After = no,
  338.     Left Tab =        -0.90/0 inches,
  339.     Right Tab =        8 inches>
  340.  
  341. <!Class, syntax0,
  342.     Bottom Margin =        0 inches,
  343.     Left Margin =        1.60 inches,
  344.     First Indent =        -0.90 inches,
  345.     Line Spacing =        1.121 lines,
  346.     Alignment =        Left,
  347.     Font =            F6,
  348.     Hyphenation =        off,
  349.     Allow Page Break Within = no,
  350.     Allow Page Break After = no,
  351.     Left Tab =        -0.90/0 inches,
  352.     Right Tab =        8 inches>
  353.  
  354. <!Class, "table",
  355.     Top Margin =        0.07 inches,
  356.     Bottom Margin =        0.07 inches,
  357.     Line Spacing =        1.100 lines,
  358.     Font =            F6,
  359.     Autonumber Name =    table>
  360.  
  361. <!Class, title,
  362.     Top Margin =        0.07 inches,
  363.     Bottom Margin =        0.07 inches,
  364.     Line Spacing =        1.100 lines,
  365.     Alignment =        Right,
  366.     Font =            F5,
  367.     TOC Doc Name =        TOC>
  368.  
  369. <!Master Frame,
  370.     Name =            "At Anchor",
  371.     Placement =        At Anchor,
  372.     Width =            0.41 inches,
  373.     Height =        0.137 inches,
  374.     Vertical Alignment =    0.03 inches,
  375.     Diagram =
  376. V4,
  377. (g9,32767,0
  378.  (E10,0,0,0,1,1,0.053333,1,15,0,0,1,0,0,0,1,0,1,1,0.066667,0.066667,6,6,0,0.066
  379.   667,6))>
  380.  
  381. <!Master Frame,
  382.     Name =            p1rule,
  383.     Placement =        At Anchor,
  384.     Width =            6.35 inches,
  385.     Height =        0.153 inches,
  386.     Vertical Alignment =    0.007 inches,
  387.     Shared Contents =    yes,
  388.     Diagram =
  389. V4,
  390. (g9,1,0
  391.  (v4,1,0,0.006667,0.066723,6.326667,0.066611,17,2,0)
  392.  (E10,0,0,0,1,1,0.053333,1,15,0,0,1,0,0,0,0,0,1,1,0.066667,0.066667,6,6,0,0.066
  393.   667,6))>
  394.  
  395. <!Master Frame,
  396.     Name =            p2rule,
  397.     Placement =        At Anchor,
  398.     Width =            4.75 inches,
  399.     Height =        0.15 inches,
  400.     Vertical Alignment =    0.007 inches,
  401.     Shared Contents =    yes,
  402.     Diagram =
  403. V4,
  404. (g9,1,0
  405.  (v4,1,0,4.733333,0.066611,0.006667,0.066723,17,2,0)
  406.  (E10,0,0,0,1,1,0.053333,1,15,0,0,1,0,0,0,0,0,1,1,0.066667,0.066667,6,6,0,0.066
  407.   667,6))>
  408.  
  409. <First Page Header, Frame =
  410. V4,
  411. (g9,0,0
  412.  (E10,0,0,0,1,1,0.053333,1,15,0,0,1,0,0,0,1,1,1,1,0.066667,0.066667,6,6,0,0.066
  413.   667,6))>
  414.  
  415. <Right Page Header, Frame =
  416. V4,
  417. (g9,1,0
  418.  (T8,1,12,4.533333,0.306667,1.8,1,0.333333,0,516,0,17,0,0,0,0,0,0,1,1,2048,512,
  419.   102,1101,2,
  420. <caption,
  421.     Alignment =        Right>
  422.  
  423. Events and Input
  424.  
  425. <End Text>)
  426.  (E10,0,0,0,1,0,0.053333,1,15,0,0,1,0,0,0,0,1,0,1,0.066667,0.066667,6,6,0,0.066
  427.   667,6))>
  428.  
  429. <Left Page Header, Frame =
  430. V4,
  431. (g9,1,0
  432.  (T8,1,12,0,0.293333,2.4,1,0.333333,0,516,0,17,0,0,0,0,0,0,1,1,2048,512,102,110
  433.   1,2,
  434. <caption>
  435.  
  436. Events and Input
  437.  
  438. <End Text>)
  439.  (E10,0,0,0,1,1,0.053333,1,15,0,0,1,0,0,0,0,1,1,1,0.066667,0.066667,6,6,0,0.066
  440.   667,6))>
  441.  
  442. <Right Page Footer, Frame =
  443. V4,
  444. (g9,1,0
  445.  (t8,1,4,6.333333,0.266667,2,17,@nntimsps10b,\240)
  446.  (t8,2,4,0.006667,0.266667,0,17,@nntimsps8i,CLX\ Programmer's\ Reference)
  447.  (v4,3,0,0,0.066667,6.333333,0.066554,17,2,0)
  448.  (E10,0,0,0,1,1,0.053333,1,15,0,0,1,0,0,0,0,1,1,1,0.066667,0.066667,6,6,0,0.066
  449.   667,6))>
  450.  
  451. <Left Page Footer, Frame =
  452. V4,
  453. (g9,1,0
  454.  (t8,1,4,0,0.266667,0,17,@nntimsps10b,\240)
  455.  (t8,2,4,6.333333,0.266667,2,17,@nntimsps8i,CLX\ Programmer's\ Reference)
  456.  (v4,3,0,0.026667,0.066667,6.333333,0.066554,17,2,0)
  457.  (E10,0,0,0,1,0,0.053333,1,15,0,0,1,0,0,0,0,1,0,1,0.066667,0.066667,6,6,0,0.066
  458.   667,6))>
  459.  
  460. <sectitle,
  461.     Allow Page Break Within = no,
  462.     Allow Page Break After = no>
  463.  
  464. <|,"12<#1e>119">
  465. <Frame,
  466.     Name =            "At Anchor",
  467.     Placement =        At Anchor,
  468.     Width =            4.72 inches,
  469.     Height =        0.94 inches,
  470.     Vertical Alignment =    0.03 inches,
  471.     Diagram =
  472. V4,
  473. (g9,1,0
  474.  (T8,1,12,0.133333,0.72,4.563333,1,0.333333,0,516,0,17,0,0,0,0,0,0,1,1,2048,512
  475.   ,102,1101,3,
  476. <title>
  477.  
  478. EVENTS AND INPUT
  479.  
  480. <End Text>)
  481.  (E10,0,0,0,1,0,0.053333,1,15,0,0,1,0,0,0,0,1,0,1,0.066667,0.066667,6,6,0,0.066
  482.   667,6))>
  483. <Frame,
  484.     Name =            "At Anchor",
  485.     Placement =        At Anchor,
  486.     Width =            1.626 inches,
  487.     Height =        0.938 inches,
  488.     Vertical Alignment =    0 inches,
  489.     Diagram =
  490. V4,
  491. (g9,1,0
  492.  (T8,1,12,0.066667,0.276667,0,1,0.333333,0,516,0,17,0,0,0,0,0,0,1,1,2048,512,10
  493.   2,1101,3,
  494. <secno,
  495.     TOC Doc Name =        TOC>
  496.  
  497. <Autonum, paranum, 1, First = Yes>
  498.  
  499. <End Text>)
  500.  (T8,2,12,0.026667,0.733333,0,1,0.333333,0,516,0,17,0,0,0,0,0,0,1,1,2048,512,10
  501.   2,1101,3,
  502. <"table">
  503.  
  504. <Autonum, table, 1, First = Yes>
  505.  
  506. <End Text>)
  507.  (T8,3,12,0.066667,0.6,0,1,0.333333,0,516,0,17,0,0,0,0,0,0,1,1,2048,512,102,110
  508.   1,3,
  509. <fig,
  510.     Alignment =        Both,
  511.     Font =            F6,
  512.     Autonumber Name =    figure>
  513.  
  514. <Autonum, figure, 1, First = Yes>
  515.  
  516. <End Text>)
  517.  (g9,5,0
  518.    (p7,5,8,19
  519.      (g9,5,0
  520.        (g9,5,0
  521.          (v4,5,0,0.266667,0,1.6,0,17,1,0)
  522.          (v4,6,0,1.6,0,1.6,0.933333,17,1,0)
  523.          (v4,7,0,1.6,0.933333,0.266667,0.933333,17,1,0)
  524.          (v4,8,0,0.266667,0.933333,0.266667,0,17,1,0))))
  525.    (g9,10,0
  526.      (g9,10,8
  527.        (p7,10,1032,13
  528.          (g9,10,0
  529.            (g9,10,0
  530.              (v4,10,0,1.487894,0.934816,1.487894,0.784694,17,1,0)
  531.              (v4,11,0,1.487894,0.784694,1.216842,0.784694,17,1,0)
  532.              (v4,12,0,1.216842,0.784694,1.487894,0.503213,17,1,0)
  533.              (v4,13,0,1.487894,0.503213,1.487894,0.259259,17,1,0)
  534.              (v4,14,0,1.487894,0.259259,1.379473,0.14667,17,1,0)
  535.              (v4,15,0,1.379473,0.14667,1.12649,0.14667,17,1,0)
  536.              (v4,16,0,1.12649,0.14667,1.018068,0.259259,17,1,0)
  537.              (v4,17,0,1.018068,0.259259,1.018068,0.371851,17,1,0)
  538.              (v4,18,0,1.018068,0.371851,1.1807,0.371851,17,1,0)
  539.              (v4,19,0,1.1807,0.371851,1.1807,0.296792,17,1,0)
  540.              (v4,20,0,1.1807,0.296792,1.325262,0.296792,17,1,0)
  541.              (v4,21,0,1.325262,0.296792,1.325262,0.46568,17,1,0)
  542.              (v4,22,0,1.325262,0.46568,1.018068,0.784694,17,1,0)
  543.              (v4,23,0,1.018068,0.784694,1.018068,0.934816,17,1,0)
  544.              (v4,24,0,1.018068,0.934816,1.487894,0.934816,17,1,0))))
  545.        (g9,25,2048
  546.          (v4,25,33,1,1.16,1,1.16,17,0,0)
  547.          (v4,26,33,1,0.14667,1,0.14667,17,0,0)
  548.          (v4,27,33,1.524033,0.14667,1.524033,0.14667,17,0,0)
  549.          (v4,28,33,1.524033,1.16,1.524033,1.16,17,0,0)))
  550.      (g9,30,8
  551.        (p7,30,1032,13
  552.          (g9,30,0
  553.            (g9,30,0
  554.              (v4,30,0,0.914386,0.934816,0.914386,0.14667,17,1,0)
  555.              (v4,31,0,0.914386,0.14667,0.769824,0.14667,17,1,0)
  556.              (v4,32,0,0.769824,0.14667,0.625263,0.296792,17,1,0)
  557.              (v4,33,0,0.625263,0.296792,0.625263,0.371851,17,1,0)
  558.              (v4,34,0,0.625263,0.371851,0.751755,0.371851,17,1,0)
  559.              (v4,35,0,0.751755,0.371851,0.751755,0.934816,17,1,0)
  560.              (v4,36,0,0.751755,0.934816,0.914386,0.934816,17,1,0))))
  561.        (g9,37,2048
  562.          (v4,37,33,0.607192,0.14667,0.607192,0.14667,17,0,0)
  563.          (v4,38,33,0.607192,1.16,0.607192,1.16,17,0,0)
  564.          (v4,39,33,0.986667,1.16,0.986667,1.16,17,0,0)
  565.          (v4,40,33,0.986667,0.14667,0.986667,0.14667,17,0,0)))))
  566.  (E10,0,0,0,1,1,0.053333,1,15,0,0,1,0,0,0,0,1,1,1,0.066667,0.066667,6,6,0,0.066
  567.   667,6))>
  568.  
  569. <secrule,
  570.     Allow Page Break Within = no,
  571.     Allow Page Break After = yes,
  572.     Autonumber Name =    >
  573.  
  574. <Index, "event", To Named = sectitle>
  575. <Frame,
  576.     Name =            "At Anchor",
  577.     Placement =        At Anchor,
  578.     Width =            6.35 inches,
  579.     Height =        0.153 inches,
  580.     Vertical Alignment =    0.007 inches,
  581.     Diagram =
  582. V4,
  583. (g9,1,0
  584.  (v4,1,0,0.006667,0.066723,6.333333,0.066611,17,2,0)
  585.  (E10,0,0,0,1,1,0.053333,1,15,0,0,1,0,0,0,0,0,1,1,0.066667,0.066667,6,6,0,0.066
  586.   667,6))>
  587.  
  588. <p1para,
  589.     Bottom Margin =        0 inches,
  590.     Alignment =        Both,
  591.     Font =            F3,
  592.     Allow Page Break After = yes>
  593.  
  594. <F8>Introduction<Tab><F6>12.1<F0><#04>A client application uses 
  595. CLX functions to send <F2>requests<F0> to an X server over a display 
  596. connection returned by the <F6>open<#1e>display<F0> function. In 
  597. return, the X server sends back <F2>replies<F0> and <F2>events<F0>. 
  598. Replies are synchronized with specific requests and return requested 
  599. server information. Events typically occur asynchronously. Device 
  600. events are generated by user input from both the keyboard and pointer 
  601. devices. Other events are side<#1e>effects of the requests sent by 
  602. CLX functions. The types of events returned by an X server are summarized 
  603. below.
  604.  
  605. <ritabhd1,
  606.     Left Tab =        0/2.30/3.50/7.50 inches>
  607.  
  608. <Tab-><Tab-><Tab-><HR>
  609. Device Events<Tab>Events Returned<Index, "device events"><Index, "event", "device"><Index, "device events", "events returned"><Index, "event", "device", "events returned"><HR>
  610. <Tab-><Tab-><Tab->
  611.  
  612. <ritabhd1,
  613.     Bottom Margin =        0.04 inches,
  614.     Left Tab =        0/2.30/3.50/7.50 inches>
  615.  
  616. <F3>Keyboard<Tab><F0>:key<#1e>press<F3><HR>
  617. <Tab><F0>:key<#1e>release
  618.  
  619. <ritabhd1,
  620.     Left Tab =        0/2.30/3.50/7.50 inches>
  621.  
  622. <F3>Pointer<Tab><F0>:button<#1e>press<HR>
  623. <Tab>:button<#1e>release<HR>
  624. <Tab>:enter<#1e>notify<HR>
  625. <Tab>:leave<#1e>notify<HR>
  626. <Tab>:motion<#1e>notify
  627.  
  628. <endrule,
  629.     Bottom Margin =        0 inches>
  630.  
  631. <Tab-><Tab-><Tab-><Tab->
  632.  
  633. <ritabhd1,
  634.     Left Tab =        0/2.30/3.50/7.50 inches>
  635.  
  636. <Tab-><Tab-><Tab-><HR>
  637. Side<#1e>Effect Events<Tab>Events Returned<Index, "side<#1e>effect events"><Index, "event", "side<#1e>effect"><Index, "side<#1e>effect events", "events returned"><Index, "event", "side<#1e>effect", "events returned"><HR>
  638. <Tab-><Tab-><Tab->
  639.  
  640. <ritabhd1,
  641.     Bottom Margin =        0.04 inches,
  642.     Left Tab =        0/2.30/3.50/7.50 inches>
  643.  
  644. <F3>Client communication<Tab><F0>:client<#1e>message<HR>
  645. <Tab>:property<#1e>notify<HR>
  646. <Tab>:selection<#1e>clear<HR>
  647. <Tab>:selection<#1e>notify<F3><HR>
  648. <Tab><F0>:selection<#1e>request
  649.  
  650. <ritabhd1,
  651.     Bottom Margin =        0.05 inches,
  652.     Left Tab =        0/2.30/3.50/7.50 inches>
  653.  
  654. <F3>Color map state<Tab><F0>:colormap<#1e>notify
  655.  
  656. <ritabhd1,
  657.     Bottom Margin =        0.04 inches,
  658.     Left Tab =        0/2.30/3.50/7.50 inches>
  659.  
  660. <F3>Exposure<Tab><F0>:exposure<F3><HR>
  661. <Tab><F0>:graphics<#1e>exposure<HR>
  662. <Tab>:no<#1e>exposure
  663.  
  664. <F3>Input focus<Tab><F0>:focus<#1e>in<HR>
  665. <Tab>:focus<#1e>out
  666.  
  667. <F3>Keyboard and pointer state<Tab><F0>:keymap<#1e>notify<HR>
  668. <Tab>:mapping<#1e>notify
  669.  
  670. <F3>Structure control<Tab><F0>:circulate<#1e>request<HR>
  671. <Tab>:configure<#1e>request<HR>
  672. <Tab>:map<#1e>request
  673.  
  674. <ritabhd1,
  675.     Left Tab =        0/2.30/3.50/7.50 inches>
  676.  
  677. <F3><Tab><F0>:resize<#1e>request<HR>
  678. <F3>Window state<Tab><F0>:circulate<#1e>notify<HR>
  679. <Tab>:configure<#1e>notify<HR>
  680. <Tab>:create<#1e>notify<HR>
  681. <Tab>:destroy<#1e>notify<HR>
  682. <Tab>:gravity<#1e>notify<HR>
  683. <Tab>:map<#1e>notify<HR>
  684. <Tab>:reparent<#1e>notify<HR>
  685. <Tab>:unmap<#1e>notify<HR>
  686. <Tab>:visibility<#1e>notify
  687.  
  688. <endrule>
  689.  
  690. <Tab-><Tab-><Tab-><Tab->
  691.  
  692. <para>
  693.  
  694. <|,"12<#1e>120">Client programs can override the server's normal distribution 
  695. of events by<F2><SP>grabbing<F0> the pointer or the keyboard. Grabbing 
  696. causes events from the<SP>pointer or keyboard device to be reported 
  697. to a single specified window, rather<SP>than to their ordinary destinations. 
  698. It can also cause the server to <F2>freeze<F0><SP>the grabbed device, 
  699. sending queued events only when explicitly requested by<SP>the grabbing 
  700. client. Two kinds of grabs are possible:<Index, "grab types">
  701.  
  702. <bullet>
  703.  
  704. <F9>w<Tab><F0>Active <#1f> Events are immediately grabbed.
  705.  
  706. <F9>w<Tab><F0>Passive <#1f> Events are grabbed later, as soon as 
  707. a specified device event occurs.
  708.  
  709. <para>
  710.  
  711. Grabbing an input device is performed rarely and usually only by special<SP>cli
  712. ents, such as window managers.
  713.  
  714. This section describes the CLX functions used to:
  715.  
  716. <bullet>
  717.  
  718. <F9>w<Tab><F0>Select events
  719.  
  720. <F9>w<Tab><F0>Process an event on the event queue
  721.  
  722. <F9>w<Tab><F0>Manage the event queue
  723.  
  724. <F9>w<Tab><F0>Send events to other applications
  725.  
  726. <F9>w<Tab><F0>Read and change the pointer position
  727.  
  728. <F9>w<Tab><F0>Manage the keyboard input focus
  729.  
  730. <F9>w<Tab><F0>Grab pointer and keyboard events
  731.  
  732. <F9>w<Tab><F0>Release queued events
  733.  
  734. <para>
  735.  
  736. This section also contains a detailed description of the content of 
  737. each type of event. 
  738.  
  739. <p1rule>
  740.  
  741. <Index, "event", "selecting", To Named = p1rule>
  742. <Frame,
  743.     Name =            p1rule,
  744.     Placement =        At Anchor,
  745.     Width =            6.35 inches,
  746.     Height =        0.153 inches,
  747.     Vertical Alignment =    0.007 inches,
  748.     Shared Contents =    yes>
  749.  
  750. <p1para,
  751.     Alignment =        Both,
  752.     Font =            F3,
  753.     Allow Page Break After = yes>
  754.  
  755. <F8>Selecting Events<Tab><F6>12.2<F0><#04>A client <F2>selects<F0> 
  756. which types of events it receives from a specific window. The window 
  757. event<#1e>mask attribute, set by the client, determines which event 
  758. types are selected (see <F6>window<#1e>event<#1e>mask<F0> in paragraph 
  759. 4.3, Window Attributes). Most types of events are received by a client 
  760. only if they are selected for some window.
  761.  
  762. <para>
  763.  
  764. In the X protocol, an event<#1e>mask is represented as a bit string. 
  765. CLX also allows an event mask to be defined by a list of <F6>event<#1e>mask<#1e>
  766. class<F0> keywords. The functions <F6>make<#1e>event<#1e>keys<F0> 
  767. and <F6>make<#1e>event<#1e>mask<F0> can be used to convert between 
  768. these two forms of an event<#1e>mask. In general, including an <F6>event<#1e>m
  769. ask<#1e>class<F0> keyword in an event<#1e>mask causes one or more 
  770. related event types to be selected. The following table describes 
  771. the event types selected by each <F6>event<#1e>mask<#1e>class<F0> 
  772. keyword.
  773.  
  774. <ritabhd1,
  775.     Left Tab =        0/2.10/3.50/7.50 inches>
  776.  
  777. <|,"12<#1e>121"><Tab-><Tab-><Tab-><HR>
  778. <Index, "event mask", "keywords"><Index, "event mask", "keywords", "event types selected">Event Mask Keyword<Tab>Event 
  779. Types Selected<HR>
  780. <Tab-><Tab-><Tab->
  781.  
  782. :button<#1e>1<#1e>motion<Tab>:motion<#1e>notify<F3> when <F0>:button<#1e>1
  783. <F3> is down
  784.  
  785. :button<#1e>2<#1e>motion<Tab>:motion<#1e>notify <F3>when<F0> :button<#1e>2
  786. <F3> is down
  787.  
  788. :button<#1e>3<#1e>motion<Tab>:motion<#1e>notify <F3>when<F0> :button<#1e>3
  789. <F3> is down
  790.  
  791. :button<#1e>4<#1e>motion<Tab>:motion<#1e>notify <F3>when<F0> :button<#1e>4 
  792. <F3>is down
  793.  
  794. :button<#1e>5<#1e>motion<Tab>:motion<#1e>notify <F3>when<F0> :button<#1e>5
  795. <F3> is down
  796.  
  797. :button<#1e>motion<Tab>:motion<#1e>notify<F3> when any pointer<HR>
  798. <Tab><#04>button is down
  799.  
  800. :button<#1e>press<Tab>:button<#1e>press
  801.  
  802. :button<#1e>release<Tab>:button<#1e>release 
  803.  
  804. :colormap<#1e>change<Tab>:colormap<#1e>notify
  805.  
  806. :enter<#1e>window<Tab>:enter<#1e>notify
  807.  
  808. :exposure<Tab>:exposure
  809.  
  810. :focus<#1e>change<Tab>:focus<#1e>in, :focus<#1e>out
  811.  
  812. :key<#1e>press<Tab>:key<#1e>press 
  813.  
  814. :key<#1e>release<Tab>:key<#1e>release 
  815.  
  816. :keymap<#1e>state<Tab>:keymap<#1e>notify
  817.  
  818. :leave<#1e>window<Tab>:leave<#1e>notify
  819.  
  820. :owner<#1e>grab<#1e>button<Tab><F3>Pointer events while button is 
  821. grabbed
  822.  
  823. :pointer<#1e>motion<Tab>:motion<#1e>notify
  824.  
  825. :pointer<#1e>motion<#1e>hint <Tab><F3>Single <F0>:motion<#1e>notify<F3> 
  826. only
  827.  
  828. :property<#1e>change<Tab>:property<#1e>notify
  829.  
  830. :resize<#1e>redirect<Tab>:resize<#1e>request
  831.  
  832. :structure<#1e>notify<Tab>:circulate<#1e>notify, :configure<#1e>notify,
  833.  
  834. <Tab>  :destroy<#1e>notify, : gravity<#1e>notify,<HR>
  835. <Tab>  :map<#1e>notify, :reparent<#1e>notify,<HR>
  836. <Tab>  :unmap<#1e>notify
  837.  
  838. :substructure<#1e>redirect<Tab>:circulate<#1e>request, :configure<#1e>request,<HR>
  839. <Tab>  :map<#1e>request
  840.  
  841. :visibility<#1e>change<Tab>:visibility<#1e>notify
  842.  
  843. <endrule>
  844.  
  845. <Tab-><Tab-><Tab-><Tab->
  846.  
  847. <para>
  848.  
  849. Some types of events do not have to be selected to be received and 
  850. therefore are not represented in an event<#1e>mask. For example, the <F6>copy<#1e>
  851. plane<F0> and <F6>copy<#1e>area<F0> functions cause <F6>:graphics<#1e>expos
  852. ure<F0> and <F6>:no<#1e>exposure<F0> events to be reported, unless 
  853. exposures are turned <F6>:off<F0> in the graphics context (see <F6>copy<#1e>
  854. area<F0> and <F6>copy<#1e>plane<F0> in paragraph 6.2, Area and 
  855. Plane Operations, and <F6>gcontext<#1e>exposures<F0> in paragraph 
  856. 5.4.6, Exposures). Also, <F6>:selection<#1e>clear<F0>, <F6>:selection<#1e>re
  857. quest<F0>, <F6>:selection<#1e>notify<F0> and <F6>:client<#1e>message<F0> 
  858. events can be received at any time, but they are generally sent only 
  859. to clients using selections (see paragraph 12.12.7, Client Communications 
  860. Events). <F6>:mapping<#1e>notify <F0>is always sent to clients when 
  861. the keyboard mapping is changed.
  862.  
  863. Any client can select events for any window. A window maintains a 
  864. separate event<#1e>mask for each interested client. In general, multiple 
  865. clients can select for the same events on a window. After the X server 
  866. generates an event, it sends it to all clients which selected it. 
  867. However, the following restrictions apply to sharing window events 
  868. among multiple clients. For a given window:
  869.  
  870. <bullet>
  871.  
  872. <F9>w<Tab><F0>Only one client at a time can include <F6>:substructure<#1e>re
  873. direct<F0> in its event<#1e>mask
  874.  
  875. <F9>w<Tab><F0>Only one client at a time can can include <F6>:button<#1e>pres
  876. s<F0> in its event<#1e>mask
  877.  
  878. <F9>w<Tab><F0>Only one client at a time can include <F6>:resize<#1e>redirect
  879. <F0> in its event<#1e>mask
  880.  
  881. <p1rule>
  882.  
  883. <|,"12<#1e>122"><Index, "event", "processing", To Named = p1rule>
  884. <Frame,
  885.     Name =            p1rule,
  886.     Placement =        At Anchor,
  887.     Width =            6.35 inches,
  888.     Height =        0.153 inches,
  889.     Vertical Alignment =    0.007 inches,
  890.     Shared Contents =    yes>
  891.  
  892. <p1stacked,
  893.     Font =            F3,
  894.     Left Tab =        -1.70/0 inches>
  895.  
  896. <F8>Processing<Tab><F6>12.3<F0><#04>Events received by a CLX client 
  897. are stored in an <F2>event queue<F0> until<FJ>
  898.  
  899. <p1para,
  900.     Bottom Margin =        0.13 inches,
  901.     Alignment =        Both,
  902.     Font =            F3,
  903.     Allow Page Break After = yes>
  904.  
  905. <F8>Events<Tab><F0>they are read and processed. Events are processed 
  906. by <F2>handler functions<F0>.
  907.  
  908. <syntax0>
  909.  
  910. <Index, Doc = operations, "xlib:handler<#1e>function", Sort String = "handler<#1e>function">handler<#1e>function <F3>&rest <F2>event<#1e>slots <F3>&
  911. key <F0>:display :event<#1e>key :send<#1e>event<#1e>p <Tab><F3>Function<HR>
  912. &allow<#1e>other<#1e>keys 
  913.  
  914. <return>
  915.  
  916. <Tab><F3>Returns: <F2><HR>
  917.   handled<#1e>p<F3> <#1f> Type <F0>boolean<F3>.<F0> 
  918.  
  919. <para,
  920.     Bottom Margin =        0.12 inches>
  921.  
  922. The arguments to a handler function are keyword<#1e>value pairs that 
  923. describe the contents of an event. The actual <F2>event<#1e>slots<F0> 
  924. passed depend on the event type, except that <F6>:display<F0>, <F6>:event<#1e>
  925. key<F0>, and <F6>:send<#1e>event<#1e>p<F0> are given for all event 
  926. types. The keyword symbols used for each event type are event slot 
  927. names defined by the <F6>declare<#1e>event<F0> macro and are described 
  928. in paragraph 12.12.8, Declaring Event Types.
  929.  
  930. If a handler returns non<#1e><F6>nil<F0>, the event is considered <F2>proces
  931. sed<F0> and can be removed from the event queue. Otherwise, if a 
  932. handler function returns <F6>nil<F0>, the event can remain in the 
  933. event queue for later processing.
  934.  
  935. <keyword2>
  936.  
  937. :display<F3> <#1f> A <F0>display<F3> for the connection that returned 
  938. the event.
  939.  
  940. :event<#1e>key<F3> <#1f> An <F0>event<#1e>key<F3> keyword specifying 
  941. the event type.
  942.  
  943. :send<#1e>event<#1e>p <F3><#1f> If true, the event was sent from 
  944. another application using the <F0>send<#1e>event<F3> function.
  945.  
  946. <syntax0>
  947.  
  948. process<#1e>event <F2>display<F0> <F3>&key<F0> :handler :timeout 
  949. :peek<#1e>p :discard<#1e>p <Tab><F3>Function<Index, Doc = operations, "xlib:process<#1e>event", Sort String = "process<#1e>event"><F0><HR>
  950. (:force<#1e>output<#1e>p t) 
  951.  
  952. <return>
  953.  
  954. <Tab><F3>Returns:<HR>
  955. <F0>  <F2>handled<#1e>p<F0> <F3><#1f> Type <F0>boolean<F3>.
  956.  
  957. <para,
  958.     Bottom Margin =        0.12 inches>
  959.  
  960. Invokes <F6>:handler<F0> on each queued event until <F6>:handler<F0> 
  961. returns non<#1e><F6>nil<F0>. Then, the non<#1e><F6>nil<F0> <F6>:handler
  962. <F0> value is returned by <F6>process<#1e>event<F0>. If <F6>:handler<F0> 
  963. returns <F6>nil<F0> for each event in the event queue, <F6>process<#1e>event
  964. <F0> waits for another event to arrive. If timeout is non<#1e><F6>nil<F0> 
  965. and no event arrives within the specified timeout interval (given 
  966. in seconds), <F6>process<#1e>event<F0> returns <F6>nil<F0>; if 
  967. timeout is <F6>nil<F0>, <F6>process<#1e>event<F0> will not return 
  968. until <F6>:handler<F0> returns non<#1e><F6>nil<F0>. <F6>process<#1e>event
  969. <F0> may wait only once on network data, and therefore timeout prematurely.
  970.  
  971. If <F6>:force<#1e>output<#1e>p<F0> is true, <F6>process<#1e>event<F0> 
  972. first invokes <F6>display<#1e>force<#1e>output<F0> to send any buffered 
  973. requests. If <F6>:peek<#1e>p<F0> is true, a processed event is not 
  974. removed from the queue. If <F6>:discard<#1e>p<F0> is true, unprocessed 
  975. events are removed from the queue; otherwise, unprocessed events are 
  976. left in place.
  977.  
  978. If <F6>:handler<F0> is a sequence, it is expected to contain handler 
  979. functions for each event type. The sequence index of the handler function 
  980. for a particular event type is given by (<F6>position event<#1e>key 
  981. *event<#1e>key<#1e>vector*<F0>).
  982.  
  983. <arg>
  984.  
  985. display <#1f> <F3>A <F6>display<F3>.
  986.  
  987. <keyword2>
  988.  
  989. :handler<F3> <#1f><F0> <F3>A handler function or a sequence of 
  990. handler functions.
  991.  
  992. :timeout <F3><#1f> Specifies the timeout delay in seconds.
  993.  
  994. :peek<#1e>p <F3><#1f> If <F0>nil<F3>, events are removed from the 
  995. event queue after processing.
  996.  
  997. :discard<#1e>p <F3><#1f> If true, unprocessed events are discarded.
  998.  
  999. :force<#1e>output<#1e>p <F3><#1f> If true, buffered output requests 
  1000. are sent.
  1001.  
  1002. <syntax0>
  1003.  
  1004. <|,"12<#1e>123">event<#1e>case <F2>display <F3>&key <F0>:timeout :peek<#1e>p 
  1005. :discard<#1e>p (:force<#1e>output<#1e>p t)<Tab><F3>Macro<Index, Doc = operations, "xlib:event<#1e>case", Sort String = "event<#1e>case"><HR>
  1006. &body <F2>clauses
  1007.  
  1008. <return>
  1009.  
  1010. <Tab><F3>Returns: <F2><HR>
  1011.   handled<#1e>p<F3> <#1f> Type <F0>boolean<F3>.
  1012.  
  1013. <para>
  1014.  
  1015. Executes the matching clause for each queued event until a clause 
  1016. returns non<#1e><F6>nil<F0>. The non<#1e><F6>nil<F0> clause value 
  1017. is then returned. Each of the clauses is a list of the form (<F2>event<#1e>mat
  1018. ch<F0> [<F2>event<#1e>slots<F0>] &rest <F2>forms<F0>), where:
  1019.  
  1020. <arg>
  1021.  
  1022. event<#1e>match<F6> <F3><#1f> Either an <F6>event<#1e>key<F3>, 
  1023. a list of <F6>event<#1e>keys<F3>, otherwise, or <F6>t<F3>. It 
  1024. is an error for the same key to appear in more than one clause.
  1025.  
  1026. event<#1e>slots <F3><#1f> If given, a list of (non<#1e>keyword) event 
  1027. slot symbols defined for the specified event type(s). See paragraph 
  1028. 12.12.8, Declaring Event Types.
  1029.  
  1030. forms <F3><#1f> A list of forms that process the specified event 
  1031. type(s). The value of the last form is the value returned by the clause.
  1032.  
  1033. <para>
  1034.  
  1035. A clause matches an event if the <F6>event<#1e>key<F0> is equal 
  1036. to or a member of the <F2>event<#1e>match<F0>, or if the <F2>event<#1e>match
  1037. <F0> is <F6>t<F0> or <F6>otherwise<F0>. If no <F6>t<F0> or <F6>otherwis
  1038. e<F0> clause appears, it is equivalent to having a final clause that 
  1039. returns <F6>nil<F0>. If <F2>event<#1e>slots<F0> is given, these 
  1040. symbols are bound to the value of the corresponding event slot in 
  1041. the clause forms. Each element of <F2>event<#1e>slots<F0> can also 
  1042. be a list of the form (<F2>event<#1e>slot<#1e>keyword variable<F0>), 
  1043. in which case the <F2>variable<F0> symbol is bound to the value 
  1044. of the event slot specified by the <F2>event<#1e>slot<#1e>keyword<F0>.
  1045.  
  1046. If every clause returns <F6>nil<F0> for each event in the event 
  1047. queue, <F6>event<#1e>case<F0> waits for another event to arrive. 
  1048. If <F6>:timeout<F0> is non<#1e><F6>nil<F0> and no event arrives 
  1049. within the specified timeout interval (given in seconds), <F6>event<#1e>case
  1050. <F0> returns <F6>nil<F0>; if <F6>:timeout<F0> is <F6>nil<F0>, <F6>event
  1051. <#1e>case<F0> will not return until a clause returns non<#1e><F6>nil<F0>. 
  1052. <F6>event<#1e>case<F0> may wait only once on network data and therefore 
  1053. timeout prematurely.
  1054.  
  1055. If <F6>:force<#1e>output<#1e>p<F0> is true, <F6>event<#1e>case<F0> 
  1056. first invokes <F6>display<#1e>force<#1e>output<F0> to send any buffered 
  1057. requests. If <F6>:peek<#1e>p<F0> is true, a processed event is not 
  1058. removed from the queue. If <F6>:discard<#1e>p<F0> is true, unprocessed 
  1059. events are removed from the queue; otherwise, unprocessed events are 
  1060. left in place.
  1061.  
  1062. <arg>
  1063.  
  1064. display <F3><#1f> A <F6>display<F3>.
  1065.  
  1066. <keyword2>
  1067.  
  1068. :handler<F3> <#1f> A handler function or a sequence of handler functions.
  1069.  
  1070. :timeout<F3> <#1f> Specifies the timeout delay, in seconds.
  1071.  
  1072. :peek<#1e>p<F3> <#1f> If <F0>nil<F3>, events are removed from the 
  1073. event queue after processing.
  1074.  
  1075. :discard<#1e>p<F3> <#1f> If true, unprocessed events are discarded.
  1076.  
  1077. :force<#1e>output<#1e>p<F3> <#1f> If true, buffered output requests 
  1078. are sent.
  1079.  
  1080. <arg>
  1081.  
  1082. clauses<F6> <F3><#1f> Code to process specified event types.
  1083.  
  1084. <syntax0>
  1085.  
  1086. event<#1e>cond <F2>display <F3>&key <F0>:timeout :peek<#1e>p :discard<#1e>p 
  1087. (:force<#1e>output<#1e>p t)<Tab><F3>Macro<Index, Doc = operations, "xlib:event<#1e>cond", Sort String = "event<#1e>cond"><HR>
  1088. &body <F2>clauses
  1089.  
  1090. <return>
  1091.  
  1092. <Tab><F3>Returns: <F2><HR>
  1093.   handled<#1e>p<F3> <#1f> Type <F0>boolean<F3>.
  1094.  
  1095. <para>
  1096.  
  1097. Similar to <F6>event<#1e>case<F0> except that each of the clauses 
  1098. is a list of the form (<F2>event<#1e>match<F0> [<F2>event<#1e>slots<F0>] 
  1099. <F2>test<#1e>form<F0> &rest <F2>forms<F0>). Executes the <F2>test<#1e>form
  1100. <F0> of the clause that matches each queued event until a <F2>test<#1e>form
  1101. <F0> returns non<#1e><F6>nil<F0>. The body <F2>forms<F0> of the 
  1102. clause are then executed. The values returned by the last clause body 
  1103. form are then returned by <F6>event<#1e>cond<F0>.
  1104.  
  1105. <|,"12<#1e>124">When a <F2>test<#1e>form<F0> returns true and <F6>:peek<#1e>p<F0> 
  1106. is <F6>nil<F0>, or when a <F2>test<#1e>form<F0> returns <F6>nil<F0> 
  1107. and <F6>:discard<#1e>p<F0> is true, the matching event is removed 
  1108. from the event queue before the body <F2>forms<F0> are executed.
  1109.  
  1110. <arg>
  1111.  
  1112. display <#1f> <F3>A <F6>display<F3>.
  1113.  
  1114. <keyword2>
  1115.  
  1116. :handler<F3> <#1f> A handler function or a sequence of handler functions.
  1117.  
  1118. :timeout<F3> <#1f> Specifies the timeout delay in seconds.
  1119.  
  1120. :peek<#1e>p<F3> <#1f> If <F0>nil<F3>, events are removed from the 
  1121. event queue after processing.
  1122.  
  1123. :discard<#1e>p<F3> <#1f> If true, unprocessed events are discarded.
  1124.  
  1125. :force<#1e>output<#1e>p<F3> <#1f> If true, buffered output requests 
  1126. are sent.
  1127.  
  1128. <arg>
  1129.  
  1130. clauses<F6> <F3><#1f> Code to process specified event types.
  1131.  
  1132. <p1rule>
  1133.  
  1134. <Index, "event", "managing", "event queue", To Named = p1rule>
  1135. <Frame,
  1136.     Name =            p1rule,
  1137.     Placement =        At Anchor,
  1138.     Width =            6.35 inches,
  1139.     Height =        0.153 inches,
  1140.     Vertical Alignment =    0.007 inches,
  1141.     Shared Contents =    yes>
  1142.  
  1143. <p1stacked,
  1144.     Font =            F3,
  1145.     Left Tab =        -1.70/0 inches>
  1146.  
  1147. <F8>Managing the<Tab><F6>12.4<F0><#04>The following paragraphs 
  1148. describe CLX functions and macros used to:
  1149.  
  1150. <p1para,
  1151.     Bottom Margin =        0 inches,
  1152.     Alignment =        Both,
  1153.     Font =            F3,
  1154.     Allow Page Break After = yes>
  1155.  
  1156. <F8>Event Queue<Tab><F6><#04>
  1157.  
  1158. <bullet>
  1159.  
  1160. <F9>w<Tab><F0>Put a new event on the event queue
  1161.  
  1162. <F9>w<Tab><F0>Discard the current event
  1163.  
  1164. <F9>w<Tab><F0>Return the current length of the event queue
  1165.  
  1166. <F9>w<Tab><F0>Gain exclusive access to the event queue for a client 
  1167. process
  1168.  
  1169. <syntax>
  1170.  
  1171. queue<#1e>event <F2>display<F0> <F2>event<#1e>key <F3>&rest <F2>event<#1e>
  1172. slots<F3> &key <F0>:append<#1e>p <F3><Tab>Function<Index, Doc = operations, "xlib:queue<#1e>event", Sort String = "queue<#1e>event"><HR>
  1173. &allow<#1e>other<#1e>keys 
  1174.  
  1175. <para>
  1176.  
  1177. Places an event of the type given by <F2>event<#1e>key<F0> into 
  1178. the event queue. When <F6>:append<#1e>p<F0> is true, the event is 
  1179. placed at the tail of the queue; otherwise, the event is placed at 
  1180. the head of the queue. The actual <F2>event<#1e>slots<F0> passed 
  1181. depend on the event type. The keyword symbols used for each event 
  1182. type are event slot names defined by the <F6>declare<#1e>event<F0> 
  1183. macro and are described in paragraph 12.12.8, Declaring Event Types.
  1184.  
  1185. <arg>
  1186.  
  1187. display <F3><#1f> A <F6>display<F3>.
  1188.  
  1189. event<#1e>key<F6> <F3><#1f> Specifies the type of event placed in 
  1190. the queue.
  1191.  
  1192. event<#1e>slots<F6> <F3><#1f> Keyword<#1e>value pairs that describe 
  1193. the contents of an event.
  1194.  
  1195. <keyword2>
  1196.  
  1197. :append<#1e>p<F3> <#1f> If true, the event is placed at the tail 
  1198. of the queue; otherwise, the event is placed at the head of the queue.
  1199.  
  1200. <syntax0>
  1201.  
  1202. discard<#1e>current<#1e>event <F2>display<Tab><F3>Function<Index, Doc = operations, "xlib:discard<#1e>current<#1e>event", Sort String = "discard<#1e>current<#1e>event">
  1203.  
  1204. <return>
  1205.  
  1206. <Tab><F3>Returns:<HR>
  1207.   <F2>discarded<#1e>p<F0> <F3><#1f> Type <F0>boolean<F3>.
  1208.  
  1209. <para>
  1210.  
  1211. Discards the current event for the <F2>display<F0>. Returns <F6>nil<F0> 
  1212. when the event queue is empty; otherwise, returns <F6>t<F0>. This 
  1213. function provides extra flexibility for discarding events, but it 
  1214. should be used carefully; use <F6>event<#1e>cond<F0> instead, if 
  1215. possible. Typically, <F6>discard<#1e>current<#1e>event<F0> is called 
  1216. inside a handler function or a clause of an <F6>event<#1e>case<F0> 
  1217. form and is followed by another call to <F6>process<#1e>event<F0>, <F6>event
  1218. <#1e>case<F0>, or <F6>event<#1e>cond<F0>.
  1219.  
  1220. <arg>
  1221.  
  1222. display <#1f> <F3>A <F6>display<F3>.
  1223.  
  1224. <syntax0>
  1225.  
  1226. <|,"12<#1e>125">event<#1e>listen <F2>display<F0> <F3>&optional<F0> <F3>(<F0>timeout 
  1227. <F3>0)<F0><Tab><F3>Function<Index, Doc = operations, "xlib:event<#1e>listen", Sort String = "event<#1e>listen">
  1228.  
  1229. <return>
  1230.  
  1231. <Tab><F3>Returns:<F0><HR>
  1232.   <F2>event<#1e>count <F3><#1f> Type <F0>(or null integer)<F3>.
  1233.  
  1234. <para>
  1235.  
  1236. Returns the number of events queued locally. If the event queue is 
  1237. empty, <F6>event<#1e>listen<F0> waits for an event to arrive. If 
  1238. timeout is non<#1e><F6>nil<F0> and no event arrives within the specified 
  1239. timeout interval (given in seconds), <F6>event<#1e>listen<F0> returns <F6>ni
  1240. l<F0>; if timeout is <F6>nil<F0>, <F6>event<#1e>listen<F0> will 
  1241. not return until an event arrives.
  1242.  
  1243. <arg>
  1244.  
  1245. display <F3><#1f> A <F6>display<F3>.
  1246.  
  1247. timeout <F3><#1f> The number of seconds to wait for events.
  1248.  
  1249. <syntax>
  1250.  
  1251. with<#1e>event<#1e>queue <F2>display<F0> <F3>&body<F2> body<F0><Tab><F3>M
  1252. acro<Index, Doc = operations, "xlib:with<#1e>event<#1e>queue", Sort String = "with<#1e>event<#1e>queue">
  1253.  
  1254. <para>
  1255.  
  1256. Executes the <F2>body<F0> in a critical region in which the executing 
  1257. client process has exclusive access to the event queue. 
  1258.  
  1259. <arg>
  1260.  
  1261. display <#1f><F3> A <F6>display<F3>.
  1262.  
  1263. body <F3><#1f> Forms to execute.
  1264.  
  1265. <p1rule>
  1266.  
  1267. <Index, "event", "sending", To Named = p1rule>
  1268. <Frame,
  1269.     Name =            p1rule,
  1270.     Placement =        At Anchor,
  1271.     Width =            6.35 inches,
  1272.     Height =        0.153 inches,
  1273.     Vertical Alignment =    0.007 inches,
  1274.     Shared Contents =    yes>
  1275.  
  1276. <p1para,
  1277.     Alignment =        Both,
  1278.     Font =            F3,
  1279.     Allow Page Break After = yes>
  1280.  
  1281. <F8>Sending Events<Tab><F6>12.5<F0><#04>A client can send an event 
  1282. to a window. Clients selecting this window event will receive it just 
  1283. like any other event sent by the X server.
  1284.  
  1285. <syntax>
  1286.  
  1287. send<#1e>event <F2>window<F0> <F2>event<#1e>key event<#1e>mask <F3>&rest 
  1288. <F2>event<#1e>slots<F3> &key <F0><Tab><F3>Function<Index, Doc = operations, "xlib:send<#1e>event", Sort String = "send<#1e>event"><HR>
  1289. <F0>:propagate<#1e>p :display <F3>&allow<#1e>other<#1e>keys
  1290.  
  1291. <para>
  1292.  
  1293. Sends an event specified by the <F2>event<#1e>key<F0> and <F2>event<#1e>slot
  1294. s<F0> to the given destination <F2>window<F0>. Any active grabs 
  1295. are ignored. The <F2>event<#1e>slots<F0> passed depend on the event 
  1296. type. The keyword symbols used for each event type are event slot 
  1297. names defined by the <F6>declare<#1e>event<F0> macro and are described 
  1298. in paragraph 12.12.8, Declaring Event Types.
  1299.  
  1300. If the <F2>window<F0> is <F6>:pointer<#1e>window<F0>, the destination 
  1301. <F2>window<F0> is replaced with the window containing the pointer. 
  1302. If the <F2>window<F0> is <F6>:input<#1e>focus<F0>, the destination <F2>win
  1303. dow<F0> is replaced with the descendant of the focus window that 
  1304. contains the pointer or (if no such descendant exists) the focus window. 
  1305. The <F6>:display<F0> keyword is only required if the <F2>window<F0> 
  1306. is <F6>:pointer<#1e>window<F0> or <F6>:input<#1e>focus<F0>.
  1307.  
  1308. The <F2>event<#1e>key<F0> must be one of the core events, or one 
  1309. of the events defined by an extension, so the server can send the 
  1310. event with the correct byte<#1e>order. The contents of the event are 
  1311. otherwise unaltered and unchecked by the server, except that the <F6>send<#1e>
  1312. event<#1e>p<F0> event slot is set to true.
  1313.  
  1314. If the <F2>event<#1e>mask<F0> is <F6>nil<F0>, the event is sent 
  1315. to the client that created the destination <F2>window<F0> with an <F2>event<#1e>
  1316. mask<F0> of 0; if that client no longer exists, no event is sent. 
  1317. Otherwise, the event is sent to every client selecting any of the 
  1318. event types specified by <F2>event<#1e>mask<F0> on the destination <F2>windo
  1319. w<F0>.
  1320.  
  1321. If <F6>:propagate<#1e>p<F0> is true and no clients have selected 
  1322. any of the event types in <F2>event<#1e>mask<F0> on the destination <F2>wind
  1323. ow<F0>, the destination is replaced with the closest ancestor of <F2>window
  1324. <F0> for which some client has selected a type in <F2>event<#1e>mask<F0> 
  1325. and no intervening window has that type in its do<#1e>not<#1e>propagate 
  1326. mask. If no such window exists, or if the <F2>window<F0> is an ancestor 
  1327. of the focus window and <F6>:input<#1e>focus<F0> was originally 
  1328. specified as the destination, the event is not sent to any clients. 
  1329. Otherwise, the event is reported to every client selecting on the 
  1330. final destination any of the types specified in <F2>event<#1e>mask<F0>.
  1331.  
  1332. <arg>
  1333.  
  1334. window <F3><#1f> The destination <F6>window<F3> for the event.
  1335.  
  1336. event<#1e>key <F3><#1f> An <F6>event<#1e>key<F3> defining the type 
  1337. of event to send.
  1338.  
  1339. <|,"12<#1e>126">event<#1e>mask <F3><#1f> Specifies the event types that receiving 
  1340. clients must select.
  1341.  
  1342. event<#1e>slots<F3> <#1f> Keyword<#1e>value pairs that describe the 
  1343. contents of an event.
  1344.  
  1345. <keyword2>
  1346.  
  1347. :propagate<#1e>p <F3><#1f> If true, the event can be propagated to 
  1348. ancestors of the destination window.
  1349.  
  1350. :display <F3><#1f> A <F0>display<F3>.
  1351.  
  1352. <p1rule>
  1353.  
  1354. <Index, "pointer", "position", To Named = p1rule><Index, "event", "pointer", "position", To Named = p1rule>
  1355. <Frame,
  1356.     Name =            p1rule,
  1357.     Placement =        At Anchor,
  1358.     Width =            6.35 inches,
  1359.     Height =        0.153 inches,
  1360.     Vertical Alignment =    0.007 inches,
  1361.     Shared Contents =    yes>
  1362.  
  1363. <p1para,
  1364.     Alignment =        Both,
  1365.     Font =            F3,
  1366.     Allow Page Break After = yes>
  1367.  
  1368. <F8>Pointer Position<Tab><F6>12.6<#04><F0>The CLX functions affecting 
  1369. pointer position are discussed in the following paragraphs.
  1370.  
  1371. <syntax0>
  1372.  
  1373. query<#1e>pointer<F2> window<F0><Tab><F3>Function<Index, Doc = operations, "xlib:query<#1e>pointer", Sort String = "query<#1e>pointer">
  1374.  
  1375. <return,
  1376.     Left Tab =        -0.90/0/0.10/7.50 inches>
  1377.  
  1378. <Tab><F3>Returns:<F2><HR>
  1379. <Tab>x<F0> <F3><#1f> Type<F0> int16<F3>.<F0><HR>
  1380. <Tab><F2>y<F3> <#1f> Type <F0>int16<F3>.<F0><HR>
  1381. <F2><Tab>same<#1e>screen<#1e>p <F3><#1f> Type <F0>boolean<F3>.<F0><HR>
  1382. <Tab><F2>child <F3><#1f> Type <F0>window<F3> or <F0>null<F3>.<F0><HR>
  1383. <Tab><F2>state<#1e>mask<F3> <#1f> Type <F0>card16<F3>.<F0><HR>
  1384. <Tab><F2>root<#1e>x <F3><#1f> Type<F0> int16<F3>.<HR>
  1385. <Tab><F2>root<#1e>y<F3> <#1f> Type <F0>int16<F3>.<HR>
  1386. <Tab><F2>root<F3> <#1f> Type <F0>window<F3>.
  1387.  
  1388. <para>
  1389.  
  1390. Returns the current pointer coordinates relative to the given <F2>window<F0>. 
  1391. If <F6>query<#1e>pointer<F0> returns <F6>nil<F0> for <F2>same<#1e>screen<#1e>
  1392. p<F0>, the pointer is not on the same screen as the <F2>window<F0>. 
  1393. In this case, <F6>query<#1e>pointer<F0> returns a value of <F6>nil<F0> 
  1394. for <F2>child<F0> and a value of zero for <F2>x<F0> and <F2>y<F0>. 
  1395. If <F6>query<#1e>pointer<F0> returns true for <F2>same<#1e>screen<#1e>p
  1396. <F0>, the returned <F2>x<F0> and <F2>y<F0> are relative to the 
  1397. origin of window. The <F2>child<F0> is the child of the window containing 
  1398. the pointer, if any. The <F2>state<#1e>mask<F0> returned gives the 
  1399. current state of the modifier keys and pointer buttons. The returned <F2>root
  1400. <F0> is the root window currently containing the pointer. The returned <F2>ro
  1401. ot<#1e>x<F0> and <F2>root<#1e>y<F0> specify the pointer coordinates 
  1402. relative to <F2>root<F0>.
  1403.  
  1404. <arg>
  1405.  
  1406. window <F3><#1f> A <F6>window<F3> specifying the coordinate system 
  1407. for the returned position.
  1408.  
  1409. <syntax0>
  1410.  
  1411. global<#1e>pointer<#1e>position <F2>display<F0><Tab><F3>Function<Index, Doc = operations, "xlib:global<#1e>pointer<#1e>position", Sort String = "global<#1e>pointer<#1e>position">
  1412.  
  1413. <return,
  1414.     Left Tab =        -0.90/0/0.10/7.50 inches>
  1415.  
  1416. <F2><Tab><F3>Returns:<HR>
  1417. <F2><Tab>root<#1e>x <#1f><F3> Type <F0>int16<F3>.<F0><HR>
  1418. <F2><Tab>root<#1e>y<F3> <#1f> Type<F0> int16<F3>.<F0><HR>
  1419. <F2><Tab>root <F3><#1f> Type <F0>window<F3>.
  1420.  
  1421. <para>
  1422.  
  1423. Returns the <F2>root<F0> window currently containing the <F2>display<F0> 
  1424. pointer and the current position of the pointer relative to the <F2>root<F0>.
  1425.  
  1426. <arg>
  1427.  
  1428. display<F3> <#1f> A <F6>display<F3>.
  1429.  
  1430. <syntax0>
  1431.  
  1432. pointer<#1e>position <F2>window<F0><Tab><F3>Function<Index, Doc = operations, "xlib:pointer<#1e>position", Sort String = "pointer<#1e>position">
  1433.  
  1434. <return,
  1435.     Left Tab =        -0.90/0/0.10/7.50 inches>
  1436.  
  1437. <Tab><F3>Returns:<HR>
  1438. <Tab><F2>x <F3><#1f> Type<F0> int16<F3>.<F0><HR>
  1439. <Tab><F2>y<F3> <#1f> Type <F0>int16<F3>.<HR>
  1440. <Tab><F2>same<#1e>screen<#1e>p <F3><#1f> Type <F0>boolean<F3>.<HR>
  1441. <F2><Tab>child <F3><#1f> Type <F0>window<F3> or <F0>null<F3>.
  1442.  
  1443. <para>
  1444.  
  1445. Returns the current pointer coordinates relative to the given <F2>window<F0>. 
  1446. If <F6>pointer<#1e>position<F0> returns <F6>nil<F0> for <F2>same<#1e>scree
  1447. n<#1e>p<F0>, the pointer is not on the same screen as the <F2>window<F0>. 
  1448. In this case, <F6>pointer<#1e>position<F0> returns a value of <F6>nil<F0> 
  1449. for <F2>child<F0> and a value of zero for <F2>x<F0> and <F2>y<F0>. 
  1450. If <F6>pointer<#1e>position<F0> returns true for <F2>same<#1e>screen<#1e>p
  1451. <F0>, the returned <F2>x<F0> and <F2>y<F0> are relative to the 
  1452. origin of <F2>window<F0>.
  1453.  
  1454. <arg>
  1455.  
  1456. window <F3><#1f> A <F6>window<F3> specifying the coordinate system 
  1457. for the returned position.
  1458.  
  1459. <syntax0>
  1460.  
  1461. <|,"12<#1e>127">motion<#1e>events<F2> <F3>w<F2>indow<F0> <F3>&key<F0> 
  1462. :start :stop <F3>(<F0>:result<#1e>type 'list<F3>)<F0><Tab><F3>Function<Index, Doc = operations, "xlib:motion<#1e>events", Sort String = "motion<#1e>events">
  1463.  
  1464. <return,
  1465.     Left Tab =        -0.90/0/1.10 inches,
  1466.     Right Tab =        7.50 inches>
  1467.  
  1468. <Tab><F3>Returns:<F0> <HR>
  1469. <F2>  motion<#1e>events<F0> <F3><#1f> Type<F0> (repeat<#1e>seq 
  1470. (int16 x) (int16 y) (timestamp<HR>
  1471. <Tab>          time))<F3>.
  1472.  
  1473. <para>
  1474.  
  1475. Many X server implementations maintain a more precise history of pointer 
  1476. motion between event notifications. The pointer position at each pointer 
  1477. hardware interrupt can be stored into a buffer for later retrieval.This 
  1478. is called the <F2>motion history buffer<F0>. A paint program, for 
  1479. example, may want to have a precise history of where the pointer traveled, 
  1480. even though for most other applications this amount of detail is grossly 
  1481. excessive.
  1482.  
  1483. The <F6>motion<#1e>events<F0> function returns all events in the 
  1484. motion history buffer that fall between the specified <F6>:start<F0> 
  1485. and <F6>:stop<F0> timestamps (inclusive) and have coordinates that 
  1486. lie within the specified <F2>window<F0> (including borders) at its 
  1487. present placement. If the <F6>:start<F0> time is later than the <F6>:stop
  1488. <F0> time or if the <F6>:start<F0> time is in the future, no events 
  1489. are returned.
  1490.  
  1491. <arg>
  1492.  
  1493. window <F3><#1f> The <F6>window<F3> containing the returned motion 
  1494. events.
  1495.  
  1496. <keyword2>
  1497.  
  1498. :start, :stop <F3><#1f> <F0>timestamp<F3> values for the time interval 
  1499. for returned motion events.
  1500.  
  1501. <arg>
  1502.  
  1503. <F6>:result<#1e>type<F0> <F3><#1f> The form of the returned motion 
  1504. events.
  1505.  
  1506. <syntax>
  1507.  
  1508. warp<#1e>pointer <F2>destination<F0> <F2>destination<#1e>x destination<#1e>y
  1509. <F0><Tab><F3>Function<Index, Doc = operations, "xlib:warp<#1e>pointer", Sort String = "warp<#1e>pointer">
  1510.  
  1511. <para>
  1512.  
  1513. Moves the pointer to the given coordinates relative to the <F2>destination
  1514. <F0> window. <F6>warp<#1e>pointer<F0> should be rarely be used 
  1515. since the user should normally be in control of the pointer position. <F6>warp
  1516. <#1e>pointer<F0> generates events just as if the user had instantaneously 
  1517. moved the pointer from one position to another.
  1518.  
  1519. <F6>warp<#1e>pointer<F0> cannot move the pointer outside the confine<#1e>to 
  1520. window of an active pointer grab; an attempt to do so only moves the 
  1521. pointer as far as the closest edge of the confine<#1e>to window.
  1522.  
  1523. <arg>
  1524.  
  1525. destination <F3><#1f> The <F6>window<F3> into which the pointer 
  1526. is moved.
  1527.  
  1528. destination<#1e>x, destination<#1e>y <F3><#1f><F0> <F3>The new 
  1529. position of the pointer relative to the destination.
  1530.  
  1531. <syntax>
  1532.  
  1533. warp<#1e>pointer<#1e>relative <F2>display x<#1e>offset y<#1e>offset<F0><Tab>
  1534. <F3>Function<Index, Doc = operations, "xlib:warp<#1e>pointer<#1e>relative", Sort String = "warp<#1e>pointer<#1e>relative">
  1535.  
  1536. <para>
  1537.  
  1538. Moves the pointer by the given offsets. This function should rarely 
  1539. be used since the user should normally be in control of the pointer 
  1540. position. <F6>warp<#1e>pointer<#1e>relative<F0> generates events 
  1541. just as if the user had instantaneously moved the pointer from one 
  1542. position to another.
  1543.  
  1544. <F6>warp<#1e>pointer<#1e>relative<F0> cannot move the pointer outside 
  1545. the confine<#1e>to window of an active pointer grab; an attempt to 
  1546. do so only moves the pointer as far as the closest edge of the confine<#1e>to 
  1547. window.
  1548.  
  1549. <arg>
  1550.  
  1551. display <F3><#1f> A <F6>display<F3>.
  1552.  
  1553. x<#1e>offset, y<#1e>offset <F3><#1f> The offsets used to adjust the 
  1554. pointer position.
  1555.  
  1556. <syntax>
  1557.  
  1558. warp<#1e>pointer<#1e>if<#1e>inside <F2>destination destination<#1e>x 
  1559. destination<#1e>y <F0><Tab><F3>Function<Index, Doc = operations, "xlib:warp<#1e>pointer<#1e>if<#1e>inside", Sort String = "warp<#1e>pointer<#1e>if<#1e>inside"><F0><HR>
  1560. <F2>source source<#1e>x source<#1e>y <F3>&optional (<F2>source<#1e>width
  1561. <F3> 0) <HR>
  1562. (<F2>source<#1e>height<F3> 0)
  1563.  
  1564. <para>
  1565.  
  1566. Moves the pointer to the given position relative to the <F2>destination<F0> 
  1567. window. However, the move can only take place if the pointer is currently 
  1568. contained in a visible portion of the specified rectangle of the <F2>source
  1569. <F0> window. If <F2>source<#1e>height<F0> is zero, it is replaced 
  1570. with the current height of <F2>source <F0>window minus <F2>source<#1e>y
  1571. <F0>. If <F2>source<#1e>width<F0> is zero, it is replaced with 
  1572. the current width of <F2>source <F0>window minus <F2>source<#1e>x<F0>.
  1573.  
  1574. <|,"12<#1e>128"><F6>warp<#1e>pointer<#1e>if<#1e>inside<F0> generates events 
  1575. just as if the user had instantaneously moved the pointer from one 
  1576. position to another. <F6>warp<#1e>pointer<#1e>if<#1e>inside<F0> 
  1577. cannot move the pointer outside the confine<#1e>to window of an active 
  1578. pointer grab; an attempt to do so only moves the pointer as far as 
  1579. the closest edge of the confine<#1e>to window.
  1580.  
  1581. <arg>
  1582.  
  1583. destination <F3><#1f> The <F6>window<F3> into which the pointer 
  1584. is moved.
  1585.  
  1586. destination<#1e>x, destination<#1e>y <F3><#1f><F0> <F3>The new 
  1587. position of the pointer relative to the <F0>destination<F3>.
  1588.  
  1589. source<F3> <#1f> The <F6>window<F3> that must currently contain 
  1590. the pointer.
  1591.  
  1592. source<#1e>x, source<#1e>y, source<#1e>width, source<#1e>height <F3><#1f>The 
  1593. source rectangle that must currently contain the pointer.<F0> 
  1594.  
  1595. <syntax>
  1596.  
  1597. warp<#1e>pointer<#1e>relative<#1e>if<#1e>inside <F2>x<#1e>offset 
  1598. y<#1e>offset source source<#1e>x source<#1e>y<F0><Tab><F3>Function<Index, Doc = operations, "xlib:warp<#1e>pointer<#1e>relative<#1e>if<#1e>inside", Sort String = "warp<#1e>pointer<#1e>relative<#1e>if<#1e>inside">
  1599. <F0><HR>
  1600. <F3>&optional (<F2>source<#1e>width<F3> 0) (<F2>source<#1e>height<F3> 
  1601. 0)
  1602.  
  1603. <para>
  1604.  
  1605. Moves the pointer by the given offsets. However, the move can only 
  1606. take place if the pointer is currently contained in a visible portion 
  1607. of the specified rectangle of the <F2>source<F0> window. If <F2>source<#1e>h
  1608. eight<F0> is zero, it is replaced with the current height of <F2>source<#1e>w
  1609. indow<F0> minus <F2>source<#1e>y<F0>. If <F2>source<#1e>width<F0> 
  1610. is zero, it is replaced with the current width of <F2>source<#1e>window<F0> 
  1611. minus <F2>source<#1e>x<F0>.
  1612.  
  1613. <F6>warp<#1e>pointer<#1e>relative<#1e>if<#1e>inside<F0> generates 
  1614. events just as if the user had instantaneously moved the pointer from 
  1615. one position to another. <F6>warp<#1e>pointer<#1e>relative<#1e>if<#1e>inside
  1616. <F0> cannot move the pointer outside the confine<#1e>to window of 
  1617. an active pointer grab; an attempt to do so only moves the pointer 
  1618. as far as the closest edge of the confine<#1e>to window.
  1619.  
  1620. <arg>
  1621.  
  1622. x<#1e>offset, y<#1e>offset <F3><#1f> The offsets used to adjust the 
  1623. pointer position.
  1624.  
  1625. source<F3> <#1f> The <F6>window<F3> that must currently contain 
  1626. the pointer.
  1627.  
  1628. source<#1e>x, source<#1e>y, source<#1e>width, source<#1e>height <F3><#1f> 
  1629. The source rectangle that must currently contain the pointer.<F0> 
  1630.  
  1631. <p1rule>
  1632.  
  1633. <Index, "event", "managing", "input focus", To Named = p1rule>
  1634. <Frame,
  1635.     Name =            p1rule,
  1636.     Placement =        At Anchor,
  1637.     Width =            6.35 inches,
  1638.     Height =        0.153 inches,
  1639.     Vertical Alignment =    0.007 inches,
  1640.     Shared Contents =    yes>
  1641.  
  1642. <p1stacked,
  1643.     Font =            F3,
  1644.     Left Tab =        -1.70/0 inches>
  1645.  
  1646. <F8>Managing Input<Tab><F6>12.7<F0><#04>CLX provides the <F6>set<#1e>focus<#1e>
  1647. input<F0> and <F6>focus<#1e>input<F0> functions to set<F6><FJ>
  1648.  
  1649. <p1para,
  1650.     Alignment =        Both,
  1651.     Font =            F3,
  1652.     Allow Page Break After = yes>
  1653.  
  1654. <F8>Focus<Tab><F0>and get the keyboard input focus window.
  1655.  
  1656. <syntax>
  1657.  
  1658. set<#1e>input<#1e>focus <F2>display<F0> <F2>focus revert<#1e>to<F0> <F3>&o
  1659. ptional<F0> <F2>time<F0><Tab><F3>Function<Index, Doc = operations, "xlib:set<#1e>input<#1e>focus", Sort String = "set<#1e>input<#1e>focus">
  1660.  
  1661. <para>
  1662.  
  1663. Changes the keyboard input focus and the last<#1e>focus<#1e>change 
  1664. time. The function has no effect if the specified <F2>time<F0> is 
  1665. earlier than the current last<#1e>focus<#1e>change time or is later 
  1666. than the current server time; otherwise, the last<#1e>focus<#1e>change 
  1667. time is set to the specified <F2>time<F0>. The <F6>set<#1e>input<#1e>focus
  1668. <F0> function causes the X server to generate <F6>:focus<#1e>in<F0> 
  1669. and <F6>:focus<#1e>out <F0>events.
  1670.  
  1671. If <F6>:none<F0> is specified as the <F2>focus<F0>, all keyboard 
  1672. events are discarded until a new focus window is set. In this case, 
  1673. the <F2>revert<#1e>to<F0> argument is ignored.
  1674.  
  1675. If a window is specified as the <F2>focus<F0> argument, it becomes 
  1676. the keyboard's focus window. If a generated keyboard event would normally 
  1677. be reported to this window or one of its inferiors, the event is reported 
  1678. normally; otherwise, the event is reported with respect to the focus 
  1679. window.
  1680.  
  1681. If <F6>:pointer<#1e>root<F0> is specified as the <F2>focus<F0> 
  1682. argument, the input focus window is set to the root window of the 
  1683. screen containing the pointer when each keyboard event occurs. In 
  1684. this case, the <F2>revert<#1e>to<F0> argument is ignored.
  1685.  
  1686. <|,"12<#1e>129">The specified <F2>focus<F0> window must be viewable at the 
  1687. time of the request. If the <F2>focus<F0> window later becomes not 
  1688. viewable, the new focus window depends on the <F2>revert<#1e>to<F0> 
  1689. argument. If <F2>revert<#1e>to<F0> is specified as <F6>:parent<F0>, 
  1690. the <F2>focus<F0> reverts to the parent (or the closest viewable 
  1691. ancestor) and the new <F2>revert<#1e>to<F0> value is take to be <F6>:none
  1692. <F0>. If <F2>revert<#1e>to<F0> is <F6>:pointer<#1e>root<F0> or <F6>:none
  1693. <F0>, the <F2>focus<F0> reverts to that value. When the <F2>focus<F0> 
  1694. reverts, <F6>:focus<#1e>in <F0>and <F6>:focus<#1e>out<F0> events 
  1695. are generated, but the last<#1e>focus<#1e>change time is not affected.
  1696.  
  1697. <arg>
  1698.  
  1699. display<F3> <#1f> A <F6>display<F3>.
  1700.  
  1701. focus <F3><#1f> The new input focus <F6>window<F3>.
  1702.  
  1703. revert<#1e>to <F3><#1f> The focus <F6>window<F3> when focus is 
  1704. no longer viewable.
  1705.  
  1706. time <F3><#1f> A <F6>timestamp<F3>.
  1707.  
  1708. <syntax0>
  1709.  
  1710. input<#1e>focus <F2>display<F0><Tab><F3>Function<Index, Doc = operations, "xlib:input<#1e>focus", Sort String = "input<#1e>focus">
  1711.  
  1712. <return>
  1713.  
  1714. <Tab><F3>Returns:<HR>
  1715.  <F2> focus <F3><#1f> Type<F0> <F3>(<F0>or window <F3>(<F0>member 
  1716. :none :pointer<#1e>root<F3>)).<F0><HR>
  1717.  <F2> revert<#1e>to <F3><#1f> Type (<F0>or window <F3>(<F0>member 
  1718. :none :pointer<#1e>root :parent<F3>)).
  1719.  
  1720. <para>
  1721.  
  1722. Returns the <F2>focus<F0> window, <F6>:pointer<#1e>root<F0>, or <F6>:none
  1723. <F0>, depending on the current state of the focus window. <F2>revert<#1e>to
  1724. <F0> returns the current focus revert<#1e>to state.
  1725.  
  1726. <arg>
  1727.  
  1728. display <F3><#1f> A <F6>display<F3>.
  1729.  
  1730. <p1rule,
  1731.     New Page =        yes>
  1732.  
  1733. <|,"12<#1e>130"><Index, "grabbing", "pointer", To Named = p1rule><Index, "pointer", "grabbing", To Named = p1rule><Index, "event", "grabbing", "pointer", To Named = p1rule>
  1734. <Frame,
  1735.     Name =            p1rule,
  1736.     Placement =        At Anchor,
  1737.     Width =            6.35 inches,
  1738.     Height =        0.153 inches,
  1739.     Vertical Alignment =    0.007 inches,
  1740.     Shared Contents =    yes>
  1741.  
  1742. <p1stacked,
  1743.     Font =            F3,
  1744.     Left Tab =        -1.70/0 inches>
  1745.  
  1746. <F8>Grabbing<Tab><F6>12.8<#04><F0>CLX provides the <F6>grab<#1e>pointer
  1747. <F0> and <F6>ungrab<#1e>pointer<F0> functions for<FJ>
  1748.  
  1749. <p1para,
  1750.     Alignment =        Both,
  1751.     Font =            F3,
  1752.     Allow Page Break After = yes>
  1753.  
  1754. <F8>the Pointer<Tab><F0>grabbing and releasing pointer control.<F8> 
  1755.  
  1756. <syntax0>
  1757.  
  1758. grab<#1e>pointer <F2>window event<#1e>mask <F3>&key <F0>:owner<#1e>p 
  1759. :sync<#1e>pointer<#1e>p <Tab><F3>Function<Index, Doc = operations, "xlib:grab<#1e>pointer", Sort String = "grab<#1e>pointer"><HR>
  1760. <F0>:sync<#1e>keyboard<#1e>p :confine<#1e>to :cursor :time
  1761.  
  1762. <return>
  1763.  
  1764. <Tab><F3>Returns: <F2><HR>
  1765.   grab<#1e>status <#1f> <F3>One of <F0>:already<#1e>grabbed<F3>, <F0>:froze
  1766. n<F3>, <F0>:invalid<#1e>time<F3>, <Tab><Tab>                    <F0> 
  1767. :not<#1e>viewable<F3>, or <F0>:success<F3>.
  1768.  
  1769. <para>
  1770.  
  1771. Actively grabs control of the pointer. Further pointer events are 
  1772. only reported to the grabbing client. The request overrides any active 
  1773. pointer grab by this client.
  1774.  
  1775. If <F6>:owner<#1e>p<F0> is <F6>nil<F0>, all generated pointer 
  1776. events are reported with respect to <F2>window<F0>, and are only 
  1777. reported if selected by <F2>event<#1e>mask<F0>. If <F6>:owner<#1e>p<F0> 
  1778. is true, and if a generated pointer event would normally be reported 
  1779. to this client, it is reported normally; otherwise the event is reported 
  1780. with respect to the <F2>window<F0>, and is only reported if selected 
  1781. by <F2>event<#1e>mask<F0>. For either value of <F6>:owner<#1e>p<F0>, 
  1782. unreported events are simply discarded.
  1783.  
  1784. If <F6>:sync<#1e>pointer<#1e>p<F0> is <F6>nil<F0>, pointer event 
  1785. processing continues normally (asynchronously); if the pointer is 
  1786. currently frozen by this client, then processing of pointer events 
  1787. is resumed. If <F6>:sync<#1e>pointer<#1e>p<F0> is true<F6> <F0>(indicating 
  1788. a synchronous action), the pointer (as seen via the protocol) appears 
  1789. to freeze, and no further pointer events are generated by the server 
  1790. until the grabbing client issues a releasing <F6>allow<#1e>events<F0> 
  1791. request. Actual pointer changes are not lost while the pointer is 
  1792. frozen; they are simply queued for later processing.
  1793.  
  1794. If <F6>:sync<#1e>keyboard<#1e>p<F0> is <F6>nil<F0>, keyboard event 
  1795. processing is unaffected by activation of the grab. If <F6>:sync<#1e>keyboard<#1e>
  1796. p<F0> is true, the keyboard (as seen via the protocol) appears to 
  1797. freeze, and no further keyboard events are generated by the server 
  1798. until the grabbing client issues a releasing <F6>allow<#1e>events<F0> 
  1799. request. Actual keyboard changes are not lost while the keyboard is 
  1800. frozen; they are simply queued for later processing.
  1801.  
  1802. If <F6>:cursor<F0> is specified, it is displayed regardless of what 
  1803. window the pointer is in. Otherwise, the normal cursor for the <F2>window
  1804. <F0> is displayed.
  1805.  
  1806. If a <F6>:confine<#1e>to<F0> window is specified, the pointer is 
  1807. restricted to stay within that window. The :<F6>confine<#1e>to<F0> 
  1808. window does not need to have any relationship to the <F2>window<F0>. 
  1809. If the pointer is not initially in the <F6>:confine<#1e>to<F0> window, 
  1810. it is warped automatically to the closest edge (with <F6>:enter<F0>/<F6>:lea
  1811. ve<#1e>events<F0> generated normally) just before the grab activates. 
  1812. If the <F6>:confine<#1e>to<F0> window is subsequently reconfigured, 
  1813. the pointer is warped automatically as necessary to keep it contained 
  1814. in the window.
  1815.  
  1816. <F6>grab<#1e>pointer<F0> generates <F6>:enter<#1e>notify<F0> and <F6>:leav
  1817. e<#1e>notify<F0> events. <F6>grab<#1e>pointer<F0> can fail with 
  1818. a status of:
  1819.  
  1820. <bullet>
  1821.  
  1822. <F9>w<Tab><F6>:already<#1e>grabbed<F0> if the pointer is actively 
  1823. grabbed by some other client
  1824.  
  1825. <F9>w<Tab><F6>:frozen<F0> if the pointer is frozen by an active 
  1826. grab of another client
  1827.  
  1828. <F9>w<Tab><F6>:not<#1e>viewable<F0> if the <F2>window<F0> or 
  1829. the <F6>:confine<#1e>to<F0> window is not viewable, or if the <F6>:confine<#1e>
  1830. to<F0> window lies completely outside the boundaries of the root 
  1831. window.
  1832.  
  1833. <F9>w<Tab><F6>:invalid<#1e>time<F0> if the specified time is earlier 
  1834. than the last<#1e>pointer<#1e>grab time or later than the current 
  1835. server time. Otherwise, the last<#1e>pointer<#1e>grab time is set 
  1836. to the specified time, with current<#1e>time replaced by the current 
  1837. server time, and a value of <F6>:success<F0> is returned by <F6>grab<#1e>poi
  1838. nter<F0>.
  1839.  
  1840. <arg>
  1841.  
  1842. <|,"12<#1e>131">window <F3><#1f> The <F6>window<F3> grabbing the pointer.
  1843.  
  1844. event<#1e>mask <F3><#1f> A <F6>pointer<#1e>event<#1e>mask<F3>.
  1845.  
  1846. <keyword2>
  1847.  
  1848. :owner<#1e>p <F3><#1f> If true, all client windows receive pointer 
  1849. events normally.
  1850.  
  1851. :sync<#1e>pointer<#1e>p <F3><#1f> Indicates whether the pointer is 
  1852. in synchronous or asynchronous mode. 
  1853.  
  1854. :sync<#1e>keyboard<#1e>p <F3><#1f> Indicates whether the keyboard 
  1855. is in synchronous or asynchronous mode. 
  1856.  
  1857. :confine<#1e>to <F3><#1f> A <F0>window<F3> to which the pointer 
  1858. is confined.
  1859.  
  1860. :cursor <F3><#1f> A <F0>cursor<F3>.
  1861.  
  1862. :time <F3><#1f> A <F0>timestamp<F3>. A <F0>nil<F3> value means 
  1863. the current server time is used.
  1864.  
  1865. <syntax,
  1866.     Left Tab =        -0.90/0 inches,
  1867.     Right Tab =        7.50 inches>
  1868.  
  1869. ungrab<#1e>pointer <F2>display<F3> &key <F0>:time<Tab><F3>Function<Index, Doc = operations, "xlib:ungrab<#1e>pointer", Sort String = "ungrab<#1e>pointer">
  1870.  
  1871. <para>
  1872.  
  1873. Releases the pointer if this client has it actively grabbed (from 
  1874. either <F6>grab<#1e>pointer<F0>, <F6>grab<#1e>button<F0>, or from 
  1875. a normal button press), and releases any queued events. The request 
  1876. has no effect if the specified <F6>:time<F0> is earlier than the 
  1877. last<#1e>pointer<#1e>grab time or is later than the current server 
  1878. time. An <F6>ungrabpointer<F0> is performed automatically if the 
  1879. event window or <F6>:confine<#1e>to<F0> window for an active pointer 
  1880. grab becomes not viewable. 
  1881.  
  1882. This request generates <F6>:enter<#1e>notify<F0> and <F6>:leave<#1e>notify
  1883. <F0> events.
  1884.  
  1885. <arg>
  1886.  
  1887. display <F3><#1f> A <F6>display<F3>.
  1888.  
  1889. <keyword2>
  1890.  
  1891. :time <F3><#1f> A <F0>timestamp<F3>.
  1892.  
  1893. <syntax,
  1894.     Left Tab =        -0.90/0 inches,
  1895.     Right Tab =        7.50 inches>
  1896.  
  1897. change<#1e>active<#1e>pointer<#1e>grab <F2>display event<#1e>mask <F3>&option
  1898. al<F2> cursor time<F0><Tab><F3>Function<Index, Doc = operations, "xlib:change<#1e>active<#1e>pointer<#1e>grab", Sort String = "change<#1e>active<#1e>pointer<#1e>grab">
  1899.  
  1900. <para>
  1901.  
  1902. Changes the specified dynamic parameters if the pointer is actively 
  1903. grabbed by the client and the specified <F2>time<F0> is no earlier 
  1904. than the last<#1e>pointer<#1e>grab time and no later than the current 
  1905. server time. The interpretation of <F2>event<#1e>mask<F0> and <F2>cursor
  1906. <F0> are as in <F6>grab<#1e>pointer<F0>. <F6>change<#1e>active<#1e>pointer<#1e>
  1907. grab<F0> has no effect on the passive parameters of a <F6>grab<#1e>button
  1908. <F0>.
  1909.  
  1910. <arg>
  1911.  
  1912. display <F3><#1f> A <F6>display<F3>.
  1913.  
  1914. event<#1e>mask <F3><#1f> A <F6>pointer<#1e>event<#1e>mask<F3>.
  1915.  
  1916. cursor <F3><#1f> A <F6>cursor<F3> or <F6>nil<F3>.
  1917.  
  1918. time <F3><#1f> A <F6>timestamp<F3>.
  1919.  
  1920. <p1rule,
  1921.     New Page =        yes>
  1922.  
  1923. <|,"12<#1e>132"><Index, "grabbing", "button", To Named = p1rule><Index, "button", "grabbing", To Named = p1rule><Index, "event", "grabbing", "button", To Named = p1rule>
  1924. <Frame,
  1925.     Name =            p1rule,
  1926.     Placement =        At Anchor,
  1927.     Width =            6.35 inches,
  1928.     Height =        0.153 inches,
  1929.     Vertical Alignment =    0.007 inches,
  1930.     Shared Contents =    yes>
  1931.  
  1932. <p1stacked,
  1933.     Font =            F3,
  1934.     Left Tab =        -1.70/0 inches>
  1935.  
  1936. <F8>Grabbing<Tab><F6>12.9<#04><F0>CLX provides the <F6>grab<#1e>button
  1937. <F0> and <F6>ungrab<#1e>button<F0> functions for<FJ>
  1938.  
  1939. <p1para,
  1940.     Alignment =        Both,
  1941.     Font =            F3,
  1942.     Allow Page Break After = yes>
  1943.  
  1944. <F8>a Button<Tab><F0>passively grabbing and releasing pointer control.<#04>
  1945. <F8> 
  1946.  
  1947. <syntax,
  1948.     Left Tab =        -0.90/0 inches,
  1949.     Right Tab =        7.50 inches>
  1950.  
  1951. grab<#1e>button <F2>window button event<#1e>mask <F3>&key (<F0>:modifiers
  1952. <F3> 0) <F0>:owner<#1e>p <Tab><F3>Function<Index, Doc = operations, "xlib:grab<#1e>button", Sort String = "grab<#1e>button"><HR>
  1953. <F0>:sync<#1e>pointer<#1e>p :sync<#1e>keyboard<#1e>p<F3> <F0>:confine<#1e>to 
  1954. :cursor
  1955.  
  1956. <para>
  1957.  
  1958. This request establishes a passive grab. If the specified <F2>button<F0> 
  1959. is pressed when the specified modifier keys are down (and no other 
  1960. buttons or modifier keys are down), and:
  1961.  
  1962. <bullet>
  1963.  
  1964. <F9>w<Tab><F2>window<F0> contains the pointer
  1965.  
  1966. <F9>w<Tab><F0>The <F6>:confine<#1e>to<F0> window (if any) is viewable
  1967.  
  1968. <F9>w<Tab><F0>These constraints are not satisfied for any ancestor 
  1969. of <F2>window
  1970.  
  1971. <para>
  1972.  
  1973. then:
  1974.  
  1975. <bullet>
  1976.  
  1977. <F9>w<Tab><F0>The pointer is actively grabbed as described with <F6>grab<#1e>
  1978. pointer
  1979.  
  1980. <F9>w<Tab><F0>The last<#1e>pointer<#1e>grab time is set to the time 
  1981. that the button was pressed (as transmitted in the <F6>:button<#1e>press<F0> 
  1982. event)
  1983.  
  1984. <F9>w<Tab><F0>The <F6>:button<#1e>press<F0> event is reported
  1985.  
  1986. <para>
  1987.  
  1988. The interpretation of the remaining arguments is the same as with <F6>grab<#1e>
  1989. pointer<F0>. The active grab is terminated automatically when all 
  1990. buttons are released (independent of the state of modifier keys).
  1991.  
  1992. A zero <F2>modifier<F0> mask is equivalent to issuing the request 
  1993. for all possible modifier<#1e>key combinations (including the combination 
  1994. of no modifiers). It is not required that all specified modifiers 
  1995. have currently assigned keycodes. A <F2>button<F0> of <F6>:any<F0> 
  1996. is equivalent to issuing the request for all possible buttons. Otherwise, 
  1997. it is not required that the specified <F2>button<F0> currently be 
  1998. assigned to a physical button.
  1999.  
  2000. <arg>
  2001.  
  2002. window <F3><#1f> A <F6>window<F3>.
  2003.  
  2004. button <F3><#1f> The button (type <F6>card8<F3>) pressed or <F6>:any<F3>.
  2005.  
  2006. event<#1e>mask <F3><#1f> A <F6>pointer<#1e>event<#1e>mask<F3>.
  2007.  
  2008. <keyword2>
  2009.  
  2010. :modifiers <F3><#1f> A <F0>modifier<#1e>mask<F3>.
  2011.  
  2012. :owner<#1e>p <F3><#1f> If true, all client windows receive pointer 
  2013. events normally.
  2014.  
  2015. :sync<#1e>pointer<#1e>p <F3><#1f> Indicates whether the pointer is 
  2016. handled in a synchronous or asynchronous fashion. 
  2017.  
  2018. :sync<#1e>keyboard<#1e>p <F3><#1f> Indicates whether the keyboard 
  2019. is in synchronous or asynchronous mode. 
  2020.  
  2021. :confine<#1e>to <F3><#1f> A <F0>window<F3> to which the pointer 
  2022. is confined. 
  2023.  
  2024. :cursor <F3><#1f> A <F0>cursor<F3>.
  2025.  
  2026. <syntax,
  2027.     Left Tab =        -0.90/0 inches,
  2028.     Right Tab =        7.50 inches>
  2029.  
  2030. <|,"12<#1e>133">ungrab<#1e>button <F2>window button <F3>&key (<F0>:modifiers<F3> 
  2031. 0)<F0><Tab><F3>Function<Index, Doc = operations, "xlib:ungrab<#1e>button", Sort String = "ungrab<#1e>button">
  2032.  
  2033. <para>
  2034.  
  2035. Releases the passive button/key combination on the specified <F2>window<F0> 
  2036. if it was grabbed by this client. A zero <F2>modifier<F0> mask is 
  2037. equivalent to issuing the request for all possible modifier combinations 
  2038. including the combination of no modifiers. A <F2>button<F0> of <F6>:any
  2039. <F0> is equivalent to issuing the request for all possible buttons. 
  2040. This has no effect on an active grab.
  2041.  
  2042. <arg>
  2043.  
  2044. window <F3><#1f> A <F6>window<F3>.
  2045.  
  2046. button <F3><#1f> The button (type <F6>card8<F3>) that is released 
  2047. or <F6>:any<F3>.
  2048.  
  2049. <keyword2>
  2050.  
  2051. :modifiers <F3><#1f> A <F0>modifier<#1e>mask<F3>.
  2052.  
  2053. <p1rule>
  2054.  
  2055. <Index, "grabbing", "keyboard", To Named = p1rule><Index, "keyboard", "grabbing", To Named = p1rule><Index, "event", "grabbing", "keyboard", To Named = p1rule>
  2056. <Frame,
  2057.     Name =            p1rule,
  2058.     Placement =        At Anchor,
  2059.     Width =            6.35 inches,
  2060.     Height =        0.153 inches,
  2061.     Vertical Alignment =    0.007 inches,
  2062.     Shared Contents =    yes>
  2063.  
  2064. <p1stacked,
  2065.     Font =            F3,
  2066.     Left Tab =        -1.70/0 inches>
  2067.  
  2068. <F8>Grabbing<Tab><F6>12.10<#04><F0>CLX provides the<F6> grab<#1e>keyboard
  2069. <F0> and <F6>ungrab<#1e>keyboard<F0> functions<F6><FJ>
  2070.  
  2071. <p1para,
  2072.     Alignment =        Both,
  2073.     Font =            F3,
  2074.     Allow Page Break After = yes>
  2075.  
  2076. <F8>the Keyboard<Tab><F0>for actively grabbing and releasing control 
  2077. of the keyboard.<F8> 
  2078.  
  2079. <syntax0>
  2080.  
  2081. grab<#1e>keyboard <F2>window <F3>&key <F0>:owner<#1e>p :sync<#1e>pointer<#1e>
  2082. p :sync<#1e>keyboard<#1e>p <Tab><F3>Function<Index, Doc = operations, "xlib:grab<#1e>keyboard", Sort String = "grab<#1e>keyboard"><HR>
  2083. <F0>:time
  2084.  
  2085. <return>
  2086.  
  2087. <Tab><F3>Returns: <F2><HR>
  2088.   grab<#1e>status <#1f> <F3>One of <F0>:already<#1e>grabbed<F3>, <F0>:froze
  2089. n<F3>, <F0>:invalid<#1e>time<F3>, <Tab><Tab>                    <F0> 
  2090. :not<#1e>viewable<F3>, or <F0>:success<F3>.
  2091.  
  2092. <para>
  2093.  
  2094. Actively grabs control of the keyboard. Further key events are reported 
  2095. only to the grabbing client. The request overrides any active keyboard 
  2096. grab by this client. <F6>grab<#1e>keyboard<F0> generates <F6>:focus<#1e>in
  2097. <F0> and <F6>:focus<#1e>out<F0> events.
  2098.  
  2099. If <F6>:owner<#1e>p<F0> is <F6>nil<F0>, all generated key events 
  2100. are reported with respect to <F2>window<F0>. If <F6>:owner<#1e>p<F0> 
  2101. is true, then a generated key event that would normally be reported 
  2102. to this client is reported normally; otherwise the event is reported 
  2103. with respect to the <F2>window<F0>. Both <F6>:key<#1e>press<F0> 
  2104. and <F6>:key<#1e>release<F0> events are always reported, independent 
  2105. of any event selection made by the client.
  2106.  
  2107. If <F6>:sync<#1e>keyboard<#1e>p<F0> is <F6>nil<F0>, keyboard event 
  2108. processing continues normally (asynchronously); if the keyboard is 
  2109. currently frozen by this client, then processing of keyboard events 
  2110. is resumed. If <F6>:sync<#1e>keyboard<#1e>p<F0> is true, the keyboard 
  2111. (as seen via the protocol) appears to freeze, and no further keyboard 
  2112. events are generated by the server until the grabbing client issues 
  2113. a releasing <F6>allow<#1e>events<F0> request. Actual keyboard changes 
  2114. are not lost while the keyboard is frozen; they are simply queued 
  2115. for later processing.
  2116.  
  2117. If <F6>:sync<#1e>pointer<#1e>p<F0> is <F6>nil<F0>, pointer event 
  2118. processing is unaffected by activation of the grab. If <F6>:sync<#1e>pointer<#1e>
  2119. p<F0> is true, the pointer (as seen via the protocol) appears to 
  2120. freeze, and no further pointer events are generated by the server 
  2121. until the grabbing client issues a releasing <F6>allow<#1e>events<F0> 
  2122. request. Actual pointer changes are not lost while the pointer is 
  2123. frozen; they are simply queued for later processing.
  2124.  
  2125. The grab can fail with a status of:
  2126.  
  2127. <bullet>
  2128.  
  2129. <F9>w<Tab><F6>:already<#1e>grabbed<F0> if the keyboard is actively 
  2130. grabbed by some other client
  2131.  
  2132. <F9>w<Tab><F6>:frozen<F0> if the keyboard is frozen by an active 
  2133. grab from another client
  2134.  
  2135. <F9>w<Tab><F6>:not<#1e>viewable<F0> if <F2>window<F0> is not 
  2136. viewable
  2137.  
  2138. <|,"12<#1e>134"><F9>w<Tab><F6>:invalid<#1e>time<F0> if the specified time 
  2139. is earlier than the last<#1e>keyboard<#1e>grab time or later than 
  2140. the current server time. Otherwise, <F6>grab<#1e>keyboard<F0> returns 
  2141. a status of <F6>:success<F0> and last<#1e>keyboard<#1e>grab time 
  2142. is set to the specified time, with current<#1e>time replaced by current 
  2143. server time.
  2144.  
  2145. <arg>
  2146.  
  2147. window <F3><#1f> A <F6>window<F3>.
  2148.  
  2149. <keyword2>
  2150.  
  2151. :owner<#1e>p <F3><#1f> If true, all client windows receive keyboard 
  2152. input normally.
  2153.  
  2154. :sync<#1e>pointer<#1e>p <F3><#1f> Indicates whether the pointer is 
  2155. in synchronous or asynchronous mode. 
  2156.  
  2157. :sync<#1e>keyboard<#1e>p <F3><#1f> Indicates whether the keyboard 
  2158. is in synchronous or asynchronous mode. 
  2159.  
  2160. :time <F3><#1f> A <F0>timestamp<F3>. 
  2161.  
  2162. <syntax,
  2163.     Left Tab =        -0.90/0 inches,
  2164.     Right Tab =        7.50 inches>
  2165.  
  2166. ungrab<#1e>keyboard <F2>display <F3>&key <F0>:time<Tab><F3>Function<Index, Doc = operations, "xlib:ungrab<#1e>keyboard", Sort String = "ungrab<#1e>keyboard">
  2167.  
  2168. <para>
  2169.  
  2170. Releases the keyboard if this client has it actively grabbed (from 
  2171. either <F6>grab<#1e>keyboard<F0> or <F6>grab<#1e>key<F0>), and 
  2172. releases any queued events. The request has no effect if the specified 
  2173. time is earlier than the last<#1e>keyboard<#1e>grab time or is later 
  2174. than the current server time. An <F6>ungrab<#1e>keyboard<F0> is 
  2175. performed automatically if the event window for an active keyboard 
  2176. grab becomes not viewable.
  2177.  
  2178. <arg>
  2179.  
  2180. display <F3><#1f> A <F6>display<F3>. 
  2181.  
  2182. <keyword2>
  2183.  
  2184. :time <F3><#1f> A <F0>timestamp<F3>.
  2185.  
  2186. <p1rule>
  2187.  
  2188. <Index, "grabbing", "key", To Named = sectitle><Index, "key", "grabbing", To Named = sectitle><Index, "event", "grabbing", "key", To Named = sectitle>
  2189. <Frame,
  2190.     Name =            p1rule,
  2191.     Placement =        At Anchor,
  2192.     Width =            6.35 inches,
  2193.     Height =        0.153 inches,
  2194.     Vertical Alignment =    0.007 inches,
  2195.     Shared Contents =    yes>
  2196.  
  2197. <p1para,
  2198.     Alignment =        Both,
  2199.     Font =            F3,
  2200.     Allow Page Break After = yes>
  2201.  
  2202. <F8>Grabbing a Key<Tab><F6>12.11<#04><F0>The following paragraphs 
  2203. describe the functions used for passively grabbing and releasing the 
  2204. keyboard.
  2205.  
  2206. <syntax,
  2207.     Left Tab =        -0.90/0 inches,
  2208.     Right Tab =        7.50 inches>
  2209.  
  2210. grab<#1e>key <F2>window key <F3>&key (<F0>:modifiers<F3> 0) <F0>:owner<#1e>
  2211. p :sync<#1e>pointer<#1e>p <Tab><F3>Function<Index, Doc = operations, "xlib:grab<#1e>keyboard", Sort String = "grab<#1e>keyboard"><HR>
  2212. <F0>:sync<#1e>keyboard<#1e>p :time
  2213.  
  2214. <para>
  2215.  
  2216. This request establishes a passive grab on the keyboard. If the specified 
  2217. <F2>key<F0> (which can also be a modifier key) is pressed (whether 
  2218. or not any specified modifier keys are down), and either of the following 
  2219. is true:
  2220.  
  2221. <bullet>
  2222.  
  2223. <F9>w<Tab><F2>window<F0> is an ancestor of (or is) the focus window
  2224.  
  2225. <F9>w<Tab><F2>window<F0> is a descendant of the focus window and 
  2226. contains the pointer
  2227.  
  2228. <F9>w<Tab><F0>These constraints are not satisfied for any ancestor 
  2229. of <F2>window<F0>, then the following occurs:
  2230.  
  2231. <sbullet>
  2232.  
  2233. <F9>w<Tab><F0>The keyboard is actively grabbed as described in <F6>grab<#1e>
  2234. keyboard
  2235.  
  2236. <F9>w<Tab><F0>The last<#1e>keyboard<#1e>grab time is set to the 
  2237. time that the <F2>key<F0> was pressed (as transmitted in the <F6>:key<#1e>pr
  2238. ess<F0> event)
  2239.  
  2240. <F9>w<Tab><F0>The <F6>:key<#1e>press<F0> event is reported
  2241.  
  2242. <para>
  2243.  
  2244. The interpretation of the remaining arguments is as for <F6>grab<#1e>keyboard
  2245. <F0>. The active grab is terminated automatically when the specified <F2>key
  2246. <F0> has been released, independent of the state of the modifier 
  2247. keys.
  2248.  
  2249. <|,"12<#1e>135">A zero modifier mask is equivalent to issuing the request for 
  2250. all possible modifier combinations (including the combination of no 
  2251. modifiers). It is not required that all specified modifiers have currently 
  2252. assigned keycodes. A <F2>key<F0> of <F6>:any<F0> is equivalent 
  2253. to issuing the request for all possible keycodes. Otherwise, the <F2>key<F0> 
  2254. must be in the range specified by <F6>display<#1e>min<#1e>keycode<F0> 
  2255. and <F6>display<#1e>max<#1e>keycode<F0> in the connection setup.
  2256.  
  2257. <arg>
  2258.  
  2259. window <F3><#1f> A <F6>window<F3>.
  2260.  
  2261. key <F3><#1f> The key (type <F6>card8<F3>) to be grabbed or <F6>:any<F3>.
  2262.  
  2263. <keyword2>
  2264.  
  2265. :modifiers <F3><#1f> A <F0>modifier<#1e>mask<F3>.
  2266.  
  2267. :owner<#1e>p <F3><#1f> If true, all client windows receive keyboard 
  2268. input normally.
  2269.  
  2270. :sync<#1e>pointer<#1e>p <F3><#1f> Indicates whether the pointer is 
  2271. in synchronous or asynchronous mode. 
  2272.  
  2273. :sync<#1e>keyboard<#1e>p <F3><#1f> Indicates whether the keyboard 
  2274. is in synchronous or asynchronous mode. 
  2275.  
  2276. :time <F3><#1f> A <F0>timestamp<F3>. 
  2277.  
  2278. <syntax,
  2279.     Left Tab =        -0.90/0 inches,
  2280.     Right Tab =        7.50 inches>
  2281.  
  2282. ungrab<#1e>key <F2>window key <F3>&key (<F0>:modifiers<F3> 0)<F0><Tab>
  2283. <F3>Function<Index, Doc = operations, "xlib:ungrab<#1e>key", Sort String = "ungrab<#1e>key">
  2284.  
  2285. <para>
  2286.  
  2287. Releases the <F2>key<F0> combination on the specified <F2>window<F0> 
  2288. if it was grabbed by this client. A zero modifier mask of <F6>:any <F0>is 
  2289. equivalent to issuing the request for all possible modifier combinations 
  2290. (including the combination of no modifiers). A <F2>key<F0> of <F6>:any<F0> 
  2291. is equivalent to issuing the request for all possible keycodes. <F6>ungrab<#1e>
  2292. key<F0> has no effect on an active grab.
  2293.  
  2294. <arg>
  2295.  
  2296. window <F3><#1f> A <F6>window<F3>.
  2297.  
  2298. key <F3><#1f> The key (type <F6>card8<F3>) to be released or <F6>:any<F3>.
  2299.  
  2300. <keyword2>
  2301.  
  2302. :modifiers <F3><#1f> A <F0>modifier<#1e>mask<F3>.
  2303.  
  2304. <p1rule>
  2305.  
  2306. <Index, "event", "types", To Named = p1rule>
  2307. <Frame,
  2308.     Name =            p1rule,
  2309.     Placement =        At Anchor,
  2310.     Width =            6.35 inches,
  2311.     Height =        0.153 inches,
  2312.     Vertical Alignment =    0.007 inches,
  2313.     Shared Contents =    yes>
  2314.  
  2315. <p1para,
  2316.     Bottom Margin =        0.12 inches,
  2317.     Alignment =        Both,
  2318.     Font =            F3,
  2319.     Allow Page Break After = yes>
  2320.  
  2321. <F8>Event Types<Tab><F6>12.12<F0><#04>The following paragraphs 
  2322. contain detailed descriptions of the contents of each event type. 
  2323. In CLX, events are not actually represented by structures, but rather 
  2324. by lists of keyword values passed to handler functions or by values 
  2325. bound to symbols within the clauses of <F6>event<#1e>case<F0> and <F6>event<#1e>
  2326. cond<F0> forms. Nevertheless, it is convenient to describe event 
  2327. contents in terms of slots and to identify the components of events 
  2328. with slot name symbols. In fact, CLX uses the <F6>declare<#1e>event<F0> 
  2329. macro to define event slot symbols and to map these symbols to specific 
  2330. event data items returned by the X server (see paragraph 12.12.8, 
  2331. Declaring Event Types). 
  2332.  
  2333. <para,
  2334.     Bottom Margin =        0.12 inches>
  2335.  
  2336. The following paragraphs describe each event type, listing its <F6>event<#1e>k
  2337. ey<F0> keyword symbol and its slot name symbols. An event keyword 
  2338. symbol identifies a specific event type. An event keyword symbol can 
  2339. be given as an argument to <F6>send<#1e>event<F0> or to an event 
  2340. handler function; it can also appear in the <F2>event<#1e>match<F0> 
  2341. form of an <F6>event<#1e>case<F0> clause. An event slot name symbol 
  2342. identifies a specific event data item. Event slot names appear as 
  2343. keywords with associated values among the arguments passed to <F6>send<#1e>eve
  2344. nt<F0> or to an event handler function; as non<#1e>keyword symbols, 
  2345. they can also be in the <F2>event<#1e>slots<F0> form of an <F6>event<#1e>cas
  2346. e<F0> clause.
  2347.  
  2348. <para>
  2349.  
  2350. In certain cases, more than one name symbol is defined for the same 
  2351. event slot. For example, in <F6>:key<#1e>press<F0> events, the symbols <F2>w
  2352. indow<F0> and <F2>event<#1e>window<F0> both refer to the same event 
  2353. data item.
  2354.  
  2355. <p2rule>
  2356.  
  2357. <|,"12<#1e>136"><Index, "pointer", "events", To Named = p2rule><Index, "keyboard", "events", To Named = p2rule><Index, "event", "pointer", To Named = p2rule><Index, "event", "keyboard", To Named = p2rule>
  2358. <Frame,
  2359.     Name =            p2rule,
  2360.     Placement =        At Anchor,
  2361.     Width =            4.75 inches,
  2362.     Height =        0.15 inches,
  2363.     Vertical Alignment =    0.007 inches,
  2364.     Shared Contents =    yes>
  2365.  
  2366. <p2stacked,
  2367.     Font =            F3>
  2368.  
  2369. <Tab><F6>Keyboard and<Tab>12.12.1<#04><F0>The keyboard and pointer 
  2370. events are: <F6>:key<#1e>press, :key<#1e>release,<FJ>
  2371.  
  2372. <p2para,
  2373.     Alignment =        Both,
  2374.     Font =            F3,
  2375.     Allow Page Break Within = yes,
  2376.     Allow Page Break After = yes,
  2377.     TOC Doc Name =        >
  2378.  
  2379. <F6> <Tab>Pointer Events<F0><Tab><F6>:button<#1e>press, :button<#1e>release
  2380. <F0>, <F6>:motion<#1e>notify<F0>, <F6>:enter<#1e>notify<F0>, 
  2381. and<F6> :leave<#1e>notify.
  2382.  
  2383. <syntax>
  2384.  
  2385. <Index, "event", ":key<#1e>press", Sort String = "key<#1e>press"><Index, "event", ":key<#1e>release", Sort String = "key<#1e>release"><Index, "event", ":button<#1e>press", Sort String = "button<#1e>press"><Index, "event", ":button<#1e>release", Sort String = "button<#1e>release"><Index, ":key<#1e>press event", Sort String = "key<#1e>press event"><Index, ":key<#1e>release event", Sort String = "key<#1e>release event"><Index, ":button<#1e>press event", Sort String = "button<#1e>press event"><Index, ":button<#1e>release event", Sort String = "button<#1e>release event">
  2386. :key<#1e>press, :key<#1e>release, :button<#1e>press, :button<#1e>release<Tab>
  2387. <F3>Event Type
  2388.  
  2389. <arg>
  2390.  
  2391. Selected by<F3>: <#1f><F6> :key<#1e>press<F3>, <F6>:key<#1e>release<F3>,
  2392. <F6> :button<#1e>press<F3>, or <F6>:button<#1e>release<F3>.<F6> 
  2393.  
  2394. <para>
  2395.  
  2396. <F6>:key<#1e>press<F0>, and<F6> :key<#1e>release<F0> events are 
  2397. generated when a key or pointer button changes state. Note that<F6> 
  2398. :key<#1e>press <F0>and <F6>:key<#1e>release<F0> are generated for 
  2399. all keys, even those mapped to modifiers. All of these event types 
  2400. have the same slots. The window containing the pointer at the time 
  2401. of the event is referred to as the <F2>source<F0> window. The <F2>event 
  2402. window<F0> is the window to which the event is actually reported. 
  2403. The event window is found by starting with the source window and looking 
  2404. up the hierarchy for the first window on which any client has selected 
  2405. interest in the event (provided no intervening window prohibits event 
  2406. generation by including the event type in its do<#1e>not<#1e>propagate<#1e>mask
  2407. ). The actual window used for reporting can be modified by active 
  2408. grabs and, in the case of keyboard events, can be modified by the 
  2409. focus window.
  2410.  
  2411. <para,
  2412.     Bottom Margin =        0.08 inches>
  2413.  
  2414. A <F6>:button<#1e>press<F0> event has the effect of a temporary <F6>grab<#1e>
  2415. button<F0>. When a pointer button is pressed and no active pointer 
  2416. grab is in progress, the ancestors of the source window are searched 
  2417. from the <F2>root<F0> down, looking for a passive grab to activate. 
  2418. If no matching passive grab on the button exists, then an active grab 
  2419. is started automatically for the client receiving the <F6>:button<#1e>press
  2420. <F0> event, and the last<#1e>pointer<#1e>grab time is set to the 
  2421. current server time. The effect is essentially equivalent to calling <F6>grab<#1e>
  2422. button<F0> with the following arguments:
  2423.  
  2424. <ritabhd1,
  2425.     Left Tab =        0/1.60/3.50/7.50 inches>
  2426.  
  2427. <Tab-><Tab-><Tab-><HR>
  2428. Argument<Tab>Description<HR>
  2429. <Tab-><Tab-><Tab->
  2430.  
  2431. <F2>window<F3><Tab>The event window.<HR>
  2432. <F2>button<F3><Tab>The button that was pressed.
  2433.  
  2434. <F2>event<#1e>mask<F3><Tab>The client's selected pointer events 
  2435. on the event <Tab><Tab><Tab> window.<F0><HR>
  2436. :modifiers<Tab><F3>0<F0><HR>
  2437. :owner<#1e>p<Tab>t<F3> if the client has <F0>:owner<#1e>grab<#1e>button<F3> 
  2438. selected <Tab><Tab><Tab> on the event window; otherwise<F2> <F0>nil<F3>.
  2439. <F0><HR>
  2440. :sync<#1e>pointer<#1e>p<Tab>nil<HR>
  2441. :sync<#1e>keyboard<#1e>p<Tab>nil<HR>
  2442. :confine<#1e>to<Tab>nil<HR>
  2443. :cursor<Tab>nil
  2444.  
  2445. <endrule,
  2446.     Bottom Margin =        0.08 inches>
  2447.  
  2448. <Tab-><Tab-><Tab-><Tab->
  2449.  
  2450. <para>
  2451.  
  2452. The <F6>:button<#1e>press<F0> grab is terminated automatically when 
  2453. all buttons are released. The functions <F6>ungrab<#1e>pointer<F0> 
  2454. and <F6>change<#1e>active<#1e>pointer<#1e>grab<F0> can both be used 
  2455. to modify the <F6>:button<#1e>press<F0> grab.
  2456.  
  2457. <indentA>
  2458.  
  2459. <F2>window, event<#1e>window<F0> <#1f> Type <F6>window<F0>.
  2460.  
  2461. <indentB>
  2462.  
  2463. The window receiving the event.
  2464.  
  2465. <indentA>
  2466.  
  2467. <F2>code<F6> <F0><#1f> Type <F6>card8<F0>.
  2468.  
  2469. <indentB>
  2470.  
  2471. The <F2>code<F0> argument varies with the event type. For <F6>:key<#1e>press
  2472. <F0> and <F6>:key<#1e>release<F0>, <F2>code<F0> is the keycode 
  2473. (see paragraph 14.4, Keyboard Encodings). For <F6>:button<#1e>press<F0> 
  2474. and <F6>:button<#1e>release<F0>, <F2>code<F0> is the pointer button 
  2475. number.
  2476.  
  2477. <indentA,
  2478.     New Page =        yes>
  2479.  
  2480. <|,"12<#1e>137"><F2>x<F6> <F0><#1f> Type <F6>int16<F0>.
  2481.  
  2482. <indentB>
  2483.  
  2484. If <F2>event<#1e>window<F0> is on the same screen as root, then <F2>x<F0> 
  2485. and <F2>y<F0> are the pointer coordinates relative to the <F2>event<#1e>wind
  2486. ow<F0>; otherwise <F2>x<F0> and <F2>y<F0> are zero.
  2487.  
  2488. <indentA>
  2489.  
  2490. <F2>y<F6> <F0><#1f> Type <F6>int16<F0>.
  2491.  
  2492. <indentB>
  2493.  
  2494. If <F2>event<#1e>window<F0> is on the same screen as root, then <F2>x<F0> 
  2495. and <F2>y<F0> are the pointer coordinates relative to the <F2>event<#1e>wind
  2496. ow<F0>; otherwise <F2>x<F0> and <F2>y<F0> are zero.
  2497.  
  2498. <indentA>
  2499.  
  2500. <F2>state<F6> <F0><#1f> Type <F6>card16<F0>.
  2501.  
  2502. <indentB>
  2503.  
  2504. A mask that gives the state of the buttons and modifier keys just 
  2505. before the event.
  2506.  
  2507. <indentA>
  2508.  
  2509. <F2>time<F6> <F0><#1f> Type <F6>card32<F0>.
  2510.  
  2511. <indentB>
  2512.  
  2513. A timestamp for the moment when the event occurred.
  2514.  
  2515. <indentA>
  2516.  
  2517. <F2>root<F6> <F0><#1f> Type <F6>window<F0>.
  2518.  
  2519. <indentB>
  2520.  
  2521. The root window of the source window.
  2522.  
  2523. <indentA>
  2524.  
  2525. <F2>root<#1e>x<F6> <F0><#1f> Type <F6>int16<F0>.
  2526.  
  2527. <indentB>
  2528.  
  2529. The x coordinate of the pointer position relative to root at the time 
  2530. of the event.
  2531.  
  2532. <indentA>
  2533.  
  2534. <F2>root<#1e>y<F0> <#1f><F2> <F0>Type <F6>int16<F0>.
  2535.  
  2536. <indentB>
  2537.  
  2538. The y coordinate of the pointer position relative to root at the time 
  2539. of the event<F2>.
  2540.  
  2541. <indentA>
  2542.  
  2543. <F2>child <F0><#1f> Type (<F6>or null window<F0>).
  2544.  
  2545. <indentB>
  2546.  
  2547. If the source window is an inferior of the <F2>event<#1e>window<F0>, <F2>chi
  2548. ld<F0> is set to the child of <F2>event<#1e>window<F0> that is 
  2549. an ancestor of (or is) the source window; otherwise, it is set to<F2> <F6>nil
  2550. <F2>.
  2551.  
  2552. <indentA>
  2553.  
  2554. <F2>same<#1e>screen<#1e>p <F0><#1f> Type <F6>boolean<F0>.
  2555.  
  2556. <indentB>
  2557.  
  2558. True if <F2>event<#1e>window<F0> and root are on the same screen.
  2559.  
  2560. <syntax>
  2561.  
  2562. <Index, "event", ":motion<#1e>notify", Sort String = "motion<#1e>notify"><Index, ":motion<#1e>notify event", Sort String = "motion<#1e>notify event">:motion<#1e>notify<Tab><F3>Event 
  2563. Type
  2564.  
  2565. <arg>
  2566.  
  2567. Selected by: <F3><#1f> <F6>:button<#1e>1<#1e>motion<F3>,<F6> :button<#1e>2<#1e>
  2568. motion<F3>,<F6> :button<#1e>3<#1e>motion<F3>,<HR>
  2569. <F6>:button<#1e>4<#1e>motion<F3>,<F6> :button<#1e>5<#1e>motion<F3>, <F6>:b
  2570. utton<#1e>motion<F3>, or<F6> :pointer<#1e>motion<F3>.
  2571.  
  2572. <para>
  2573.  
  2574. The <F6>:motion<#1e>notify<F0> event is generated when the pointer 
  2575. moves. A <F6>:motion<#1e>notify<F0> event has the same slots as <F6>:button<#1e>
  2576. press,<F0> <F6>:button<#1e>release<F0>, <F6>:key<#1e>press<F0>, 
  2577. and <F6>:key<#1e>release <F0>events, with the exception that the <F2>code
  2578. <F0> slot is replaced by the <F2>hint<#1e>p<F0> slot. As with these 
  2579. other events, the event window for <F6>:motion<#1e>notify<F0> is 
  2580. found by starting with the source window and looking up the hierarchy 
  2581. for the first window on which any client has selected interest in 
  2582. the event (provided no intervening window prohibits event generation 
  2583. by including <F6>:motion<#1e>notify<F0> in its do<#1e>not<#1e>propagate<#1e>m
  2584. ask).The actual window used for reporting can be modified by active 
  2585. grabs.
  2586.  
  2587. <|,"12<#1e>138"><F6>:motion<#1e>notify<F0> events are generated only when 
  2588. the motion begins and ends in the window. The granularity of motion 
  2589. events is not guaranteed, but a client selecting for motion events 
  2590. is guaranteed to get at least one event when the pointer moves and 
  2591. comes to rest. Selecting <F6>:pointer<#1e>motion<F0> generates <F6>:motion<#1e>
  2592. notify<F0> events regardless of the state of the pointer buttons. 
  2593. By selecting some subset of <F6>:button[1<#1e>5]<#1e>motion<F0> 
  2594. instead, <F6>:motion<#1e>notify<F0> events are only received when 
  2595. one or more of the specified buttons are pressed. By selecting <F6>:button<#1e>
  2596. motion<F0>, <F6>:motion<#1e>notify<F0> events are only received 
  2597. when at least one button is pressed. If <F6>:pointer<#1e>motion<#1e>hint<F0> 
  2598. is also selected, the server is free to send only one <F6>:motion<#1e>notify
  2599. <F0>, until either the key or button state changes, the pointer leaves 
  2600. the event window, or the client calls <F6>query<#1e>pointer<F0> 
  2601. or <F6>motion<#1e>events<F0>.
  2602.  
  2603. <indentA>
  2604.  
  2605. <F2>hint<#1e>p<F6> <F0><#1f> Type <F6>boolean<F0>.
  2606.  
  2607. <indentB>
  2608.  
  2609. True if the event is a hint generated by selecting <F6>:pointer<#1e>motion<#1e>
  2610. hint<F0>.
  2611.  
  2612. <syntax>
  2613.  
  2614. <Index, "event", ":enter<#1e>notify", Sort String = "enter<#1e>notify"><Index, "event", ":leave<#1e>notify", Sort String = "leave<#1e>notify"><Index, ":enter<#1e>notify event", Sort String = "enter<#1e>notify event"><Index, ":leave<#1e>notify event", Sort String = "leave<#1e>notify event">
  2615. :enter<#1e>notify, :leave<#1e>notify<Tab><F3>Event Type
  2616.  
  2617. <arg>
  2618.  
  2619. Selected by: <F3><#1f><F0> <F6>:enter<#1e>window<F0> <F3>or<F0> <F6>:lea
  2620. ve<#1e>window<F3>.
  2621.  
  2622. <para>
  2623.  
  2624. If pointer motion or a window hierarchy change causes the pointer 
  2625. to be in a different window than before, <F6>:enter<#1e>notify<F0> 
  2626. and <F6>:leave<#1e>notify<F0> events are generated instead of a <F6>:motion<#1e>
  2627. notify<F0> event. All <F6>:enter<#1e>notify<F0> and <F6>:leave<#1e>notify
  2628. <F0> events caused by a hierarchy change are generated after any 
  2629. hierarchy event (<F6>:unmap<#1e>notify<F0>,<F6> :map<#1e>notify<F0>, <F6>:
  2630. configure<#1e>notify<F0>, <F6>:gravity<#1e>notify<F0>,<F2> <F0>or <F6>:ci
  2631. rculate<#1e>notify<F0>) caused by that change, but the ordering of <F6>:enter
  2632. <#1e>notify<F0> and <F6>:leave<#1e>notify<F0> events with respect 
  2633. to <F6>:focus<#1e>out<F0>, <F6>:visibility<#1e>notify<F0>, and <F6>:exposu
  2634. re<F0> events is not constrained by the X protocol. An <F6>:enter<#1e>notify
  2635. <F0> or <F6>:leave<#1e>notify <F0>event can also be generated when 
  2636. a client application calls <F6>change<#1e>active<#1e>pointer<#1e>grab<F0>,
  2637. <F6> grab<#1e>pointer<F0>, or <F6>ungrab<#1e>pointer<F0>.
  2638.  
  2639. <indentA>
  2640.  
  2641. <F2>window, event<#1e>window<F6> <F0><#1f> Type <F6>window<F0>.
  2642.  
  2643. <indentB>
  2644.  
  2645. The window receiving the event.
  2646.  
  2647. <indentA>
  2648.  
  2649. <F2>x <F0><#1f><F2> <F0>Type <F6>int16<F0>.
  2650.  
  2651. <indentB>
  2652.  
  2653. The final pointer position. If <F2>event<#1e>window<F0> is on the 
  2654. same screen as root, then <F2>x<F0> and <F2>y<F0> are the pointer 
  2655. coordinates relative to the <F2>event<#1e>window<F0>; otherwise <F2>x<F0> 
  2656. and <F2>y<F0> are zero.
  2657.  
  2658. <indentA>
  2659.  
  2660. <F2>y<F0> <#1f> Type <F6>int16<F0>.
  2661.  
  2662. <indentB>
  2663.  
  2664. The final pointer position. If <F2>event<#1e>window<F0> is on the 
  2665. same screen as root, then <F2>x<F0> and <F2>y<F0> are the pointer 
  2666. coordinates relative to the <F2>event<#1e>window<F0>; otherwise <F2>x<F0> 
  2667. and <F2>y<F0> are zero.
  2668.  
  2669. <indentA>
  2670.  
  2671. <F2>mode <F0><#1f><F6> <F0>Type (<F6>member :normal :grab :ungrab<F0>).
  2672.  
  2673. <indentB>
  2674.  
  2675. Events caused when the pointer is actively grabbed have mode <F6>:grab<F0>. 
  2676. Events caused when an active pointer grab deactivates have mode <F6>:ungrab
  2677. <F0>. In all other cases, mode is <F6>:normal<F0>.
  2678.  
  2679. <indentA,
  2680.     New Page =        yes>
  2681.  
  2682. <|,"12<#1e>139"><F2>kind<F6> <F0><#1f> Type (<F6>member :ancestor :virtual 
  2683. :inferior :nonlinear                                 :nonlinear<#1e>virtual
  2684. <F0>).
  2685.  
  2686. <indentB>
  2687.  
  2688. When the pointer moves from window A to window B, and A is an inferior 
  2689. of B:
  2690.  
  2691. <ssbullet>
  2692.  
  2693. <F9>w<Tab><F6>:leave<#1e>notify<F0> with <F2>kind<F0> <F6>:ancestor<F0> 
  2694. is generated on A
  2695.  
  2696. <F9>w<Tab><F6>:leave<#1e>notify<F0> with <F2>kind<F0> <F6>:virtual <F0>i
  2697. s generated on each window between A and B exclusive (in that order) 
  2698.  
  2699. <F9>w<Tab><F6>:enter<#1e>notify <F0>with <F2>kind<F0> <F6>:inferior 
  2700. <F0>is generated on B
  2701.  
  2702. <indentB>
  2703.  
  2704. When the pointer moves from window A to window B, and B is an inferior 
  2705. of A:
  2706.  
  2707. <ssbullet>
  2708.  
  2709. <F9>w<Tab><F6>:leave<#1e>notify<F0> with <F2>kind<F0> <F6>:inferior<F0> 
  2710. is generated on A
  2711.  
  2712. <F9>w<Tab><F6>:enter<#1e>notify<F0> with <F2>kind<F0> <F6>:virtual<F0> 
  2713. is generated on each window between A and B exclusive (in that order)
  2714.  
  2715. <F9>w<Tab><F6>:enter<#1e>notify<F0> with <F2>kind<F0> <F6>:ancestor<F0> 
  2716. is generated on B
  2717.  
  2718. <indentB>
  2719.  
  2720. When the pointer moves from window A to window B, with window C being 
  2721. their least common ancestor:
  2722.  
  2723. <ssbullet>
  2724.  
  2725. <F9>w<Tab><F6>:leave<#1e>notify<F0> with <F2>kind<F0> <F6>:nonlinear
  2726. <F0> is generated on A
  2727.  
  2728. <F9>w<Tab><F6>:leave<#1e>notify<F0> with <F2>kind<F0> <F6>:nonlinear<#1e>
  2729. virtual<F0> is generated on each window between A and C exclusive 
  2730. (in that order)
  2731.  
  2732. <F9>w<Tab><F6>:enter<#1e>notify<F0> with <F2>kind<F0> <F6>:nonlinear<#1e>
  2733. virtual<F0> is generated on each window between C and B exclusive 
  2734. (in that order) 
  2735.  
  2736. <F9>w<Tab><F6>:enter<#1e>notify<F0> with <F2>kind<F0> <F6>:nonlinear
  2737. <F0> is generated on B
  2738.  
  2739. <indentB>
  2740.  
  2741. When the pointer moves from window A to window B, on different screens:
  2742.  
  2743. <ssbullet>
  2744.  
  2745. <F9>w<Tab><F6>:leave<#1e>notify<F0> with <F2>kind<F0> <F6>:nonlinear
  2746. <F0> is generated on A
  2747.  
  2748. <F9>w<Tab><F0>If A is not a root window, <F6>:leave<#1e>notify<F0> 
  2749. with <F2>kind<F0> <F6>:nonlinear<#1e>virtual<F0> is generated 
  2750. on each window above A up to and including its root (in order)
  2751.  
  2752. <F9>w<Tab><F0>If B is not a root window, <F6>:enter<#1e>notify<F0> 
  2753. with <F2>kind<F0> <F6>:nonlinear<#1e>virtual<F0> is generated 
  2754. on each window from B's root down to but not including B (in order)
  2755.  
  2756. <F9>w<Tab><F6>:enter<#1e>notify<F0> with <F2>kind<F0> <F6>:nonlinear
  2757. <F0> is generated on B
  2758.  
  2759. <indentB>
  2760.  
  2761. When a pointer grab activates (but after any initial warp into a confine<#1e>to 
  2762. window, and before generating any actual <F6>:button<#1e>press<F0> 
  2763. event that activates the grab), with <F2>G<F0> the <F6>grab<#1e>window<F0> 
  2764. for the grab and <F2>P<F0> the window the pointer is in, then <F6>:enter<#1e>
  2765. notify<F0> and <F6>:leave<#1e>notify<F0> events with mode <F6>:grab<F0> 
  2766. are generated (as for <F6>:normal<F0> above) as if the pointer were 
  2767. to suddenly warp from its current position in <F2>P<F0> to some 
  2768. position in <F2>G<F0>. However, the pointer does not warp, and the 
  2769. pointer position is used as both the <F2>initial<F0> and <F2>final<F0> 
  2770. positions for the events.
  2771.  
  2772. <|,"12<#1e>140">When a pointer grab deactivates (but after generating any actual <F6>:bu
  2773. tton<#1e>release<F0> event that deactivates the grab), with <F2>G<F0> 
  2774. the <F6>grab<#1e>window<F0> for the grab and <F2>P<F0> the window 
  2775. the pointer is in, then <F6>:enter<#1e>notify<F0> and <F6>:leave<#1e>notify
  2776. <F0> events with mode <F6>:ungrab<F0> are generated (as for <F6>:normal
  2777. <F0> above) as if the pointer were to suddenly warp from from some 
  2778. position in <F2>G<F0> to its current position in <F2>P<F0>. However, 
  2779. the pointer does not warp, and the current pointer position is used 
  2780. as both the <F2>initial<F0> and <F2>final<F0> positions for the 
  2781. events.
  2782.  
  2783. <indentA>
  2784.  
  2785. <F2>focus<#1e>p<F0> <#1f> Type <F6>boolean<F0>.
  2786.  
  2787. <indentB>
  2788.  
  2789. If <F2>event<#1e>window<F0> is the focus window or an inferior of 
  2790. the focus window, then <F2>focus<#1e>p<F0> is <F6>t<F0>; otherwise, <F2>fo
  2791. cus<#1e>p<F0> is <F6>nil<F0>.
  2792.  
  2793. <indentA>
  2794.  
  2795. <F2>state<F0> <#1f> Type <F6>card16<F0>.
  2796.  
  2797. <indentB>
  2798.  
  2799. A mask that gives the state of the buttons and modifier keys just 
  2800. before the event.
  2801.  
  2802. <indentA>
  2803.  
  2804. <F2>time<F0> <#1f> Type <F6>card32<F0>.
  2805.  
  2806. <indentB>
  2807.  
  2808. A timestamp for the moment when the event occurred.
  2809.  
  2810. <indentA>
  2811.  
  2812. <F2>root<F6> <F0><#1f> Type <F6>window<F0>.
  2813.  
  2814. <indentB>
  2815.  
  2816. The root window containing the final pointer position.
  2817.  
  2818. <indentA>
  2819.  
  2820. <F2>root<#1e>x<F6> <F0><#1f> Type <F6>int16<F0>.
  2821.  
  2822. <indentB>
  2823.  
  2824. The x coordinate of the pointer position relative to root at the time 
  2825. of the event.
  2826.  
  2827. <indentA>
  2828.  
  2829. <F2>root<#1e>y<F6> <F0><#1f> Type <F6>int16<F0>.
  2830.  
  2831. <indentB>
  2832.  
  2833. The y coordinate of the pointer position relative to root at the time 
  2834. of the event.
  2835.  
  2836. <indentA>
  2837.  
  2838. <F2>child<F6> <F0><#1f> Type (<F6>or null window<F0>).
  2839.  
  2840. <indentB>
  2841.  
  2842. In a <F6>:leave<#1e>notify<F0> event, if a child of the <F2>event<#1e>window
  2843. <F0> contains the initial position of the pointer, the <F2>child<F0> 
  2844. slot is set to that child; otherwise, the <F2>child<F0> slot is <F6>nil
  2845. <F0>. For an <F6>:enter<#1e>notify<F0> event, if a child of the <F2>event<#1e>
  2846. window<F0> contains the final pointer position, the <F2>child<F0> 
  2847. slot is set to that child; otherwise, the <F2>child<F0> slot is <F6>nil
  2848. <F0>.
  2849.  
  2850. <indentA>
  2851.  
  2852. <F2>same<#1e>screen<#1e>p<F6> <F0><#1f> Type <F6>boolean<F0>.
  2853.  
  2854. <indentB>
  2855.  
  2856. True if <F2>event<#1e>window<F0> and root are on the same screen.
  2857.  
  2858. <p2rule>
  2859.  
  2860. <Index, "input", "focus events", To Named = p2rule><Index, "event", "input focus", To Named = p2rule>
  2861. <Frame,
  2862.     Name =            p2rule,
  2863.     Placement =        At Anchor,
  2864.     Width =            4.75 inches,
  2865.     Height =        0.15 inches,
  2866.     Vertical Alignment =    0.007 inches,
  2867.     Shared Contents =    yes>
  2868.  
  2869. <p2stacked,
  2870.     Font =            F3>
  2871.  
  2872. <Tab><F6>Input Focus<Tab>12.12.2<F0><#04>The input focus events 
  2873. are <F6>:focus<#1e>in<F0> and <F6>:focus<#1e>out<F0>.<F6><#04>
  2874.  
  2875. <p2para>
  2876.  
  2877.  <Tab>Events<Tab>
  2878.  
  2879. <syntax0>
  2880.  
  2881. <Index, "event", ":focus<#1e>in", Sort String = "focus<#1e>in"><Index, "event", ":focus<#1e>out", Sort String = "focus<#1e>out"><Index, ":focus<#1e>in event", Sort String = "focus<#1e>in event"><Index, ":focus<#1e>out event", Sort String = "focus<#1e>out event">
  2882. :focus<#1e>in, :focus<#1e>out<Tab><F3>Event Type
  2883.  
  2884. <return>
  2885.  
  2886. <Tab><F3> <F0><HR>
  2887. <F2>Selected by:<F0> <F3><#1f><F0> :focus<#1e>change<F3>.
  2888.  
  2889. <para>
  2890.  
  2891. <F6>:focus<#1e>in<F0> and <F6>:focus<#1e>out<F0> events are generated 
  2892. when the input focus changes. All <F6>:focus<#1e>out<F0> events 
  2893. caused by a window <F6>:unmap<F0> are generated after any <F6>:unmap<#1e>not
  2894. ify<F0> event, but the ordering of <F6>:focus<#1e>out<F0> with 
  2895. respect to generated <F6>:enter<#1e>notify<F0>, <F6>:leave<#1e>notify<F0>, 
  2896. <F6>:visibility<#1e>notify<F0>, and <F6>:expose<F0> events is 
  2897. not constrained.
  2898.  
  2899. <indentA>
  2900.  
  2901. <F2>window, event<#1e>window <F0><#1f> Type <F6>window<F0>.
  2902.  
  2903. <indentB>
  2904.  
  2905. For <F6>:focus<#1e>in<F0>, the new input focus window. For<F6> 
  2906. :focus<#1e>out,<F0> the previous input focus window.
  2907.  
  2908. <indentA>
  2909.  
  2910. <|,"12<#1e>141"><F2>mode<F6> <F0><#1f> Type <F6>(member :normal :while<#1e>grabbed 
  2911. :grab :ungrab)<F0>.
  2912.  
  2913. <indentB>
  2914.  
  2915. Events generated by <F6>set<#1e>input<#1e>focus<F0> when the keyboard 
  2916. is not grabbed have mode <F6>:normal<F0>. Events generated by <F6>set<#1e>in
  2917. put<#1e>focus<F0> when the keyboard is grabbed have mode <F6>:while<#1e>grabb
  2918. ed<F0>. Events generated when a keyboard grab activates have mode <F6>:grab
  2919. <F0>, and events generated when a keyboard grab deactivates have 
  2920. mode <F6>:ungrab<F0>.
  2921.  
  2922. <indentA>
  2923.  
  2924. <F2>kind<F6> <F0><#1f> Type (<F6>member :ancestor :virtual :inferior 
  2925. :nonlinear                                 :nonlinear<#1e>virtual 
  2926. :pointer :pointer<#1e>root :none<F0>).
  2927.  
  2928. <indentB>
  2929.  
  2930. When the focus moves from window A to window B, and A is an inferior 
  2931. of B, with the pointer in window P:
  2932.  
  2933. <ssbullet>
  2934.  
  2935. <F9>w<Tab><F6>:focus<#1e>out<F0> with <F2>kind<F0> <F6>:ancestor<F0> 
  2936. is generated on A
  2937.  
  2938. <F9>w<Tab><F6>:focus<#1e>out<F0> with <F2>kind<F0> <F6>:virtual<F0> 
  2939. is generated on each window between A and B exclusive (in that order)
  2940.  
  2941. <F9>w<Tab><F6>:focus<#1e>in<F0> with <F2>kind<F0> <F6>:inferior<F0> 
  2942. is generated on B
  2943.  
  2944. <F9>w<Tab><F0>If P is an inferior of B, but P is not A or an inferior 
  2945. of A or an ancestor of A, <F6>:focus<#1e>in<F0> with <F2>kind<F0> <F6>:poi
  2946. nter<F0> is generated on each window below B down to and including 
  2947. P (in order)
  2948.  
  2949. <indentB>
  2950.  
  2951. When the focus moves from window A to window B, and B is an inferior 
  2952. of A, with the pointer in window P:
  2953.  
  2954. <ssbullet>
  2955.  
  2956. <F9>w<Tab><F0>If P is an inferior of A, but P is not A or an inferior 
  2957. of B or an ancestor of B, <F6>:focus<#1e>out <F0>with <F2>kind<F0> <F6>:po
  2958. inter<F0> is generated on each window from P up to but not including 
  2959. A (in order)
  2960.  
  2961. <F9>w<Tab><F6>:focus<#1e>out<F0> with <F2>kind<F0> <F6>:inferior<F0> 
  2962. is generated on A
  2963.  
  2964. <F9>w<Tab><F6>:focus<#1e>in<F0> with <F2>kind<F0> <F6>:virtual <F0>is 
  2965. generated on each window between A and B exclusive (in that order)
  2966.  
  2967. <F9>w<Tab><F6>:focus<#1e>in<F0> with <F2>kind<F0> <F6>:ancestor<F0> 
  2968. is generated on B
  2969.  
  2970. <indentB,
  2971.     New Page =        yes>
  2972.  
  2973. <|,"12<#1e>142">When the focus moves from window A to window B, with window 
  2974. C being their least common ancestor, and with the pointer in window 
  2975. P:
  2976.  
  2977. <ssbullet>
  2978.  
  2979. <F9>w<Tab><F0>If P is an inferior of A, <F6>:focus<#1e>out<F0> 
  2980. with <F2>kind<F0> <F6>:pointer<F0> is generated on each window 
  2981. from P up to but not including A (in order)
  2982.  
  2983. <F9>w<Tab><F6>:focus<#1e>out<F0> with <F2>kind<F0> <F6>:nonlinear<F0> 
  2984. is generated on A
  2985.  
  2986. <F9>w<Tab><F6>:focus<#1e>out <F0>with <F2>kind<F0> <F6>:nonlinear<#1e>vir
  2987. tual<F0> is generated on each window between A and C exclusive (in 
  2988. that order)
  2989.  
  2990. <F9>w<Tab><F6>:focus<#1e>in<F0> with <F2>kind<F0> <F6>:nonlinear<#1e>virt
  2991. ual<F0> is generated on each window between C and B exclusive (in 
  2992. that order)
  2993.  
  2994. <F9>w<Tab><F0>:focus<#1e>in with <F2>kind<F0> <F6>:nonlinear<F0> 
  2995. is generated on B
  2996.  
  2997. <F9>w<Tab><F0>If P is an inferior of B, <F6>:focus<#1e>in<F0> 
  2998. with <F2>kind<F0> <F6>:pointer<F0> is generated on each window 
  2999. below B down to and including P (in order)
  3000.  
  3001. <indentB>
  3002.  
  3003. When the focus moves from window A to window B, on different screens, 
  3004. with the pointer in window P:
  3005.  
  3006. <ssbullet>
  3007.  
  3008. <F9>w<Tab><F0>If P is an inferior of A, <F6>:focus<#1e>out<F0> 
  3009. with <F2>kind<F0> <F6>:pointer<F0> is generated on each window 
  3010. from P up to but not including A (in order)
  3011.  
  3012. <F9>w<Tab><F6>:focus<#1e>out<F0> with <F2>kind<F0> <F6>:nonlinear<F0> 
  3013. is generated on A
  3014.  
  3015. <F9>w<Tab><F0>If A is not a root window, <F6>:focus<#1e>out<F0> 
  3016. with <F2>kind<F0> <F6>:nonlinear<#1e>virtual <F0>is generated 
  3017. on each window above A up to and including its root (in order)
  3018.  
  3019. <F9>w<Tab><F0>If B is not a root window, <F6>:focus<#1e>in <F0>with <F2>ki
  3020. nd<F0> <F6>:nonlinear<#1e>virtual<F0> is generated on each window 
  3021. from B's root down to but not including B (in order)
  3022.  
  3023. <F9>w<Tab><F6>:focus<#1e>in<F0> with <F2>kind<F0> <F6>:nonlinear<F0> 
  3024. is generated on B
  3025.  
  3026. <F9>w<Tab><F0>If P is an inferior of B, <F6>:focus<#1e>in<F0> 
  3027. with <F2>kind<F0> <F6>:pointer<F0> is generated on each window 
  3028. below B down to and including P (in order)
  3029.  
  3030. <indentB>
  3031.  
  3032. When the focus moves from window A to <F6>:pointer<#1e>root<F0> 
  3033. (or <F6>:none<F0>), with the pointer in window P: 
  3034.  
  3035. <ssbullet>
  3036.  
  3037. <F9>w<Tab><F0>If P is an inferior of A, <F6>:focus<#1e>out<F0> 
  3038. with <F2>kind<F0> <F6>:pointer<F0> is generated on each window 
  3039. from P up to but not including A (in order)
  3040.  
  3041. <F9>w<Tab><F6>:focus<#1e>out<F0> with <F2>kind<F0> <F6>:nonlinear<F0> 
  3042. is generated on A
  3043.  
  3044. <F9>w<Tab><F0>If A is not a root window, <F6>:focus<#1e>out<F0> 
  3045. with <F2>kind<F0> <F6>:nonlinear<#1e>virtual <F0>is generated 
  3046. on each window above A up to and including its root (in order)
  3047.  
  3048. <F9>w<Tab><F6>:focus<#1e>in<F0> with <F2>kind<F0> <F6>:pointer<#1e>root 
  3049. <F0>(or <F6>:none<F0>) is generated on all root windows
  3050.  
  3051. <F9>w<Tab><F0>If the new focus is <F6>:pointer<#1e>root<F0>, <F6>:focus<#1e>
  3052. in<F0> with <F2>kind<F0> <F6>:pointer<F0> is generated on each 
  3053. window from P's root down to and including P (in order)
  3054.  
  3055. <indentB>
  3056.  
  3057. <|,"12<#1e>143">When the focus moves from <F6>:pointer<#1e>root <F0>(or <F6>:none
  3058. <F0>) to window A, with the pointer in window P:
  3059.  
  3060. <ssbullet>
  3061.  
  3062. <F9>w<Tab><F0>If the old focus is <F6>:pointer<#1e>root<F0>, <F6>:focus<#1e>
  3063. out<F0> with <F2>kind<F0> <F6>:pointer<F0> is generated on each 
  3064. window from P up to and including P's root (in order) 
  3065.  
  3066. <F9>w<Tab><F6>:focus<#1e>out<F0> with <F2>kind<F6> :pointer<#1e>root<F0> 
  3067. (or <F6>:none<F0>) is generated on all root windows
  3068.  
  3069. <F9>w<Tab><F0>If A is not a root window, <F6>:focus<#1e>in<F0> 
  3070. with <F2>kind<F0> <F6>:nonlinear<#1e>virtual<F0> is generated 
  3071. on each window from A's root down to but not including A (in order)
  3072.  
  3073. <F9>w<Tab><F6>:focus<#1e>in<F0> with <F2>kind<F0> <F6>:nonlinear<F0> 
  3074. is generated on A
  3075.  
  3076. <F9>w<Tab><F0>If P is an inferior of A, <F6>:focus<#1e>in<F0> 
  3077. with <F2>kind<F0> <F6>:pointer<F0> is generated on each window 
  3078. below A down to and including P (in order)
  3079.  
  3080. <indentB>
  3081.  
  3082. When the focus moves from <F6>:pointer<#1e>root <F0>to <F6>:none<F0> 
  3083. (or vice versa), with the pointer in window P:
  3084.  
  3085. <ssbullet>
  3086.  
  3087. <F9>w<Tab><F0>If the old focus is <F6>:pointer<#1e>root<F0>, <F6>:focus<#1e>
  3088. out<F0> with <F2>kind<F0> <F6>:pointer<F0> is generated on each 
  3089. window from P up to and including P's root (in order)
  3090.  
  3091. <F9>w<Tab><F6>:focus<#1e>out<F0> with <F2>kind<F0> <F6>:pointer<#1e>root
  3092. <F0> (or <F6>:none<F0>) is generated on all root windows
  3093.  
  3094. <F9>w<Tab><F6>:focus<#1e>in<F0> with <F2>kind<F0> <F6>:none<F0> 
  3095. (or <F6>:pointer<#1e>root<F0>) is generated on all root windows
  3096.  
  3097. <F9>w<Tab><F0>If the new focus is <F6>:pointer<#1e>root<F0>, <F6>:focus<#1e>
  3098. in <F0>with <F2>kind<F0> <F6>:pointer<F0> is generated on each 
  3099. window from P's root down to and including P (in order)
  3100.  
  3101. <indentB>
  3102.  
  3103. When a keyboard grab activates (but before generating any actual <F6>:key<#1e>
  3104. press<F0> event that activates the grab), with <F2>G<F0> the <F6>grab<#1e>w
  3105. indow<F0> for the grab and <F2>F<F0> the current focus, then <F6>:focus<#1e>
  3106. in<F0> and <F6>:focus<#1e>out <F0>events with mode <F6>:grab<F0> 
  3107. are generated (as for <F6>:normal<F0> above) as if the focus were 
  3108. to change from <F2>F<F0> to <F2>G<F0>.
  3109.  
  3110. When a keyboard grab deactivates (but after generating any actual <F6>:key<#1e>
  3111. release<F0> event that deactivates the grab), with <F2>G<F0> the <F6>grab<#1e>
  3112. window<F0> for the grab and <F2>F<F0> the current focus, then <F6>:focus<#1e>
  3113. in<F0> and <F6>:focus<#1e>out<F0> events with mode <F6>:ungrab<F0> 
  3114. are generated (as for <F6>:normal <F0>above) as if the focus were 
  3115. to change from <F2>G<F0> to <F2>F<F0>.
  3116.  
  3117. <p2rule,
  3118.     New Page =        yes>
  3119.  
  3120. <|,"12<#1e>144"><Index, "pointer", "state event", To Named = p2rule><Index, "keyboard", "state event", To Named = p2rule><Index, "event", "pointer", "state", To Named = p2rule><Index, "event", "keyboard", "state", To Named = p2rule>
  3121. <Frame,
  3122.     Name =            p2rule,
  3123.     Placement =        At Anchor,
  3124.     Width =            4.75 inches,
  3125.     Height =        0.15 inches,
  3126.     Vertical Alignment =    0.007 inches,
  3127.     Shared Contents =    yes>
  3128.  
  3129. <p2stacked,
  3130.     Font =            F3>
  3131.  
  3132. <Tab><F6>Keyboard and<Tab>12.12.3<#04><F0>The keyboard and pointer 
  3133. state events are <F6>:keymap<#1e>notify<F0> and<FJ>
  3134.  
  3135. <p2stacked>
  3136.  
  3137. <Tab>Pointer State<F3><Tab><F0>:mapping<#1e>notify.
  3138.  
  3139. <p2para>
  3140.  
  3141. <Tab>Events<Tab>
  3142.  
  3143. <syntax0>
  3144.  
  3145. <Index, "event", ":keymap<#1e>notify", Sort String = "keymap<#1e>notify"><Index, ":keymap<#1e>notify event", Sort String = "keymap<#1e>notify event">:keymap<#1e>notify<Tab><F3>Event 
  3146. Type
  3147.  
  3148. <return>
  3149.  
  3150. <Tab><F3> <F0><HR>
  3151. <F2>Selected by:<F3> <#1f><F0> <F3>:<F0>keymap<#1e>state<F3>.
  3152.  
  3153. <para>
  3154.  
  3155. The <F6>:keymap<#1e>notify<F0> event returns the current state of 
  3156. the keyboard. <F6>:keymap<#1e>notify<F0> is generated immediately 
  3157. after every <F6>:enter<#1e>notify<F0> and <F6>:focus<#1e>in<F0>.
  3158.  
  3159. <indentA>
  3160.  
  3161. <F2>window, event<#1e>window<F6> <F0><#1f> Type <F6>window<F0>.
  3162.  
  3163. <indentB>
  3164.  
  3165. The window receiving an <F6>:enter<#1e>notify<F0> or <F6>:focus<#1e>in<F0> 
  3166. event.
  3167.  
  3168. <indentA>
  3169.  
  3170. <F2>keymap<F6> <F0><#1f> Type (<F6>bit<#1e>vector 256<F0>).
  3171.  
  3172. <indentB>
  3173.  
  3174. A bit<#1e>vector containing the logical state of the keyboard. Each 
  3175. bit set to 1 indicates that the corresponding key is currently pressed. 
  3176. The vector is represented as 32 bytes. For <F2>n<F0> from 0 to 7, 
  3177. byte <F2>n<F0> (from 0) contains the bits for keys 8<F2>n<F0> 
  3178. to 8<F2>n<F0>+7, with the least significant bit in the byte representing 
  3179. key 8<F2>n<F0>.
  3180.  
  3181. <syntax>
  3182.  
  3183. <Index, "event", ":mapping<#1e>notify", Sort String = "mapping<#1e>notify"><Index, ":mapping<#1e>notify event", Sort String = "mapping notify event">:mapping<#1e>notify<Tab><F3>Event 
  3184. Type
  3185.  
  3186. <para>
  3187.  
  3188. The X server reports <F6>:mapping<#1e>notify<F0> events to all clients. 
  3189. There is no mechanism to express disinterest in this event. The X 
  3190. server generates this event type whenever a client application calls 
  3191. one of the following:
  3192.  
  3193. <bullet>
  3194.  
  3195. <F9>w<Tab><F6>set<#1e>modifier<#1e>mapping<F0> to indicate which 
  3196. keycodes to use as modifiers (the status reply must be <F6>:mapping<#1e>succes
  3197. s<F0>)
  3198.  
  3199. <F9>w<Tab><F6>change<#1e>keyboard<#1e>mapping<F0> to change the 
  3200. keyboard mapping 
  3201.  
  3202. <F9>w<Tab><F0>s<F6>et<#1e>pointer<#1e>mapping<F0> to set the pointer 
  3203. mapping (the status reply must be <F6>:mapping<#1e>success<F0>)
  3204.  
  3205. <indentA>
  3206.  
  3207. <F2>request<F0> <#1f><F6> <F0>Type (<F6>member :modifier :keyboard 
  3208. :pointer<F0>).
  3209.  
  3210. <indentB>
  3211.  
  3212. Indicates the kind of change that occurred<#1f><F6>:modifier<F0> 
  3213. for a successful <F6>set<#1e>modifier<#1e>mapping<F0>, <F6>:keyboard<F0> 
  3214. for a successful <F6>change<#1e>keyboard<#1e>mapping<F0>, and <F6>:pointer
  3215. <F0> for a successful <F6>set<#1e>pointer<#1e>mapping<F0>.
  3216.  
  3217. <indentA>
  3218.  
  3219. <F2>start <F0><#1f> Type <F6>card8<F0>.
  3220.  
  3221. <indentB>
  3222.  
  3223. If request is<F6> :keyboard<F0>, then <F2>start<F0> and <F2>count<F0> 
  3224. indicate the range of altered keycodes.
  3225.  
  3226. <indentA>
  3227.  
  3228. <F2>count<F6> <F0><#1f> Type <F6>card8<F0>.
  3229.  
  3230. <indentB>
  3231.  
  3232. If request is <F6>:keyboard<F0>, then <F2>start<F0> and <F2>count<F0> 
  3233. indicate the range of altered keycodes.
  3234.  
  3235. <p2rule,
  3236.     New Page =        yes>
  3237.  
  3238. <|,"12<#1e>145"><Index, "exposure events", To Named = p2rule><Index, "event", "exposure", To Named = p2rule>
  3239. <Frame,
  3240.     Name =            p2rule,
  3241.     Placement =        At Anchor,
  3242.     Width =            4.75 inches,
  3243.     Height =        0.15 inches,
  3244.     Vertical Alignment =    0.007 inches,
  3245.     Shared Contents =    yes>
  3246.  
  3247. <p2para,
  3248.     Alignment =        Both,
  3249.     Font =            F3,
  3250.     Allow Page Break Within = yes,
  3251.     Allow Page Break After = yes,
  3252.     TOC Doc Name =        >
  3253.  
  3254. <Tab><F6>Exposure Events<Tab>12.12.4<F0><#04>The X server cannot 
  3255. guarantee that a window's content is preserved when the window is 
  3256. obscured or reconfigured. X requires client applications to be capable 
  3257. of restoring the contents of a previously<#1e>invisible window region 
  3258. whenever it is exposed. Therefore, the X server sends events describing 
  3259. the exposed window and its exposed region. For a simple window, a 
  3260. client can choose to redraw the entire content whenever any region 
  3261. is exposed. For a complex window, a client can redraw only the exposed 
  3262. region.
  3263.  
  3264. <syntax0>
  3265.  
  3266. <Index, "event", ":exposure", Sort String = exposure><Index, ":exposure event", Sort String = "exposure event">:exposure<Tab><Tab><F3>Event 
  3267. Type
  3268.  
  3269. <return>
  3270.  
  3271. <Tab><F3> <F2><HR>
  3272. Selected by:<F0> <F3><#1f><F0> :exposure<F3>.
  3273.  
  3274. <para>
  3275.  
  3276. An <F6>:exposure<F0> event is sent when redisplay is needed for 
  3277. a window region whose content has been lost. Redisplay is needed when 
  3278. one of the following occurs:
  3279.  
  3280. <bullet>
  3281.  
  3282. <F9>w<Tab><F0>A region is exposed for a window and the X server 
  3283. has no backing store for the region
  3284.  
  3285. <F9>w<Tab><F0>A region of a viewable window is obscured and the 
  3286. X server begins to honor the window's backing<#1e>store attribute 
  3287. of <F6>:always<F0> or <F6>:when<#1e>mapped
  3288.  
  3289. <F9>w<Tab><F0>The X server begins to honor an unviewable window's 
  3290. backing<#1e>store attribute of <F6>:always<F0> or :<F6>when<#1e>mapped<F0>.
  3291.  
  3292. <para>
  3293.  
  3294. The regions needing redisplay are decomposed into an arbitrary set 
  3295. of rectangles, and an <F6>:exposure<F0> event is generated for each 
  3296. rectangle. For a given action causing <F6>:exposure<F0> events, 
  3297. the set of events for a given window are guaranteed to be reported 
  3298. contiguously.
  3299.  
  3300. <F6>:exposure<F0> events are never generated for <F6>:input<#1e>only<F0> 
  3301. windows.
  3302.  
  3303. All <F6>:exposure<F0> events caused by a hierarchy change are generated 
  3304. after any hierarchy event (<F6>:unmap<#1e>notify<F0>, <F6>:map<#1e>notify
  3305. <F0>, <F6>:configure<#1e>notify<F0>,<F6>:gravity<#1e>notify<F0>, 
  3306. or <F6>:circulate<#1e>notify<F0>) caused by that change. All <F6>:exposure
  3307. <F0> events on a given window are generated after any <F6>:visibility<#1e>not
  3308. ify<F0> event on that window, but it is not required that all <F6>:exposure
  3309. <F0> events on all windows be generated after all visibility events 
  3310. on all windows. The ordering of :<F6>exposure<F0> events with respect 
  3311. to <F6>:focus<#1e>out<F0>, <F6>:enter<#1e>notify<F0>, and <F6>:leave<#1e>n
  3312. otify<F0> events is not constrained.
  3313.  
  3314. <indentA>
  3315.  
  3316. <F2>window, event<#1e>window<F6> <F0><#1f> Type <F6>window<F0>.
  3317.  
  3318. <indentB>
  3319.  
  3320. The window needing redisplay.
  3321.  
  3322. <indentA>
  3323.  
  3324. <F2>x <F0><#1f> Type <F6>card16<F0>.
  3325.  
  3326. <indentB>
  3327.  
  3328. The position of the left edge of the region to redisplay, relative 
  3329. to the <F2>event<#1e>window<F0>.
  3330.  
  3331. <indentA>
  3332.  
  3333. <F2>y <F0><#1f><F6> <F0>Type <F6>card16<F0>.
  3334.  
  3335. <indentB>
  3336.  
  3337. The position of the top edge of the region to redisplay, relative 
  3338. to the <F2>event<#1e>window<F0>.
  3339.  
  3340. <indentA>
  3341.  
  3342. <F2>width<F0> <#1f> Type <F6>card16<F0>.
  3343.  
  3344. <indentB>
  3345.  
  3346. The width of the region to redisplay.
  3347.  
  3348. <indentA,
  3349.     New Page =        yes>
  3350.  
  3351. <|,"12<#1e>146"><F2>height<F0> <#1f> Type <F6>card16<F0>.
  3352.  
  3353. <indentB>
  3354.  
  3355. The height of the region to redisplay.
  3356.  
  3357. <indentA>
  3358.  
  3359. <F2>count<F0> <#1f><F6> <F0>Type <F6>card16<F0>.
  3360.  
  3361. <indentB>
  3362.  
  3363. If count is zero, then no more <F6>:exposure<F0> events for this 
  3364. window follow. If count is nonzero, then at least that many more <F6>:exposure
  3365. <F0> events for this window follow (and possibly more).
  3366.  
  3367. <syntax>
  3368.  
  3369. <Index, "event", ":graphics<#1e>exposure", Sort String = "graphics<#1e>exposure"><Index, ":graphics<#1e>exposure event", Sort String = "graphics<#1e>exposure event">:graphics<#1e>exposure<Tab><F3>Event 
  3370. Type
  3371.  
  3372. <para>
  3373.  
  3374. A <F6>:graphics<#1e>exposure<F0> event is generated by a call to <F6>copy<#1e>
  3375. area<F0> or <F6>copy<#1e>plane<F0> when the exposures attribute 
  3376. of the graphics context is <F6>:on<F0>. A <F6>:graphics<#1e>exposure<F0> 
  3377. event reports a destination region whose content cannot be computed 
  3378. because the content of the corresponding source region has been lost. 
  3379. For example, the missing source region may be obscured or may lie 
  3380. outside the current source drawable size. For a given action causing <F6>:grap
  3381. hics<#1e>exposure<F0> events, the set of events for a given destination 
  3382. are guaranteed to be reported contiguously.
  3383.  
  3384. <indentA>
  3385.  
  3386. <F2>drawable, event<#1e>window<F6> <F0><#1f> Type <F6>drawable<F0>.
  3387.  
  3388. <indentB>
  3389.  
  3390. The destination drawable for the <F6>copy<#1e>area<F0> or <F6>copy<#1e>plane
  3391. <F0> function.
  3392.  
  3393. <indentA>
  3394.  
  3395. <F2>x<F6> <F0><#1f> Type <F6>card16<F0>.
  3396.  
  3397. <indentB>
  3398.  
  3399. The position of the left edge of the destination region, relative 
  3400. to the <F2>drawable<F0>.
  3401.  
  3402. <indentA>
  3403.  
  3404. <F2>y<F6> <F0><#1f> Type <F6>card16<F0>.
  3405.  
  3406. <indentB>
  3407.  
  3408. The position of the top edge of the destination region, relative to 
  3409. the <F2>drawable<F0>.
  3410.  
  3411. <indentA>
  3412.  
  3413. <F2>width<F6> <F0><#1f> Type <F6>card16<F0>.
  3414.  
  3415. <indentB>
  3416.  
  3417. The width of the destination region.
  3418.  
  3419. <indentA>
  3420.  
  3421. <F2>height<F6> <F0><#1f> Type <F6>card16<F0>.
  3422.  
  3423. <indentB>
  3424.  
  3425. The height of the destination region.
  3426.  
  3427. <indentA>
  3428.  
  3429. <F2>count<F6> <F0><#1f> Type <F6>card16<F0>.
  3430.  
  3431. <indentB>
  3432.  
  3433. If count is zero then no more <F6>:graphics<#1e>exposure<F0> events 
  3434. for the <F2>drawable<F0> follow. If count is nonzero then at least 
  3435. that many more <F6>:graphics<#1e>exposure<F0> events for the <F2>drawable
  3436. <F0> follow (and possibly more).
  3437.  
  3438. <indentA>
  3439.  
  3440. <F2>major<F0> <#1f> Type <F6>card8<F0>.
  3441.  
  3442. <indentB>
  3443.  
  3444. The major opcode for the graphics request generating the event<FJ>
  3445. (62 for <F6>copy<#1e>area<F0>, 63 for <F6>copy<#1e>plane<F0>).
  3446.  
  3447. <indentA>
  3448.  
  3449. <F2>minor<F6> <F0><#1f> Type <F6>card16<F0>.
  3450.  
  3451. <indentB>
  3452.  
  3453. The minor opcode for the graphics request generating the event<FJ>
  3454. (0 for both <F6>copy<#1e>area<F0> and <F6>copy<#1e>plane<F0>).
  3455.  
  3456. <syntax>
  3457.  
  3458. <Index, "event", ":no<#1e>exposure", Sort String = "no<#1e>exposure"><Index, ":no<#1e>exposure event", Sort String = "no<#1e>exposure event">:no<#1e>exposure<Tab><Tab><F3>Event 
  3459. Type
  3460.  
  3461. <para,
  3462.     Bottom Margin =        0.12 inches>
  3463.  
  3464. A <F6>:no<#1e>exposure<F0> event is generated by a call to <F6>copy<#1e>area
  3465. <F0> or <F6>copy<#1e>plane<F0> when the exposures attribute of 
  3466. the graphics context is <F6>:on<F0>. If no <F6>:graphics<#1e>exposure<F0> 
  3467. events are generated, then a single <F6>:no<#1e>exposure<F0> event 
  3468. is sent.
  3469.  
  3470. <indentA>
  3471.  
  3472. <F2>drawable, event<#1e>window<F6> <F0><#1f> Type <F6>drawable<F0>.
  3473.  
  3474. <indentB>
  3475.  
  3476. <|,"12<#1e>147">The destination drawable for the <F6>copy<#1e>area<F0> or <F6>copy<#1e>
  3477. plane<F0> function.
  3478.  
  3479. <indentA>
  3480.  
  3481. <F2>major<F0> <#1f> Type <F6>card8<F0>.
  3482.  
  3483. <indentB>
  3484.  
  3485. The major opcode for the graphics request generating the event<FJ>
  3486. (62 for <F6>copy<#1e>area<F0>, 63 for <F6>copy<#1e>plane<F0>).
  3487.  
  3488. <indentA>
  3489.  
  3490. <F2>minor<F0> <#1f> Type <F6>card16<F0>.
  3491.  
  3492. <indentB>
  3493.  
  3494. The minor opcode for the graphics request generating the event<FJ>
  3495. (0 for both <F6>copy<#1e>area<F0> and <F6>copy<#1e>plane<F0>).
  3496.  
  3497. <p2rule>
  3498.  
  3499. <Index, "window", "state events", To Named = p2rule><Index, "event", "window state", To Named = p2rule>
  3500. <Frame,
  3501.     Name =            p2rule,
  3502.     Placement =        At Anchor,
  3503.     Width =            4.75 inches,
  3504.     Height =        0.15 inches,
  3505.     Vertical Alignment =    0.007 inches,
  3506.     Shared Contents =    yes>
  3507.  
  3508. <p2stacked,
  3509.     Font =            F3>
  3510.  
  3511. <Tab><F6>Window State<Tab>12.12.5<F0><#04>The following paragraphs 
  3512. describe the events that can be received
  3513.  
  3514. <p2para,
  3515.     Bottom Margin =        0.12 inches,
  3516.     Alignment =        Both,
  3517.     Font =            F3,
  3518.     Allow Page Break Within = yes,
  3519.     Allow Page Break After = yes,
  3520.     TOC Doc Name =        >
  3521.  
  3522. <Tab><F6>Events<Tab><F0>when a window becomes:
  3523.  
  3524. <bullet,
  3525.     Bottom Margin =        0.12 inches>
  3526.  
  3527. <F9>w<Tab><F0>Created
  3528.  
  3529. <F9>w<Tab><F0>Destroyed
  3530.  
  3531. <F9>w<Tab><F0>Invisible
  3532.  
  3533. <F9>w<Tab><F0>Mapped
  3534.  
  3535. <F9>w<Tab><F0>Moved
  3536.  
  3537. <F9>w<Tab><F0>Reparented
  3538.  
  3539. <F9>w<Tab><F0>Resized
  3540.  
  3541. <F9>w<Tab><F0>Restacked 
  3542.  
  3543. <F9>w<Tab><F0>Unmapped
  3544.  
  3545. <F9>w<Tab><F0>Visible
  3546.  
  3547. <syntax0>
  3548.  
  3549. <Index, "event", ":circulate<#1e>notify", Sort String = "circulate<#1e>notify"><Index, ":circulate<#1e>notify event", Sort String = "circulate<#1e>notify event">:circulate<#1e>notify<Tab><F3>Event 
  3550. Type
  3551.  
  3552. <return,
  3553.     Left Tab =        -0.90/0.97/7.50 inches>
  3554.  
  3555. <Tab><F3> <F2><HR>
  3556. Selected by: <F3><#1f> <F0>:structure<#1e>notify <F3>on a window 
  3557. or<F0> :substructure<#1e>notify<HR>
  3558. <Tab><F3>on its parent.
  3559.  
  3560. <para,
  3561.     Bottom Margin =        0.12 inches>
  3562.  
  3563. A <F6>:circulate<#1e>notify<F0> event is generated whenever a window 
  3564. is actually restacked as a result of a client application calling <F6>circulat
  3565. e<#1e>window<#1e>up<F0> or <F6>circulate<#1e>window<#1e>down<F0>.
  3566.  
  3567. <indentA>
  3568.  
  3569. <F2>event<#1e>window <F0><#1f> Type <F6>window<F0>.
  3570.  
  3571. <indentB>
  3572.  
  3573. The window receiving the event.
  3574.  
  3575. <indentA>
  3576.  
  3577. <F2>window<F6> <F0><#1f> Type <F6>window<F0>.
  3578.  
  3579. <indentB>
  3580.  
  3581. The window that was restacked.
  3582.  
  3583. <indentA>
  3584.  
  3585. <F2>place <F0><#1f> Type (<F6>member :top :bottom<F0>).
  3586.  
  3587. <indentB>
  3588.  
  3589. If place is <F6>:top<F0>, the <F2>window<F0> is now on top of 
  3590. all siblings. Otherwise, it is below all siblings.
  3591.  
  3592. <syntax0,
  3593.     New Page =        yes>
  3594.  
  3595. <|,"12<#1e>148"><Index, "event", ":configure<#1e>notify", Sort String = "configure<#1e>notify"><Index, ":configure<#1e>notify event", Sort String = "configure<#1e>notify event">:configure<#1e>notify<Tab><F3>Ev
  3596. ent Type
  3597.  
  3598. <return,
  3599.     Left Tab =        -0.90/0.97/7.50 inches>
  3600.  
  3601. <Tab><F3> <F2><HR>
  3602. Selected by: <F3><#1f><F2> <F0>:structure<#1e>notify <F3>on a 
  3603. window<F0> <F3>or<F0> :substructure<#1e>notify<HR>
  3604. <Tab><F3>on its parent.
  3605.  
  3606. <para>
  3607.  
  3608. The <F6>:configure<#1e>notify<F0> event is generated when the position 
  3609. or size of a window actually changes as a result of a client application 
  3610. setting its <F2>x<F0>, <F2>y<F0>, <F2>width<F0>, <F2>height<F0>, 
  3611. or <F2>border<#1e>width<F0> attributes. 
  3612.  
  3613. <indentA>
  3614.  
  3615. <F2>event<#1e>window<F6> <F0><#1f> Type <F6>window<F0>.
  3616.  
  3617. <indentB>
  3618.  
  3619. The window receiving the event.
  3620.  
  3621. <indentA>
  3622.  
  3623. <F2>window<F6> <F0><#1f> Type <F6>window<F0>.
  3624.  
  3625. <indentB>
  3626.  
  3627. The window that was moved or resized.
  3628.  
  3629. <indentA>
  3630.  
  3631. <F2>x<F0> <#1f> Type <F6>int16<F0>.
  3632.  
  3633. <indentB>
  3634.  
  3635. <F2>x<F0> and <F2>y<F0> specify the new upper<#1e>left corner 
  3636. position of the <F2>window<F0> relative to its parent.
  3637.  
  3638. <indentA>
  3639.  
  3640. <F2>y<F6> <F0><#1f> Type <F6>int16<F0>.
  3641.  
  3642. <indentB>
  3643.  
  3644. <F2>x<F0> and <F2>y<F0> specify the new upper<#1e>left corner 
  3645. position of the <F2>window<F0> relative to its parent.
  3646.  
  3647. <indentA>
  3648.  
  3649. <F2>width<F6> <F0><#1f> Type <F6>card16<F0>.
  3650.  
  3651. <indentB>
  3652.  
  3653. <F2>width<F0> and <F2>height<F0> specify the new size of the <F2>window
  3654. <F0> interior.
  3655.  
  3656. <indentA>
  3657.  
  3658. <F2>height<F6> <F0><#1f> Type <F6>card16<F0>.
  3659.  
  3660. <indentB>
  3661.  
  3662. <F2>width<F0> and <F2>height<F0> specify the new size of the <F2>window
  3663. <F0> interior.
  3664.  
  3665. <indentA>
  3666.  
  3667. <F2>border<#1e>width<F6> <F0><#1f> Type <F6>card16<F0>.
  3668.  
  3669. <indentB>
  3670.  
  3671. The new <F2>window<F0> border width.
  3672.  
  3673. <indentA>
  3674.  
  3675. <F2>above<#1e>sibling<F6> <F0><#1f> Type (<F6>or null window<F0>).
  3676.  
  3677. <indentB>
  3678.  
  3679. The sibling immediately below the <F2>window<F0>. If above<#1e>sibling 
  3680. is <F6>nil<F0>, then the <F2>window<F0> is below all of its siblings.
  3681.  
  3682. <indentA>
  3683.  
  3684. <F2>override<#1e>redirect<#1e>p<F6> <F0><#1f> Type <F6>boolean<F0>.
  3685.  
  3686. <indentB>
  3687.  
  3688. <F2>override<#1e>redirect<#1e>p<F0> is true if the override<#1e>redirect 
  3689. attribute of the <F2>window<F0> is <F6>:on<F0>; otherwise, it 
  3690. is <F6>nil<F0>. See <F6>window<#1e>override<#1e>redirect<F0> in 
  3691. paragraph 4.3, Window Attributes.
  3692.  
  3693. <para>
  3694.  
  3695. The X server can report <F6>:create<#1e>notify<F0> events to clients 
  3696. wanting information about creation of windows. The X server generates 
  3697. this event whenever a client application creates a window by calling <F6>creat
  3698. e<#1e>window<F0>.
  3699.  
  3700. To receive this event type in a client application, you <F6>setf<F0> 
  3701. the <F6>:substructure<#1e>notify<F0> as the event<#1e>mask in the 
  3702. parent window's event<#1e>mask slot.
  3703.  
  3704. <syntax0,
  3705.     New Page =        yes>
  3706.  
  3707. <|,"12<#1e>149"><Index, "event", ":create<#1e>notify", Sort String = "create<#1e>notify"><Index, ":create<#1e>notify event", Sort String = "create<#1e>notify event">:create<#1e>notify<Tab><F3><Tab>
  3708. Event Type
  3709.  
  3710. <return>
  3711.  
  3712. <Tab><F3> <F2><HR>
  3713. Selected by: <F0>:substructure<#1e>notify<F3>.<F0> 
  3714.  
  3715. <para>
  3716.  
  3717. The <F6>:create<#1e>notify<F0> event is generated when a <F2>window<F0> 
  3718. is created and is sent to the <F2>parent<F0> window.
  3719.  
  3720. <indentA>
  3721.  
  3722. <F2>parent, event<#1e>window<F6> <F0><#1f> Type <F6>window<F0>.
  3723.  
  3724. <indentB>
  3725.  
  3726. The parent window receiving the event.
  3727.  
  3728. <indentA>
  3729.  
  3730. <F2>window<F6> <F0><#1f> Type <F6>window<F0>.
  3731.  
  3732. <indentB>
  3733.  
  3734. The new window created.
  3735.  
  3736. <indentA>
  3737.  
  3738. <F2>x<F6> <F0><#1f> Type <F6>int16<F0>.
  3739.  
  3740. <indentB>
  3741.  
  3742. <F2>x<F0> and <F2>y<F0> specify the initial upper<#1e>left corner 
  3743. position of the <F2>window<F0> relative to the parent.
  3744.  
  3745. <indentA>
  3746.  
  3747. <F2>y<F6> <F0><#1f> Type <F6>int16<F0>.
  3748.  
  3749. <indentB>
  3750.  
  3751. <F2>x<F0> and <F2>y<F0> specify the initial upper<#1e>left corner 
  3752. position of the <F2>window<F0> relative to the parent.
  3753.  
  3754. <indentA>
  3755.  
  3756. <F2>width<F6> <F0><#1f> Type <F6>card16<F0>.
  3757.  
  3758. <indentB>
  3759.  
  3760. <F2>width<F0> and <F2>height<F0> specify the initial size of the <F2>windo
  3761. w<F0> interior.
  3762.  
  3763. <indentA>
  3764.  
  3765. <F2>height<F6> <F0><#1f> Type <F6>card16<F0>.
  3766.  
  3767. <indentB>
  3768.  
  3769. <F2>width<F0> and <F2>height<F0> specify the initial size of the <F2>windo
  3770. w<F0> interior.
  3771.  
  3772. <indentA>
  3773.  
  3774. <F2>border<#1e>width<F6> <F0><#1f> Type <F6>card16<F0>.
  3775.  
  3776. <indentB>
  3777.  
  3778. The initial <F2>window<F0> border width.
  3779.  
  3780. <indentA>
  3781.  
  3782. <F2>override<#1e>redirect<#1e>p<F6> <F0><#1f> Type <F6>boolean<F0>.
  3783.  
  3784. <indentB>
  3785.  
  3786. <F2>override<#1e>redirect<#1e>p<F0> is true if the override<#1e>redirect 
  3787. attribute of the <F2>window<F0> is <F6>:on<F0>; otherwise, it 
  3788. is <F6>nil<F0>. See <F6>window<#1e>override<#1e>redirect<F0> in 
  3789. paragraph 4.3, Window Attributes.
  3790.  
  3791. <syntax0>
  3792.  
  3793. <Index, "event", ":destroy<#1e>notify", Sort String = "destroy<#1e>notify"><Index, ":destroy<#1e>notify event", Sort String = "destroy<#1e>notify event">:destroy<#1e>notify<Tab><F3>Event 
  3794. Type
  3795.  
  3796. <return,
  3797.     Left Tab =        -0.90/0/0.93 inches,
  3798.     Right Tab =        7.50 inches>
  3799.  
  3800. <Tab><F3> <F2><HR>
  3801. Selected by <F3><#1f><F2> <F0>:structure<#1e>notify <F3>on a window 
  3802. or<F0> :substructure<#1e>notify<HR>
  3803. <Tab><F3>on its parent.
  3804.  
  3805. <para>
  3806.  
  3807. The <F6>:destroy<#1e>notify<F0> event is generated when a <F2>window<F0> 
  3808. is destroyed. The ordering of the <F6>:destroy<#1e>notify<F0> events 
  3809. is such that for any given window, <F6>:destroy<#1e>notify<F0> is 
  3810. generated on all inferiors of a window before <F6>:destroy<#1e>notify<F0> 
  3811. is generated on the <F2>window<F0>. The ordering among siblings 
  3812. and across subhierarchies is not otherwise constrained.
  3813.  
  3814. <indentA>
  3815.  
  3816. <F2>event<#1e>window<F6> <F0><#1f> Type <F6>window<F0>.
  3817.  
  3818. <indentB>
  3819.  
  3820. The window receiving the event.
  3821.  
  3822. <indentA>
  3823.  
  3824. <F2>window<F6> <F0><#1f> Type <F6>window<F0>.
  3825.  
  3826. <indentB>
  3827.  
  3828. The window that was destroyed.
  3829.  
  3830. <syntax0>
  3831.  
  3832. <|,"12<#1e>150"><Index, "event", ":gravity<#1e>notify", Sort String = "gravity<#1e>notify"><Index, ":gravity<#1e>notify event", Sort String = "gravity<#1e>notify event">:gravity<#1e>notify<Tab><F3>Even
  3833. t Type
  3834.  
  3835. <return,
  3836.     Left Tab =        -0.90/0.97 inches,
  3837.     Right Tab =        7.50 inches>
  3838.  
  3839. <Tab><F3> <HR>
  3840. <F2>Selected by: <F3><#1f><F2> <F0>:structure<#1e>notify <F3>on 
  3841. a window or<F0> :substructure<#1e>notify<HR>
  3842. <Tab><F3>on its parent.
  3843.  
  3844. <para>
  3845.  
  3846. The X server can report <F6>:gravity<#1e>notify<F0> events to clients 
  3847. wanting information about when a <F2>window<F0> is moved because 
  3848. of a change in the size of its parent. The X server generates this 
  3849. event whenever a client application actually moves a child window 
  3850. as a result of resizing its parent by calling <F6>with<#1e>state<F0> 
  3851. with the appropriate arguments set.
  3852.  
  3853. <indentA>
  3854.  
  3855. <F2>event<#1e>window<F6> <F0><#1f> Type <F6>window<F0>.
  3856.  
  3857. <indentB>
  3858.  
  3859. The window receiving the event.
  3860.  
  3861. <indentA>
  3862.  
  3863. <F2>window<F6> <F0><#1f> Type <F6>window<F0>.
  3864.  
  3865. <indentB>
  3866.  
  3867. The window that was moved.
  3868.  
  3869. <indentA>
  3870.  
  3871. <F2>x<F6> <F0><#1f> Type <F6>int16<F0>.
  3872.  
  3873. <indentB>
  3874.  
  3875. x and y specify the new upper<#1e>left corner position of the <F2>window<F0> 
  3876. relative to its parent.
  3877.  
  3878. <indentA>
  3879.  
  3880. <F2>y<F6> <F0><#1f> Type <F6>int16<F0>.
  3881.  
  3882. <indentB>
  3883.  
  3884. x and y specify the new upper<#1e>left corner position of the <F2>window<F0> 
  3885. relative to its parent.
  3886.  
  3887. <syntax0>
  3888.  
  3889. <Index, "event", ":map<#1e>notify", Sort String = "map<#1e>notify"><Index, ":map<#1e>notify event", Sort String = "map<#1e>notify event">:map<#1e>notify<Tab><Tab><F3>Event 
  3890. Type
  3891.  
  3892. <return,
  3893.     Left Tab =        -0.90/0.97 inches,
  3894.     Right Tab =        7.50 inches>
  3895.  
  3896. <Tab><F3> <F2><HR>
  3897. Selected by: <F3><#1f><F2> <F0>:structure<#1e>notify <F3>on a 
  3898. window or<F0> :substructure<#1e>notify<HR>
  3899. <Tab><F3>on its parent.
  3900.  
  3901. <para>
  3902.  
  3903. The X server can report <F6>:map<#1e>notify<F0> events to clients 
  3904. wanting information about which windows are mapped. The X server generates 
  3905. this event type whenever a client application changes the <F2>window<F0>'s 
  3906. state from unmapped to mapped by calling <F6>map<#1e>window<F0> 
  3907. or <F6>map<#1e>subwindow<F0>.
  3908.  
  3909. To receive this event type, you <F6>setf<F0> <F6>:structure<#1e>notify<F0> 
  3910. as the event<#1e>mask on the <F2>window<F0>'s <F6>event<#1e>mask<F0> 
  3911. slot. You can also receive this event type by <F6>setf<F0>ing the <F6>:subst
  3912. ructure<#1e>notify<F0> event<#1e>mask on the parent window.
  3913.  
  3914. <indentA>
  3915.  
  3916. <F2>event<#1e>window<F6> <F0><#1f> Type <F6>window<F0>.
  3917.  
  3918. <indentB>
  3919.  
  3920. The window receiving the event.
  3921.  
  3922. <indentA>
  3923.  
  3924. <F2>window<F6> <F0><#1f> Type <F6>window<F0>.
  3925.  
  3926. <indentB>
  3927.  
  3928. The window that was mapped.
  3929.  
  3930. <indentA>
  3931.  
  3932. <F2>override<#1e>redirect<#1e>p<F6> <F0><#1f> Type <F6>boolean<F0>.
  3933.  
  3934. <indentB>
  3935.  
  3936. <F2>override<#1e>redirect<#1e>p<F0> is true if the override<#1e>redirect 
  3937. attribute of the <F2>window<F0> is <F6>:on<F0>; otherwise, it 
  3938. is <F6>nil<F0>. See <F6>window<#1e>override<#1e>redirect<F0> in 
  3939. paragraph 4.3, Window Attributes.
  3940.  
  3941. <syntax0,
  3942.     New Page =        yes>
  3943.  
  3944. <|,"12<#1e>151"><Index, "event", ":reparent<#1e>notify", Sort String = "reparent<#1e>notify"><Index, ":reparent<#1e>notify event", Sort String = "reparent<#1e>notify event">:reparent<#1e>notify<Tab><F3>Eve
  3945. nt Type
  3946.  
  3947. <return,
  3948.     Left Tab =        -0.90/0.97/1.08/7.50 inches>
  3949.  
  3950. <Tab><F3> <HR>
  3951. <F2>Selected by: <F3><#1f><F2> <F0>:structure<#1e>notify <F3>on 
  3952. a window or<F0> :substructure<#1e>notify<HR>
  3953.   <F3><Tab>on its old or new parent.
  3954.  
  3955. <para>
  3956.  
  3957. The <F6>:reparent<#1e>notify<F0> event is generated when a <F2>window<F0> 
  3958. is reparented.
  3959.  
  3960. <indentA>
  3961.  
  3962. <F2>event<#1e>window<F6> <F0><#1f> Type <F6>window<F0>.
  3963.  
  3964. <indentB>
  3965.  
  3966. The window receiving the event.
  3967.  
  3968. <indentA>
  3969.  
  3970. <F2>window<F6> <F0><#1f> Type <F6>window<F0>.
  3971.  
  3972. <indentB>
  3973.  
  3974. The window that was reparented.
  3975.  
  3976. <indentA>
  3977.  
  3978. <F2>parent<F6> <F0><#1f> Type <F6>window<F0>.
  3979.  
  3980. <indentB>
  3981.  
  3982. The new parent of the <F2>window<F0>.
  3983.  
  3984. <indentA>
  3985.  
  3986. <F2>x<F6> <F0><#1f> Type <F6>int16<F0>.
  3987.  
  3988. <indentB>
  3989.  
  3990. x and y specify the upper<#1e>left corner position of the <F2>window<F0> 
  3991. relative to its new <F2>parent<F0>.
  3992.  
  3993. <indentA>
  3994.  
  3995. <F2>y<F6> <F0><#1f> Type <F6>int16<F0>.
  3996.  
  3997. <indentB>
  3998.  
  3999. x and y specify the upper<#1e>left corner position of the <F2>window<F0> 
  4000. relative to its new <F2>parent<F0>.
  4001.  
  4002. <indentA>
  4003.  
  4004. <F2>override<#1e>redirect<#1e>p<F6> <F0><#1f> Type <F6>boolean<F0>.
  4005.  
  4006. <indentB>
  4007.  
  4008. <F2>override<#1e>redirect<#1e>p<F0> is true if the override<#1e>redirect 
  4009. attribute of the <F2>window<F0> is <F6>:on<F0>; otherwise, it 
  4010. is <F6>nil<F0>. See <F6>window<#1e>override<#1e>redirect<F0> in 
  4011. paragraph 4.3, Window Attributes.
  4012.  
  4013. <syntax0>
  4014.  
  4015. <Index, "event", ":unmap<#1e>notify", Sort String = "unmap<#1e>notify"><Index, ":unmap<#1e>notify event", Sort String = "unmap<#1e>notify event">:unmap<#1e>notify<Tab><F3>Event 
  4016. Type
  4017.  
  4018. <return,
  4019.     Left Tab =        -0.90/0/0.97/7.50 inches>
  4020.  
  4021. <Tab><F3> <HR>
  4022. <F2>Selected by:<F3> <#1f><F2> <F0>:structure<#1e>notify <F3>on 
  4023. a window or<F0> :substructure<#1e>notify<HR>
  4024. <Tab><F3>on its parent.
  4025.  
  4026. <para>
  4027.  
  4028. The <F6>:unmap<#1e>notify<F0> event is generated when a mapped <F2>window
  4029. <F0> is unmapped.
  4030.  
  4031. <indentA>
  4032.  
  4033. <F2>event<#1e>window <F0><#1f> Type <F6>window<F0>.
  4034.  
  4035. <indentB>
  4036.  
  4037. The window receiving the event.
  4038.  
  4039. <indentA>
  4040.  
  4041. <F2>window<F6> <F0><#1f> Type <F6>window<F0>.
  4042.  
  4043. <indentB>
  4044.  
  4045. The window that was unmapped.
  4046.  
  4047. <indentA>
  4048.  
  4049. co<F2>nfigure<#1e>p <F0><#1f> Type <F6>boolean<F0>.
  4050.  
  4051. <indentB>
  4052.  
  4053. <F2>configure<#1e>p<F0> is true if the <F2>window<F0> has a win<#1e>gravity 
  4054. attribute of <F6>:unmap<F0>, and the event was generated because <F2>window
  4055. <F0>'s parent was resized.
  4056.  
  4057. <syntax0,
  4058.     New Page =        yes>
  4059.  
  4060. <|,"12<#1e>152"><Index, "event", ":visibility<#1e>notify", Sort String = "visibility<#1e>notify"><Index, ":visibility<#1e>notify event", Sort String = "visibility<#1e>notify event">:visibility<#1e>notify<Tab><F3>E
  4061. vent Type
  4062.  
  4063. <return>
  4064.  
  4065. <Tab><F3> <F2><HR>
  4066. Selected by: <F3><#1f><F2> <F0>:visibility<#1e>change<F3>.
  4067.  
  4068. <para>
  4069.  
  4070. The <F6>:visibility<#1e>notify<F0> event is sent when the visibility 
  4071. of a <F2>window<F0> changes. <F6>:visibility<#1e>notify <F0>events 
  4072. are never generated on <F6>:input<#1e>only <F0>windows. For the 
  4073. purposes of this event, the visibility of the <F2>window<F0> is 
  4074. not affected by its subwindows.
  4075.  
  4076. All<F6> :visibility<#1e>notify<F0> events caused by a hierarchy 
  4077. change are generated after any hierarchy event caused by that change 
  4078. (for example, <F6>:unmap<#1e>notify<F0>, <F6>:map<#1e>notify<F0>, <F6>:con
  4079. figure<#1e>notify<F0>, <F6>:gravity<#1e>notify<F0>, or <F6>:circulate<#1e>n
  4080. otify<F0>). Any <F6>:visibility<#1e>notify<F0> event on a given 
  4081. window is generated before any <F6>:exposure <F0>events on that 
  4082. window, but it is not required that all <F6>:visibility<#1e>notify <F0>events 
  4083. on all windows be generated before all <F6>:exposure<F0> events 
  4084. on all windows. The ordering of<F6> :visibility<#1e>notify<F0> events 
  4085. with respect to <F6>:focus<#1e>out<F0>, <F6>:enter<#1e>notify<F0>, 
  4086. and <F6>:leave<#1e>notify<F0> events is not constrained.
  4087.  
  4088. <indentA>
  4089.  
  4090. <F2>window, event<#1e>window<F6> <F0><#1f> Type <F6>window<F0>.
  4091.  
  4092. <indentB>
  4093.  
  4094. The window that changed in visibility.
  4095.  
  4096. <indentA>
  4097.  
  4098. <F2>state<F6> <F0><#1f> Type (<F6>member :unobscured :partially<#1e>obscure
  4099. d <HR>
  4100.                  :fully<#1e>obscured<F0>).
  4101.  
  4102. <indentB>
  4103.  
  4104. When the <F2>window<F0> was either unviewable or it was viewable 
  4105. and at least partially obscured, and the <F2>window<F0> changed 
  4106. to viewable and completely unobscured, then <F2>state<F0> is <F6>:unobscured
  4107. <F0>.
  4108.  
  4109. When the <F2>window<F0> was either unviewable or it was viewable 
  4110. and completely obscured, and the <F2>window<F0> changed to viewable 
  4111. and partially obscured, then <F2>state<F0> is <F6>:partially<#1e>obscured
  4112. <F0>.
  4113.  
  4114. When the <F2>window<F0> was either unviewable or it was at least 
  4115. partially visible, and the <F2>window<F0> changed to viewable and 
  4116. completely obscured, then <F2>state<F0> is <F6>:fully<#1e>obscured<F0>.
  4117.  
  4118. <p2rule>
  4119.  
  4120. <Index, "structure control events", To Named = p2rule><Index, "event", "structure control", To Named = p2rule>
  4121. <Frame,
  4122.     Name =            p2rule,
  4123.     Placement =        At Anchor,
  4124.     Width =            4.75 inches,
  4125.     Height =        0.15 inches,
  4126.     Vertical Alignment =    0.007 inches,
  4127.     Shared Contents =    yes>
  4128.  
  4129. <p2stacked,
  4130.     Font =            F3>
  4131.  
  4132. <Tab><F6>Structure<Tab>12.12.6<F0><#04>The following paragraphs 
  4133. describe events used to <F2>redirect<F0> client<FJ>
  4134.  
  4135. <p2para,
  4136.     Alignment =        Both,
  4137.     Font =            F3,
  4138.     Allow Page Break Within = yes,
  4139.     Allow Page Break After = yes,
  4140.     TOC Doc Name =        >
  4141.  
  4142. <Tab><F6>Control Events<Tab><F0>requests that reconfigure, restack, 
  4143. or map a window. Structure control events are typically used only 
  4144. by window managers and not by ordinary client applications. Structure 
  4145. control events report redirected requests, allowing a window manager 
  4146. to modify the requests before they are actually performed. However, 
  4147. if the override<#1e>redirect attribute of a window is <F6>:on<F0>, 
  4148. then no requests are redirected and no structure control events are 
  4149. generated.<F6> 
  4150.  
  4151. <syntax>
  4152.  
  4153. <Index, "event", ":circulate<#1e>request", Sort String = "circulate<#1e>request"><Index, ":circulate<#1e>request event", Sort String = "circulate<#1e>request event">:circulate<#1e>request<Tab><F3>Event 
  4154. Type
  4155.  
  4156. <para>
  4157.  
  4158. The <F6>:circulate<#1e>request<F0> event is generated when a client 
  4159. application calls <F6>circulate<#1e>window<#1e>up<F0> or <F6>circulate<#1e>w
  4160. indow<#1e>down<F0> with a window that has the override<#1e>redirect 
  4161. attribute <F6>:off<F0>. The <F2>window<F0> argument specifies 
  4162. the window to be restacked, and <F2>place<F0> specifies what the 
  4163. new position in the stacking order should be (either <F6>:top<F0> 
  4164. or <F6>:bottom<F0>).
  4165.  
  4166. <indentA>
  4167.  
  4168. <F2>Selected by: <F0><#1f><F2> <F6>:substructure<#1e>redirect <F0>on 
  4169. <F2>parent<F0>.
  4170.  
  4171. <F2>parent, event<#1e>window<F6> <F0><#1f> Type <F6>window<F0>.
  4172.  
  4173. <indentB>
  4174.  
  4175. The window receiving the event. The receiving client must have selected <F6>:s
  4176. ubstructure<#1e>redirect<F0> on this window.
  4177.  
  4178. <indentA>
  4179.  
  4180. <F2>window<F6> <F0><#1f> Type <F6>window<F0>.
  4181.  
  4182. <indentB>
  4183.  
  4184. The window to be restacked.
  4185.  
  4186. <indentA>
  4187.  
  4188. <|,"12<#1e>153"><F2>place<F0> <#1f> Type <F6>(member :top :bottom)<F0>.
  4189.  
  4190. <indentB>
  4191.  
  4192. The new stacking priority requested for <F2>window<F0>.
  4193.  
  4194. <syntax0>
  4195.  
  4196. <Index, "event", ":colormap<#1e>notify", Sort String = "colormap<#1e>notify"><Index, ":colormap<#1e>notify event", Sort String = "colormap<#1e>notify event">:colormap<#1e>notify<Tab><F3>Event 
  4197. Type
  4198.  
  4199. <return>
  4200.  
  4201. <Tab><F3> <F2><HR>
  4202. Selected by: <F3><#1f> <F0>:colormap<#1e>change<F3>.
  4203.  
  4204. <para>
  4205.  
  4206. The <F6>:colormap<#1e>notify<F0> event is generated with <F2>new<#1e>p<F0> 
  4207. <F6>t<F0> when the <F2>colormap<F0> associated with a <F2>window<F0> 
  4208. is changed, installed, or uninstalled.
  4209.  
  4210. <indentA>
  4211.  
  4212. <F2>window, event<#1e>window<F6> <F0><#1f> Type <F6>window<F0>.
  4213.  
  4214. <indentB>
  4215.  
  4216. The window receiving the event.
  4217.  
  4218. <indentA>
  4219.  
  4220. <F2>colormap<F6> <F0><#1f> Type <F6>(or null colormap)<F0>.
  4221.  
  4222. <indentB>
  4223.  
  4224. The colormap attribute of the window.
  4225.  
  4226. <indentA>
  4227.  
  4228. <F2>new<#1e>p <F0><#1f> Type <F6>boolean<F0>.
  4229.  
  4230. <indentB>
  4231.  
  4232. If <F2>new<#1e>p<F0> is true, then the <F2>window<F0>'s colormap 
  4233. attribute has changed to the given <F2>colormap<F0>. Otherwise, 
  4234. the <F2>window<F0>'s colormap attribute has not, but the <F2>colormap<F0> 
  4235. has been installed or uninstalled.
  4236.  
  4237. <indentA>
  4238.  
  4239. <F2>installed<#1e>p<F6> <F0><#1f> Type <F6>boolean<F0>.
  4240.  
  4241. <indentB>
  4242.  
  4243. If <F2>installed<#1e>p<F0> is true, then the <F2>colormap<F0> 
  4244. is currently installed.
  4245.  
  4246. <syntax0>
  4247.  
  4248. <Index, "event", ":configure<#1e>request", Sort String = "configure<#1e>request"><Index, ":configure<#1e>request event", Sort String = "configure<#1e>request event">:configure<#1e>request<Tab><F3>Event 
  4249. Type
  4250.  
  4251. <return>
  4252.  
  4253. <Tab><F3> <F2><HR>
  4254. Selected by: <F3><#1f><F2> <F0>:substructure<#1e>redirect <F3>on 
  4255. parent.
  4256.  
  4257. <para>
  4258.  
  4259. The <F6>:configure<#1e>request<F0> event is generated when a client 
  4260. program sets the <F2>x<F0>, <F2>y<F0>, <F2>width<F0>, <F2>heigh<F0>t, 
  4261. <F2>border<#1e>width<F0> or stacking priority attributes of a window 
  4262. that has the override<#1e>redirect attribute <F6>:off<F0>.
  4263.  
  4264. <indentA>
  4265.  
  4266. <F2>parent, event<#1e>window<F6> <F0><#1f> Type <F6>window<F0>.
  4267.  
  4268. <indentB>
  4269.  
  4270. The window receiving the event. The receiving client must have selected <F6>:s
  4271. ubstructure<#1e>redirect<F0> on this window.
  4272.  
  4273. <indentA>
  4274.  
  4275. <F2>window<F6> <F0><#1f> Type <F6>window<F0>.
  4276.  
  4277. <indentB>
  4278.  
  4279. The window to be reconfigured.
  4280.  
  4281. <indentA>
  4282.  
  4283. <F2>x <F0><#1f> Type <F6>int16<F0>.
  4284.  
  4285. <indentB>
  4286.  
  4287. <F2>x<F0> and <F2>y<F0> specify the requested upper<#1e>left corner 
  4288. position of the <F2>window<F0> relative to the parent. If either <F2>x<F0> 
  4289. or <F2>y<F0> is not specified in the value<#1e>mask, then it is 
  4290. set to the current window position.
  4291.  
  4292. <indentA>
  4293.  
  4294. <F2>y<F6> <F0><#1f> Type <F6>int16<F0>.
  4295.  
  4296. <indentB>
  4297.  
  4298. <F2>x<F0> and <F2>y<F0> specify the requested upper<#1e>left corner 
  4299. position of the <F2>window<F0> relative to the <F2>parent<F0>. 
  4300. If either <F2>x<F0> or <F2>y<F0> is not specified in the <F2>value<#1e>mas
  4301. k<F0>, then it is set to the current window position.
  4302.  
  4303. <indentA,
  4304.     New Page =        yes>
  4305.  
  4306. <|,"12<#1e>154"><F2>width, height<F6> <F0><#1f> Type <F6>card16<F0>.
  4307.  
  4308. <indentB>
  4309.  
  4310. <F2>width<F0> and <F2>height<F0> specify the requested size of 
  4311. the <F2>window<F0> interior. If either <F2>width<F0> or <F2>height<F0> 
  4312. is not specified in the <F2>value<#1e>mask<F0>, then it is set to 
  4313. the current window size.
  4314.  
  4315. <indentA>
  4316.  
  4317. <F2>border<#1e>width<F6> <F0><#1f> Type <F6>card16
  4318.  
  4319. <indentB>
  4320.  
  4321. The requested <F2>window<F0> border width. If <F2>border<#1e>width<F0> 
  4322. is not specified in the <F2>value<#1e>mask<F0>, then it is set to 
  4323. the current window <F2>border<#1e>width<F0>.
  4324.  
  4325. <indentA>
  4326.  
  4327. <F2>stack<#1e>mode<F6> <F0><#1f> Type <F6>(member :above :below 
  4328. :top<#1e>if :bottom<#1e>if                                       :opposite)
  4329. <F0>.
  4330.  
  4331. <indentB>
  4332.  
  4333. <F2>stack<#1e>mode<F0> and <F2>above<#1e>sibling<F0> specify the 
  4334. requested stacking priority of the <F2>window<F0>. If <F2>stack<#1e>mode
  4335. <F0> is not specified in the <F2>value<#1e>mask<F0>, then it is 
  4336. set to <F6>:above<F0>.
  4337.  
  4338. <indentA>
  4339.  
  4340. <F2>above<#1e>sibling<F0> <#1f> Type (<F6>or null window<F0>).
  4341.  
  4342. <indentB>
  4343.  
  4344. <F2>stack<#1e>mode<F0> and <F2>above<#1e>sibling<F0> specify the 
  4345. requested stacking priority of the <F2>window<F0>. If <F2>above<#1e>sibling
  4346. <F0> is not specified in the <F2>value<#1e>mask<F0>, then it is 
  4347. set to <F6>nil<F0>.
  4348.  
  4349. <indentA>
  4350.  
  4351. <F2>value<#1e>mask <F0><#1f><F6> <F0>Type <F6>mask16<F0>.
  4352.  
  4353. <indentB>
  4354.  
  4355. Specifies the changed <F2>window<F0> attributes contained in the 
  4356. redirected client request. Each 1 bit specifies that the corresponding 
  4357. attribute was changed.
  4358.  
  4359. <syntax0>
  4360.  
  4361. <Index, "event", ":map<#1e>request", Sort String = "map<#1e>request"><Index, ":map<#1e>request event", Sort String = "map<#1e>request event">:map<#1e>request<Tab><Tab><F3>Event 
  4362. Type
  4363.  
  4364. <return>
  4365.  
  4366. <Tab><F3> <F2><HR>
  4367. Selected by: <F3><#1f><F2> <F0>:substructure<#1e>redirect <F3>on 
  4368. parent.
  4369.  
  4370. <para>
  4371.  
  4372. The <F6>:map<#1e>request<F0> event is generated when a client application 
  4373. maps a <F2>window<F0> that has the override<#1e>redirect attribute <F6>:off
  4374. <F0>.
  4375.  
  4376. <indentA>
  4377.  
  4378. <F2>parent, event<#1e>window<F0> <#1f> Type <F6>window<F0>.
  4379.  
  4380. <indentB>
  4381.  
  4382. The window receiving the event. The receiving client must have selected <F6>:s
  4383. ubstructure<#1e>redirect<F0> on this window.
  4384.  
  4385. <indentA>
  4386.  
  4387. <F2>window<F6> <F0><#1f> Type <F6>window<F0>.
  4388.  
  4389. <indentB>
  4390.  
  4391. The window to be mapped.
  4392.  
  4393. <syntax0>
  4394.  
  4395. <Index, "event", ":resize<#1e>request", Sort String = "resize<#1e>request"><Index, ":resize<#1e>request event", Sort String = "resize<#1e>request event">:resize<#1e>request<Tab><F3>Event 
  4396. Type
  4397.  
  4398. <return>
  4399.  
  4400. <Tab><F3> <HR>
  4401. <F2>Selected by: <F3><#1f><F0> :resize<#1e>redirect<F3>.
  4402.  
  4403. <para>
  4404.  
  4405. The <F6>:resize<#1e>request<F0> event is generated when a client 
  4406. program sets the <F2>width<F0> or <F2>height<F0> attributes of 
  4407. a <F2>window<F0> that has the override<#1e>redirect attribute <F6>:off<F0>.
  4408.  
  4409. <indentA>
  4410.  
  4411. wi<F2>ndow, event<#1e>window <F0><#1f> Type <F6>window<F0>.
  4412.  
  4413. <indentB>
  4414.  
  4415. The window to be resized.
  4416.  
  4417. <indentA>
  4418.  
  4419. <F2>width, height<F6> <F0><#1f> Type <F6>card16<F0>.
  4420.  
  4421. <indentB>
  4422.  
  4423. <F2>width<F0> and <F2>height<F0> specify the requested size of 
  4424. the wi<F2>ndow<F0> interior. If either <F2>width<F0> or <F2>height<F0> 
  4425. was unchanged in the client request, then it is set to the current 
  4426. window size.
  4427.  
  4428. <p2rule,
  4429.     New Page =        yes>
  4430.  
  4431. <|,"12<#1e>155"><Index, "client", "communications events", To Named = p2rule><Index, "event", "client communications", To Named = p2rule>
  4432. <Frame,
  4433.     Name =            p2rule,
  4434.     Placement =        At Anchor,
  4435.     Width =            4.75 inches,
  4436.     Height =        0.15 inches,
  4437.     Vertical Alignment =    0.007 inches,
  4438.     Shared Contents =    yes>
  4439.  
  4440. <p2stacked,
  4441.     Font =            F3>
  4442.  
  4443. <Tab><F6>Client<Tab>12.12.7 <F0>The client communications events 
  4444. discussed in the following<FJ>
  4445.  
  4446. <p2stacked>
  4447.  
  4448. <Tab>Communications<Tab><F3>paragraphs are: <F0>:client<#1e>message<F3>, 
  4449. <F0>:property<#1e>notify<F3>, <F0>:selection<#1e>clear<F3>,<FJ>
  4450.  
  4451. <p2para,
  4452.     Alignment =        Both,
  4453.     Font =            F3,
  4454.     Allow Page Break Within = yes,
  4455.     Allow Page Break After = yes,
  4456.     TOC Doc Name =        >
  4457.  
  4458. <Tab><F6>Events<Tab>:selection<#1e>request<F0>,<F6> <F0>and <F6>:selection
  4459. <#1e>notify<F0>.
  4460.  
  4461. <syntax>
  4462.  
  4463. <Index, "event", ":client<#1e>message", Sort String = "client<#1e>message"><Index, ":client<#1e>message event", Sort String = "client<#1e>message event">:client<#1e>message<Tab><F3>Event 
  4464. Type
  4465.  
  4466. <para>
  4467.  
  4468. The <F6>:client<#1e>message <F0>event is generated exclusively by 
  4469. client calls to <F6>send<#1e>event<F0>. The X server places no interpretation 
  4470. on the <F2>type<F0> or content of <F2>data<F0> sent in a <F6>:client<#1e>m
  4471. essage<F0>. A client can neither select <F6>:client<#1e>message <F0>events 
  4472. nor avoid receiving them.
  4473.  
  4474. <indentA>
  4475.  
  4476. <F2>window, event<#1e>window<F6> <F0><#1f> Type <F6>window<F0>.
  4477.  
  4478. <indentB>
  4479.  
  4480. The window receiving the event.
  4481.  
  4482. <indentA>
  4483.  
  4484. <F2>type<F6> <F0><#1f> Type <F6>keyword<F0>.
  4485.  
  4486. <indentB>
  4487.  
  4488. An xatom keyword that specifies the type of client message. Interpretation 
  4489. of the type is determined solely by agreement between the sending 
  4490. and receiving clients.
  4491.  
  4492. <indentA>
  4493.  
  4494. <F2>format<F0> <#1f> Type (<F6>member 8 16 32<F0>).
  4495.  
  4496. <indentB>
  4497.  
  4498. An integer that specifies whether <F2>data<F0> should be viewed 
  4499. as a sequence of 8<#1e>bit, 16<#1e>bit, or 32<#1e>bit quantities.
  4500.  
  4501. <indentA>
  4502.  
  4503. <F2>data<F0> <#1f> Type <F6>(sequence integer)<F0>.
  4504.  
  4505. <indentB>
  4506.  
  4507. The data content of the client message. <F2>data<F0> always consists 
  4508. of 160 bytes <#1f> depending on format, either 20 8<#1e>bit values, 
  4509. 10 16<#1e>bit values or 5 32<#1e>bit values. The amount of this data 
  4510. actually used by a particular client message depends on the type.
  4511.  
  4512. <syntax0>
  4513.  
  4514. <Index, "event", ":property<#1e>notify", Sort String = "property<#1e>notify"><Index, ":property<#1e>notify event", Sort String = "property<#1e>notify event">:property<#1e>notify<Tab><F3>Event 
  4515. Type
  4516.  
  4517. <return>
  4518.  
  4519. <Tab><F3> <HR>
  4520. <F2>Selected by: <F3><#1f><F2> <F0>:property<#1e>change<F3>.<F0> 
  4521.  
  4522. <para>
  4523.  
  4524. The <F6>:property<#1e>notify<F0> event is generated when a window 
  4525. property is changed or deleted.
  4526.  
  4527. <indentA>
  4528.  
  4529. <F2>window, event<#1e>window<F6> <F0><#1f> Type <F6>window<F0>.
  4530.  
  4531. <indentB>
  4532.  
  4533. The window receiving the event.
  4534.  
  4535. <indentA>
  4536.  
  4537. <F2>atom<F0> <#1f> Type <F6>keyword<F0>.
  4538.  
  4539. <indentB>
  4540.  
  4541. The property that was changed or deleted.
  4542.  
  4543. <indentA>
  4544.  
  4545. <F2>state<F6> <F0><#1f> Type <F6>(member :new<#1e>value :deleted)<F0>.
  4546.  
  4547. <indentB>
  4548.  
  4549. <F2>state<F0> is <F6>:new<#1e>value<F0> if the property was changed 
  4550. using <F6>change<#1e>property<F0> or <F6>rotate<#1e>properties<F0>, 
  4551. even if zero<#1e>length data was added or if all or part of the property 
  4552. was replaced with identical data. <F2>state<F0> is <F6>:deleted <F0>if 
  4553. the property was deleted using <F6>delete<#1e>property<F0> or <F6>get<#1e>pr
  4554. operty<F0>.
  4555.  
  4556. <indentA>
  4557.  
  4558. <F2>time<F0> <#1f> Type <F6>timestamp<F0>.
  4559.  
  4560. <indentB>
  4561.  
  4562. The server time when the property was changed or deleted.
  4563.  
  4564. <syntax>
  4565.  
  4566. <Index, "event", ":selection<#1e>clear", Sort String = "selection<#1e>clear"><Index, ":selection<#1e>clear event", Sort String = "selection<#1e>clear event">:selection<#1e>clear<Tab><F3>Event 
  4567. Type
  4568.  
  4569. <para>
  4570.  
  4571. The <F6>:selection<#1e>clear<F0> event is reported to the previous 
  4572. owner of a <F2>selection<F0> when the owner of the <F2>selection<F0> 
  4573. is changed. The selection owner is changed by a client using <F6>setf<F0>. 
  4574. A client can neither select <F6>:selection<#1e>clear<F0> events 
  4575. nor avoid receiving them.
  4576.  
  4577. <indentA>
  4578.  
  4579. <|,"12<#1e>156"><F2>window, event<#1e>window<F0> <#1f> Type <F6>window<F0>.
  4580.  
  4581. <indentB>
  4582.  
  4583. The window losing ownership of the <F2>selection<F0>.
  4584.  
  4585. <indentA>
  4586.  
  4587. <F2>selection<F6> <F0><#1f> Type <F6>keyword<F0>.
  4588.  
  4589. <indentB>
  4590.  
  4591. The name of the selection.
  4592.  
  4593. <indentA>
  4594.  
  4595. <F2>time<F6> <F0><#1f> Type <F6>timestamp<F0>.
  4596.  
  4597. <indentB>
  4598.  
  4599. The last<#1e>change time recorded for the <F2>selection<F0>.
  4600.  
  4601. <syntax>
  4602.  
  4603. <Index, "event", ":selection<#1e>notify", Sort String = "selection<#1e>notify"><Index, ":selection<#1e>notify event", Sort String = "selection<#1e>notify event">:selection<#1e>notify<Tab><F3>Event 
  4604. Type
  4605.  
  4606. <para,
  4607.     Bottom Margin =        0.10 inches>
  4608.  
  4609. The <F6>:selection<#1e>notify<F0> event is sent to a client calling <F6>conv
  4610. ert<#1e>selection<F0>. <F6>:selection<#1e>notify<F0> reports the 
  4611. result of the client request to return the current value of a <F2>selection
  4612. <F0> into a particular form.<F6> :selection<#1e>notify<F0> is sent 
  4613. using <F6>send<#1e>event<F0> by the owner of the selection or (if 
  4614. no owner exists) by the X server. A client can neither select <F6>:selection<#1e>
  4615. notify<F0> events nor avoid receiving them.
  4616.  
  4617. <"note",
  4618.     Top Margin =        0.15 inches,
  4619.     Bottom Margin =        0.15 inches>
  4620.  
  4621. <Tab-><HR>
  4622. <F6>NOTE: <F0>Standard conventions for inter<#1e>client communication 
  4623. require the<SP>following additional steps in processing a <F6>:selection<#1e>n
  4624. otify<F0> event:
  4625.  
  4626. <item,
  4627.     Bottom Margin =        0.10 inches>
  4628.  
  4629. <Autonum, item, 1, First = Yes, Restart = Yes><Tab>The<SP>client receiving this event 
  4630. should call <F6>get<#1e>property<F0> to return the converted<SP>selection 
  4631. value.
  4632.  
  4633. <item,
  4634.     Bottom Margin =        0 inches>
  4635.  
  4636. <Autonum, item, 1><Tab>After receiving the selection value, the property 
  4637. should then<SP>be deleted (either by using the <F6>:delete<#1e>p<F0> 
  4638. argument to <F6>get<#1e>property<F0> or by<SP>calling <F6>delete<#1e>propert
  4639. y<F0>).
  4640.  
  4641. <endrule>
  4642.  
  4643. <Tab-><Tab-><Tab-><Tab->
  4644.  
  4645. <indentA>
  4646.  
  4647. <F2>window, event<#1e>window<F6> <F0><#1f> Type <F6>window<F0>.
  4648.  
  4649. <indentB>
  4650.  
  4651. The requestor window given in the call to <F6>convert<#1e>selection<F0>.
  4652.  
  4653. <indentA>
  4654.  
  4655. <F2>selection<F0> <#1f> Type <F6>keyword<F0>.
  4656.  
  4657. <indentB>
  4658.  
  4659. The selection to be converted.
  4660.  
  4661. <indentA>
  4662.  
  4663. <F2>target <F0><#1f><F6> <F0>Type <F6>keyword<F0>.
  4664.  
  4665. <indentB>
  4666.  
  4667. An <F6>xatom<F0> specifying the type of the converted selection 
  4668. value. This is the same target type given in the call to <F6>convert<#1e>selec
  4669. tion<F0>.
  4670.  
  4671. <indentA>
  4672.  
  4673. <F2>property<F6> <F0><#1f> Type <F6>(or null keyword)<F0>.
  4674.  
  4675. <indentB>
  4676.  
  4677. The window property containing the converted selection. If the property 
  4678. is <F6>nil<F0>, then either the <F2>selection<F0> has no owner 
  4679. or the owner could not perform the conversion to the <F2>target<F0> 
  4680. type.
  4681.  
  4682. <indentA>
  4683.  
  4684. <F2>time<F6> <F0><#1f> Type <F6>timestamp<F0>.
  4685.  
  4686. <indentB>
  4687.  
  4688. The timestamp from the client call to <F6>convert<#1e>selection<F0>.
  4689.  
  4690. <syntax>
  4691.  
  4692. <Index, "event", ":selection<#1e>request", Sort String = "selection<#1e>request"><Index, ":selection<#1e>request event", Sort String = "selection<#1e>request event">:selection<#1e>request<Tab><F3>Event 
  4693. Type
  4694.  
  4695. <para,
  4696.     Bottom Margin =        0.10 inches>
  4697.  
  4698. The <F6>:selection<#1e>request<F0> event is reported to the owner 
  4699. of a selection when a client calls <F6>convert<#1e>selection<F0>. 
  4700. This event requests the selection owner to convert the current value 
  4701. of a <F2>selection<F0> into a specified form and to return it to 
  4702. the requestor. A client can neither select <F6>:selection<#1e>request<F0> 
  4703. events nor avoid receiving them.
  4704.  
  4705. The selection owner should respond to a <F6>:selection<#1e>request<F0> 
  4706. event by performing the following steps:
  4707.  
  4708. <item,
  4709.     Bottom Margin =        0.10 inches>
  4710.  
  4711. <|,"12<#1e>157"><Autonum, item, 1, Restart = Yes><Tab>Convert the current <F2>selection
  4712. <F0> value to the <F2>target<F0> type.
  4713.  
  4714. <item>
  4715.  
  4716. <Autonum, item, 1><Tab>Store the converted selection value in the <F2>property
  4717. <F0>. If <F2>property<F0> is <F6>nil<F0>, then the owner should 
  4718. choose the <F2>property<F0>.
  4719.  
  4720. <item,
  4721.     Bottom Margin =        0.05 inches>
  4722.  
  4723. <Autonum, item, 1><Tab>Call <F6>send<#1e>event<F0> to send a <F6>:selection<#1e>
  4724. notify<F0> event to the <F2>requestor<F0> containing the <F2>property<F0> 
  4725. with the converted value. If the <F2>selection<F0> could not be 
  4726. converted to the <F2>target<F0> type, then a <F6>nil<F0> <F2>property
  4727. <F0> should be sent. The <F6>:selection<F0>,<F6> :target<F0>, 
  4728. and <F6>:time<F0> arguments to <F6>send<#1e>event<F0> should be 
  4729. the same as those received in the <F6>:selection<#1e>request<F0> 
  4730. event. The event<#1e>mask argument to <F6>send<#1e>event<F0> should 
  4731. be <F6>nil<F0>; that is, the <F6>:selection<#1e>notify<F0> event 
  4732. should be sent to client that created the <F2>requestor<F0>.
  4733.  
  4734. <"note",
  4735.     Top Margin =        0.15 inches,
  4736.     Bottom Margin =        0.15 inches>
  4737.  
  4738. <Tab-><HR>
  4739. <F6>NOTE: <F0>Standard conventions for inter<#1e>client communication 
  4740. require the<SP>following additional steps in processing a <F6>:selection<#1e>r
  4741. equest<F0> event: 
  4742.  
  4743. <item,
  4744.     Bottom Margin =        0.10 inches>
  4745.  
  4746. <Autonum, item, 1, Restart = Yes><Tab>The<SP>property used to store 
  4747. the selection value must belong to the requestor. 
  4748.  
  4749. <Autonum, item, 1><Tab>If<SP>the property is <F6>nil<F0>, the target 
  4750. type <F6>atom<F0> should be used as the property<SP>name.
  4751.  
  4752. <item,
  4753.     Bottom Margin =        0 inches>
  4754.  
  4755. <Autonum, item, 1><Tab>If the window did not actually own the selection 
  4756. at the given time,<SP>the request should be refused, just as if it 
  4757. could not be converted to<SP>the target type.
  4758.  
  4759. <endrule>
  4760.  
  4761. <Tab-><Tab-><Tab-><Tab->
  4762.  
  4763. <indentA>
  4764.  
  4765. <F2>window, event<#1e>window<F6> <F0><#1f> Type <F6>window<F0>.
  4766.  
  4767. <indentB>
  4768.  
  4769. The selection owner receiving the event.
  4770.  
  4771. <indentA>
  4772.  
  4773. <F2>requestor<F6> <F0><#1f> Type <F6>window<F0>.
  4774.  
  4775. <indentB>
  4776.  
  4777. The window requesting the converted <F2>selection<F0>.
  4778.  
  4779. <indentA>
  4780.  
  4781. <F2>selection<F6> <F0><#1f> Type <F6>keyword<F0>.
  4782.  
  4783. <indentB>
  4784.  
  4785. The selection to be converted.
  4786.  
  4787. <indentA>
  4788.  
  4789. <F2>target <F0><#1f> Type <F6>keyword<F0>.
  4790.  
  4791. <indentB>
  4792.  
  4793. An <F6>xatom<F0> specifying the type of the converted <F2>selection<F0> 
  4794. value.
  4795.  
  4796. <indentA>
  4797.  
  4798. <F2>property<F6> <F0><#1f> Type <F6>(or null keyword)<F0>.
  4799.  
  4800. <indentB>
  4801.  
  4802. A requestor window property. 
  4803.  
  4804. <indentA>
  4805.  
  4806. <F2>time <F0><#1f><F6> <F0>Type <F6>timestamp<F0>.
  4807.  
  4808. <indentB>
  4809.  
  4810. The timestamp sent in the client <F6>convert<#1e>selection<F0> request.
  4811.  
  4812. <p2rule>
  4813.  
  4814. <Index, "event", "types", "declaring">
  4815. <Frame,
  4816.     Name =            p2rule,
  4817.     Placement =        At Anchor,
  4818.     Width =            4.75 inches,
  4819.     Height =        0.15 inches,
  4820.     Vertical Alignment =    0.007 inches,
  4821.     Shared Contents =    yes>
  4822.  
  4823. <p2stacked,
  4824.     Font =            F3>
  4825.  
  4826. <Tab><F6>Declaring<Tab>12.12.8<F0><#04>CLX uses the <F6>declare<#1e>event
  4827. <F0> macro to define the event slot symbols
  4828.  
  4829. <p2para,
  4830.     Alignment =        Both,
  4831.     Font =            F3,
  4832.     Allow Page Break Within = yes,
  4833.     Allow Page Break After = yes,
  4834.     TOC Doc Name =        >
  4835.  
  4836. <Tab><F6>Event Types<Tab><F0>that access the contents of X events. 
  4837. Most client applications do not need to use <F6>declare<#1e>event<F0> 
  4838. because the declarations for all core X events are already defined 
  4839. by CLX. Programmers using extensions to the X protocol can use <F6>declare<#1e>
  4840. event<F0> to allow CLX to handle new event types returned by an extended 
  4841. X server. 
  4842.  
  4843. <syntax>
  4844.  
  4845. declare<#1e>event<F2> event<#1e>codes<F0> <F3>&rest<F0> <F2>slot<#1e>decla
  4846. rations<F0><Tab><F3>Macro<Index, Doc = operations, "xlib:declare<#1e>event", Sort String = "declare<#1e>event">
  4847.  
  4848. <para>
  4849.  
  4850. Defines a mapping between event slot symbols and the data items in 
  4851. event messages received from an X server.
  4852.  
  4853. <|,"12<#1e>158">The <F2>event<#1e>codes<F0> argument gives the event type 
  4854. keyword for the event described. If several event types share the 
  4855. same slots, then <F2>event<#1e>codes<F0> can be a list of event 
  4856. type keywords. <F2>slot<#1e>declarations<F0> is a list containing 
  4857. an element for each event data item. The order of <F2>slot<#1e>declarations
  4858. <F0> corresponds to the order of event data items defined by the 
  4859. X protocol.
  4860.  
  4861. Each element of <F2>slot<#1e>declarations<F0> is a list of the form 
  4862. (<F2>type slot<#1e>name<F0>*), where <F2>type<F0> is a Common 
  4863. Lisp type specifier and <F2>slot<#1e>name<F0> is a slot name symbol. 
  4864. The effect of such a list is to declare that the next data items in 
  4865. the event have the given data <F2>type<F0> and are associated with 
  4866. the given <F2>slot<#1e>name<F0> symbols. <F2>slot<#1e>name<F0> 
  4867. can also be a list of slot name symbols; in this case, each symbol 
  4868. in the list is an alias that refers to the same event data item.
  4869.  
  4870. <arg>
  4871.  
  4872. event<#1e>codes <#1f><F3> An event type keyword or a list of event 
  4873. type keywords.
  4874.  
  4875. slot<#1e>declarations <#1f> <F3>A list of clauses defining event 
  4876. slot symbols.
  4877.  
  4878. <p1rule>
  4879.  
  4880. <Frame,
  4881.     Name =            p1rule,
  4882.     Placement =        At Anchor,
  4883.     Width =            6.35 inches,
  4884.     Height =        0.153 inches,
  4885.     Vertical Alignment =    0.007 inches,
  4886.     Shared Contents =    yes>
  4887.  
  4888. <p1stacked,
  4889.     Font =            F3,
  4890.     Left Tab =        -1.70/0 inches>
  4891.  
  4892. <F8>Releasing<Tab><F6>12.13<#04><F0>A client grabbing the keyboard 
  4893. or pointer can freeze the reporting of<FJ>
  4894.  
  4895. <p1para,
  4896.     Alignment =        Both,
  4897.     Font =            F3,
  4898.     Allow Page Break After = yes>
  4899.  
  4900. <F8>Queued Events<Tab><F0>events<SP>on that device. When an input 
  4901. device is thus frozen, the server queues events<SP>until explicitly 
  4902. requested to release them by the grabbing client. CLX<SP>programs 
  4903. can use the <F6>allow<#1e>events<F0> function to release queued 
  4904. events from a frozen input device.
  4905.  
  4906. <syntax,
  4907.     Left Tab =        -0.90/0 inches,
  4908.     Right Tab =        7.50 inches>
  4909.  
  4910. allow<#1e>events<Tab><F2>display mode<F3> &optional <F2>time<F0><Tab><F3>F
  4911. unction<Index, Doc = operations, "xlib:allow<#1e>events", Sort String = "allow<#1e>events">
  4912.  
  4913. <para>
  4914.  
  4915. Releases some queued events if the client has caused a device to freeze. 
  4916. The request has no effect if the <F2>time<F0> is earlier than the 
  4917. last<#1e>grab time of the most recent active grab for the client, 
  4918. or if the <F2>time<F0> is later than the current server time. If <F2>time
  4919. <F0> is <F6>nil<F0>, the current server time is used. The effect 
  4920. of this function depends on the specified <F2>mode<F0>.
  4921.  
  4922. <bullet>
  4923.  
  4924. <F9>w<Tab><F6>:async<#1e>pointer<F0> <#1f> If the pointer is frozen 
  4925. by the client, pointer event processing continues normally. If the 
  4926. pointer is frozen twice by the client on behalf of two separate grabs, <F6>:as
  4927. ync<#1e>pointer<F0> releases events for both grab<F2>s<F0>. <F6>:async<#1e>
  4928. pointer<F0> has no effect if the pointer is not frozen by the client, 
  4929. but the pointer need not be grabbed by the client.
  4930.  
  4931. <F9>w<Tab><F6>:sync<#1e>pointer<F0> <#1f> If the pointer is frozen 
  4932. and actively grabbed by the client, pointer event processing continues 
  4933. normally until the next <F6>:button<#1e>press <F0>or <F6>:button<#1e>release
  4934. <F0> event is reported to the client, at which time the pointer again 
  4935. appears to freeze. However, if the reported event causes the pointer 
  4936. grab to be released, the pointer does not freeze. <F6>:sync<#1e>pointer<F0> 
  4937. has no effect if the pointer is not frozen by the client, or if the 
  4938. pointer is not grabbed by the client.
  4939.  
  4940. <F9>w<Tab><F6>:replay<#1e>pointer<F0> <#1f> If the pointer is actively 
  4941. grabbed by the client and is frozen as the result of an event having 
  4942. been sent to the client (either from the activation of a <F6>grab<#1e>button
  4943. <F0>, or from a previous <F6>allow<#1e>events<F0> with mode <F6>:sync<#1e>p
  4944. ointer<F0>, but not from a <F6>grab<#1e>pointer<F0>), the pointer 
  4945. grab is released and that event is completely reprocessed, but this 
  4946. time ignoring any passive grabs at or above (towards the root) the <F6>grab<#1e>
  4947. window<F0> of the grab just released. The request has no effect if 
  4948. the pointer is not grabbed by the client, or if the pointer is not 
  4949. frozen as the result of an event.
  4950.  
  4951. <F9>w<Tab><F6>:async<#1e>keyboard<F0> <#1f> If the keyboard is 
  4952. frozen by the client, keyboard event processing continues normally. 
  4953. If the keyboard is frozen twice by the client on behalf of two separate 
  4954. grabs, <F6>:async<#1e>keyboard<F0> releases events for both grabs. <F6>:asyn
  4955. c<#1e>keyboard<F0> has no effect if the keyboard is not frozen by 
  4956. the client, but the keyboard need not be grabbed by the client.
  4957.  
  4958. <|,"12<#1e>159"><F9>w<Tab><F6>:sync<#1e>keyboard<F0> <#1f> If the keyboard 
  4959. is frozen and actively grabbed by the client, keyboard event processing 
  4960. continues normally until the next <F6>:key<#1e>press<F0> or <F6>:key<#1e>rel
  4961. ease<F0> event is reported to the client, at which time the keyboard 
  4962. again appears to freeze. However if the reported event causes the 
  4963. keyboard grab to be released, the keyboard does not freeze. <F6>:sync<#1e>keyb
  4964. oard<F0> has no effect if the keyboard is not frozen by the client, 
  4965. or if the keyboard is not grabbed by the client.
  4966.  
  4967. <F9>w<Tab><F6>:replay<#1e>keyboard<F0> <#1f> If the keyboard is 
  4968. actively grabbed by the client and is frozen as the result of an event 
  4969. having been sent to the client (either from the activation of a grab<#1e>key, 
  4970. or from a previous <F6>allow<#1e>events<F0> with mode <F6>:sync<#1e>keyboard
  4971. <F0>, but not from a <F6>grab<#1e>keyboard<F0>), the keyboard grab 
  4972. is released and that event is completely reprocessed, but this time 
  4973. ignoring any passive grabs at or above (towards the root) the <F6>grab<#1e>win
  4974. dow<F0> of the grab just released. The request has no effect if the 
  4975. keyboard is not grabbed by the client, or if the keyboard is not frozen 
  4976. as the result of an event.
  4977.  
  4978. <F9>w<Tab><F6>:sync<#1e>both<F0> <#1f> If both pointer and keyboard 
  4979. are frozen by the client, event processing (for both devices) continues 
  4980. normally until the next <F6>:button<#1e>press<F0>, <F6>:button<#1e>release
  4981. <F0>, <F6>:key<#1e>press<F0>, or <F6>:key<#1e>release<F0> event 
  4982. is reported to the client for a grabbed device (button event for the 
  4983. pointer, key event for the keyboard). At this time, the devices again 
  4984. appear to freeze. If the reported event causes the grab to be released, 
  4985. the devices do not freeze. However, if the other device is still grabbed, 
  4986. then a subsequent event for it will still cause both devices to freeze. <F6>:s
  4987. ync<#1e>both<F0> has no effect unless both pointer and keyboard are 
  4988. frozen by the client. If the pointer of keyboard is frozen twice by 
  4989. the client on behalf of two separate grabs, <F6>:sync<#1e>both<F0> <F2>thaws
  4990. <F0> for both, but a subsequent freeze for <F6>:sync<#1e>both<F0> 
  4991. will only freeze each device once.
  4992.  
  4993. <F9>w<Tab><F6>:async<#1e>both<F0> <#1f> If the pointer and the 
  4994. keyboard are frozen by the client, event processing for both devices 
  4995. continues normally. If a device is frozen twice by the client on behalf 
  4996. of two separate grabs, <F6>:async<#1e>both<F0> <F2>thaws<F0> for 
  4997. both. <F6>:async<#1e>both<F0> has no effect unless both pointer 
  4998. and keyboard are frozen by the client.
  4999.  
  5000. <para>
  5001.  
  5002. <F6>:async<#1e>pointer<F0>, <F6>:sync<#1e>pointer<F0>, and <F6>:replay<#1e>
  5003. pointer<F0> have no effect on processing of keyboard events. <F6>:async<#1e>k
  5004. eyboard<F0>, <F6>:sync<#1e>keyboard<F0>, and <F6>:replay<#1e>keyboard<F0> 
  5005. have no effect on processing of pointer events.
  5006.  
  5007. It is possible for both a pointer grab and a keyboard grab to be active 
  5008. simultaneously by the same or different clients. When a device is 
  5009. frozen on behalf of either grab, no event processing is performed 
  5010. for the device. It is possible for a single device to be frozen due 
  5011. to both grabs. In this case, the freeze must be released on behalf 
  5012. of both grabs before events can again be processed.
  5013.  
  5014. <arg>
  5015.  
  5016. display <F3><#1f> A <F6>display<F3>.
  5017.  
  5018. mode<F3> <#1f> One of: <F6>:async<#1e>pointer<F3>,<F6> :sync<#1e>pointer
  5019. <F3>,<F6> :reply<#1e>pointer<F3>,<F6> :async<#1e>keyboard<F3>, <F6>:sync<#1e>
  5020. keyboard<F3>,<F6> :replay<#1e>keyboard<F3>,<F6> :async<#1e>both<F3>,<F6> 
  5021. :sync<#1e>both<F3>. 
  5022.  
  5023. time<F3> <#1f> A <F6>timestamp<F3>.
  5024.  
  5025. <newpage>
  5026.  
  5027. <|,"12<#1e>160">
  5028.