xglcomp

annotate doc/fixesproto.txt @ 13:593a5e4a351f

foo
author John Tsiombikas <nuclear@member.fsf.org>
date Sun, 07 Feb 2016 11:51:56 +0200
parents
children
rev   line source
nuclear@6 1 The XFIXES Extension
nuclear@6 2 Version 4.0
nuclear@6 3 Document Revision 2
nuclear@6 4 2006-12-14
nuclear@6 5 Keith Packard
nuclear@6 6 keithp@keithp.com
nuclear@6 7
nuclear@6 8 1. Introduction
nuclear@6 9
nuclear@6 10 X applications have often needed to work around various shortcomings in the
nuclear@6 11 core X window system. This extension is designed to provide the minimal
nuclear@6 12 server-side support necessary to eliminate problems caused by these
nuclear@6 13 workarounds.
nuclear@6 14
nuclear@6 15 2. Acknowledgements
nuclear@6 16
nuclear@6 17 This extension is a direct result of requests made by application
nuclear@6 18 developers, in particular,
nuclear@6 19
nuclear@6 20 + Owen Taylor for describing the issues raised with the XEMBED
nuclear@6 21 mechanisms and SaveSet processing and his initial extension
nuclear@6 22 to handle this issue.
nuclear@6 23
nuclear@6 24 + Bill Haneman for the design for cursor image tracking.
nuclear@6 25
nuclear@6 26 + Havoc Pennington
nuclear@6 27
nuclear@6 28 + Fredrik Höglund for cursor names
nuclear@6 29
nuclear@6 30 + Deron Johnson for cursor visibility
nuclear@6 31
nuclear@6 32 3. Basic Premise
nuclear@6 33
nuclear@6 34 Requests in this extension may seem to wander all over the map of X server
nuclear@6 35 capabilities, but they are tied by a simple rule -- resolving issues raised
nuclear@6 36 by application interaction with core protocol mechanisms that cannot be
nuclear@6 37 adequately worked around on the client side of the wire.
nuclear@6 38
nuclear@6 39 4. Extension initialization
nuclear@6 40
nuclear@6 41 The client must negotiate the version of the extension before executing
nuclear@6 42 extension requests. Behavior of the server is undefined otherwise.
nuclear@6 43
nuclear@6 44 QueryVersion
nuclear@6 45
nuclear@6 46 client-major-version: CARD32
nuclear@6 47 client-minor-version: CARD32
nuclear@6 48
nuclear@6 49 ->
nuclear@6 50
nuclear@6 51 major-version: CARD32
nuclear@6 52 minor-version: CARD32
nuclear@6 53
nuclear@6 54 The client sends the highest supported version to the server and
nuclear@6 55 the server sends the highest version it supports, but no higher than
nuclear@6 56 the requested version. Major versions changes can introduce
nuclear@6 57 new requests, minor version changes introduce only adjustments to
nuclear@6 58 existing requests or backward compatible changes. It is
nuclear@6 59 the clients responsibility to ensure that the server supports
nuclear@6 60 a version which is compatible with its expectations.
nuclear@6 61
nuclear@6 62 ************* XFIXES VERSION 1 OR BETTER ***********
nuclear@6 63
nuclear@6 64 5. Save Set processing changes
nuclear@6 65
nuclear@6 66 Embedding one application within another provides a way of unifying
nuclear@6 67 disparate documents and views within a single framework. From the X
nuclear@6 68 protocol perspective, this appears similar to nested window managers; the
nuclear@6 69 embedding application "manages" the embedded windows much as a window
nuclear@6 70 manager does for top-level windows. To protect the embedded application
nuclear@6 71 from embedding application failure, it is reasonable to use the core SaveSet
nuclear@6 72 mechanism so that embedding application failure causes embedded windows to
nuclear@6 73 be preserved instead of destroyed.
nuclear@6 74
nuclear@6 75 The core save set mechanism defines the target for each save set member
nuclear@6 76 window as the nearest enclosing window not owned by the terminating client.
nuclear@6 77 For embedding applications, this nearest window is usually the window
nuclear@6 78 manager frame. The problem here is that the window manager will not
nuclear@6 79 generally expect to receive and correctly manage new windows appearing within
nuclear@6 80 that window by the save set mechanism, and will instead destroy the frame
nuclear@6 81 window in response to the client window destruction. This causes the
nuclear@6 82 embedded window to be destroyed.
nuclear@6 83
nuclear@6 84 An easy fix for this problem is to change the target of the save set member
nuclear@6 85 to a window which won't be affected by the underlying window destruction.
nuclear@6 86 XFIXES chooses the root window as the target.
nuclear@6 87
nuclear@6 88 Having embedded windows suddenly appear at the top level can confuse users,
nuclear@6 89 so XFIXES also lets the client select whether the window should end up
nuclear@6 90 unmapped after the save set processing instead of unconditionally making
nuclear@6 91 them be mapped.
nuclear@6 92
nuclear@6 93 5.1 Requests
nuclear@6 94
nuclear@6 95 ChangeSaveSet
nuclear@6 96
nuclear@6 97 window: Window
nuclear@6 98 mode: { Insert, Delete }
nuclear@6 99 target: { Nearest, Root }
nuclear@6 100 map: { Map, Unmap }
nuclear@6 101
nuclear@6 102 ChangeSaveSet is an extension of the core protocol ChangeSaveSet
nuclear@6 103 request. As in that request, mode specifies whether the indicated
nuclear@6 104 window is inserted or deleted from the save-set. Target specifies
nuclear@6 105 whether the window is reparented to the nearest non-client window as
nuclear@6 106 in the core protocol, or reparented to the root window. Map
nuclear@6 107 specifies whether the window is mapped as in the core protocol or
nuclear@6 108 unmapped.
nuclear@6 109
nuclear@6 110 6. Selection Tracking
nuclear@6 111
nuclear@6 112 Applications wishing to monitor the contents of current selections must
nuclear@6 113 poll for selection changes. XFIXES improves this by providing an event
nuclear@6 114 delivered whenever the selection ownership changes.
nuclear@6 115
nuclear@6 116 6.1 Types
nuclear@6 117
nuclear@6 118 SELECTIONEVENT { SetSelectionOwner,
nuclear@6 119 SelectionWindowDestroy,
nuclear@6 120 SelectionClientClose }
nuclear@6 121
nuclear@6 122 6.1 Events
nuclear@6 123
nuclear@6 124 SelectionNotify
nuclear@6 125
nuclear@6 126 subtype: SELECTIONEVENT
nuclear@6 127 window: Window
nuclear@6 128 owner: Window
nuclear@6 129 selection: Atom
nuclear@6 130 timestamp: Timestamp
nuclear@6 131 selection-timestamp: Timestamp
nuclear@6 132
nuclear@6 133 6.2 Requests
nuclear@6 134
nuclear@6 135 SelectSelectionInput
nuclear@6 136
nuclear@6 137 window: Window
nuclear@6 138 selection: Atom
nuclear@6 139 event-mask: SETofSELECTIONEVENT
nuclear@6 140
nuclear@6 141 Selects for events to be delivered to window when various causes of
nuclear@6 142 ownership of selection occur. Subtype indicates the cause of the
nuclear@6 143 selection ownership change. Owner is set to the current selection
nuclear@6 144 owner, or None. Timestamp indicates the time the event was
nuclear@6 145 generated while selection-timestamp indicates the timestamp used to
nuclear@6 146 own the selection.
nuclear@6 147
nuclear@6 148 7. Cursor Image Monitoring
nuclear@6 149
nuclear@6 150 Mirroring the screen contents is easily done with the core protocol or VNC
nuclear@6 151 addons, except for the current cursor image. There is no way using the core
nuclear@6 152 protocol to discover which cursor image is currently displayed. The
nuclear@6 153 cursor image often contains significant semantic content about the user
nuclear@6 154 interface. XFIXES provides a simple mechanism to discover when the cursor
nuclear@6 155 image changes and to fetch the current cursor image.
nuclear@6 156
nuclear@6 157 As the current cursor may or may not have any XID associated with it, there
nuclear@6 158 is no stable name available. Instead, XFIXES returns only the image of the
nuclear@6 159 current cursor and provides a way to identify cursor images to avoid
nuclear@6 160 refetching the image each time it changes to a previously seen cursor.
nuclear@6 161
nuclear@6 162 7.1 Types
nuclear@6 163 CURSOREVENT { DisplayCursor }
nuclear@6 164
nuclear@6 165 7.2 Events
nuclear@6 166
nuclear@6 167 CursorNotify
nuclear@6 168
nuclear@6 169 subtype: CURSOREVENT
nuclear@6 170 window: Window
nuclear@6 171 cursor-serial: CARD32
nuclear@6 172 timestamp: Timestamp
nuclear@6 173 name: Atom (Version 2 only)
nuclear@6 174
nuclear@6 175 7.3 Requests
nuclear@6 176
nuclear@6 177 SelectCursorInput
nuclear@6 178
nuclear@6 179 window: Window
nuclear@6 180 event-mask: SETofCURSOREVENT
nuclear@6 181
nuclear@6 182 This request directs cursor change events to the named window.
nuclear@6 183 Events will be delivered irrespective of the screen on which they
nuclear@6 184 occur. Subtype indicates the cause of the cursor image change
nuclear@6 185 (there is only one subtype at present). Cursor-serial is a number
nuclear@6 186 assigned to the cursor image which identifies the image. Cursors
nuclear@6 187 with different serial numbers may have different images. Timestamp
nuclear@6 188 is the time of the cursor change.
nuclear@6 189
nuclear@6 190 Servers supporting the X Input Extension Version 2.0 or higher only
nuclear@6 191 notify the clients of cursor change events for the ClientPointer, not
nuclear@6 192 of any other master pointer (see Section 4.4. in the XI2 protocol
nuclear@6 193 specificiation).
nuclear@6 194
nuclear@6 195 GetCursorImage
nuclear@6 196
nuclear@6 197 ->
nuclear@6 198
nuclear@6 199 x: INT16
nuclear@6 200 y: INT16
nuclear@6 201 width: CARD16
nuclear@6 202 height: CARD16
nuclear@6 203 x-hot: CARD16
nuclear@6 204 y-hot: CARD16
nuclear@6 205 cursor-serial: CARD32
nuclear@6 206 cursor-image: LISTofCARD32
nuclear@6 207
nuclear@6 208 GetCursorImage returns the image of the current cursor. X and y are
nuclear@6 209 the current cursor position. Width and height are the size of the
nuclear@6 210 cursor image. X-hot and y-hot mark the hotspot within the cursor
nuclear@6 211 image. Cursor-serial provides the number assigned to this cursor
nuclear@6 212 image, this same serial number will be reported in a CursorNotify
nuclear@6 213 event if this cursor image is redisplayed in the future.
nuclear@6 214
nuclear@6 215 The cursor image itself is returned as a single image at 32 bits per
nuclear@6 216 pixel with 8 bits of alpha in the most significant 8 bits of the
nuclear@6 217 pixel followed by 8 bits each of red, green and finally 8 bits of
nuclear@6 218 blue in the least significant 8 bits. The color components are
nuclear@6 219 pre-multiplied with the alpha component.
nuclear@6 220
nuclear@6 221 ************* XFIXES VERSION 2 OR BETTER ***********
nuclear@6 222
nuclear@6 223 8. Region Objects
nuclear@6 224
nuclear@6 225 The core protocol doesn't expose regions as a primitive object and this
nuclear@6 226 makes many operations more complicated than they really need to be. Adding
nuclear@6 227 region objects simplifies expose handling, the Shape extension and other
nuclear@6 228 operations. These operations are also designed to support a separate
nuclear@6 229 extension, the X Damage Extension.
nuclear@6 230
nuclear@6 231 8.1 Types
nuclear@6 232
nuclear@6 233 Region: XID
nuclear@6 234 WINDOW_REGION_KIND: { Bounding, Clip }
nuclear@6 235
nuclear@6 236 8.2 Errors
nuclear@6 237
nuclear@6 238 Region The specified region is invalid
nuclear@6 239
nuclear@6 240 8.3 Requests
nuclear@6 241
nuclear@6 242 CreateRegion
nuclear@6 243
nuclear@6 244 region: REGION
nuclear@6 245 rects: LISTofRECTANGLE
nuclear@6 246
nuclear@6 247 Creates a region initialized to the specified list of rectangles.
nuclear@6 248 The rectangles may be specified in any order, their union becomes
nuclear@6 249 the region. The core protocol allows applications to specify an
nuclear@6 250 order for the rectangles, but it turns out to be just as hard to
nuclear@6 251 verify the rectangles are actually in that order as it is to simply
nuclear@6 252 ignore the ordering information and union them together. Hence,
nuclear@6 253 this request dispenses with the ordering information.
nuclear@6 254
nuclear@6 255 Errors: IDChoice
nuclear@6 256
nuclear@6 257 CreateRegionFromBitmap
nuclear@6 258
nuclear@6 259 region: REGION
nuclear@6 260 bitmap: PIXMAP
nuclear@6 261
nuclear@6 262 Creates a region initialized to the set of 'one' pixels in bitmap
nuclear@6 263 (which must be depth 1, else Match error).
nuclear@6 264
nuclear@6 265 Errors: Pixmap, IDChoice, Match
nuclear@6 266
nuclear@6 267 CreateRegionFromWindow
nuclear@6 268
nuclear@6 269 window: Window
nuclear@6 270 kind: WINDOW_REGION_KIND
nuclear@6 271 region: Region
nuclear@6 272
nuclear@6 273 Creates a region initialized to the specified window region. See the
nuclear@6 274 Shape extension for the definition of Bounding and Clip regions.
nuclear@6 275
nuclear@6 276 Errors: Window, IDChoice, Value
nuclear@6 277
nuclear@6 278 CreateRegionFromGC
nuclear@6 279
nuclear@6 280 gc: GContext
nuclear@6 281 region: Region
nuclear@6 282
nuclear@6 283 Creates a region initialized from the clip list of the specified
nuclear@6 284 GContext.
nuclear@6 285
nuclear@6 286 Errors: GContext, IDChoice
nuclear@6 287
nuclear@6 288 CreateRegionFromPicture
nuclear@6 289
nuclear@6 290 picture: Picture
nuclear@6 291 region: Region
nuclear@6 292
nuclear@6 293
nuclear@6 294 Creates a region initialized from the clip list of the specified
nuclear@6 295 Picture.
nuclear@6 296
nuclear@6 297 Errors: Picture, IDChoice
nuclear@6 298
nuclear@6 299 DestroyRegion
nuclear@6 300
nuclear@6 301 region: Region
nuclear@6 302
nuclear@6 303 Destroys the specified region.
nuclear@6 304
nuclear@6 305 Errors: Region
nuclear@6 306
nuclear@6 307 SetRegion
nuclear@6 308
nuclear@6 309 region: Region
nuclear@6 310 rects: LISTofRECTANGLE
nuclear@6 311
nuclear@6 312 This replaces the current contents of region with the region formed
nuclear@6 313 by the union of rects.
nuclear@6 314
nuclear@6 315 CopyRegion
nuclear@6 316 source: Region
nuclear@6 317 destination: Region
nuclear@6 318
nuclear@6 319 This replaces the contents of destination with the contents of
nuclear@6 320 source.
nuclear@6 321
nuclear@6 322 UnionRegion
nuclear@6 323 IntersectRegion
nuclear@6 324 SubtractRegion
nuclear@6 325
nuclear@6 326 source1: Region
nuclear@6 327 source2: Region
nuclear@6 328 destination: Region
nuclear@6 329
nuclear@6 330 Combines source1 and source2, placing the result in destination.
nuclear@6 331 Destination may be the same as either source1 or source2.
nuclear@6 332
nuclear@6 333 Errors: Region, Value
nuclear@6 334
nuclear@6 335 InvertRegion
nuclear@6 336
nuclear@6 337 source: Region
nuclear@6 338 bounds: RECTANGLE
nuclear@6 339 destination: Region
nuclear@6 340
nuclear@6 341 The source region is subtracted from the region specified by
nuclear@6 342 bounds. The result is placed in destination, replacing its contents.
nuclear@6 343
nuclear@6 344 Errors: Region
nuclear@6 345
nuclear@6 346 TranslateRegion
nuclear@6 347
nuclear@6 348 region: Region
nuclear@6 349 dx, dy: INT16
nuclear@6 350
nuclear@6 351 The region is translated by dx, dy in place.
nuclear@6 352
nuclear@6 353 Errors: Region
nuclear@6 354
nuclear@6 355 RegionExtents
nuclear@6 356
nuclear@6 357 source: Region
nuclear@6 358 destination: Region
nuclear@6 359
nuclear@6 360 The extents of the source region are placed in the destination
nuclear@6 361
nuclear@6 362 FetchRegion
nuclear@6 363
nuclear@6 364 region: Region
nuclear@6 365 ->
nuclear@6 366 extents: RECTANGLE
nuclear@6 367 rectangles: LISTofRECTANGLE
nuclear@6 368
nuclear@6 369 The region is returned as a list of rectangles in YX-banded order.
nuclear@6 370
nuclear@6 371 Errors: Region
nuclear@6 372
nuclear@6 373 SetGCClipRegion
nuclear@6 374
nuclear@6 375 gc: GCONTEXT
nuclear@6 376 clip-x-origin, clip-y-origin: INT16
nuclear@6 377 region: Region or None
nuclear@6 378
nuclear@6 379 This request changes clip-mask in gc to the specified region and
nuclear@6 380 sets the clip origin. Output will be clipped to remain contained
nuclear@6 381 within the region. The clip origin is interpreted relative to the
nuclear@6 382 origin of whatever destination drawable is specified in a graphics
nuclear@6 383 request. The region is interpreted relative to the clip origin.
nuclear@6 384 Future changes to region have no effect on the gc clip-mask.
nuclear@6 385
nuclear@6 386 Errors: GContext, Region
nuclear@6 387
nuclear@6 388 SetWindowShapeRegion
nuclear@6 389
nuclear@6 390 dest: Window
nuclear@6 391 destKind: SHAPE_KIND
nuclear@6 392 xOff, yOff: INT16
nuclear@6 393 region: Region or None
nuclear@6 394
nuclear@6 395 This request sets the specified (by destKind) Shape extension region
nuclear@6 396 of the window to region, offset by xOff and yOff. Future changes to
nuclear@6 397 region have no effect on the window shape.
nuclear@6 398
nuclear@6 399 Errors: Window, Value, Region
nuclear@6 400
nuclear@6 401 SetPictureClipRegion
nuclear@6 402
nuclear@6 403 picture: Picture
nuclear@6 404 clip-x-origin, clip-y-origin: INT16
nuclear@6 405 region: Region or None
nuclear@6 406
nuclear@6 407 This request changes clip-mask in picture to the specified region
nuclear@6 408 and sets the clip origin. Input and output will be clipped to
nuclear@6 409 remain contained within the region. The clip origin is interpreted
nuclear@6 410 relative to the origin of the drawable associated with picture. The
nuclear@6 411 region is interpreted relative to the clip origin. Future changes
nuclear@6 412 to region have no effect on the picture clip-mask.
nuclear@6 413
nuclear@6 414 Errors: Picture, Region
nuclear@6 415
nuclear@6 416 9. Cursor Names
nuclear@6 417
nuclear@6 418 Attaching names to cursors permits some abstract semantic content to be
nuclear@6 419 associated with specific cursor images. Reflecting those names back to
nuclear@6 420 applications allows that semantic content to be related to the user through
nuclear@6 421 non-visual means.
nuclear@6 422
nuclear@6 423 9.1 Events
nuclear@6 424
nuclear@6 425 CursorNotify
nuclear@6 426
nuclear@6 427 subtype: CURSOREVENT
nuclear@6 428 window: Window
nuclear@6 429 cursor-serial: CARD32
nuclear@6 430 timestamp: Timestamp
nuclear@6 431 name: Atom or None
nuclear@6 432
nuclear@6 433 In Version 2 of the XFIXES protocol, this event adds the atom
nuclear@6 434 of any name associated with the current cursor (else None).
nuclear@6 435
nuclear@6 436 9.2 Requests
nuclear@6 437
nuclear@6 438 SetCursorName
nuclear@6 439
nuclear@6 440 cursor: CURSOR
nuclear@6 441 name: LISTofCARD8
nuclear@6 442
nuclear@6 443 This request interns name as an atom and sets that atom as the name
nuclear@6 444 of cursor.
nuclear@6 445
nuclear@6 446 Errors: Cursor
nuclear@6 447
nuclear@6 448 GetCursorName
nuclear@6 449
nuclear@6 450 cursor: CURSOR
nuclear@6 451 ->
nuclear@6 452 atom: ATOM or None
nuclear@6 453 name: LISTofCARD8
nuclear@6 454
nuclear@6 455 This request returns the name and atom of cursor. If no name is
nuclear@6 456 set, atom is None and name is empty.
nuclear@6 457
nuclear@6 458 Errors: Cursor
nuclear@6 459
nuclear@6 460 GetCursorImageAndName
nuclear@6 461
nuclear@6 462 ->
nuclear@6 463
nuclear@6 464 x: INT16
nuclear@6 465 y: INT16
nuclear@6 466 width: CARD16
nuclear@6 467 height: CARD16
nuclear@6 468 x-hot: CARD16
nuclear@6 469 y-hot: CARD16
nuclear@6 470 cursor-serial: CARD32
nuclear@6 471 cursor-atom: ATOM
nuclear@6 472 cursor-name: LISTofCARD8
nuclear@6 473 cursor-image: LISTofCARD32
nuclear@6 474
nuclear@6 475 This is similar to GetCursorImage except for including both
nuclear@6 476 the atom and name of the current cursor.
nuclear@6 477
nuclear@6 478 ChangeCursor
nuclear@6 479
nuclear@6 480 source, destination: CURSOR
nuclear@6 481
nuclear@6 482 This request replaces all references to the destination with a
nuclear@6 483 reference to source. Any existing uses of the destination cursor
nuclear@6 484 object will now show the source cursor image.
nuclear@6 485
nuclear@6 486 ChangeCursorByName
nuclear@6 487
nuclear@6 488 src: CURSOR
nuclear@6 489 name: LISTofCARD8
nuclear@6 490
nuclear@6 491 This request replaces the contents of all cursors with the specified
nuclear@6 492 name with the src cursor.
nuclear@6 493
nuclear@6 494 ************* XFIXES VERSION 3 OR BETTER ***********
nuclear@6 495
nuclear@6 496 10. Region Expansion
nuclear@6 497
nuclear@6 498 This update provides another operation on the region objects defined in
nuclear@6 499 Section 8 of this document.
nuclear@6 500
nuclear@6 501 10.1 Requests
nuclear@6 502
nuclear@6 503 ExpandRegion
nuclear@6 504 source: REGION
nuclear@6 505 destination: REGION
nuclear@6 506 left, right, top, bottom: CARD16
nuclear@6 507
nuclear@6 508 Creates destination region containing the area specified by
nuclear@6 509 expanding each rectangle in the source region by the specified
nuclear@6 510 number of pixels to the left, right, top and bottom.
nuclear@6 511
nuclear@6 512 ************* XFIXES VERSION 4 OR BETTER ***********
nuclear@6 513
nuclear@6 514 11. Cursor Visibility
nuclear@6 515
nuclear@6 516 Composite managers may want to render the cursor themselves instead of
nuclear@6 517 relying on the X server sprite drawing, this provides a way for them to
nuclear@6 518 do so without getting a double cursor image.
nuclear@6 519
nuclear@6 520 11.1 Requests
nuclear@6 521
nuclear@6 522 HideCursor
nuclear@6 523
nuclear@6 524 window: WINDOW
nuclear@6 525
nuclear@6 526 A client sends this request to indicate that it wants the
nuclear@6 527 cursor image to be hidden (i.e. to not be displayed) when
nuclear@6 528 the sprite is inside the specified window, or one of its
nuclear@6 529 subwindows. If the sprite is inside a window for which one
nuclear@6 530 or more active clients have requested cursor hiding then the
nuclear@6 531 cursor image will not be displayed.
nuclear@6 532
nuclear@6 533 Note that even though cursor hiding causes the cursor image
nuclear@6 534 to be invisible, CursorNotify events will still be sent
nuclear@6 535 normally, as if the cursor image were visible.
nuclear@6 536
nuclear@6 537 If, during a grab, one or more active clients have requested
nuclear@6 538 cursor hiding for grab window, or one of its ancestors, the
nuclear@6 539 cursor image of the grab cursor will not be displayed during
nuclear@6 540 the lifetime of that grab.
nuclear@6 541
nuclear@6 542 When a client with outstanding cursor hiding requests
nuclear@6 543 terminates its connection these requests will be deleted.
nuclear@6 544
nuclear@6 545 Servers supporting the X Input Extension Version 2.0 or higher hide
nuclear@6 546 all visible cursors in response to a HideCursor request. If a master
nuclear@6 547 pointer is created while the cursors are hidden, this master pointer's
nuclear@6 548 cursor will be hidden as well.
nuclear@6 549
nuclear@6 550 ShowCursor
nuclear@6 551
nuclear@6 552 window: WINDOW
nuclear@6 553
nuclear@6 554 A client sends this request to indicate that it wants the
nuclear@6 555 cursor image to be displayed when the sprite is inside the
nuclear@6 556 specified window, or one of its subwindows. If the sprite
nuclear@6 557 is inside a window for which no active clients have requested
nuclear@6 558 cursor hiding then the cursor image for that window will be
nuclear@6 559 displayed. In other words, if a client calls HideCursor for
nuclear@6 560 a specified window, or window subtree, this request reverses
nuclear@6 561 the effects of the HideCursor request.
nuclear@6 562
nuclear@6 563 If the client has made no outstanding HideCursor requests
nuclear@6 564 a BadMatch error is generated.
nuclear@6 565
nuclear@6 566 Servers supporting the X Input Extension Version 2.0 or higher show
nuclear@6 567 all visible cursors in response to a ShowCursor request.
nuclear@6 568
nuclear@6 569 99. Future compatibility
nuclear@6 570
nuclear@6 571 This extension is not expected to remain fixed. Future changes will
nuclear@6 572 strive to remain compatible if at all possible. The X server will always
nuclear@6 573 support version 1 of the extension protocol if requested by a client.
nuclear@6 574
nuclear@6 575 Additions to the protocol will always by marked by minor version number
nuclear@6 576 changes so that applications will be able to detect what requests are
nuclear@6 577 supported.