1/* 2 * SystemUI.c 3 * QuickTimeTcl 4 * 5 * Created by Mats Bengtsson on Wed May 12 2004. 6 * Copyright (c) 2004 Mats Bengtsson. All rights reserved. 7 * 8 */ 9 10#include "QuickTimeTcl.h" 11 12 13/* 14 * For dispatching commands. 15 */ 16 17static char *allUIModeCmds[] = { 18 "normal", "contentsuppressed", "contenthidden", "allhidden", 19 (char *) NULL 20}; 21 22enum { 23 kQTTclUIModeCmdNormal = 0L, 24 kQTTclUIModeCmdContentSuppressed, 25 kQTTclUIModeCmdContentHidden, 26 kQTTclUIModeCmdAllHidden 27}; 28 29static char *allUIModeOptions[] = { 30 "-autoshowmenubar", "-disableapplemenu", "-disableprocessswitch", 31 "-disableforcequit", "-disablesessionterminate", 32 (char *) NULL 33}; 34 35enum { 36 kQTTclUIModeOptionAutoShowMenuBar = 0L, 37 kQTTclUIModeOptionDisableAppleMenu, 38 kQTTclUIModeOptionDisableProcessSwitch, 39 kQTTclUIModeOptionDisableForceQuit, 40 kQTTclUIModeOptionDisableSessionTerminate 41}; 42 43/* 44 *---------------------------------------------------------------------- 45 * 46 * MacControlUICmd -- 47 * 48 * Gets or sets the system UI mode. 49 * 50 * Results: 51 * Standard Tcl result 52 * 53 * Side effects: 54 * None 55 * 56 *---------------------------------------------------------------------- 57 */ 58 59int MacControlUICmd( ClientData clientData, 60 Tcl_Interp* interp, 61 int objc, 62 Tcl_Obj *CONST objv[]) 63{ 64 SystemUIMode mode; 65 SystemUIOptions options = 0L; 66 Tcl_Obj *listObjPtr; 67 int cmdIndex; 68 int iarg; 69 int optIndex; 70 char errorCodeStr[20]; 71 OSStatus osErr = noErr; 72 73 if (objc == 1) { 74 75 /* 76 * Get current mode & options. 77 */ 78 79 GetSystemUIMode( &mode, &options ); 80 listObjPtr = Tcl_NewListObj( 0, (Tcl_Obj **) NULL ); 81 82 switch (mode) { 83 case kUIModeNormal: 84 Tcl_ListObjAppendElement( interp, listObjPtr, Tcl_NewStringObj("normal", -1) ); 85 break; 86 87 case kUIModeContentSuppressed: 88 Tcl_ListObjAppendElement( interp, listObjPtr, Tcl_NewStringObj("contentsuppressed", -1) ); 89 break; 90 91 case kUIModeContentHidden: 92 Tcl_ListObjAppendElement( interp, listObjPtr, Tcl_NewStringObj("contenthidden", -1) ); 93 break; 94 95 case kUIModeAllHidden: 96 Tcl_ListObjAppendElement( interp, listObjPtr, Tcl_NewStringObj("allhidden", -1) ); 97 break; 98 99 default: 100 Tcl_ListObjAppendElement( interp, listObjPtr, Tcl_NewStringObj("unknown", -1) ); 101 break; 102 } 103 104 if (options & kUIOptionAutoShowMenuBar) { 105 Tcl_ListObjAppendElement( interp, listObjPtr, Tcl_NewStringObj("-autoshowmenubar", -1) ); 106 } 107 if (options & kUIOptionDisableAppleMenu) { 108 Tcl_ListObjAppendElement( interp, listObjPtr, Tcl_NewStringObj("-disableapplemenu", -1) ); 109 } 110 if (options & kUIOptionDisableProcessSwitch) { 111 Tcl_ListObjAppendElement( interp, listObjPtr, Tcl_NewStringObj("-disableprocessswitch", -1) ); 112 } 113 if (options & kUIOptionDisableForceQuit) { 114 Tcl_ListObjAppendElement( interp, listObjPtr, Tcl_NewStringObj("-disableforcequit", -1) ); 115 } 116 if (options & kUIOptionDisableSessionTerminate) { 117 Tcl_ListObjAppendElement( interp, listObjPtr, Tcl_NewStringObj("-disablesessionterminate", -1) ); 118 } 119 Tcl_SetObjResult( interp, listObjPtr ); 120 return TCL_OK; 121 } 122 123 /* 124 * Set current mode & options. 125 */ 126 127 if (Tcl_GetIndexFromObj( interp, objv[1], allUIModeCmds, "command", 128 TCL_EXACT, &cmdIndex ) != TCL_OK ) { 129 return TCL_ERROR; 130 } 131 switch(cmdIndex) { 132 133 case kQTTclUIModeCmdNormal: { 134 mode = kUIModeNormal; 135 break; 136 } 137 case kQTTclUIModeCmdContentSuppressed: { 138 mode = kUIModeContentSuppressed; 139 break; 140 } 141 case kQTTclUIModeCmdContentHidden: { 142 mode = kUIModeContentHidden; 143 break; 144 } 145 case kQTTclUIModeCmdAllHidden: { 146 mode = kUIModeAllHidden; 147 break; 148 } 149 } 150 151 /* 152 * Process the configuration options if any. 153 */ 154 155 for (iarg = 2; iarg < objc; iarg++) { 156 if (Tcl_GetIndexFromObj( interp, objv[iarg], allUIModeOptions, 157 "option", TCL_EXACT, &optIndex ) != TCL_OK ) { 158 return TCL_ERROR; 159 } 160 161 switch(optIndex) { 162 163 case kQTTclUIModeOptionAutoShowMenuBar: { 164 options |= kUIOptionAutoShowMenuBar; 165 break; 166 } 167 case kQTTclUIModeOptionDisableAppleMenu: { 168 options |= kUIOptionDisableAppleMenu; 169 break; 170 } 171 case kQTTclUIModeOptionDisableProcessSwitch: { 172 options |= kUIOptionDisableProcessSwitch; 173 break; 174 } 175 case kQTTclUIModeOptionDisableForceQuit: { 176 options |= kUIOptionDisableForceQuit; 177 break; 178 } 179 case kQTTclUIModeOptionDisableSessionTerminate: { 180 options |= kUIOptionDisableSessionTerminate; 181 break; 182 } 183 } 184 } 185 186 osErr = SetSystemUIMode( mode, options ); 187 188 if (osErr != noErr) { 189 sprintf( errorCodeStr, "%i", (int) osErr ); 190 Tcl_AppendResult( interp, "system call \"SetSystemUIMode\" returned error code: ", 191 errorCodeStr, (char*) NULL ); 192 return TCL_ERROR; 193 } 194 195 return TCL_OK; 196} 197 198 199