1: /* $Xorg: SMlib.h,v 1.4 2001/02/09 02:03:30 xorgcvs Exp $ */ 2: 3: /* 4: 5: Copyright 1993, 1998 The Open Group 6: 7: Permission to use, copy, modify, distribute, and sell this software and its 8: documentation for any purpose is hereby granted without fee, provided that 9: the above copyright notice appear in all copies and that both that 10: copyright notice and this permission notice appear in supporting 11: documentation. 12: 13: The above copyright notice and this permission notice shall be included in 14: all copies or substantial portions of the Software. 15: 16: THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17: IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18: FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19: OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 20: AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 21: CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 22: 23: Except as contained in this notice, the name of The Open Group shall not be 24: used in advertising or otherwise to promote the sale, use or other dealings 25: in this Software without prior written authorization from The Open Group. 26: 27: */ 28: 29: /* 30: * Author: Ralph Mor, X Consortium 31: */ 32: 33: #ifndef _SMLIB_H_ 34: #define _SMLIB_H_ 35: 36: #include <X11/SM/SM.h> 37: #include <X11/ICE/ICElib.h> 38: 39: 40: /* 41: * Generic SM pointer 42: */ 43: 44: typedef IcePointer SmPointer; 45: 46: 47: /* 48: * Connection objects. Defined in SMlibint.h 49: */ 50: 51: typedef struct _SmcConn *SmcConn; 52: typedef struct _SmsConn *SmsConn; 53: 54: 55: /* 56: * Session Management property 57: */ 58: 59: typedef struct { 60: int length; /* length (in bytes) of the value */ 61: SmPointer value; /* the value */ 62: } SmPropValue; 63: 64: typedef struct { 65: char *name; /* name of property */ 66: char *type; /* type of property */ 67: int num_vals; /* number of values in property */ 68: SmPropValue *vals; /* the values */ 69: } SmProp; 70: 71: 72: 73: /* 74: * SmcCloseConnection status return 75: */ 76: 77: typedef enum { 78: SmcClosedNow, 79: SmcClosedASAP, 80: SmcConnectionInUse 81: } SmcCloseStatus; 82: 83: 84: 85: /* 86: * Client callbacks 87: */ 88: 89: typedef void (*SmcSaveYourselfProc) ( 90: SmcConn /* smcConn */, 91: SmPointer /* clientData */, 92: int /* saveType */, 93: Bool /* shutdown */, 94: int /* interactStyle */, 95: Bool /* fast */ 96: ); 97: 98: typedef void (*SmcSaveYourselfPhase2Proc) ( 99: SmcConn /* smcConn */, 100: SmPointer /* clientData */ 101: ); 102: 103: typedef void (*SmcInteractProc) ( 104: SmcConn /* smcConn */, 105: SmPointer /* clientData */ 106: ); 107: 108: typedef void (*SmcDieProc) ( 109: SmcConn /* smcConn */, 110: SmPointer /* clientData */ 111: ); 112: 113: typedef void (*SmcShutdownCancelledProc) ( 114: SmcConn /* smcConn */, 115: SmPointer /* clientData */ 116: ); 117: 118: typedef void (*SmcSaveCompleteProc) ( 119: SmcConn /* smcConn */, 120: SmPointer /* clientData */ 121: ); 122: 123: typedef void (*SmcPropReplyProc) ( 124: SmcConn /* smcConn */, 125: SmPointer /* clientData */, 126: int /* numProps */, 127: SmProp ** /* props */ 128: ); 129: 130: 131: /* 132: * Callbacks set up at SmcOpenConnection time 133: */ 134: 135: typedef struct { 136: 137: struct { 138: SmcSaveYourselfProc callback; 139: SmPointer client_data; 140: } save_yourself; 141: 142: struct { 143: SmcDieProc callback; 144: SmPointer client_data; 145: } die; 146: 147: struct { 148: SmcSaveCompleteProc callback; 149: SmPointer client_data; 150: } save_complete; 151: 152: struct { 153: SmcShutdownCancelledProc callback; 154: SmPointer client_data; 155: } shutdown_cancelled; 156: 157: } SmcCallbacks; 158: 159: #define SmcSaveYourselfProcMask (1L << 0) 160: #define SmcDieProcMask (1L << 1) 161: #define SmcSaveCompleteProcMask (1L << 2) 162: #define SmcShutdownCancelledProcMask (1L << 3) 163: 164: 165: 166: /* 167: * Session manager callbacks 168: */ 169: 170: typedef Status (*SmsRegisterClientProc) ( 171: SmsConn /* smsConn */, 172: SmPointer /* managerData */, 173: char * /* previousId */ 174: ); 175: 176: typedef void (*SmsInteractRequestProc) ( 177: SmsConn /* smsConn */, 178: SmPointer /* managerData */, 179: int /* dialogType */ 180: ); 181: 182: typedef void (*SmsInteractDoneProc) ( 183: SmsConn /* smsConn */, 184: SmPointer /* managerData */, 185: Bool /* cancelShutdown */ 186: ); 187: 188: typedef void (*SmsSaveYourselfRequestProc) ( 189: SmsConn /* smsConn */, 190: SmPointer /* managerData */, 191: int /* saveType */, 192: Bool /* shutdown */, 193: int /* interactStyle */, 194: Bool /* fast */, 195: Bool /* global */ 196: ); 197: 198: typedef void (*SmsSaveYourselfPhase2RequestProc) ( 199: SmsConn /* smsConn */, 200: SmPointer /* managerData */ 201: ); 202: 203: typedef void (*SmsSaveYourselfDoneProc) ( 204: SmsConn /* smsConn */, 205: SmPointer /* managerData */, 206: Bool /* success */ 207: ); 208: 209: typedef void (*SmsCloseConnectionProc) ( 210: SmsConn /* smsConn */, 211: SmPointer /* managerData */, 212: int /* count */, 213: char ** /* reasonMsgs */ 214: ); 215: 216: typedef void (*SmsSetPropertiesProc) ( 217: SmsConn /* smsConn */, 218: SmPointer /* managerData */, 219: int /* numProps */, 220: SmProp ** /* props */ 221: ); 222: 223: typedef void (*SmsDeletePropertiesProc) ( 224: SmsConn /* smsConn */, 225: SmPointer /* managerData */, 226: int /* numProps */, 227: char ** /* propNames */ 228: ); 229: 230: typedef void (*SmsGetPropertiesProc) ( 231: SmsConn /* smsConn */, 232: SmPointer /* managerData */ 233: ); 234: 235: 236: /* 237: * Callbacks set up by a session manager when a new client connects. 238: */ 239: 240: typedef struct { 241: 242: struct { 243: SmsRegisterClientProc callback; 244: SmPointer manager_data; 245: } register_client; 246: 247: struct { 248: SmsInteractRequestProc callback; 249: SmPointer manager_data; 250: } interact_request; 251: 252: struct { 253: SmsInteractDoneProc callback; 254: SmPointer manager_data; 255: } interact_done; 256: 257: struct { 258: SmsSaveYourselfRequestProc callback; 259: SmPointer manager_data; 260: } save_yourself_request; 261: 262: struct { 263: SmsSaveYourselfPhase2RequestProc callback; 264: SmPointer manager_data; 265: } save_yourself_phase2_request; 266: 267: struct { 268: SmsSaveYourselfDoneProc callback; 269: SmPointer manager_data; 270: } save_yourself_done; 271: 272: struct { 273: SmsCloseConnectionProc callback; 274: SmPointer manager_data; 275: } close_connection; 276: 277: struct { 278: SmsSetPropertiesProc callback; 279: SmPointer manager_data; 280: } set_properties; 281: 282: struct { 283: SmsDeletePropertiesProc callback; 284: SmPointer manager_data; 285: } delete_properties; 286: 287: struct { 288: SmsGetPropertiesProc callback; 289: SmPointer manager_data; 290: } get_properties; 291: 292: } SmsCallbacks; 293: 294: 295: #define SmsRegisterClientProcMask (1L << 0) 296: #define SmsInteractRequestProcMask (1L << 1) 297: #define SmsInteractDoneProcMask (1L << 2) 298: #define SmsSaveYourselfRequestProcMask (1L << 3) 299: #define SmsSaveYourselfP2RequestProcMask (1L << 4) 300: #define SmsSaveYourselfDoneProcMask (1L << 5) 301: #define SmsCloseConnectionProcMask (1L << 6) 302: #define SmsSetPropertiesProcMask (1L << 7) 303: #define SmsDeletePropertiesProcMask (1L << 8) 304: #define SmsGetPropertiesProcMask (1L << 9) 305: 306: 307: 308: typedef Status (*SmsNewClientProc) ( 309: SmsConn /* smsConn */, 310: SmPointer /* managerData */, 311: unsigned long * /* maskRet */, 312: SmsCallbacks * /* callbacksRet */, 313: char ** /* failureReasonRet */ 314: ); 315: 316: 317: 318: /* 319: * Error handlers 320: */ 321: 322: typedef void (*SmcErrorHandler) ( 323: SmcConn /* smcConn */, 324: Bool /* swap */, 325: int /* offendingMinorOpcode */, 326: unsigned long /* offendingSequence */, 327: int /* errorClass */, 328: int /* severity */, 329: SmPointer /* values */ 330: ); 331: 332: typedef void (*SmsErrorHandler) ( 333: SmsConn /* smsConn */, 334: Bool /* swap */, 335: int /* offendingMinorOpcode */, 336: unsigned long /* offendingSequence */, 337: int /* errorClass */, 338: int /* severity */, 339: SmPointer /* values */ 340: ); 341: 342: 343: 344: /* 345: * Function Prototypes 346: */ 347: 348: _XFUNCPROTOBEGIN 349: 350: extern SmcConn SmcOpenConnection ( 351: char * /* networkIdsList */, 352: SmPointer /* context */, 353: int /* xsmpMajorRev */, 354: int /* xsmpMinorRev */, 355: unsigned long /* mask */, 356: SmcCallbacks * /* callbacks */, 357: char * /* previousId */, 358: char ** /* clientIdRet */, 359: int /* errorLength */, 360: char * /* errorStringRet */ 361: ); 362: 363: extern SmcCloseStatus SmcCloseConnection ( 364: SmcConn /* smcConn */, 365: int /* count */, 366: char ** /* reasonMsgs */ 367: ); 368: 369: extern void SmcModifyCallbacks ( 370: SmcConn /* smcConn */, 371: unsigned long /* mask */, 372: SmcCallbacks * /* callbacks */ 373: ); 374: 375: extern void SmcSetProperties ( 376: SmcConn /* smcConn */, 377: int /* numProps */, 378: SmProp ** /* props */ 379: ); 380: 381: extern void SmcDeleteProperties ( 382: SmcConn /* smcConn */, 383: int /* numProps */, 384: char ** /* propNames */ 385: ); 386: 387: extern Status SmcGetProperties ( 388: SmcConn /* smcConn */, 389: SmcPropReplyProc /* propReplyProc */, 390: SmPointer /* clientData */ 391: ); 392: 393: extern Status SmcInteractRequest ( 394: SmcConn /* smcConn */, 395: int /* dialogType */, 396: SmcInteractProc /* interactProc */, 397: SmPointer /* clientData */ 398: ); 399: 400: extern void SmcInteractDone ( 401: SmcConn /* smcConn */, 402: Bool /* cancelShutdown */ 403: ); 404: 405: extern void SmcRequestSaveYourself ( 406: SmcConn /* smcConn */, 407: int /* saveType */, 408: Bool /* shutdown */, 409: int /* interactStyle */, 410: Bool /* fast */, 411: Bool /* global */ 412: ); 413: 414: extern Status SmcRequestSaveYourselfPhase2 ( 415: SmcConn /* smcConn */, 416: SmcSaveYourselfPhase2Proc /* saveYourselfPhase2Proc */, 417: SmPointer /* clientData */ 418: ); 419: 420: extern void SmcSaveYourselfDone ( 421: SmcConn /* smcConn */, 422: Bool /* success */ 423: ); 424: 425: extern int SmcProtocolVersion ( 426: SmcConn /* smcConn */ 427: ); 428: 429: extern int SmcProtocolRevision ( 430: SmcConn /* smcConn */ 431: ); 432: 433: extern char *SmcVendor ( 434: SmcConn /* smcConn */ 435: ); 436: 437: extern char *SmcRelease ( 438: SmcConn /* smcConn */ 439: ); 440: 441: extern char *SmcClientID ( 442: SmcConn /* smcConn */ 443: ); 444: 445: extern IceConn SmcGetIceConnection ( 446: SmcConn /* smcConn */ 447: ); 448: 449: extern Status SmsInitialize ( 450: char * /* vendor */, 451: char * /* release */, 452: SmsNewClientProc /* newClientProc */, 453: SmPointer /* managerData */, 454: IceHostBasedAuthProc /* hostBasedAuthProc */, 455: int /* errorLength */, 456: char * /* errorStringRet */ 457: ); 458: 459: extern char *SmsClientHostName ( 460: SmsConn /* smsConn */ 461: ); 462: 463: extern char *SmsGenerateClientID ( 464: SmsConn /* smsConn */ 465: ); 466: 467: extern Status SmsRegisterClientReply ( 468: SmsConn /* smsConn */, 469: char * /* clientId */ 470: ); 471: 472: extern void SmsSaveYourself ( 473: SmsConn /* smsConn */, 474: int /* saveType */, 475: Bool /* shutdown */, 476: int /* interactStyle */, 477: Bool /* fast */ 478: ); 479: 480: extern void SmsSaveYourselfPhase2 ( 481: SmsConn /* smsConn */ 482: ); 483: 484: extern void SmsInteract ( 485: SmsConn /* smsConn */ 486: ); 487: 488: extern void SmsDie ( 489: SmsConn /* smsConn */ 490: ); 491: 492: extern void SmsSaveComplete ( 493: SmsConn /* smsConn */ 494: ); 495: 496: extern void SmsShutdownCancelled ( 497: SmsConn /* smsConn */ 498: ); 499: 500: extern void SmsReturnProperties ( 501: SmsConn /* smsConn */, 502: int /* numProps */, 503: SmProp ** /* props */ 504: ); 505: 506: extern void SmsCleanUp ( 507: SmsConn /* smsConn */ 508: ); 509: 510: extern int SmsProtocolVersion ( 511: SmsConn /* smsConn */ 512: ); 513: 514: extern int SmsProtocolRevision ( 515: SmsConn /* smsConn */ 516: ); 517: 518: extern char *SmsClientID ( 519: SmsConn /* smsConn */ 520: ); 521: 522: extern IceConn SmsGetIceConnection ( 523: SmsConn /* smsConn */ 524: ); 525: 526: extern SmcErrorHandler SmcSetErrorHandler ( 527: SmcErrorHandler /* handler */ 528: ); 529: 530: extern SmsErrorHandler SmsSetErrorHandler ( 531: SmsErrorHandler /* handler */ 532: ); 533: 534: extern void SmFreeProperty ( 535: SmProp * /* prop */ 536: ); 537: 538: extern void SmFreeReasons ( 539: int /* count */, 540: char ** /* reasonMsgs */ 541: ); 542: 543: _XFUNCPROTOEND 544: 545: #endif /* _SMLIB_H_ */ 546: