| 37 | | // NSLog(@"cocoaControlDOServer: init:%@ withName:%@\n", [guest description], name); |
| 38 | | |
| 39 | | [super init]; |
| 40 | | |
| 41 | | NSConnection *theConnection; |
| 42 | | theConnection = [NSConnection defaultConnection]; |
| 43 | | [theConnection setRootObject:self]; |
| 44 | | |
| 45 | | if ([theConnection registerName:@"qdoserver"] == NO) { |
| 46 | | NSLog(@"cocoaControlDOServer: could not establisch qcontrol server"); |
| 47 | | } |
| 48 | | |
| 49 | | guests = [[NSMutableDictionary alloc] init]; |
| 50 | | [guests retain]; |
| 51 | | |
| 52 | | printf("finished init\n"); |
| 53 | | |
| 54 | | return self; |
| | 37 | // NSLog(@"cocoaControlDOServer: init:%@ withName:%@\n", [guest description], name); |
| | 38 | |
| | 39 | [super init]; |
| | 40 | |
| | 41 | NSConnection *theConnection; |
| | 42 | theConnection = [NSConnection defaultConnection]; |
| | 43 | [theConnection setRootObject:self]; |
| | 44 | |
| | 45 | if ([theConnection registerName:@"qdoserver"] == NO) { |
| | 46 | NSLog(@"cocoaControlDOServer: could not establisch qcontrol server"); |
| | 47 | } |
| | 48 | |
| | 49 | guests = [[NSMutableDictionary alloc] init]; |
| | 50 | [guests retain]; |
| | 51 | |
| | 52 | return self; |
| 66 | | // NSLog(@"cocoaControlDOServer: registerGuest:%@ withName:%@\n", [guest description], name); |
| 67 | | |
| 68 | | if ([guests objectForKey:name] == nil) { |
| 69 | | [guests setObject:guest forKey:name]; |
| 70 | | // NSLog(@"OK"); |
| 71 | | return TRUE; |
| 72 | | } else { |
| 73 | | NSLog(@"cocoaControlDOServer: guestRegister: failed"); |
| 74 | | return FALSE; |
| 75 | | } |
| | 64 | // NSLog(@"cocoaControlDOServer: registerGuest:%@ withName:%@\n", [guest description], name); |
| | 65 | |
| | 66 | if ([guests objectForKey:name] == nil) { |
| | 67 | [guests setObject:guest forKey:name]; |
| | 68 | // NSLog(@"OK"); |
| | 69 | return TRUE; |
| | 70 | } else { |
| | 71 | NSLog(@"cocoaControlDOServer: guestRegister: failed"); |
| | 72 | return FALSE; |
| | 73 | } |
| 80 | | // NSLog(@"cocoaControlDOServer: unregisterGuestWithName:%@\n", name); |
| 81 | | |
| 82 | | if ([guests objectForKey:name] != nil) { |
| 83 | | [guests removeObjectForKey:name]; |
| 84 | | // NSLog(@"OK"); |
| 85 | | return TRUE; |
| 86 | | } else { |
| 87 | | NSLog(@"cocoaControlDOServer: guestUnregisterWithName: failed"); |
| 88 | | return FALSE; |
| 89 | | } |
| | 78 | // NSLog(@"cocoaControlDOServer: unregisterGuestWithName:%@\n", name); |
| | 79 | |
| | 80 | if ([guests objectForKey:name] != nil) { |
| | 81 | [guests removeObjectForKey:name]; |
| | 82 | // NSLog(@"OK"); |
| | 83 | return TRUE; |
| | 84 | } else { |
| | 85 | NSLog(@"cocoaControlDOServer: guestUnregisterWithName: failed"); |
| | 86 | return FALSE; |
| | 87 | } |
| | 133 | transitionSpecifications.wid = 0; //wid |
| | 134 | transitionSpecifications.backColour = 0; //background color |
| | 135 | |
| | 136 | /* freeze desktop: OSStatus CGSNewTransition(const CGSConnection cid, const CGSTransitionSpec* transitionSpecifications, int *transitionHandle) */ |
| | 137 | CGSNewTransition(cid, &transitionSpecifications, &transitionHandle); |
| | 138 | |
| | 139 | /* change windows */ |
| | 140 | if (nFullscreen) |
| | 141 | [obj guestUnhide]; |
| | 142 | |
| | 143 | if (fullscreen) |
| | 144 | [[guests objectForKey:name] guestHide]; |
| | 145 | |
| | 146 | if (a > -1) //avoid activating "Q Control" |
| | 147 | SetFrontProcess( &psn ); |
| | 148 | else { |
| | 149 | [[qControl mainWindow] orderWindow:NSWindowAbove relativeTo:[[guests objectForKey:name] guestWindowNumber]]; |
| | 150 | SetFrontProcess( &psn ); |
| | 151 | } |
| | 152 | |
| | 153 | /* wait */ |
| | 154 | usleep(10000); |
| | 155 | |
| | 156 | /* run transition: OSStatus CGSInvokeTransition(const CGSConnection cid, int transitionHandle, float duration) */ |
| | 157 | CGSInvokeTransition(cid, transitionHandle, 1.0); |
| | 158 | |
| | 159 | } else { |
| | 160 | if (a > -1) //avoid activating "Q Control" |
| | 161 | SetFrontProcess( &psn ); |
| | 162 | else { |
| | 163 | [[qControl mainWindow] orderWindow:NSWindowAbove relativeTo:[[guests objectForKey:name] guestWindowNumber]]; |
| | 164 | SetFrontProcess( &psn ); |
| | 165 | } |
| | 166 | } |
| | 167 | |
| | 168 | return true; |
| | 169 | } |
| | 170 | |
| | 171 | - (BOOL) guestSwitch: (NSString *) name fullscreen:(BOOL)fullscreen nextGuestName:(NSString *)nextGuestName |
| | 172 | { |
| | 173 | // NSLog(@"guestSwitch: windowSwitchKeyPressed:%@ fullscreen:%d nextGuest:%@\n", name, fullscreen, nextGuestName); |
| | 174 | |
| | 175 | int i; |
| | 176 | int a = 0; |
| | 177 | NSArray *keys = [guests allKeys]; |
| | 178 | |
| | 179 | if (nextGuestName) { |
| | 180 | for (i = 0; i < [keys count]; i++) { |
| | 181 | if ([[keys objectAtIndex:i] isEqual:nextGuestName]) { |
| | 182 | a = i; |
| | 183 | } |
| | 184 | } |
| | 185 | } else { |
| | 186 | for (i = 0; i < [keys count]; i++) { |
| | 187 | if ([[keys objectAtIndex:i] isEqual:name]) { |
| | 188 | a = i + 1; |
| | 189 | } |
| | 190 | } |
| | 191 | } |
| | 192 | |
| | 193 | ProcessSerialNumber psn; |
| | 194 | id obj = nil; |
| | 195 | BOOL nFullscreen = FALSE; |
| | 196 | |
| | 197 | if (a < [keys count]) { |
| | 198 | /* move QEMU to front */ |
| | 199 | GetProcessForPID( [[[qControl pcsTasks] objectForKey:[keys objectAtIndex:a]] processIdentifier], &psn ); |
| | 200 | obj = [guests objectForKey:[keys objectAtIndex:a]]; |
| | 201 | if ([obj fullscreen]) |
| | 202 | nFullscreen = TRUE; |
| | 203 | } else |
| | 204 | GetProcessForPID( [[NSProcessInfo processInfo ] processIdentifier ], &psn ); |
| | 205 | |
| | 206 | if (fullscreen||nFullscreen) { |
| | 207 | /* setup transition */ |
| | 208 | CGSConnection cid = _CGSDefaultConnection(); |
| | 209 | int transitionHandle = -1; |
| | 210 | CGSTransitionSpec transitionSpecifications; |
| | 211 | |
| | 212 | transitionSpecifications.type = 7; //transition; |
| | 213 | transitionSpecifications.option = 1; //option; |
| 170 | | return true; |
| 171 | | } |
| 172 | | |
| 173 | | - (BOOL) guestSwitch: (NSString *) name fullscreen:(BOOL)fullscreen nextGuestName:(NSString *)nextGuestName |
| 174 | | { |
| 175 | | // NSLog(@"guestSwitch: windowSwitchKeyPressed:%@ fullscreen:%d nextGuest:%@\n", name, fullscreen, nextGuestName); |
| 176 | | |
| 177 | | int i; |
| 178 | | int a = 0; |
| 179 | | NSArray *keys = [guests allKeys]; |
| 180 | | |
| 181 | | if (nextGuestName) { |
| 182 | | for (i = 0; i < [keys count]; i++) { |
| 183 | | if ([[keys objectAtIndex:i] isEqual:nextGuestName]) { |
| 184 | | a = i; |
| 185 | | } |
| 186 | | } |
| 187 | | } else { |
| 188 | | for (i = 0; i < [keys count]; i++) { |
| 189 | | if ([[keys objectAtIndex:i] isEqual:name]) { |
| 190 | | a = i + 1; |
| 191 | | } |
| 192 | | } |
| 193 | | } |
| 194 | | |
| 195 | | ProcessSerialNumber psn; |
| 196 | | id obj = nil; |
| 197 | | BOOL nFullscreen = FALSE; |
| 198 | | |
| 199 | | if (a < [keys count]) { |
| 200 | | /* move QEMU to front */ |
| 201 | | GetProcessForPID( [[[qControl pcsTasks] objectForKey:[keys objectAtIndex:a]] processIdentifier], &psn ); |
| 202 | | obj = [guests objectForKey:[keys objectAtIndex:a]]; |
| 203 | | if ([obj fullscreen]) |
| 204 | | nFullscreen = TRUE; |
| 205 | | } else |
| 206 | | GetProcessForPID( [[NSProcessInfo processInfo ] processIdentifier ], &psn ); |
| 207 | | |
| 208 | | if (fullscreen||nFullscreen) { |
| 209 | | /* setup transition */ |
| 210 | | CGSConnection cid = _CGSDefaultConnection(); |
| 211 | | int transitionHandle = -1; |
| 212 | | CGSTransitionSpec transitionSpecifications; |
| 213 | | |
| 214 | | transitionSpecifications.type = 7; //transition; |
| 215 | | transitionSpecifications.option = 1; //option; |
| 216 | | transitionSpecifications.wid = 0; //wid |
| 217 | | transitionSpecifications.backColour = 0; //background color |
| 218 | | |
| 219 | | /* freeze desktop: OSStatus CGSNewTransition(const CGSConnection cid, const CGSTransitionSpec* transitionSpecifications, int *transitionHandle) */ |
| 220 | | CGSNewTransition(cid, &transitionSpecifications, &transitionHandle); |
| 221 | | |
| 222 | | /* change windows */ |
| 223 | | if (nFullscreen) |
| 224 | | [obj guestUnhide]; |
| 225 | | |
| 226 | | if (fullscreen) |
| 227 | | [[guests objectForKey:name] guestHide]; |
| 228 | | |
| 229 | | if (a < [keys count]) //avoid activating "Q Control" |
| 230 | | SetFrontProcess( &psn ); |
| 231 | | else { |
| 232 | | [[qControl mainWindow] orderWindow:NSWindowAbove relativeTo:[[guests objectForKey:name] guestWindowNumber]]; |
| 233 | | SetFrontProcess( &psn ); |
| 234 | | } |
| 235 | | |
| 236 | | /* wait */ |
| 237 | | usleep(10000); |
| 238 | | |
| 239 | | /* run transition: OSStatus CGSInvokeTransition(const CGSConnection cid, int transitionHandle, float duration) */ |
| 240 | | CGSInvokeTransition(cid, transitionHandle, 1.0); |
| 241 | | |
| 242 | | } else { |
| 243 | | if (a < [keys count]) //avoid activating "Q Control" |
| 244 | | SetFrontProcess( &psn ); |
| 245 | | else { |
| 246 | | [[qControl mainWindow] orderWindow:NSWindowAbove relativeTo:[[guests objectForKey:name] guestWindowNumber]]; |
| 247 | | SetFrontProcess( &psn ); |
| 248 | | } |
| 249 | | } |
| 250 | | |
| 251 | | return true; |
| | 249 | return true; |
| 256 | | // NSLog(@"cocoaControlDOServer: guestWindowLevel: %@", guest); |
| 257 | | |
| 258 | | id obj = [guests objectForKey:guest]; |
| 259 | | if (obj != nil) { |
| 260 | | // NSLog(@"OK"); |
| 261 | | return [obj guestWindowLevel]; |
| 262 | | } else { |
| 263 | | NSLog(@"cocoaControlDOServer: guestWindowLevel: failed"); |
| 264 | | return FALSE; |
| 265 | | } |
| | 254 | // NSLog(@"cocoaControlDOServer: guestWindowLevel: %@", guest); |
| | 255 | |
| | 256 | id obj = [guests objectForKey:guest]; |
| | 257 | if (obj != nil) { |
| | 258 | // NSLog(@"OK"); |
| | 259 | return [obj guestWindowLevel]; |
| | 260 | } else { |
| | 261 | NSLog(@"cocoaControlDOServer: guestWindowLevel: failed"); |
| | 262 | return FALSE; |
| | 263 | } |
| 270 | | // NSLog(@"cocoaControlDOServer: guestWindowNumber: %@", guest); |
| 271 | | |
| 272 | | id obj = [guests objectForKey:guest]; |
| 273 | | if (obj != nil) { |
| 274 | | // NSLog(@"OK"); |
| 275 | | return [obj guestWindowNumber]; |
| 276 | | } else { |
| 277 | | NSLog(@"cocoaControlDOServer: guestWindowNumber: failed"); |
| 278 | | return FALSE; |
| 279 | | } |
| | 268 | // NSLog(@"cocoaControlDOServer: guestWindowNumber: %@", guest); |
| | 269 | |
| | 270 | id obj = [guests objectForKey:guest]; |
| | 271 | if (obj != nil) { |
| | 272 | // NSLog(@"OK"); |
| | 273 | return [obj guestWindowNumber]; |
| | 274 | } else { |
| | 275 | // NSLog(@"cocoaControlDOServer: guestWindowNumber: failed"); |
| | 276 | return FALSE; |
| | 277 | } |
| 284 | | // NSLog(@"cocoaControlDOServer: bringToFront: %@", guest); |
| 285 | | |
| 286 | | id obj = [guests objectForKey:guest]; |
| 287 | | if (obj != nil) { |
| 288 | | // NSLog(@"OK"); |
| 289 | | return [obj guestOrderFrontRegardless]; |
| 290 | | } else { |
| 291 | | NSLog(@"cocoaControlDOServer: guestOrderFrontRegardless"); |
| 292 | | return FALSE; |
| 293 | | } |
| | 282 | // NSLog(@"cocoaControlDOServer: bringToFront: %@", guest); |
| | 283 | |
| | 284 | id obj = [guests objectForKey:guest]; |
| | 285 | if (obj != nil) { |
| | 286 | // NSLog(@"OK"); |
| | 287 | return [obj guestOrderFrontRegardless]; |
| | 288 | } else { |
| | 289 | NSLog(@"cocoaControlDOServer: guestOrderFrontRegardless"); |
| | 290 | return FALSE; |
| | 291 | } |
| 298 | | // NSLog(@"cocoaControlDOServer: guestOrderWindow: %@", guest); |
| 299 | | |
| 300 | | id obj = [guests objectForKey:guest]; |
| 301 | | if (obj != nil) { |
| 302 | | // NSLog(@"OK"); |
| 303 | | return [obj guestOrderWindow:place relativeTo:otherWindowNumber]; |
| 304 | | } else { |
| 305 | | NSLog(@"cocoaControlDOServer: guestOrderWindow: failed"); |
| 306 | | return FALSE; |
| 307 | | } |
| | 296 | // NSLog(@"cocoaControlDOServer: guestOrderWindow: %@", guest); |
| | 297 | |
| | 298 | id obj = [guests objectForKey:guest]; |
| | 299 | if (obj != nil) { |
| | 300 | // NSLog(@"OK"); |
| | 301 | return [obj guestOrderWindow:place relativeTo:otherWindowNumber]; |
| | 302 | } else { |
| | 303 | NSLog(@"cocoaControlDOServer: guestOrderWindow: failed"); |
| | 304 | return FALSE; |
| | 305 | } |
| 326 | | // NSLog(@"cocoaControlDOServer: show: %@", guest); |
| 327 | | |
| 328 | | id obj = [guests objectForKey:guest]; |
| 329 | | if (obj != nil) { |
| 330 | | // NSLog(@"OK"); |
| 331 | | return [obj guestUnhide]; |
| 332 | | } else { |
| 333 | | NSLog(@"cocoaControlDOServer: cocoaControlDOServer: failed"); |
| 334 | | return FALSE; |
| 335 | | } |
| | 324 | // NSLog(@"cocoaControlDOServer: show: %@", guest); |
| | 325 | |
| | 326 | id obj = [guests objectForKey:guest]; |
| | 327 | if (obj != nil) { |
| | 328 | // NSLog(@"OK"); |
| | 329 | return [obj guestUnhide]; |
| | 330 | } else { |
| | 331 | NSLog(@"cocoaControlDOServer: cocoaControlDOServer: failed"); |
| | 332 | return FALSE; |
| | 333 | } |