Home | History | Annotate | Download | only in libXNVCtrl
      1 /*
      2  * Copyright (c) 2008 NVIDIA, Corporation
      3  *
      4  * Permission is hereby granted, free of charge, to any person obtaining a copy
      5  * of this software and associated documentation files (the "Software"), to deal
      6  * in the Software without restriction, including without limitation the rights
      7  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
      8  * copies of the Software, and to permit persons to whom the Software is
      9  * furnished to do so, subject to the following conditions:
     10  *
     11  * The above copyright notice and this permission notice (including the next
     12  * paragraph) shall be included in all copies or substantial portions of the
     13  * Software.
     14  *
     15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     17  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
     18  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
     19  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
     20  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
     21  * SOFTWARE.
     22  */
     23 
     24 #ifndef __NVCTRLLIB_H
     25 #define __NVCTRLLIB_H
     26 
     27 #include "NVCtrl.h"
     28 
     29 #if defined __cplusplus
     30 extern "C" {
     31 #endif
     32 
     33 /*
     34  *  XNVCTRLQueryExtension -
     35  *
     36  *  Returns True if the extension exists, returns False otherwise.
     37  *  event_basep and error_basep are the extension event and error
     38  *  bases.  Currently, no extension specific errors or events are
     39  *  defined.
     40  */
     41 
     42 Bool XNVCTRLQueryExtension (
     43     Display *dpy,
     44     int *event_basep,
     45     int *error_basep
     46 );
     47 
     48 
     49 /*
     50  *  XNVCTRLQueryVersion -
     51  *
     52  *  Returns True if the extension exists, returns False otherwise.
     53  *  major and minor are the extension's major and minor version
     54  *  numbers.
     55  */
     56 
     57 Bool XNVCTRLQueryVersion (
     58     Display *dpy,
     59     int *major,
     60     int *minor
     61 );
     62 
     63 
     64 /*
     65  *  XNVCTRLIsNvScreen
     66  *
     67  *  Returns True is the specified screen is controlled by the NVIDIA
     68  *  driver.  Returns False otherwise.
     69  */
     70 
     71 Bool XNVCTRLIsNvScreen (
     72     Display *dpy,
     73     int screen
     74 );
     75 
     76 
     77 /*
     78  *  XNVCTRLQueryTargetCount -
     79  *
     80  *  Returns True if the target type exists.  Returns False otherwise.
     81  *  If XNVCTRLQueryTargetCount returns True, value will contain the
     82  *  count of existing targets on the server of the specified target
     83  *  type.
     84  *
     85  *  Please see "Attribute Targets" in NVCtrl.h for the list of valid
     86  *  target types.
     87  *
     88  *  Possible errors:
     89  *     BadValue - The target doesn't exist.
     90  */
     91 
     92 Bool XNVCTRLQueryTargetCount (
     93     Display *dpy,
     94     int target_type,
     95     int *value
     96 );
     97 
     98 
     99 /*
    100  *  XNVCTRLSetAttribute -
    101  *
    102  *  Sets the attribute to the given value.  The attributes and their
    103  *  possible values are listed in NVCtrl.h.
    104  *
    105  *  Not all attributes require the display_mask parameter; see
    106  *  NVCtrl.h for details.
    107  *
    108  *  Calling this function is equivalent to calling XNVCTRLSetTargetAttribute()
    109  *  with the target_type set to NV_CTRL_TARGET_TYPE_X_SCREEN and
    110  *  target_id set to 'screen'.
    111  *
    112  *  Possible errors:
    113  *     BadValue - The screen or attribute doesn't exist.
    114  *     BadMatch - The NVIDIA driver is not present on that screen.
    115  */
    116 
    117 void XNVCTRLSetAttribute (
    118     Display *dpy,
    119     int screen,
    120     unsigned int display_mask,
    121     unsigned int attribute,
    122     int value
    123 );
    124 
    125 
    126 /*
    127  *  XNVCTRLSetTargetAttribute -
    128  *
    129  *  Sets the attribute to the given value.  The attributes and their
    130  *  possible values are listed in NVCtrl.h.
    131  *
    132  *  Not all attributes require the display_mask parameter; see
    133  *  NVCtrl.h for details.
    134  *
    135  *  Possible errors:
    136  *     BadValue - The target or attribute doesn't exist.
    137  *     BadMatch - The NVIDIA driver is not present on that target.
    138  */
    139 
    140 void XNVCTRLSetTargetAttribute (
    141     Display *dpy,
    142     int target_type,
    143     int target_id,
    144     unsigned int display_mask,
    145     unsigned int attribute,
    146     int value
    147 );
    148 
    149 
    150 /*
    151  *  XNVCTRLSetAttributeAndGetStatus -
    152  *
    153  * Same as XNVCTRLSetAttribute().
    154  * In addition, XNVCTRLSetAttributeAndGetStatus() returns
    155  * True if the operation succeeds, False otherwise.
    156  *
    157  */
    158 
    159 Bool XNVCTRLSetAttributeAndGetStatus (
    160     Display *dpy,
    161     int screen,
    162     unsigned int display_mask,
    163     unsigned int attribute,
    164     int value
    165 );
    166 
    167 
    168 /*
    169  *  XNVCTRLSetTargetAttributeAndGetStatus -
    170  *
    171  * Same as XNVCTRLSetTargetAttribute().
    172  * In addition, XNVCTRLSetTargetAttributeAndGetStatus() returns
    173  * True if the operation succeeds, False otherwise.
    174  *
    175  */
    176 
    177 Bool XNVCTRLSetTargetAttributeAndGetStatus (
    178     Display *dpy,
    179     int target_type,
    180     int target_id,
    181     unsigned int display_mask,
    182     unsigned int attribute,
    183     int value
    184 );
    185 
    186 
    187 /*
    188  *  XNVCTRLQueryAttribute -
    189  *
    190  *  Returns True if the attribute exists.  Returns False otherwise.
    191  *  If XNVCTRLQueryAttribute returns True, value will contain the
    192  *  value of the specified attribute.
    193  *
    194  *  Not all attributes require the display_mask parameter; see
    195  *  NVCtrl.h for details.
    196  *
    197  *  Calling this function is equivalent to calling
    198  *  XNVCTRLQueryTargetAttribute() with the target_type set to
    199  *  NV_CTRL_TARGET_TYPE_X_SCREEN and target_id set to 'screen'.
    200  *
    201  *  Possible errors:
    202  *     BadValue - The screen doesn't exist.
    203  *     BadMatch - The NVIDIA driver is not present on that screen.
    204  */
    205 
    206 Bool XNVCTRLQueryAttribute (
    207     Display *dpy,
    208     int screen,
    209     unsigned int display_mask,
    210     unsigned int attribute,
    211     int *value
    212 );
    213 
    214 
    215 /*
    216  * XNVCTRLQueryTargetAttribute -
    217  *
    218  *  Returns True if the attribute exists.  Returns False otherwise.
    219  *  If XNVCTRLQueryTargetAttribute returns True, value will contain the
    220  *  value of the specified attribute.
    221  *
    222  *  Not all attributes require the display_mask parameter; see
    223  *  NVCtrl.h for details.
    224  *
    225  *  Possible errors:
    226  *     BadValue - The target doesn't exist.
    227  *     BadMatch - The NVIDIA driver does not control the target.
    228  */
    229 
    230 Bool XNVCTRLQueryTargetAttribute (
    231     Display *dpy,
    232     int target_Type,
    233     int target_id,
    234     unsigned int display_mask,
    235     unsigned int attribute,
    236     int *value
    237 );
    238 
    239 
    240 /*
    241  * XNVCTRLQueryTargetAttribute64 -
    242  *
    243  *  Returns True if the attribute exists.  Returns False otherwise.
    244  *  If XNVCTRLQueryTargetAttribute returns True, value will contain the
    245  *  value of the specified attribute.
    246  *
    247  *  Not all attributes require the display_mask parameter; see
    248  *  NVCtrl.h for details.
    249  *
    250  *  Note: this function behaves like XNVCTRLQueryTargetAttribute(),
    251  *  but supports 64-bit integer attributes.
    252  *
    253  *  Possible errors:
    254  *     BadValue - The target doesn't exist.
    255  *     BadMatch - The NVIDIA driver does not control the target.
    256  */
    257 
    258 Bool XNVCTRLQueryTargetAttribute64 (
    259     Display *dpy,
    260     int target_Type,
    261     int target_id,
    262     unsigned int display_mask,
    263     unsigned int attribute,
    264     int64_t *value
    265 );
    266 
    267 
    268 /*
    269  *  XNVCTRLQueryStringAttribute -
    270  *
    271  *  Returns True if the attribute exists.  Returns False otherwise.
    272  *  If XNVCTRLQueryStringAttribute returns True, *ptr will point to an
    273  *  allocated string containing the string attribute requested.  It is
    274  *  the caller's responsibility to free the string when done.
    275  *
    276  *  Calling this function is equivalent to calling
    277  *  XNVCTRLQueryTargetStringAttribute() with the target_type set to
    278  *  NV_CTRL_TARGET_TYPE_X_SCREEN and target_id set to 'screen'.
    279  *
    280  *  Possible errors:
    281  *     BadValue - The screen doesn't exist.
    282  *     BadMatch - The NVIDIA driver is not present on that screen.
    283  *     BadAlloc - Insufficient resources to fulfill the request.
    284  */
    285 
    286 Bool XNVCTRLQueryStringAttribute (
    287     Display *dpy,
    288     int screen,
    289     unsigned int display_mask,
    290     unsigned int attribute,
    291     char **ptr
    292 );
    293 
    294 
    295 /*
    296  *  XNVCTRLQueryTargetStringAttribute -
    297  *
    298  *  Returns True if the attribute exists.  Returns False otherwise.
    299  *  If XNVCTRLQueryTargetStringAttribute returns True, *ptr will point
    300  *  to an allocated string containing the string attribute requested.
    301  *  It is the caller's responsibility to free the string when done.
    302  *
    303  *  Possible errors:
    304  *     BadValue - The target doesn't exist.
    305  *     BadMatch - The NVIDIA driver does not control the target.
    306  *     BadAlloc - Insufficient resources to fulfill the request.
    307  */
    308 
    309 Bool XNVCTRLQueryTargetStringAttribute (
    310     Display *dpy,
    311     int target_type,
    312     int target_id,
    313     unsigned int display_mask,
    314     unsigned int attribute,
    315     char **ptr
    316 );
    317 
    318 
    319 /*
    320  *  XNVCTRLSetStringAttribute -
    321  *
    322  *  Returns True if the operation succeded.  Returns False otherwise.
    323  *
    324  *  Possible X errors:
    325  *     BadValue - The screen doesn't exist.
    326  *     BadMatch - The NVIDIA driver is not present on that screen.
    327  *     BadAlloc - Insufficient resources to fulfill the request.
    328  */
    329 
    330 Bool XNVCTRLSetStringAttribute (
    331     Display *dpy,
    332     int screen,
    333     unsigned int display_mask,
    334     unsigned int attribute,
    335     char *ptr
    336 );
    337 
    338 
    339 /*
    340  *  XNVCTRLSetTargetStringAttribute -
    341  *
    342  *  Returns True if the operation succeded.  Returns False otherwise.
    343  *
    344  *  Possible X errors:
    345  *     BadValue - The screen doesn't exist.
    346  *     BadMatch - The NVIDIA driver is not present on that screen.
    347  *     BadAlloc - Insufficient resources to fulfill the request.
    348  */
    349 
    350 Bool XNVCTRLSetTargetStringAttribute (
    351     Display *dpy,
    352     int target_type,
    353     int target_id,
    354     unsigned int display_mask,
    355     unsigned int attribute,
    356     char *ptr
    357 );
    358 
    359 
    360 /*
    361  * XNVCTRLQueryValidAttributeValues -
    362  *
    363  * Returns True if the attribute exists.  Returns False otherwise.  If
    364  * XNVCTRLQueryValidAttributeValues returns True, values will indicate
    365  * the valid values for the specified attribute; see the description
    366  * of NVCTRLAttributeValidValues in NVCtrl.h.
    367  *
    368  *  Calling this function is equivalent to calling
    369  *  XNVCTRLQueryValidTargetAttributeValues() with the target_type set to
    370  *  NV_CTRL_TARGET_TYPE_X_SCREEN and target_id set to 'screen'.
    371  */
    372 
    373 Bool XNVCTRLQueryValidAttributeValues (
    374     Display *dpy,
    375     int screen,
    376     unsigned int display_mask,
    377     unsigned int attribute,
    378     NVCTRLAttributeValidValuesRec *values
    379 );
    380 
    381 
    382 
    383 /*
    384  * XNVCTRLQueryValidTargetAttributeValues -
    385  *
    386  * Returns True if the attribute exists.  Returns False otherwise.  If
    387  * XNVCTRLQueryValidTargetAttributeValues returns True, values will indicate
    388  * the valid values for the specified attribute.
    389  */
    390 
    391 Bool XNVCTRLQueryValidTargetAttributeValues (
    392     Display *dpy,
    393     int target_type,
    394     int target_id,
    395     unsigned int display_mask,
    396     unsigned int attribute,
    397     NVCTRLAttributeValidValuesRec *values
    398 );
    399 
    400 
    401 /*
    402  * XNVCTRLQueryValidTargetStringAttributeValues -
    403  *
    404  * Returns True if the attribute exists.  Returns False otherwise.  If
    405  * XNVCTRLQueryValidTargetStringAttributeValues returns True, values will
    406  * indicate the valid values for the specified attribute.
    407  */
    408 
    409  Bool XNVCTRLQueryValidTargetStringAttributeValues (
    410     Display *dpy,
    411     int target_type,
    412     int target_id,
    413     unsigned int display_mask,
    414     unsigned int attribute,
    415     NVCTRLAttributeValidValuesRec *values
    416 );
    417 
    418 
    419 /*
    420  * XNVCTRLQueryAttributePermissions -
    421  *
    422  * Returns True if the attribute exists.  Returns False otherwise.  If
    423  * XNVCTRLQueryAttributePermissions returns True, permissions will
    424  * indicate the permission flags for the attribute.
    425  */
    426 
    427 Bool XNVCTRLQueryAttributePermissions (
    428     Display *dpy,
    429     unsigned int attribute,
    430     NVCTRLAttributePermissionsRec *permissions
    431 );
    432 
    433 
    434 /*
    435  * XNVCTRLQueryStringAttributePermissions -
    436  *
    437  * Returns True if the attribute exists.  Returns False otherwise.  If
    438  * XNVCTRLQueryStringAttributePermissions returns True, permissions will
    439  * indicate the permission flags for the attribute.
    440  */
    441 
    442  Bool XNVCTRLQueryStringAttributePermissions (
    443     Display *dpy,
    444     unsigned int attribute,
    445     NVCTRLAttributePermissionsRec *permissions
    446 );
    447 
    448 
    449 /*
    450  * XNVCTRLQueryBinaryDataAttributePermissions -
    451  *
    452  * Returns True if the attribute exists.  Returns False otherwise.  If
    453  * XNVCTRLQueryBinaryDataAttributePermissions returns True, permissions
    454  * will indicate the permission flags for the attribute.
    455  */
    456 
    457  Bool XNVCTRLQueryBinaryDataAttributePermissions (
    458     Display *dpy,
    459     unsigned int attribute,
    460     NVCTRLAttributePermissionsRec *permissions
    461 );
    462 
    463 
    464 /*
    465  * XNVCTRLQueryStringOperationAttributePermissions -
    466  *
    467  * Returns True if the attribute exists.  Returns False otherwise.  If
    468  * XNVCTRLQueryStringOperationAttributePermissions returns True,
    469  * permissions will indicate the permission flags for the attribute.
    470  */
    471 
    472  Bool XNVCTRLQueryStringOperationAttributePermissions (
    473     Display *dpy,
    474     unsigned int attribute,
    475     NVCTRLAttributePermissionsRec *permissions
    476 );
    477 
    478 
    479 /*
    480  *  XNVCTRLSetGvoColorConversion -
    481  *
    482  *  Sets the color conversion matrix, offset, and scale that should be
    483  *  used for GVO (Graphic to Video Out).
    484  *
    485  *  The Color Space Conversion data is ordered like this:
    486  *
    487  *   colorMatrix[0][0] // r.Y
    488  *   colorMatrix[0][1] // g.Y
    489  *   colorMatrix[0][2] // b.Y
    490  *
    491  *   colorMatrix[1][0] // r.Cr
    492  *   colorMatrix[1][1] // g.Cr
    493  *   colorMatrix[1][2] // b.Cr
    494  *
    495  *   colorMatrix[2][0] // r.Cb
    496  *   colorMatrix[2][1] // g.Cb
    497  *   colorMatrix[2][2] // b.Cb
    498  *
    499  *   colorOffset[0]    // Y
    500  *   colorOffset[1]    // Cr
    501  *   colorOffset[2]    // Cb
    502  *
    503  *   colorScale[0]     // Y
    504  *   colorScale[1]     // Cr
    505  *   colorScale[2]     // Cb
    506  *
    507  *  where the data is used according to the following formulae:
    508  *
    509  *   Y  =  colorOffset[0] + colorScale[0] *
    510  *           (R * colorMatrix[0][0] +
    511  *            G * colorMatrix[0][1] +
    512  *            B * colorMatrix[0][2]);
    513  *
    514  *   Cr =  colorOffset[1] + colorScale[1] *
    515  *           (R * colorMatrix[1][0] +
    516  *            G * colorMatrix[1][1] +
    517  *            B * colorMatrix[1][2]);
    518  *
    519  *   Cb =  colorOffset[2] + colorScale[2] *
    520  *           (R * colorMatrix[2][0] +
    521  *            G * colorMatrix[2][1] +
    522  *            B * colorMatrix[2][2]);
    523  *
    524  *  Possible errors:
    525  *     BadMatch - The NVIDIA driver is not present on that screen.
    526  *     BadImplementation - GVO is not available on that screen.
    527  */
    528 
    529 void XNVCTRLSetGvoColorConversion (
    530     Display *dpy,
    531     int screen,
    532     float colorMatrix[3][3],
    533     float colorOffset[3],
    534     float colorScale[3]
    535 );
    536 
    537 
    538 
    539 /*
    540  *  XNVCTRLQueryGvoColorConversion -
    541  *
    542  *  Retrieves the color conversion matrix and color offset
    543  *  that are currently being used for GVO (Graphic to Video Out).
    544  *
    545  *  The values are ordered within the arrays according to the comments
    546  *  for XNVCTRLSetGvoColorConversion().
    547  *
    548  *  Possible errors:
    549  *     BadMatch - The NVIDIA driver is not present on that screen.
    550  *     BadImplementation - GVO is not available on that screen.
    551  */
    552 
    553 Bool XNVCTRLQueryGvoColorConversion (
    554     Display *dpy,
    555     int screen,
    556     float colorMatrix[3][3],
    557     float colorOffset[3],
    558     float colorScale[3]
    559 );
    560 
    561 
    562 /*
    563  *  XNVCTRLQueryBinaryData -
    564  *
    565  *  Returns True if the attribute exists.  Returns False otherwise.
    566  *  If XNVCTRLQueryBinaryData returns True, *ptr will point to an
    567  *  allocated block of memory containing the binary data attribute
    568  *  requested.  It is the caller's responsibility to free the data
    569  *  when done.  len will list the length of the binary data.
    570  *
    571  *  Calling this function is equivalent to calling
    572  *  XNVCTRLQueryTargetBinaryData() with the target_type set to
    573  *  NV_CTRL_TARGET_TYPE_X_SCREEN and target_id set to 'screen'.
    574  *
    575  *  Possible errors:
    576  *     BadValue - The screen doesn't exist.
    577  *     BadMatch - The NVIDIA driver is not present on that screen.
    578  *     BadAlloc - Insufficient resources to fulfill the request.
    579  */
    580 
    581 Bool XNVCTRLQueryBinaryData (
    582     Display *dpy,
    583     int screen,
    584     unsigned int display_mask,
    585     unsigned int attribute,
    586     unsigned char **ptr,
    587     int *len
    588 );
    589 
    590 
    591 /*
    592  * XNVCTRLQueryTargetBinaryData -
    593  *
    594  *  Returns True if the attribute exists.  Returns False otherwise.
    595  *  If XNVCTRLQueryTargetBinaryData returns True, *ptr will point to an
    596  *  allocated block of memory containing the binary data attribute
    597  *  requested.  It is the caller's responsibility to free the data
    598  *  when done.  len will list the length of the binary data.
    599  *
    600  *  Possible errors:
    601  *     BadValue - The target doesn't exist.
    602  *     BadMatch - The NVIDIA driver does not control the target.
    603  *     BadAlloc - Insufficient resources to fulfill the request.
    604  */
    605 
    606 Bool XNVCTRLQueryTargetBinaryData (
    607     Display *dpy,
    608     int target_type,
    609     int target_id,
    610     unsigned int display_mask,
    611     unsigned int attribute,
    612     unsigned char **ptr,
    613     int *len
    614 );
    615 
    616 
    617 /*
    618  * XNVCTRLStringOperation -
    619  *
    620  * Takes a string as input and returns a Xmalloc'ed string as output.
    621  * Returns True on success and False on failure.
    622  */
    623 
    624 Bool XNVCTRLStringOperation (
    625     Display *dpy,
    626     int target_type,
    627     int target_id,
    628     unsigned int display_mask,
    629     unsigned int attribute,
    630     char *pIn,
    631     char **ppOut
    632 );
    633 
    634 
    635 
    636 /*
    637  * XNVCtrlSelectNotify -
    638  *
    639  * This enables/disables receiving of NV-CONTROL events.  The type
    640  * specifies the type of event to enable (currently, the only
    641  * type that can be requested per-screen with XNVCtrlSelectNotify()
    642  * is ATTRIBUTE_CHANGED_EVENT); onoff controls whether receiving this
    643  * type of event should be enabled (True) or disabled (False).
    644  *
    645  * Returns True if successful, or False if the screen is not
    646  * controlled by the NVIDIA driver.
    647  */
    648 
    649 Bool XNVCtrlSelectNotify (
    650     Display *dpy,
    651     int screen,
    652     int type,
    653     Bool onoff
    654 );
    655 
    656 
    657 /*
    658  * XNVCtrlSelectTargetNotify -
    659  *
    660  * This enables/disables receiving of NV-CONTROL events that happen on
    661  * the specified target.  The notify_type specifies the type of event to
    662  * enable (currently, the only type that can be requested per-target with
    663  * XNVCtrlSelectTargetNotify() is TARGET_ATTRIBUTE_CHANGED_EVENT); onoff
    664  * controls whether receiving this type of event should be enabled (True)
    665  * or disabled (False).
    666  *
    667  * Returns True if successful, or False if the target is not
    668  * controlled by the NVIDIA driver.
    669  */
    670 
    671 Bool XNVCtrlSelectTargetNotify (
    672     Display *dpy,
    673     int target_type,
    674     int target_id,
    675     int notify_type,
    676     Bool onoff
    677 );
    678 
    679 
    680 /*
    681  * XNVCtrlEvent structure
    682  */
    683 
    684 typedef struct {
    685     int type;
    686     unsigned long serial;
    687     Bool send_event;  /* always FALSE, we don't allow send_events */
    688     Display *display;
    689     Time time;
    690     int screen;
    691     unsigned int display_mask;
    692     unsigned int attribute;
    693     int value;
    694 } XNVCtrlAttributeChangedEvent;
    695 
    696 typedef union {
    697     int type;
    698     XNVCtrlAttributeChangedEvent attribute_changed;
    699     long pad[24];
    700 } XNVCtrlEvent;
    701 
    702 
    703 /*
    704  * XNVCtrlEventTarget structure
    705  */
    706 
    707 typedef struct {
    708     int type;
    709     unsigned long serial;
    710     Bool send_event;  /* always FALSE, we don't allow send_events */
    711     Display *display;
    712     Time time;
    713     int target_type;
    714     int target_id;
    715     unsigned int display_mask;
    716     unsigned int attribute;
    717     int value;
    718 } XNVCtrlAttributeChangedEventTarget;
    719 
    720 typedef union {
    721     int type;
    722     XNVCtrlAttributeChangedEventTarget attribute_changed;
    723     long pad[24];
    724 } XNVCtrlEventTarget;
    725 
    726 
    727 /*
    728  * XNVCtrlEventTargetAvailability structure
    729  */
    730 
    731 typedef struct {
    732     int type;
    733     unsigned long serial;
    734     Bool send_event;  /* always FALSE, we don't allow send_events */
    735     Display *display;
    736     Time time;
    737     int target_type;
    738     int target_id;
    739     unsigned int display_mask;
    740     unsigned int attribute;
    741     int value;
    742     Bool availability;
    743 } XNVCtrlAttributeChangedEventTargetAvailability;
    744 
    745 typedef union {
    746     int type;
    747     XNVCtrlAttributeChangedEventTargetAvailability attribute_changed;
    748     long pad[24];
    749 } XNVCtrlEventTargetAvailability;
    750 
    751 
    752 /*
    753  * XNVCtrlStringEventTarget structure
    754  */
    755 
    756 typedef struct {
    757     int type;
    758     unsigned long serial;
    759     Bool send_event;  /* always FALSE, we don't allow send_events */
    760     Display *display;
    761     Time time;
    762     int target_type;
    763     int target_id;
    764     unsigned int display_mask;
    765     unsigned int attribute;
    766 } XNVCtrlStringAttributeChangedEventTarget;
    767 
    768 typedef union {
    769     int type;
    770     XNVCtrlStringAttributeChangedEventTarget attribute_changed;
    771     long pad[24];
    772 } XNVCtrlStringEventTarget;
    773 
    774 
    775 
    776 /*
    777  * XNVCtrlBinaryEventTarget structure
    778  */
    779 
    780 typedef struct {
    781     int type;
    782     unsigned long serial;
    783     Bool send_event;  /* always FALSE, we don't allow send_events */
    784     Display *display;
    785     Time time;
    786     int target_type;
    787     int target_id;
    788     unsigned int display_mask;
    789     unsigned int attribute;
    790 } XNVCtrlBinaryAttributeChangedEventTarget;
    791 
    792 typedef union {
    793     int type;
    794     XNVCtrlBinaryAttributeChangedEventTarget attribute_changed;
    795     long pad[24];
    796 } XNVCtrlBinaryEventTarget;
    797 
    798 #if defined __cplusplus
    799 } /* extern "C" */
    800 #endif
    801 
    802 #endif /* __NVCTRLLIB_H */
    803