From e3f9867e86dc37ee02944e8c5fc64ff222fa2f06 Mon Sep 17 00:00:00 2001 From: Ben Byer Date: Fri, 26 Oct 2007 15:40:35 -0700 Subject: [PATCH] added missing file from Apple version of 7.2 --- .../apple/English.lproj/Localizable.strings | Bin 0 -> 1094 bytes hw/darwin/apple/Info.plist | 38 +- hw/darwin/apple/X11.xcodeproj/project.pbxproj | 48 +- hw/darwin/apple/X11Application.h | 3 +- hw/darwin/apple/X11Application.m | 1217 ++++++++++------- hw/darwin/apple/X11Controller.h | 1 + hw/darwin/apple/X11Controller.m | 12 +- hw/darwin/apple/bundle-main.c | 27 +- .../bundle/Dutch.lproj/Localizable.strings | Bin 1426 -> 1422 bytes hw/darwin/bundle/Dutch.lproj/Makefile.am | 10 +- .../bundle/English.lproj/Localizable.strings | Bin 711 -> 1424 bytes hw/darwin/bundle/English.lproj/Makefile.am | 8 +- hw/darwin/bundle/French.lproj/Makefile.am | 7 +- hw/darwin/bundle/German.lproj/Makefile.am | 9 +- hw/darwin/bundle/Info.plist | 4 +- hw/darwin/bundle/Japanese.lproj/Makefile.am | 7 +- hw/darwin/bundle/Portuguese.lproj/Makefile.am | 7 +- hw/darwin/bundle/Spanish.lproj/Makefile.am | 7 +- hw/darwin/bundle/Swedish.lproj/Makefile.am | 7 +- hw/darwin/bundle/ko.lproj/Makefile.am | 7 +- hw/darwin/iokit/Makefile.am | 2 +- hw/darwin/launcher/Info.plist | 30 + hw/darwin/launcher/X11.icns | Bin 0 -> 65908 bytes .../launcher/X11.xcodeproj/project.pbxproj | 297 ++++ hw/darwin/launcher/bundle-main.c | 79 ++ hw/darwin/quartz/Makefile.am | 7 +- hw/darwin/quartz/cr/Makefile.am | 21 + hw/darwin/quartz/fullscreen/Makefile.am | 9 + hw/darwin/quartz/xpr/Makefile.am | 30 + hw/darwin/quartz/xpr/appledri.h | 1 + hw/darwin/quartz/xpr/appledristr.h | 1 + hw/darwin/utils/Makefile.am | 5 +- hw/darwin/utils/event_status_driver.h | 133 ++ 33 files changed, 1431 insertions(+), 603 deletions(-) create mode 100644 hw/darwin/apple/English.lproj/Localizable.strings create mode 100644 hw/darwin/launcher/Info.plist create mode 100644 hw/darwin/launcher/X11.icns create mode 100644 hw/darwin/launcher/X11.xcodeproj/project.pbxproj create mode 100644 hw/darwin/launcher/bundle-main.c create mode 100644 hw/darwin/quartz/cr/Makefile.am create mode 100644 hw/darwin/quartz/fullscreen/Makefile.am create mode 100644 hw/darwin/quartz/xpr/Makefile.am create mode 100644 hw/darwin/utils/event_status_driver.h diff --git a/hw/darwin/apple/English.lproj/Localizable.strings b/hw/darwin/apple/English.lproj/Localizable.strings new file mode 100644 index 0000000000000000000000000000000000000000..c83b085365171a36c82d1c426108afa9ecb7e09a GIT binary patch literal 1094 zcmeH{KTpFj5XIlzPhl}usE8RMgkXRHBsKec5d~OW%}uNjLkA_dG8|a-XSfl3Up%^@aVHF%fx04FOQ7;2ecM3 z#>T5dYqUZtm1vf&!fw^9YMJGnVy#ns{Qi+yLC;LDL3194end}CjCG?=NT~&VbUNq! z_w%p%dB%3m(pKNoamR*)G~eAec5FsqCJnQ-nL9nlY1_uvpdPfsXMtth_NzGC0=&&; hwvQgB@*R~6nB2tLT~__K CFBundleDevelopmentRegion English - CFBundleDocumentTypes - - - CFBundleTypeExtensions - - x11app - - CFBundleTypeIconFile - X11.icns - CFBundleTypeName - X11 Application - CFBundleTypeOSTypes - - **** - - CFBundleTypeRole - Viewer - LSIsAppleDefaultForType - - - - CFBundleTypeExtensions - - tool - * - - CFBundleTypeName - UNIX Application - CFBundleTypeOSTypes - - **** - - CFBundleTypeRole - Viewer - - CFBundleExecutable X11 CFBundleGetInfoString @@ -57,7 +21,7 @@ CFBundleShortVersionString 2.0 CFBundleSignature - ???? + x11a CSResourcesFileMapped NSHumanReadableCopyright diff --git a/hw/darwin/apple/X11.xcodeproj/project.pbxproj b/hw/darwin/apple/X11.xcodeproj/project.pbxproj index 2fef99ba0..a47e4d157 100644 --- a/hw/darwin/apple/X11.xcodeproj/project.pbxproj +++ b/hw/darwin/apple/X11.xcodeproj/project.pbxproj @@ -14,6 +14,7 @@ 527F241F0B5D938C007840A7 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 50F4F0A7039D6ACA0E82C0CB /* CoreFoundation.framework */; }; 527F24200B5D938C007840A7 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 570C5748047186C400ACF82F /* SystemConfiguration.framework */; }; 527F24370B5D9D89007840A7 /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 527F24260B5D938C007840A7 /* Info.plist */; }; + 52D9C0ED0BCDDF6B00CD2AFC /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 52D9C0EB0BCDDF6B00CD2AFC /* Localizable.strings */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -24,6 +25,7 @@ 50F4F0A7039D6ACA0E82C0CB /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = ""; }; 527F24260B5D938C007840A7 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = Info.plist; sourceTree = ""; }; 527F24270B5D938C007840A7 /* X11.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = X11.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 52D9C0EC0BCDDF6B00CD2AFC /* English */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/Localizable.strings; sourceTree = ""; }; 570C5748047186C400ACF82F /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = /System/Library/Frameworks/SystemConfiguration.framework; sourceTree = ""; }; /* End PBXFileReference section */ @@ -71,6 +73,7 @@ 20286C2CFDCF999611CA2CEA /* Resources */ = { isa = PBXGroup; children = ( + 52D9C0EB0BCDDF6B00CD2AFC /* Localizable.strings */, 50459C5F038587C60ECA21EC /* X11.icns */, 0867D6AAFE840B52C02AAC07 /* InfoPlist.strings */, 02345980000FD03B11CA0E72 /* main.nib */, @@ -146,6 +149,7 @@ 527F24190B5D938C007840A7 /* InfoPlist.strings in Resources */, 527F241A0B5D938C007840A7 /* main.nib in Resources */, 527F241B0B5D938C007840A7 /* X11.icns in Resources */, + 52D9C0ED0BCDDF6B00CD2AFC /* Localizable.strings in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -189,6 +193,14 @@ name = InfoPlist.strings; sourceTree = ""; }; + 52D9C0EB0BCDDF6B00CD2AFC /* Localizable.strings */ = { + isa = PBXVariantGroup; + children = ( + 52D9C0EC0BCDDF6B00CD2AFC /* English */, + ); + name = Localizable.strings; + sourceTree = ""; + }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ @@ -224,12 +236,16 @@ DSTROOT = "$(DSTROOT)"; FRAMEWORK_SEARCH_PATHS = ""; GCC_SYMBOLS_PRIVATE_EXTERN = NO; - HEADER_SEARCH_PATHS = ""; + HEADER_SEARCH_PATHS = /usr/X11/include; INFOPLIST_FILE = Info.plist; INSTALL_PATH = $DSTROOT/Applications/Utilties; - LIBRARY_SEARCH_PATHS = ""; - OTHER_CFLAGS = "$(CFLAGS)"; - OTHER_LDFLAGS = "$(LDFLAGS)"; + LIBRARY_SEARCH_PATHS = /usr/X11/lib; + OTHER_CFLAGS = ""; + OTHER_LDFLAGS = ( + "-lXau", + "-lxcb", + "-lX11", + ); OTHER_REZFLAGS = ""; PRODUCT_NAME = X11; SECTORDER_FLAGS = ""; @@ -249,12 +265,16 @@ DSTROOT = "$(DSTROOT)"; FRAMEWORK_SEARCH_PATHS = ""; GCC_SYMBOLS_PRIVATE_EXTERN = NO; - HEADER_SEARCH_PATHS = ""; + HEADER_SEARCH_PATHS = /usr/X11/include; INFOPLIST_FILE = Info.plist; INSTALL_PATH = $DSTROOT/Applications/Utilties; - LIBRARY_SEARCH_PATHS = ""; - OTHER_CFLAGS = "$(CFLAGS)"; - OTHER_LDFLAGS = "$(LDFLAGS)"; + LIBRARY_SEARCH_PATHS = /usr/X11/lib; + OTHER_CFLAGS = ""; + OTHER_LDFLAGS = ( + "-lXau", + "-lxcb", + "-lX11", + ); OTHER_REZFLAGS = ""; PRODUCT_NAME = X11; SECTORDER_FLAGS = ""; @@ -273,12 +293,16 @@ DSTROOT = "$(DSTROOT)"; FRAMEWORK_SEARCH_PATHS = ""; GCC_SYMBOLS_PRIVATE_EXTERN = NO; - HEADER_SEARCH_PATHS = ""; + HEADER_SEARCH_PATHS = /usr/X11/include; INFOPLIST_FILE = Info.plist; INSTALL_PATH = $DSTROOT/Applications/Utilties; - LIBRARY_SEARCH_PATHS = ""; - OTHER_CFLAGS = "$(CFLAGS)"; - OTHER_LDFLAGS = "$(LDFLAGS)"; + LIBRARY_SEARCH_PATHS = /usr/X11/lib; + OTHER_CFLAGS = ""; + OTHER_LDFLAGS = ( + "-lXau", + "-lxcb", + "-lX11", + ); OTHER_REZFLAGS = ""; PRODUCT_NAME = X11; SECTORDER_FLAGS = ""; diff --git a/hw/darwin/apple/X11Application.h b/hw/darwin/apple/X11Application.h index 6b1d72643..fb153e750 100644 --- a/hw/darwin/apple/X11Application.h +++ b/hw/darwin/apple/X11Application.h @@ -1,4 +1,5 @@ /* X11Application.h -- subclass of NSApplication to multiplex events + $Id: X11Application.h,v 1.26 2003/08/08 19:16:13 jharper Exp $ Copyright (c) 2002-2007 Apple Inc. All rights reserved. @@ -79,7 +80,7 @@ extern void X11ApplicationMain (int argc, const char *argv[], extern int X11EnableKeyEquivalents; extern int quartzHasRoot, quartzEnableRootless; -#define APP_PREFS "com.apple.x11" +#define APP_PREFS "org.x.X11" #define PREFS_APPSMENU "apps_menu" #define PREFS_FAKEBUTTONS "enable_fake_buttons" diff --git a/hw/darwin/apple/X11Application.m b/hw/darwin/apple/X11Application.m index 57795f452..9ae470e46 100644 --- a/hw/darwin/apple/X11Application.m +++ b/hw/darwin/apple/X11Application.m @@ -1,6 +1,6 @@ /* X11Application.m -- subclass of NSApplication to multiplex events - Copyright (c) 2002-2007 Apple Inc. + Copyright (c) 2002-2007 Apple Inc. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files @@ -34,10 +34,12 @@ /* ouch! */ #define BOOL X_BOOL +//# include "Xproto.h" # include "darwin.h" # include "../quartz/quartz.h" # define _APPLEWM_SERVER_ # include "X11/extensions/applewm.h" +//# include "X.h" # include "micmap.h" #undef BOOL @@ -47,20 +49,18 @@ #include #include -#define DEFAULTS_FILE "/etc/X11/xserver/Xquartz.plist" +#define DEFAULTS_FILE "/usr/X11/lib/X11/xserver/Xquartz.plist" int X11EnableKeyEquivalents = TRUE; int quartzHasRoot = FALSE, quartzEnableRootless = TRUE; -extern int darwinFakeButtons, input_check_flag; -// extern Bool enable_stereo; -Bool enable_stereo; //<-- this needs to go back to being an extern once glxCGL is fixed - -extern xEvent *darwinEvents; +extern int darwinFakeButtons; +extern Bool enable_stereo; X11Application *X11App; -#define ALL_KEY_MASKS (NSShiftKeyMask | NSControlKeyMask | NSAlternateKeyMask | NSCommandKeyMask) +#define ALL_KEY_MASKS (NSShiftKeyMask | NSControlKeyMask \ +| NSAlternateKeyMask | NSCommandKeyMask) @implementation X11Application @@ -79,21 +79,27 @@ static void send_nsevent (NSEventType type, NSEvent *e); but is statically linked into this X server. */ extern Bool QuartzModeBundleInit(void); -static void init_ports (void) { +static void +init_ports (void) +{ kern_return_t r; NSPort *p; - if (_port != MACH_PORT_NULL) return; + if (_port != MACH_PORT_NULL) + return; r = mach_port_allocate (mach_task_self (), MACH_PORT_RIGHT_RECEIVE, &_port); - if (r != KERN_SUCCESS) return; + if (r != KERN_SUCCESS) + return; p = [NSMachPort portWithMachPort:_port]; [p setDelegate:NSApp]; [p scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; } -static void message_kit_thread (SEL selector, NSObject *arg) { +static void +message_kit_thread (SEL selector, NSObject *arg) +{ message msg; kern_return_t r; @@ -108,24 +114,29 @@ static void message_kit_thread (SEL selector, NSObject *arg) { msg.arg = [arg retain]; r = mach_msg (&msg.hdr, MACH_SEND_MSG, msg.hdr.msgh_size, - 0, MACH_PORT_NULL, 0, MACH_PORT_NULL); + 0, MACH_PORT_NULL, 0, MACH_PORT_NULL); if (r != KERN_SUCCESS) - ErrorF("%s: mach_msg failed: %x\n", __FUNCTION__, r); + fprintf (stderr, "%s: mach_msg failed: %x\n", __FUNCTION__, r); } -- (void) handleMachMessage:(void *)_msg { +- (void) handleMachMessage:(void *)_msg +{ message *msg = _msg; [self performSelector:msg->selector withObject:msg->arg]; [msg->arg release]; } -- (void) set_controller:obj { - if (_controller == nil) _controller = [obj retain]; +- (void) set_controller:obj +{ + if (_controller == nil) + _controller = [obj retain]; } -- (void) dealloc { - if (_controller != nil) [_controller release]; +- (void) dealloc +{ + if (_controller != nil) + [_controller release]; if (_port != MACH_PORT_NULL) mach_port_deallocate (mach_task_self (), _port); @@ -133,7 +144,8 @@ static void message_kit_thread (SEL selector, NSObject *arg) { [super dealloc]; } -- (void) orderFrontStandardAboutPanel: (id) sender { +- (void) orderFrontStandardAboutPanel: (id) sender +{ NSMutableDictionary *dict; NSDictionary *infoDict; NSString *tem; @@ -146,45 +158,57 @@ static void message_kit_thread (SEL selector, NSObject *arg) { tem = [infoDict objectForKey:@"CFBundleShortVersionString"]; - [dict setObject:[NSString stringWithFormat:@"X11.app %@ - X.org X11R7.3", tem] - forKey:@"ApplicationVersion"]; + [dict setObject:[NSString stringWithFormat:@"X11.app %@ - X.org X11R7.2", + tem] forKey:@"ApplicationVersion"]; [self orderFrontStandardAboutPanelWithOptions: dict]; } -- (void) activateX:(BOOL)state { +- (void) activateX:(BOOL)state +{ /* Create a TSM document that supports full Unicode input, and have it activated while X is active (unless using the old keymapping files) */ static TSMDocumentID x11_document; - if (state) { - QuartzMessageServerThread (kXDarwinActivate, 0); - - if (!_x_active) { - if (x11_document == 0 && darwinKeymapFile == NULL) { - OSType types[1]; - types[0] = kUnicodeDocument; - NewTSMDocument (1, types, &x11_document, 0); - } - - if (x11_document != 0) ActivateTSMDocument (x11_document); - } - } else { - QuartzMessageServerThread (kXDarwinDeactivate, 0); - - if (_x_active && x11_document != 0) - DeactivateTSMDocument (x11_document); + if (state) + { + QuartzMessageServerThread (kXDarwinActivate, 0); + + if (!_x_active) + { + if (x11_document == 0 && darwinKeymapFile == NULL) + { + OSType types[1]; + types[0] = kUnicodeDocument; + NewTSMDocument (1, types, &x11_document, 0); + } + + if (x11_document != 0) + ActivateTSMDocument (x11_document); + } } - + else + { + QuartzMessageServerThread (kXDarwinDeactivate, 0); + + if (_x_active) + { + if (x11_document != 0) + DeactivateTSMDocument (x11_document); + } + } + _x_active = state; } -- (void) became_key:(NSWindow *)win { +- (void) became_key:(NSWindow *)win +{ [self activateX:NO]; } -- (void) sendEvent:(NSEvent *)e { +- (void) sendEvent:(NSEvent *)e +{ NSEventType type; BOOL for_appkit, for_x; @@ -194,140 +218,172 @@ static void message_kit_thread (SEL selector, NSObject *arg) { for_appkit = YES; for_x = YES; - switch (type) { + switch (type) + { case NSLeftMouseDown: case NSRightMouseDown: case NSOtherMouseDown: case NSLeftMouseUp: case NSRightMouseUp: case NSOtherMouseUp: - if ([e window] != nil) { - /* Pointer event has a window. Probably something for the kit. */ - - for_x = NO; - - if (_x_active) [self activateX:NO]; - } else if ([self modalWindow] == nil) { - /* Must be an X window. Tell appkit it doesn't have focus. */ + if ([e window] != nil) + { + /* Pointer event has a window. Probably something for the kit. */ - for_appkit = NO; - - if ([self isActive]) { - [self deactivate]; - - if (!_x_active && quartzProcs->IsX11Window([e window], [e windowNumber])) - [self activateX:YES]; - } - } - break; - + for_x = NO; + + if (_x_active) + [self activateX:NO]; + } + else if ([self modalWindow] == nil) + { + /* Must be an X window. Tell appkit it doesn't have focus. */ + + for_appkit = NO; + + if ([self isActive]) + { + [self deactivate]; + + if (!_x_active && quartzProcs->IsX11Window([e window], + [e windowNumber])) + [self activateX:YES]; + } + } + break; + case NSKeyDown: case NSKeyUp: - if (_x_active) { - static int swallow_up; - - /* No kit window is focused, so send it to X. */ - - for_appkit = NO; - - if (type == NSKeyDown) { - /* Before that though, see if there are any global - shortcuts bound to it. */ - - if (X11EnableKeyEquivalents - && [[self mainMenu] performKeyEquivalent:e]) { - swallow_up = [e keyCode]; - for_x = NO; - } else if (!quartzEnableRootless - && ([e modifierFlags] & ALL_KEY_MASKS) - == (NSCommandKeyMask | NSAlternateKeyMask) - && ([e keyCode] == 0 /*a*/ - || [e keyCode] == 53 /*Esc*/)) { - swallow_up = 0; - for_x = NO; + if (_x_active) + { + static int swallow_up; + + /* No kit window is focused, so send it to X. */ + + for_appkit = NO; + + if (type == NSKeyDown) + { + /* Before that though, see if there are any global + shortcuts bound to it. */ + + if (X11EnableKeyEquivalents + && [[self mainMenu] performKeyEquivalent:e]) + { + swallow_up = [e keyCode]; + for_x = NO; + } + else if (!quartzEnableRootless + && ([e modifierFlags] & ALL_KEY_MASKS) + == (NSCommandKeyMask | NSAlternateKeyMask) + && ([e keyCode] == 0 /*a*/ + || [e keyCode] == 53 /*Esc*/)) + { + swallow_up = 0; + for_x = NO; #ifdef DARWIN_DDX_MISSING - QuartzMessageServerThread (kXDarwinToggleFullscreen, 0); + QuartzMessageServerThread (kXDarwinToggleFullscreen, 0); #endif - } - } else { - /* If we saw a key equivalent on the down, don't pass - the up through to X. */ - - if (swallow_up != 0 && [e keyCode] == swallow_up) { - swallow_up = 0; - for_x = NO; - } - } - } - else for_x = NO; - break; + } + } + else + { + /* If we saw a key equivalent on the down, don't pass + the up through to X. */ + + if (swallow_up != 0 && [e keyCode] == swallow_up) + { + swallow_up = 0; + for_x = NO; + } + } + } + else + { + for_x = NO; + } + break; case NSFlagsChanged: - /* For the l33t X users who remap modifier keys to normal keysyms. */ - if (!_x_active) - for_x = NO; - break; + /* For the l33t X users who remap modifier keys to normal keysyms. */ + if (!_x_active) + for_x = NO; + break; case NSAppKitDefined: - switch ([e subtype]) { - case NSApplicationActivatedEventType: - for_x = NO; - if ([self modalWindow] == nil) { - for_appkit = NO; - - /* FIXME: hack to avoid having to pass the event to appkit, - which would cause it to raise one of its windows. */ - _appFlags._active = YES; - - [self activateX:YES]; -#ifdef DARWIN_DDX_MISSING - if ([e data2] & 0x10) QuartzMessageServerThread (kXDarwinBringAllToFront, 0); -#endif - } - break; + switch ([e subtype]) + { + case NSApplicationActivatedEventType: + for_x = NO; + if ([self modalWindow] == nil) + { + for_appkit = NO; + + /* FIXME: hack to avoid having to pass the event to appkit, + which would cause it to raise one of its windows. */ + _appFlags._active = YES; + + [self activateX:YES]; + if ([e data2] & 0x10) X11ApplicationSetFrontProcess(); + } + break; - case 18: /* ApplicationDidReactivate */ - if (quartzHasRoot) for_appkit = NO; - break; + case 18: /* ApplicationDidReactivate */ + if (quartzHasRoot) + for_appkit = NO; + break; - case NSApplicationDeactivatedEventType: - for_x = NO; - [self activateX:NO]; - break; - } - break; - + case NSApplicationDeactivatedEventType: + for_x = NO; + [self activateX:NO]; + break; + } + break; + default: break; /* for gcc */ } - if (for_appkit) [super sendEvent:e]; - if (for_x) send_nsevent (type, e); + if (for_appkit) + [super sendEvent:e]; + + if (for_x) + send_nsevent (type, e); } -- (void) set_window_menu:(NSArray *)list { +- (void) set_window_menu:(NSArray *)list +{ [_controller set_window_menu:list]; } -- (void) set_window_menu_check:(NSNumber *)n { +- (void) set_window_menu_check:(NSNumber *)n +{ [_controller set_window_menu_check:n]; } -- (void) set_apps_menu:(NSArray *)list { +- (void) set_apps_menu:(NSArray *)list +{ [_controller set_apps_menu:list]; } -- (void) set_front_process:unused { +- (void) set_front_process:unused +{ [NSApp activateIgnoringOtherApps:YES]; - if ([self modalWindow] == nil) [self activateX:YES]; + if ([self modalWindow] == nil) + [self activateX:YES]; } -- (void) set_can_quit:(NSNumber *)state { +- (void) set_can_quit:(NSNumber *)state +{ [_controller set_can_quit:[state boolValue]]; } -- (void) server_ready:unused { +- (void) server_ready:unused +{ [_controller server_ready]; } -- (void) show_hide_menubar:(NSNumber *)state { - if ([state boolValue]) ShowMenuBar (); - else HideMenuBar (); +- (void) show_hide_menubar:(NSNumber *)state +{ + if ([state boolValue]) + ShowMenuBar (); + else + HideMenuBar (); } @@ -344,7 +400,9 @@ static void cfrelease (CFAllocatorRef a, const void *b) { CFRelease (b); } -static CFMutableArrayRef nsarray_to_cfarray (NSArray *in) { +static CFMutableArrayRef +nsarray_to_cfarray (NSArray *in) +{ CFMutableArrayRef out; CFArrayCallBacks cb; NSObject *ns; @@ -359,22 +417,24 @@ static CFMutableArrayRef nsarray_to_cfarray (NSArray *in) { count = [in count]; out = CFArrayCreateMutable (NULL, count, &cb); - for (i = 0; i < count; i++) { - ns = [in objectAtIndex:i]; - - if ([ns isKindOfClass:[NSArray class]]) - cf = (CFTypeRef) nsarray_to_cfarray ((NSArray *) ns); - else - cf = CFRetain ((CFTypeRef) ns); - - CFArrayAppendValue (out, cf); - CFRelease (cf); + for (i = 0; i < count; i++) + { + ns = [in objectAtIndex:i]; + + if ([ns isKindOfClass:[NSArray class]]) + cf = (CFTypeRef) nsarray_to_cfarray ((NSArray *) ns); + else + cf = CFRetain ((CFTypeRef) ns); + + CFArrayAppendValue (out, cf); + CFRelease (cf); } - + return out; } - -static NSMutableArray * cfarray_to_nsarray (CFArrayRef in) { +static NSMutableArray * +cfarray_to_nsarray (CFArrayRef in) +{ NSMutableArray *out; const CFTypeRef *cf; NSObject *ns; @@ -383,277 +443,320 @@ static NSMutableArray * cfarray_to_nsarray (CFArrayRef in) { count = CFArrayGetCount (in); out = [[NSMutableArray alloc] initWithCapacity:count]; - for (i = 0; i < count; i++) { - cf = CFArrayGetValueAtIndex (in, i); + for (i = 0; i < count; i++) + { + cf = CFArrayGetValueAtIndex (in, i); - if (CFGetTypeID (cf) == CFArrayGetTypeID ()) - ns = cfarray_to_nsarray ((CFArrayRef) cf); - else - ns = [(id)cf retain]; - - [out addObject:ns]; - [ns release]; + if (CFGetTypeID (cf) == CFArrayGetTypeID ()) + ns = cfarray_to_nsarray ((CFArrayRef) cf); + else + ns = [(id)cf retain]; + + [out addObject:ns]; + [ns release]; } - + return out; } -- (CFPropertyListRef) prefs_get:(NSString *)key { +- (CFPropertyListRef) prefs_get:(NSString *)key +{ CFPropertyListRef value; value = CFPreferencesCopyAppValue ((CFStringRef) key, CFSTR (APP_PREFS)); - if (value == NULL) { - static CFDictionaryRef defaults; - - if (defaults == NULL) { - CFStringRef error = NULL; - CFDataRef data; - CFURLRef url; - SInt32 error_code; - - url = (CFURLCreateFromFileSystemRepresentation - (NULL, (unsigned char *)DEFAULTS_FILE, strlen (DEFAULTS_FILE), false)); - if (CFURLCreateDataAndPropertiesFromResource (NULL, url, &data, - NULL, NULL, &error_code)) { - defaults = (CFPropertyListCreateFromXMLData - (NULL, data, kCFPropertyListMutableContainersAndLeaves, &error)); - if (error != NULL) CFRelease (error); - CFRelease (data); - } - CFRelease (url); - - if (defaults != NULL) { - NSMutableArray *apps, *elt; - int count, i; - NSString *name, *nname; - - /* Localize the names in the default apps menu. */ - - apps = [(NSDictionary *)defaults objectForKey:@PREFS_APPSMENU]; - if (apps != nil) { - count = [apps count]; - for (i = 0; i < count; i++) { - elt = [apps objectAtIndex:i]; - if (elt != nil && [elt isKindOfClass:[NSArray class]]) { - name = [elt objectAtIndex:0]; - if (name != nil) { - nname = NSLocalizedString (name, nil); - if (nname != nil && nname != name) - [elt replaceObjectAtIndex:0 withObject:nname]; - } - } - } - } - } - } + if (value == NULL) + { + static CFDictionaryRef defaults; - if (defaults != NULL) value = CFDictionaryGetValue (defaults, key); - if (value != NULL) CFRetain (value); + if (defaults == NULL) + { + CFStringRef error = NULL; + CFDataRef data; + CFURLRef url; + SInt32 error_code; + + url = (CFURLCreateFromFileSystemRepresentation + (NULL, (unsigned char *)DEFAULTS_FILE, strlen (DEFAULTS_FILE), false)); + if (CFURLCreateDataAndPropertiesFromResource (NULL, url, &data, + NULL, NULL, + &error_code)) + { + defaults = (CFPropertyListCreateFromXMLData + (NULL, data, kCFPropertyListMutableContainersAndLeaves, &error)); + if (error != NULL) + CFRelease (error); + CFRelease (data); + } + CFRelease (url); + + if (defaults != NULL) + { + NSMutableArray *apps, *elt; + int count, i; + NSString *name, *nname; + + /* Localize the names in the default apps menu. */ + + apps = [(NSDictionary *)defaults objectForKey:@PREFS_APPSMENU]; + if (apps != nil) + { + count = [apps count]; + for (i = 0; i < count; i++) + { + elt = [apps objectAtIndex:i]; + if (elt != nil && [elt isKindOfClass:[NSArray class]]) + { + name = [elt objectAtIndex:0]; + if (name != nil) + { + nname = NSLocalizedString (name, nil); + if (nname != nil && nname != name) + [elt replaceObjectAtIndex:0 withObject:nname]; + } + } + } + } + } + } + + if (defaults != NULL) + value = CFDictionaryGetValue (defaults, key); + + if (value != NULL) + CFRetain (value); } return value; } -- (int) prefs_get_integer:(NSString *)key default:(int)def { - CFPropertyListRef value; - int ret; - - value = [self prefs_get:key]; - - if (value != NULL && CFGetTypeID (value) == CFNumberGetTypeID ()) - CFNumberGetValue (value, kCFNumberIntType, &ret); - else if (value != NULL && CFGetTypeID (value) == CFStringGetTypeID ()) - ret = CFStringGetIntValue (value); - else - ret = def; - - if (value != NULL) CFRelease (value); - - return ret; -} - -- (const char *) prefs_get_string:(NSString *)key default:(const char *)def { - CFPropertyListRef value; - const char *ret = NULL; - - value = [self prefs_get:key]; - - if (value != NULL && CFGetTypeID (value) == CFStringGetTypeID ()) { - NSString *s = (NSString *) value; - - ret = [s UTF8String]; - } - - if (value != NULL) CFRelease (value); - - return ret != NULL ? ret : def; -} - -- (float) prefs_get_float:(NSString *)key default:(float)def { - CFPropertyListRef value; - float ret = def; - - value = [self prefs_get:key]; - - if (value != NULL - && CFGetTypeID (value) == CFNumberGetTypeID () - && CFNumberIsFloatType (value)) - CFNumberGetValue (value, kCFNumberFloatType, &ret); - else if (value != NULL && CFGetTypeID (value) == CFStringGetTypeID ()) - ret = CFStringGetDoubleValue (value); +- (int) prefs_get_integer:(NSString *)key default:(int)def +{ + CFPropertyListRef value; + int ret; - if (value != NULL) CFRelease (value); - - return ret; + value = [self prefs_get:key]; + + if (value != NULL && CFGetTypeID (value) == CFNumberGetTypeID ()) + CFNumberGetValue (value, kCFNumberIntType, &ret); + else if (value != NULL && CFGetTypeID (value) == CFStringGetTypeID ()) + ret = CFStringGetIntValue (value); + else + ret = def; + + if (value != NULL) + CFRelease (value); + + return ret; } -- (int) prefs_get_boolean:(NSString *)key default:(int)def { - CFPropertyListRef value; - int ret = def; - - value = [self prefs_get:key]; - - if (value != NULL) { - if (CFGetTypeID (value) == CFNumberGetTypeID ()) - CFNumberGetValue (value, kCFNumberIntType, &ret); - else if (CFGetTypeID (value) == CFBooleanGetTypeID ()) - ret = CFBooleanGetValue (value); - else if (CFGetTypeID (value) == CFStringGetTypeID ()) { - const char *tem = [(NSString *) value lossyCString]; - if (strcasecmp (tem, "true") == 0 || strcasecmp (tem, "yes") == 0) - ret = YES; - else - ret = NO; +- (const char *) prefs_get_string:(NSString *)key default:(const char *)def +{ + CFPropertyListRef value; + const char *ret = NULL; + + value = [self prefs_get:key]; + + if (value != NULL && CFGetTypeID (value) == CFStringGetTypeID ()) + { + NSString *s = (NSString *) value; + + ret = [s UTF8String]; } - - CFRelease (value); - } - return ret; + + if (value != NULL) + CFRelease (value); + + return ret != NULL ? ret : def; } -- (NSArray *) prefs_get_array:(NSString *)key { - NSArray *ret = nil; - CFPropertyListRef value; - - value = [self prefs_get:key]; - - if (value != NULL) { - if (CFGetTypeID (value) == CFArrayGetTypeID ()) - ret = [cfarray_to_nsarray (value) autorelease]; - - CFRelease (value); - } - - return ret; +- (float) prefs_get_float:(NSString *)key default:(float)def +{ + CFPropertyListRef value; + float ret = def; + + value = [self prefs_get:key]; + + if (value != NULL + && CFGetTypeID (value) == CFNumberGetTypeID () + && CFNumberIsFloatType (value)) + { + CFNumberGetValue (value, kCFNumberFloatType, &ret); + } + else if (value != NULL && CFGetTypeID (value) == CFStringGetTypeID ()) + { + ret = CFStringGetDoubleValue (value); + } + + if (value != NULL) + CFRelease (value); + + return ret; } -- (void) prefs_set_integer:(NSString *)key value:(int)value { +- (int) prefs_get_boolean:(NSString *)key default:(int)def +{ + CFPropertyListRef value; + int ret = def; + + value = [self prefs_get:key]; + + if (value != NULL) + { + if (CFGetTypeID (value) == CFNumberGetTypeID ()) + CFNumberGetValue (value, kCFNumberIntType, &ret); + else if (CFGetTypeID (value) == CFBooleanGetTypeID ()) + ret = CFBooleanGetValue (value); + else if (CFGetTypeID (value) == CFStringGetTypeID ()) + { + const char *tem = [(NSString *) value lossyCString]; + if (strcasecmp (tem, "true") == 0 || strcasecmp (tem, "yes") == 0) + ret = YES; + else + ret = NO; + } + + CFRelease (value); + } + + return ret; +} + +- (NSArray *) prefs_get_array:(NSString *)key +{ + NSArray *ret = nil; + CFPropertyListRef value; + + value = [self prefs_get:key]; + + if (value != NULL) + { + if (CFGetTypeID (value) == CFArrayGetTypeID ()) + ret = [cfarray_to_nsarray (value) autorelease]; + + CFRelease (value); + } + + return ret; +} + +- (void) prefs_set_integer:(NSString *)key value:(int)value +{ CFNumberRef x; x = CFNumberCreate (NULL, kCFNumberIntType, &value); CFPreferencesSetValue ((CFStringRef) key, (CFTypeRef) x, CFSTR (APP_PREFS), - kCFPreferencesCurrentUser, kCFPreferencesAnyHost); + kCFPreferencesCurrentUser, kCFPreferencesAnyHost); CFRelease (x); } -- (void) prefs_set_float:(NSString *)key value:(float)value { +- (void) prefs_set_float:(NSString *)key value:(float)value +{ CFNumberRef x; x = CFNumberCreate (NULL, kCFNumberFloatType, &value); CFPreferencesSetValue ((CFStringRef) key, (CFTypeRef) x, CFSTR (APP_PREFS), - kCFPreferencesCurrentUser, kCFPreferencesAnyHost); + kCFPreferencesCurrentUser, kCFPreferencesAnyHost); CFRelease (x); } -- (void) prefs_set_boolean:(NSString *)key value:(int)value { - CFPreferencesSetValue ((CFStringRef) key, - (CFTypeRef) value ? kCFBooleanTrue - : kCFBooleanFalse, CFSTR (APP_PREFS), - kCFPreferencesCurrentUser, kCFPreferencesAnyHost); - +- (void) prefs_set_boolean:(NSString *)key value:(int)value +{ + CFPreferencesSetValue ((CFStringRef) key, + (CFTypeRef) value ? kCFBooleanTrue + : kCFBooleanFalse, CFSTR (APP_PREFS), + kCFPreferencesCurrentUser, kCFPreferencesAnyHost); + } -- (void) prefs_set_array:(NSString *)key value:(NSArray *)value { - CFArrayRef cfarray; - - cfarray = nsarray_to_cfarray (value); - CFPreferencesSetValue ((CFStringRef) key, - (CFTypeRef) cfarray, - CFSTR (APP_PREFS), - kCFPreferencesCurrentUser, kCFPreferencesAnyHost); - CFRelease (cfarray); +- (void) prefs_set_array:(NSString *)key value:(NSArray *)value +{ + CFArrayRef cfarray; + + cfarray = nsarray_to_cfarray (value); + CFPreferencesSetValue ((CFStringRef) key, + (CFTypeRef) cfarray, + CFSTR (APP_PREFS), + kCFPreferencesCurrentUser, kCFPreferencesAnyHost); + CFRelease (cfarray); } -- (void) prefs_set_string:(NSString *)key value:(NSString *)value { - CFPreferencesSetValue ((CFStringRef) key, (CFTypeRef) value, - CFSTR (APP_PREFS), kCFPreferencesCurrentUser, - kCFPreferencesAnyHost); +- (void) prefs_set_string:(NSString *)key value:(NSString *)value +{ + CFPreferencesSetValue ((CFStringRef) key, (CFTypeRef) value, + CFSTR (APP_PREFS), kCFPreferencesCurrentUser, + kCFPreferencesAnyHost); } -- (void) prefs_synchronize { +- (void) prefs_synchronize +{ CFPreferencesAppSynchronize (kCFPreferencesCurrentApplication); } -- (void) read_defaults { - const char *tem; - - quartzUseSysBeep = [self prefs_get_boolean:@PREFS_SYSBEEP - default:quartzUseSysBeep]; - quartzEnableRootless = [self prefs_get_boolean:@PREFS_ROOTLESS - default:quartzEnableRootless]; +- (void) read_defaults +{ + const char *tem; + + quartzUseSysBeep = [self prefs_get_boolean:@PREFS_SYSBEEP + default:quartzUseSysBeep]; + quartzEnableRootless = [self prefs_get_boolean:@PREFS_ROOTLESS + default:quartzEnableRootless]; #ifdef DARWIN_DDX_MISSING - quartzFullscreenDisableHotkeys = ![self prefs_get_boolean: - @PREFS_FULLSCREEN_HOTKEYS default: - !quartzFullscreenDisableHotkeys]; - quartzXpluginOptions = [self prefs_get_integer:@PREFS_XP_OPTIONS - default:quartzXpluginOptions]; + quartzFullscreenDisableHotkeys = ![self prefs_get_boolean: + @PREFS_FULLSCREEN_HOTKEYS default: + !quartzFullscreenDisableHotkeys]; + quartzXpluginOptions = [self prefs_get_integer:@PREFS_XP_OPTIONS + default:quartzXpluginOptions]; #endif - - darwinSwapAltMeta = [self prefs_get_boolean:@PREFS_SWAP_ALT_META - default:darwinSwapAltMeta]; - darwinFakeButtons = [self prefs_get_boolean:@PREFS_FAKEBUTTONS - default:darwinFakeButtons]; - if (darwinFakeButtons) { - const char *fake2, *fake3; - - fake2 = [self prefs_get_string:@PREFS_FAKE_BUTTON2 default:NULL]; - fake3 = [self prefs_get_string:@PREFS_FAKE_BUTTON3 default:NULL]; - - if (fake2 != NULL) darwinFakeMouse2Mask = DarwinParseModifierList(fake2); - if (fake3 != NULL) darwinFakeMouse3Mask = DarwinParseModifierList(fake3); + + darwinSwapAltMeta = [self prefs_get_boolean:@PREFS_SWAP_ALT_META + default:darwinSwapAltMeta]; + darwinFakeButtons = [self prefs_get_boolean:@PREFS_FAKEBUTTONS + default:darwinFakeButtons]; + if (darwinFakeButtons) + { + const char *fake2, *fake3; - } + fake2 = [self prefs_get_string:@PREFS_FAKE_BUTTON2 default:NULL]; + fake3 = [self prefs_get_string:@PREFS_FAKE_BUTTON3 default:NULL]; + + if (fake2 != NULL) darwinFakeMouse2Mask = DarwinParseModifierList(fake2); + if (fake3 != NULL) darwinFakeMouse3Mask = DarwinParseModifierList(fake3); + + } - X11EnableKeyEquivalents = [self prefs_get_boolean:@PREFS_KEYEQUIVS - default:X11EnableKeyEquivalents]; + X11EnableKeyEquivalents = [self prefs_get_boolean:@PREFS_KEYEQUIVS + default:X11EnableKeyEquivalents]; - darwinSyncKeymap = [self prefs_get_boolean:@PREFS_SYNC_KEYMAP - default:darwinSyncKeymap]; + darwinSyncKeymap = [self prefs_get_boolean:@PREFS_SYNC_KEYMAP + default:darwinSyncKeymap]; - tem = [self prefs_get_string:@PREFS_KEYMAP_FILE default:NULL]; - - if (tem != NULL) darwinKeymapFile = strdup (tem); - else darwinKeymapFile = NULL; + tem = [self prefs_get_string:@PREFS_KEYMAP_FILE default:NULL]; + if (tem != NULL) + darwinKeymapFile = strdup (tem); + else + darwinKeymapFile = NULL; - darwinDesiredDepth = [self prefs_get_integer:@PREFS_DEPTH - default:darwinDesiredDepth]; + darwinDesiredDepth = [self prefs_get_integer:@PREFS_DEPTH + default:darwinDesiredDepth]; - enable_stereo = [self prefs_get_boolean:@PREFS_ENABLE_STEREO - default:false]; + enable_stereo = [self prefs_get_boolean:@PREFS_ENABLE_STEREO + default:false]; } /* This will end up at the end of the responder chain. */ -- (void) copy:sender { - QuartzMessageServerThread (kXDarwinPasteboardNotify, 1, - AppleWMCopyToPasteboard); +- (void) copy:sender +{ + QuartzMessageServerThread (kXDarwinPasteboardNotify, 1, + AppleWMCopyToPasteboard); } -- (BOOL) x_active { +- (BOOL) x_active +{ return _x_active; } @@ -661,62 +764,75 @@ static NSMutableArray * cfarray_to_nsarray (CFArrayRef in) { static NSArray * array_with_strings_and_numbers (int nitems, const char **items, - const char *numbers) { - NSMutableArray *array, *subarray; - NSString *string, *number; - int i; + const char *numbers) +{ + NSMutableArray *array, *subarray; + NSString *string; + NSString *number; + int i; - /* (Can't autorelease on the X server thread) */ - - array = [[NSMutableArray alloc] initWithCapacity:nitems]; - - for (i = 0; i < nitems; i++) { - subarray = [[NSMutableArray alloc] initWithCapacity:2]; - - string = [[NSString alloc] initWithUTF8String:items[i]]; - [subarray addObject:string]; - [string release]; - - if (numbers[i] != 0) { - number = [[NSString alloc] initWithFormat:@"%d", numbers[i]]; - [subarray addObject:number]; - [number release]; - } else - [subarray addObject:@""]; - - [array addObject:subarray]; - [subarray release]; - } - - return array; + /* (Can't autorelease on the X server thread) */ + + array = [[NSMutableArray alloc] initWithCapacity:nitems]; + + for (i = 0; i < nitems; i++) + { + subarray = [[NSMutableArray alloc] initWithCapacity:2]; + + string = [[NSString alloc] initWithUTF8String:items[i]]; + [subarray addObject:string]; + [string release]; + + if (numbers[i] != 0) + { + number = [[NSString alloc] initWithFormat:@"%d", numbers[i]]; + [subarray addObject:number]; + [number release]; + } + else + [subarray addObject:@""]; + + [array addObject:subarray]; + [subarray release]; + } + + return array; } -void X11ApplicationSetWindowMenu (int nitems, const char **items, - const char *shortcuts) { - NSArray *array; - array = array_with_strings_and_numbers (nitems, items, shortcuts); - - /* Send the array of strings over to the appkit thread */ - - message_kit_thread (@selector (set_window_menu:), array); - [array release]; +void +X11ApplicationSetWindowMenu (int nitems, const char **items, + const char *shortcuts) +{ + NSArray *array; + array = array_with_strings_and_numbers (nitems, items, shortcuts); + + /* Send the array of strings over to the appkit thread */ + + message_kit_thread (@selector (set_window_menu:), array); + [array release]; } -void X11ApplicationSetWindowMenuCheck (int idx) { - NSNumber *n; - - n = [[NSNumber alloc] initWithInt:idx]; - - message_kit_thread (@selector (set_window_menu_check:), n); - - [n release]; +void +X11ApplicationSetWindowMenuCheck (int idx) +{ + NSNumber *n; + + n = [[NSNumber alloc] initWithInt:idx]; + + message_kit_thread (@selector (set_window_menu_check:), n); + + [n release]; } -void X11ApplicationSetFrontProcess (void) { +void +X11ApplicationSetFrontProcess (void) +{ message_kit_thread (@selector (set_front_process:), nil); } -void X11ApplicationSetCanQuit (int state) { +void +X11ApplicationSetCanQuit (int state) +{ NSNumber *n; n = [[NSNumber alloc] initWithBool:state]; @@ -726,11 +842,15 @@ void X11ApplicationSetCanQuit (int state) { [n release]; } -void X11ApplicationServerReady (void) { +void +X11ApplicationServerReady (void) +{ message_kit_thread (@selector (server_ready:), nil); } -void X11ApplicationShowHideMenubar (int state) { +void +X11ApplicationShowHideMenubar (int state) +{ NSNumber *n; n = [[NSNumber alloc] initWithBool:state]; @@ -740,20 +860,27 @@ void X11ApplicationShowHideMenubar (int state) { [n release]; } -static void * create_thread (void *func, void *arg) { +static void * +create_thread (void *func, void *arg) +{ pthread_attr_t attr; pthread_t tid; pthread_attr_init (&attr); + pthread_attr_setscope (&attr, PTHREAD_SCOPE_SYSTEM); pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED); + pthread_create (&tid, &attr, func, arg); + pthread_attr_destroy (&attr); return (void *) tid; } -static void check_xinitrc (void) { +static void +check_xinitrc (void) +{ char *tem, buf[1024]; NSString *msg; @@ -761,7 +888,8 @@ static void check_xinitrc (void) { return; tem = getenv ("HOME"); - if (tem == NULL) goto done; + if (tem == NULL) + goto done; snprintf (buf, sizeof (buf), "%s/.xinitrc", tem); if (access (buf, F_OK) != 0) @@ -769,43 +897,48 @@ static void check_xinitrc (void) { /* FIXME: put localized strings into Resources/English.lproj */ - msg = NSLocalizedString (@"You have an existing ~/.xinitrc file.\n\n\ -Windows displayed by X11 applications may not have titlebars, or may look \ -different to windows displayed by native applications.\n\n\ -Would you like to move aside the existing file and use the standard X11 \ -environment?", @"Startup xinitrc dialog"); + msg = NSLocalizedString ( + @"You have an existing ~/.xinitrc file.\n\n\ + Windows displayed by X11 applications may not have titlebars, or may look \ + different to windows displayed by native applications.\n\n\ + Would you like to move aside the existing file and use the standard X11 \ + environment?", @"Startup xinitrc dialog"); if (NSRunAlertPanel (nil, msg, NSLocalizedString (@"Yes", @""), - NSLocalizedString (@"No", @""), nil) - == NSAlertDefaultReturn) { - char buf2[1024]; - int i = -1; - - snprintf (buf2, sizeof (buf2), "%s.old", buf); - - for (i = 1; access (buf2, F_OK) == 0; i++) - snprintf (buf2, sizeof (buf2), "%s.old.%d", buf, i); - - rename (buf, buf2); + NSLocalizedString (@"No", @""), nil) + == NSAlertDefaultReturn) + { + char buf2[1024]; + int i = -1; + + snprintf (buf2, sizeof (buf2), "%s.old", buf); + + for (i = 1; access (buf2, F_OK) == 0; i++) + snprintf (buf2, sizeof (buf2), "%s.old.%d", buf, i); + + rename (buf, buf2); } - done: + done: [X11App prefs_set_boolean:@PREFS_DONE_XINIT_CHECK value:YES]; [X11App prefs_synchronize]; } -void X11ApplicationMain (int argc, const char *argv[], - void (*server_thread) (void *), void *server_arg) { +void +X11ApplicationMain (int argc, const char *argv[], + void (*server_thread) (void *), void *server_arg) +{ NSAutoreleasePool *pool; #ifdef DEBUG - while (access ("/tmp/x11-block", F_OK) == 0) sleep (1); + while (access ("/tmp/x11-block", F_OK) == 0) + sleep (1); #endif pool = [[NSAutoreleasePool alloc] init]; X11App = (X11Application *) [X11Application sharedApplication]; - + init_ports (); [NSApp read_defaults]; @@ -813,8 +946,8 @@ void X11ApplicationMain (int argc, const char *argv[], [NSBundle loadNibNamed:@"main" owner:NSApp]; [[NSNotificationCenter defaultCenter] addObserver:NSApp - selector:@selector (became_key:) - name:NSWindowDidBecomeKeyNotification object:nil]; + selector:@selector (became_key:) + name:NSWindowDidBecomeKeyNotification object:nil]; check_xinitrc (); @@ -826,101 +959,173 @@ void X11ApplicationMain (int argc, const char *argv[], /* Calculate the height of the menubar so we can avoid it. */ aquaMenuBarHeight = NSHeight([[NSScreen mainScreen] frame]) - - NSMaxY([[NSScreen mainScreen] visibleFrame]) - 1; + NSMaxY([[NSScreen mainScreen] visibleFrame]) - 1; - if (!create_thread (server_thread, server_arg)) { - ErrorF("can't create secondary thread\n"); - exit(1); + if (!create_thread (server_thread, server_arg)) + { + fprintf (stderr, "can't create secondary thread\n"); + exit (1); } [NSApp run]; + + /* not reached */ } /* event conversion */ static inline unsigned short -convert_flags (unsigned int nsflags) { - unsigned int xflags = 0; +convert_flags (unsigned int nsflags) +{ + unsigned int xflags; if (nsflags == ~0) return 0xffff; + xflags = 0; + if (nsflags & NSAlphaShiftKeyMask) xflags |= LockMask; - if (nsflags & NSShiftKeyMask) xflags |= ShiftMask; - if (nsflags & NSControlKeyMask) xflags |= ControlMask; + if (nsflags & NSShiftKeyMask) xflags |= ShiftMask; + if (nsflags & NSControlKeyMask) xflags |= ControlMask; if (nsflags & NSAlternateKeyMask) xflags |= Mod1Mask; - if (nsflags & NSCommandKeyMask) xflags |= Mod2Mask; + if (nsflags & NSCommandKeyMask) xflags |= Mod2Mask; /* FIXME: secondaryfn? */ return xflags; } - -// This code should probably be merged with that in XDarwin's XServer.m - BB -static void send_nsevent (NSEventType type, NSEvent *e) { - // static unsigned int button_state = 0; +static void +send_nsevent (NSEventType type, NSEvent *e) +{ + static unsigned int button_state = 0; NSRect screen; NSPoint location; NSWindow *window; - int pointer_x, pointer_y, ev_button, ev_type; - // int num_events=0, i=0, state; + int pointer_x, pointer_y; xEvent xe; - /* convert location to global top-left coordinates */ - location = [e locationInWindow]; - window = [e window]; - screen = [[[NSScreen screens] objectAtIndex:0] frame]; - - if (window != nil) { - NSRect frame = [window frame]; - pointer_x = location.x + frame.origin.x; - pointer_y = (((screen.origin.y + screen.size.height) - - location.y) - frame.origin.y); - } else { - pointer_x = location.x; - pointer_y = (screen.origin.y + screen.size.height) - location.y; - } - - pointer_y -= aquaMenuBarHeight; - // state = convert_flags ([e modifierFlags]); - - switch (type) { - case NSLeftMouseDown: ev_button=1; ev_type=ButtonPress; goto handle_mouse; - case NSOtherMouseDown: ev_button=2; ev_type=ButtonPress; goto handle_mouse; - case NSRightMouseDown: ev_button=3; ev_type=ButtonPress; goto handle_mouse; - case NSLeftMouseUp: ev_button=1; ev_type=ButtonRelease; goto handle_mouse; - case NSOtherMouseUp: ev_button=2; ev_type=ButtonRelease; goto handle_mouse; - case NSRightMouseUp: ev_button=3; ev_type=ButtonRelease; goto handle_mouse; - case NSLeftMouseDragged: ev_button=1; ev_type=MotionNotify; goto handle_mouse; - case NSOtherMouseDragged: ev_button=2; ev_type=MotionNotify; goto handle_mouse; - case NSRightMouseDragged: ev_button=3; ev_type=MotionNotify; goto handle_mouse; - case NSMouseMoved: ev_button=0; ev_type=MotionNotify; goto handle_mouse; - handle_mouse: - - /* I'm not sure the below code is necessary or useful (-bb) - if(ev_type==ButtonPress) { - if (!quartzProcs->IsX11Window([e window], [e windowNumber])) { - fprintf(stderr, "Dropping event because it's not a window\n"); - break; - } - button_state |= (1 << ev_button); - DarwinSendPointerEvents(ev_type, ev_button, pointer_x, pointer_y); - } else if (ev_type==ButtonRelease && (button_state & (1 << ev_button)) == 0) break; - */ - DarwinSendPointerEvents(ev_type, ev_button, pointer_x, pointer_y); - break; - case NSScrollWheel: - DarwinSendScrollEvents([e deltaY], pointer_x, pointer_y); - break; - - case NSKeyDown: // do we need to translate these keyCodes? - case NSKeyUp: - DarwinSendKeyboardEvents((type == NSKeyDown)?KeyPress:KeyRelease, [e keyCode]); - break; + memset (&xe, 0, sizeof (xe)); + + /* This field should be filled in for every event */ + xe.u.keyButtonPointer.time = GetTimeInMillis(); + /* convert location to global top-left coordinates */ + location = [e locationInWindow]; + window = [e window]; + screen = [[[NSScreen screens] objectAtIndex:0] frame]; + + if (window != nil) { + NSRect frame = [window frame]; + pointer_x = location.x + frame.origin.x; + pointer_y = (((screen.origin.y + screen.size.height) + - location.y) - frame.origin.y); + } else { + pointer_x = location.x; + pointer_y = (screen.origin.y + screen.size.height) - location.y; + } + + xe.u.keyButtonPointer.rootX = pointer_x; + xe.u.keyButtonPointer.rootY = pointer_y; + + switch (type) { + float count; + + case NSLeftMouseDown: + xe.u.u.type = ButtonPress; + xe.u.u.detail = 1; + goto do_press_event; + + case NSRightMouseDown: + xe.u.u.type = ButtonPress; + xe.u.u.detail = 3; + goto do_press_event; + + case NSOtherMouseDown: + xe.u.u.type = ButtonPress; + xe.u.u.detail = 2; /* FIXME? */ + goto do_press_event; + +do_press_event: + if (!quartzProcs->IsX11Window([e window], [e windowNumber])) { + /* X server doesn't grok this window, drop the event. + + Note: theoretically this isn't necessary, but if I click + on the menubar, we get sent a LeftMouseDown when the + release happens, but no LeftMouseUp is ever seen! */ + + break; + } + goto do_event; + + case NSLeftMouseUp: + xe.u.u.type = ButtonRelease; + xe.u.u.detail = 1; + goto do_release_event; + + case NSRightMouseUp: + xe.u.u.type = ButtonRelease; + xe.u.u.detail = 3; + goto do_release_event; + + case NSOtherMouseUp: + xe.u.u.type = ButtonRelease; + xe.u.u.detail = 2; /* FIXME? */ + goto do_release_event; + +do_release_event: + if ((button_state & (1 << xe.u.u.detail)) == 0) + { + /* X didn't see the button press for this release, so skip it */ + break; + } + goto do_event; + + case NSMouseMoved: + case NSLeftMouseDragged: + case NSRightMouseDragged: + case NSOtherMouseDragged: + xe.u.u.type = MotionNotify; + goto do_event; + + case NSKeyDown: + xe.u.u.type = KeyPress; + xe.u.u.detail = [e keyCode]; + goto do_event; + + case NSKeyUp: + xe.u.u.type = KeyRelease; + xe.u.u.detail = [e keyCode]; + goto do_event; + + case NSScrollWheel: + xe.u.keyButtonPointer.state = convert_flags ([e modifierFlags]); + count = [e deltaY]; + xe.u.u.detail = count > 0.0f ? 4 : 5; + for (count = fabs(count); count > 0.0; count = count - 1.0f) { + xe.u.u.type = ButtonPress; + DarwinEQEnqueue(&xe); + xe.u.u.type = ButtonRelease; + DarwinEQEnqueue(&xe); + } + xe.u.u.type = 0; + break; + case NSFlagsChanged: - DarwinUpdateModKeys([e modifierFlags]); - break; + xe.u.u.type = kXDarwinUpdateModifiers; + xe.u.clientMessage.u.l.longs0 = [e modifierFlags]; + DarwinEQEnqueue (&xe); + break; + +do_event: + // xe.u.keyButtonPointer.state = convert_flags ([e modifierFlags]); + DarwinEQEnqueue (&xe); + break; + default: break; /* for gcc */ - } + } + + if (xe.u.u.type == ButtonPress) + button_state |= (1 << xe.u.u.detail); + else if (xe.u.u.type == ButtonRelease) + button_state &= ~(1 << xe.u.u.detail); } diff --git a/hw/darwin/apple/X11Controller.h b/hw/darwin/apple/X11Controller.h index 8d17fd9c3..954d0abb9 100644 --- a/hw/darwin/apple/X11Controller.h +++ b/hw/darwin/apple/X11Controller.h @@ -1,4 +1,5 @@ /* X11Controller.h -- connect the IB ui + $Id: X11Controller.h,v 1.21 2003/07/24 17:52:29 jharper Exp $ Copyright (c) 2002 Apple Computer, Inc. All rights reserved. diff --git a/hw/darwin/apple/X11Controller.m b/hw/darwin/apple/X11Controller.m index 3dc965b69..cc039b115 100644 --- a/hw/darwin/apple/X11Controller.m +++ b/hw/darwin/apple/X11Controller.m @@ -296,17 +296,13 @@ - (void) launch_client:(NSString *)filename { const char *command = [filename UTF8String]; - const char *shell; const char *argv[5]; int child1, child2 = 0; int status; - shell = getenv("SHELL"); - if (shell == NULL) shell = "/bin/bash"; - - argv[0] = shell; - argv[1] = "-l"; - argv[2] = "-c"; + argv[0] = "/usr/bin/login"; + argv[1] = "-fp"; + argv[2] = getlogin(); argv[3] = command; argv[4] = NULL; @@ -655,7 +651,7 @@ objectValueForTableColumn:(NSTableColumn *)tableColumn row:(int)row - (IBAction) x11_help:sender { - AHLookupAnchor (CFSTR ("Mac Help"), CFSTR ("mchlp2276")); + AHLookupAnchor ((CFStringRef)NSLocalizedString(@"Mac Help", no comment), CFSTR ("mchlp2276")); } - (BOOL) validateMenuItem:(NSMenuItem *)item diff --git a/hw/darwin/apple/bundle-main.c b/hw/darwin/apple/bundle-main.c index ec7820dc6..34cbcbab5 100644 --- a/hw/darwin/apple/bundle-main.c +++ b/hw/darwin/apple/bundle-main.c @@ -70,14 +70,15 @@ #include #include +#include #include #include #define X_SERVER "/usr/X11/bin/Xquartz" #define XTERM_PATH "/usr/X11/bin/xterm" -#define WM_PATH "/usr/X11/bin/quartz-wm" -#define DEFAULT_XINITRC "/etc/X11/xinit/xinitrc" +#define WM_PATH "/usr/bin/quartz-wm" +#define DEFAULT_XINITRC "/usr/X11/lib/X11/xinit/xinitrc" #define DEFAULT_PATH "/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/X11/bin" /* what xinit does */ @@ -595,15 +596,15 @@ static Boolean display_exists_p (int number) { char buf[64]; - void *conn; + xcb_connection_t *conn; char *fullname = NULL; int idisplay, iscreen; char *conn_auth_name, *conn_auth_data; int conn_auth_namelen, conn_auth_datalen; -#ifdef USE_XTRANS_INTERNALS - extern void *_X11TransConnectDisplay (); - extern void _XDisconnectDisplay (); -#endif + + // extern void *_X11TransConnectDisplay (); + // extern void _XDisconnectDisplay (); + /* Since connecting to the display waits for a few seconds if the display doesn't exist, check for trivial non-existence - if the socket in /tmp exists or not.. (note: if the socket exists, the @@ -612,20 +613,22 @@ display_exists_p (int number) sprintf (buf, "/tmp/.X11-unix/X%d", number); if (access (buf, F_OK) != 0) return FALSE; -#ifdef USE_XTRANS_INTERNALS + /* This is a private function that we shouldn't really be calling, but it's the best way to see if the server exists (without needing to hold the necessary authentication to use it) */ sprintf (buf, ":%d", number); - conn = _X11TransConnectDisplay (buf, &fullname, &idisplay, &iscreen, + /* conn = _X11TransConnectDisplay (buf, &fullname, &idisplay, &iscreen, &conn_auth_name, &conn_auth_namelen, - &conn_auth_data, &conn_auth_datalen); + &conn_auth_data, &conn_auth_datalen); */ + conn = xcb_connect(buf, NULL); + if (conn == NULL) return FALSE; - _XDisconnectDisplay (conn); -#endif + // _XDisconnectDisplay (conn); + xcb_disconnect(conn); return TRUE; } diff --git a/hw/darwin/bundle/Dutch.lproj/Localizable.strings b/hw/darwin/bundle/Dutch.lproj/Localizable.strings index 6abd9107299ea24f4724f2fe30c513968b74e8cc..4fe16b355438d41c73a9a500e7462adcee91999c 100644 GIT binary patch delta 16 XcmbQl-N(J*In(5qOkJBxnPr&(IlcxW delta 20 bcmeC $@ + $(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) | $(SED) -e's/__quote__/"/g' | iconv -t UTF-16 > $@ XDarwinHelp.html: XDarwinHelp.html.cpp $(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) > $@ @@ -30,6 +32,8 @@ CLEANFILES = XDarwinHelp.html InfoPlist.strings EXTRA_DIST = \ Credits.rtf Localizable.strings \ + Localizable.strings \ MainMenu.nib/classes.nib \ MainMenu.nib/objects.nib \ XDarwinHelp.html.cpp + diff --git a/hw/darwin/bundle/English.lproj/Localizable.strings b/hw/darwin/bundle/English.lproj/Localizable.strings index 2c25c1dc31fc32a5c85b97b5bd0bb8535589cb7c..f2e8e3c238ea22879f195a9af3ad9c3667f34a67 100644 GIT binary patch literal 1424 zcmd6nO;5r=5QgXMuV@G-A{6l>24jpOo-}IE=(W&-XemuwME&vVGh1K_67*=Ac6Mjy zC7H$XSGRkbSmT#1eE zfUhSbGP+o5-eiW;CF>Ne&w0X1@ww6ko#qL#bXTgbq0OT{b9TAJfQP60)K;q9CYvKW z=y#C~sq-}OuA_6&)zQ`s?tNra_E;+;V=!q|%1@h$Vq}>&uYF$q9jG&tch0qTL~B&W zVk(Q+g$uuu+)|(VR&3+kNeK5szbf5*qZG zscB?>8 z$a$Q5XGk^0EpM#x1#FdRYu+fwD>-i}_NdnI;tX#*8s8^Y9i$-q)*0>>SYque77*tN zrs_ydalE{9L>IF;wwbD3wQ;)iYU#=KOjWch*RD0JRt@Kt)F_?UzVxs96%FW>rDT-- z@`}^s9A{~IrqWY&o+6#izoql9Gf3qeb-3NuI1cJT{?Uk~;96U9f?6}#kefU-MtZ-| z$BzlV<8$aT0%$A$>X&{G!}vQ6T4ODQTxnPfL30P!Fo(J&o(< $@ + $(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) | $(SED) -e's/__quote__/"/g' | iconv -t UTF-16 > $@ XDarwinHelp.html: XDarwinHelp.html.cpp $(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) > $@ @@ -29,7 +31,9 @@ CLEANFILES = XDarwinHelp.html InfoPlist.strings EXTRA_DIST = \ Credits.rtf Localizable.strings \ + Localizable.strings \ MainMenu.nib/classes.nib \ MainMenu.nib/objects.nib \ XDarwinHelp.html.cpp \ InfoPlist.strings.cpp + diff --git a/hw/darwin/bundle/French.lproj/Makefile.am b/hw/darwin/bundle/French.lproj/Makefile.am index 656ba5c0d..4dca9342f 100644 --- a/hw/darwin/bundle/French.lproj/Makefile.am +++ b/hw/darwin/bundle/French.lproj/Makefile.am @@ -20,10 +20,12 @@ Frenchlproj_DATA = \ Credits.rtf Localizable.strings Frenchlprojnibdir = $(Frenchlprojdir)/MainMenu.nib -Frenchlprojnib_DATA = MainMenu.nib/classes.nib MainMenu.nib/objects.nib +Frenchlprojnib_DATA = \ + MainMenu.nib/classes.nib \ + MainMenu.nib/objects.nib InfoPlist.strings: $(srcdir)/../English.lproj/InfoPlist.strings.cpp - $(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) | $(SED) -e's/__quote__/"/g' > $@ + $(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) | $(SED) -e's/__quote__/"/g' | iconv -t UTF-16 > $@ XDarwinHelp.html: XDarwinHelp.html.cpp $(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) > $@ @@ -36,3 +38,4 @@ EXTRA_DIST = \ MainMenu.nib/classes.nib \ MainMenu.nib/objects.nib \ XDarwinHelp.html.cpp + diff --git a/hw/darwin/bundle/German.lproj/Makefile.am b/hw/darwin/bundle/German.lproj/Makefile.am index 17af414ec..fcb5dd24f 100644 --- a/hw/darwin/bundle/German.lproj/Makefile.am +++ b/hw/darwin/bundle/German.lproj/Makefile.am @@ -15,13 +15,15 @@ Germanlprojdir = $(resourcesdir)/German.lproj Germanlproj_DATA = \ XDarwinHelp.html \ InfoPlist.strings \ - Credits.rtf Localizable.strings + Credits.rtf Localizable.strings Localizable.strings Germanlprojnibdir = $(Germanlprojdir)/MainMenu.nib -Germanlprojnib_DATA = MainMenu.nib/classes.nib MainMenu.nib/objects.nib +Germanlprojnib_DATA = \ + MainMenu.nib/classes.nib \ + MainMenu.nib/objects.nib InfoPlist.strings: $(srcdir)/../English.lproj/InfoPlist.strings.cpp - $(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) | $(SED) -e's/__quote__/"/g' > $@ + $(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) | $(SED) -e's/__quote__/"/g' | iconv -t UTF-16 > $@ XDarwinHelp.html: XDarwinHelp.html.cpp $(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) > $@ @@ -34,3 +36,4 @@ EXTRA_DIST = \ MainMenu.nib/classes.nib \ MainMenu.nib/objects.nib \ XDarwinHelp.html.cpp + diff --git a/hw/darwin/bundle/Info.plist b/hw/darwin/bundle/Info.plist index bfef48d26..7e1770819 100644 --- a/hw/darwin/bundle/Info.plist +++ b/hw/darwin/bundle/Info.plist @@ -43,7 +43,7 @@ CFBundleIconFile XDarwin.icns CFBundleIdentifier - org.x.XDarwin + org.x.X11 CFBundleInfoDictionaryVersion 6.0 CFBundleName @@ -51,7 +51,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - XDarwin 1.4.0 + 2.0.0 CFBundleSignature ???? CFBundleVersion diff --git a/hw/darwin/bundle/Japanese.lproj/Makefile.am b/hw/darwin/bundle/Japanese.lproj/Makefile.am index 2cc524858..8d891edb5 100644 --- a/hw/darwin/bundle/Japanese.lproj/Makefile.am +++ b/hw/darwin/bundle/Japanese.lproj/Makefile.am @@ -19,10 +19,12 @@ Japaneselproj_DATA = \ Credits.rtf Localizable.strings Japaneselprojnibdir = $(Japaneselprojdir)/MainMenu.nib -Japaneselprojnib_DATA = MainMenu.nib/classes.nib MainMenu.nib/objects.nib +Japaneselprojnib_DATA = \ + MainMenu.nib/classes.nib \ + MainMenu.nib/objects.nib InfoPlist.strings: $(srcdir)/../English.lproj/InfoPlist.strings.cpp - $(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) | $(SED) -e's/__quote__/"/g' > $@ + $(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) | $(SED) -e's/__quote__/"/g' | iconv -t UTF-16 > $@ XDarwinHelp.html: XDarwinHelp.html.cpp $(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) > $@ @@ -35,3 +37,4 @@ EXTRA_DIST = \ MainMenu.nib/classes.nib \ MainMenu.nib/objects.nib \ XDarwinHelp.html.cpp + diff --git a/hw/darwin/bundle/Portuguese.lproj/Makefile.am b/hw/darwin/bundle/Portuguese.lproj/Makefile.am index 81ba2be26..540649c7a 100644 --- a/hw/darwin/bundle/Portuguese.lproj/Makefile.am +++ b/hw/darwin/bundle/Portuguese.lproj/Makefile.am @@ -18,10 +18,12 @@ Portugueselproj_DATA = \ Credits.rtf Localizable.strings Portugueselprojnibdir = $(Portugueselprojdir)/MainMenu.nib -Portugueselprojnib_DATA = MainMenu.nib/classes.nib MainMenu.nib/objects.nib +Portugueselprojnib_DATA = \ + MainMenu.nib/classes.nib \ + MainMenu.nib/objects.nib InfoPlist.strings: $(srcdir)/../English.lproj/InfoPlist.strings.cpp - $(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) | $(SED) -e's/__quote__/"/g' > $@ + $(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) | $(SED) -e's/__quote__/"/g' | iconv -t UTF-16 > $@ XDarwinHelp.html: XDarwinHelp.html.cpp $(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) > $@ @@ -34,3 +36,4 @@ EXTRA_DIST = \ MainMenu.nib/classes.nib \ MainMenu.nib/objects.nib \ XDarwinHelp.html.cpp + diff --git a/hw/darwin/bundle/Spanish.lproj/Makefile.am b/hw/darwin/bundle/Spanish.lproj/Makefile.am index 438d0c2bd..978ac3542 100644 --- a/hw/darwin/bundle/Spanish.lproj/Makefile.am +++ b/hw/darwin/bundle/Spanish.lproj/Makefile.am @@ -18,10 +18,12 @@ Spanishlproj_DATA = \ Credits.rtf Localizable.strings Spanishlprojnibdir = $(Spanishlprojdir)/MainMenu.nib -Spanishlprojnib_DATA = MainMenu.nib/classes.nib MainMenu.nib/objects.nib +Spanishlprojnib_DATA = \ + MainMenu.nib/classes.nib \ + MainMenu.nib/objects.nib InfoPlist.strings: $(srcdir)/../English.lproj/InfoPlist.strings.cpp - $(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) | $(SED) -e's/__quote__/"/g' > $@ + $(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) | $(SED) -e's/__quote__/"/g' | iconv -t UTF-16 > $@ XDarwinHelp.html: XDarwinHelp.html.cpp $(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) > $@ @@ -34,3 +36,4 @@ EXTRA_DIST = \ MainMenu.nib/classes.nib \ MainMenu.nib/objects.nib \ XDarwinHelp.html.cpp + diff --git a/hw/darwin/bundle/Swedish.lproj/Makefile.am b/hw/darwin/bundle/Swedish.lproj/Makefile.am index 19f35a690..3cf542c4a 100644 --- a/hw/darwin/bundle/Swedish.lproj/Makefile.am +++ b/hw/darwin/bundle/Swedish.lproj/Makefile.am @@ -18,10 +18,12 @@ Swedishlproj_DATA = \ Credits.rtf Localizable.strings Swedishlprojnibdir = $(Swedishlprojdir)/MainMenu.nib -Swedishlprojnib_DATA = MainMenu.nib/classes.nib MainMenu.nib/objects.nib +Swedishlprojnib_DATA = \ + MainMenu.nib/classes.nib \ + MainMenu.nib/objects.nib InfoPlist.strings: $(srcdir)/../English.lproj/InfoPlist.strings.cpp - $(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) | $(SED) -e's/__quote__/"/g' > $@ + $(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) | $(SED) -e's/__quote__/"/g' | iconv -t UTF-16 > $@ XDarwinHelp.html: XDarwinHelp.html.cpp $(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) > $@ @@ -34,3 +36,4 @@ EXTRA_DIST = \ MainMenu.nib/classes.nib \ MainMenu.nib/objects.nib \ XDarwinHelp.html.cpp + diff --git a/hw/darwin/bundle/ko.lproj/Makefile.am b/hw/darwin/bundle/ko.lproj/Makefile.am index 56dd6b310..a5462ff9f 100644 --- a/hw/darwin/bundle/ko.lproj/Makefile.am +++ b/hw/darwin/bundle/ko.lproj/Makefile.am @@ -19,10 +19,12 @@ kolproj_DATA = \ Credits.rtf Localizable.strings kolprojnibdir = $(kolprojdir)/MainMenu.nib -kolprojnib_DATA = MainMenu.nib/classes.nib MainMenu.nib/objects.nib +kolprojnib_DATA = \ + MainMenu.nib/classes.nib \ + MainMenu.nib/objects.nib InfoPlist.strings: $(srcdir)/../English.lproj/InfoPlist.strings.cpp - $(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) | $(SED) -e's/__quote__/"/g' > $@ + $(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) | $(SED) -e's/__quote__/"/g' | iconv -t UTF-16 > $@ XDarwinHelp.html: XDarwinHelp.html.cpp $(RAWCPP) $(RAWCPPFLAGS) $(XDEFS) $(CPP_FILES_FLAGS) $< | $(CPP_SED_MAGIC) > $@ @@ -35,3 +37,4 @@ EXTRA_DIST = \ MainMenu.nib/classes.nib \ MainMenu.nib/objects.nib \ XDarwinHelp.html.cpp + diff --git a/hw/darwin/iokit/Makefile.am b/hw/darwin/iokit/Makefile.am index 54464aec9..77227d77b 100644 --- a/hw/darwin/iokit/Makefile.am +++ b/hw/darwin/iokit/Makefile.am @@ -1,6 +1,6 @@ noinst_LIBRARIES = libiokit.a -AM_CFLAGS = @XORG_CFLAGS@ @DIX_CFLAGS@ +AM_CFLAGS = @XORG_CFLAGS@ INCLUDES = -I. -I.. -I$(srcdir) -I$(srcdir)/.. @XORG_INCS@ AM_DEFS = if XQUARTZ diff --git a/hw/darwin/launcher/Info.plist b/hw/darwin/launcher/Info.plist new file mode 100644 index 000000000..b5385b61a --- /dev/null +++ b/hw/darwin/launcher/Info.plist @@ -0,0 +1,30 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + X11 + CFBundleGetInfoString + 2.0, Copyright © 2003-2007, Apple Inc. + CFBundleIconFile + X11.icns + CFBundleIdentifier + org.x.X11_launcher + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + X11 + CFBundlePackageType + APPL + CFBundleShortVersionString + 2.0 + CFBundleSignature + x11l + LSUIElement + 1 + NSHumanReadableCopyright + Copyright © 2007, Apple Inc. + + diff --git a/hw/darwin/launcher/X11.icns b/hw/darwin/launcher/X11.icns new file mode 100644 index 0000000000000000000000000000000000000000..d770e617ddb455d8a499550e712f93a06a69f871 GIT binary patch literal 65908 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 E014<25dZ)H literal 0 HcmV?d00001 diff --git a/hw/darwin/launcher/X11.xcodeproj/project.pbxproj b/hw/darwin/launcher/X11.xcodeproj/project.pbxproj new file mode 100644 index 000000000..f82552ac5 --- /dev/null +++ b/hw/darwin/launcher/X11.xcodeproj/project.pbxproj @@ -0,0 +1,297 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 42; + objects = { + +/* Begin PBXBuildFile section */ + 527F241B0B5D938C007840A7 /* X11.icns in Resources */ = {isa = PBXBuildFile; fileRef = 50459C5F038587C60ECA21EC /* X11.icns */; }; + 527F241D0B5D938C007840A7 /* bundle-main.c in Sources */ = {isa = PBXBuildFile; fileRef = 50EE2AB703849F0B0ECA21EC /* bundle-main.c */; }; + 527F241F0B5D938C007840A7 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 50F4F0A7039D6ACA0E82C0CB /* CoreFoundation.framework */; }; + 527F24370B5D9D89007840A7 /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 527F24260B5D938C007840A7 /* Info.plist */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 50459C5F038587C60ECA21EC /* X11.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = X11.icns; sourceTree = ""; }; + 50EE2AB703849F0B0ECA21EC /* bundle-main.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = "bundle-main.c"; sourceTree = ""; }; + 50F4F0A7039D6ACA0E82C0CB /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = ""; }; + 527F24260B5D938C007840A7 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = Info.plist; sourceTree = ""; }; + 527F24270B5D938C007840A7 /* X11.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = X11.app; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 527F241E0B5D938C007840A7 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 527F241F0B5D938C007840A7 /* CoreFoundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 195DF8CFFE9D517E11CA2CBB /* Products */ = { + isa = PBXGroup; + children = ( + 527F24270B5D938C007840A7 /* X11.app */, + ); + name = Products; + sourceTree = ""; + }; + 20286C29FDCF999611CA2CEA /* X11 */ = { + isa = PBXGroup; + children = ( + 20286C2AFDCF999611CA2CEA /* Sources */, + 20286C2CFDCF999611CA2CEA /* Resources */, + 20286C32FDCF999611CA2CEA /* External Frameworks and Libraries */, + 195DF8CFFE9D517E11CA2CBB /* Products */, + 527F24260B5D938C007840A7 /* Info.plist */, + ); + name = X11; + sourceTree = ""; + }; + 20286C2AFDCF999611CA2CEA /* Sources */ = { + isa = PBXGroup; + children = ( + 50EE2AB703849F0B0ECA21EC /* bundle-main.c */, + ); + name = Sources; + sourceTree = ""; + }; + 20286C2CFDCF999611CA2CEA /* Resources */ = { + isa = PBXGroup; + children = ( + 50459C5F038587C60ECA21EC /* X11.icns */, + ); + name = Resources; + sourceTree = ""; + }; + 20286C32FDCF999611CA2CEA /* External Frameworks and Libraries */ = { + isa = PBXGroup; + children = ( + 50F4F0A7039D6ACA0E82C0CB /* CoreFoundation.framework */, + ); + name = "External Frameworks and Libraries"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 527F24170B5D938C007840A7 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 527F24160B5D938C007840A7 /* X11 */ = { + isa = PBXNativeTarget; + buildConfigurationList = 527F24220B5D938C007840A7 /* Build configuration list for PBXNativeTarget "X11" */; + buildPhases = ( + 527F24170B5D938C007840A7 /* Headers */, + 527F24180B5D938C007840A7 /* Resources */, + 527F241C0B5D938C007840A7 /* Sources */, + 527F241E0B5D938C007840A7 /* Frameworks */, + 527F24210B5D938C007840A7 /* Rez */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = X11; + productName = X11; + productReference = 527F24270B5D938C007840A7 /* X11.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 20286C28FDCF999611CA2CEA /* Project object */ = { + isa = PBXProject; + buildConfigurationList = 527F24080B5D8FFC007840A7 /* Build configuration list for PBXProject "X11" */; + compatibilityVersion = "Xcode 2.4"; + hasScannedForEncodings = 1; + mainGroup = 20286C29FDCF999611CA2CEA /* X11 */; + projectDirPath = ""; + projectRoot = ""; + shouldCheckCompatibility = 1; + targets = ( + 527F24160B5D938C007840A7 /* X11 */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 527F24180B5D938C007840A7 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 527F24370B5D9D89007840A7 /* Info.plist in Resources */, + 527F241B0B5D938C007840A7 /* X11.icns in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXRezBuildPhase section */ + 527F24210B5D938C007840A7 /* Rez */ = { + isa = PBXRezBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXRezBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 527F241C0B5D938C007840A7 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 527F241D0B5D938C007840A7 /* bundle-main.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 527F24090B5D8FFC007840A7 /* Development */ = { + isa = XCBuildConfiguration; + buildSettings = { + DSTROOT = "$(DSTROOT)"; + SKIP_INSTALL = YES; + }; + name = Development; + }; + 527F240A0B5D8FFC007840A7 /* Deployment */ = { + isa = XCBuildConfiguration; + buildSettings = { + DSTROOT = "$(DSTROOT)"; + SKIP_INSTALL = YES; + }; + name = Deployment; + }; + 527F240B0B5D8FFC007840A7 /* Default */ = { + isa = XCBuildConfiguration; + buildSettings = { + DSTROOT = "$(DSTROOT)"; + SKIP_INSTALL = YES; + }; + name = Default; + }; + 527F24230B5D938C007840A7 /* Development */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(NATIVE_ARCH_32_BIT)"; + COPY_PHASE_STRIP = NO; + DSTROOT = "$(DSTROOT)"; + FRAMEWORK_SEARCH_PATHS = ""; + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + HEADER_SEARCH_PATHS = /usr/X11/include; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = $DSTROOT/Applications/Utilties; + LIBRARY_SEARCH_PATHS = /usr/X11/lib; + OTHER_CFLAGS = ""; + OTHER_LDFLAGS = ( + "-lXau", + "-lxcb", + "-lX11", + ); + OTHER_REZFLAGS = ""; + PRODUCT_NAME = X11; + SECTORDER_FLAGS = ""; + WARNING_CFLAGS = ( + "-Wmost", + "-Wno-four-char-constants", + "-Wno-unknown-pragmas", + ); + WRAPPER_EXTENSION = app; + }; + name = Development; + }; + 527F24240B5D938C007840A7 /* Deployment */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = YES; + DSTROOT = "$(DSTROOT)"; + FRAMEWORK_SEARCH_PATHS = ""; + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + HEADER_SEARCH_PATHS = /usr/X11/include; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = $DSTROOT/Applications/Utilties; + LIBRARY_SEARCH_PATHS = /usr/X11/lib; + OTHER_CFLAGS = ""; + OTHER_LDFLAGS = ""; + OTHER_REZFLAGS = ""; + PRODUCT_NAME = X11; + SECTORDER_FLAGS = ""; + WARNING_CFLAGS = ( + "-Wmost", + "-Wno-four-char-constants", + "-Wno-unknown-pragmas", + ); + WRAPPER_EXTENSION = app; + }; + name = Deployment; + }; + 527F24250B5D938C007840A7 /* Default */ = { + isa = XCBuildConfiguration; + buildSettings = { + DSTROOT = "$(DSTROOT)"; + FRAMEWORK_SEARCH_PATHS = ""; + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + HEADER_SEARCH_PATHS = /usr/X11/include; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = $DSTROOT/Applications/Utilties; + LIBRARY_SEARCH_PATHS = /usr/X11/lib; + OTHER_CFLAGS = ""; + OTHER_LDFLAGS = ( + "-lXau", + "-lxcb", + "-lX11", + ); + OTHER_REZFLAGS = ""; + PRODUCT_NAME = X11; + SECTORDER_FLAGS = ""; + WARNING_CFLAGS = ( + "-Wmost", + "-Wno-four-char-constants", + "-Wno-unknown-pragmas", + ); + WRAPPER_EXTENSION = app; + }; + name = Default; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 527F24080B5D8FFC007840A7 /* Build configuration list for PBXProject "X11" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 527F24090B5D8FFC007840A7 /* Development */, + 527F240A0B5D8FFC007840A7 /* Deployment */, + 527F240B0B5D8FFC007840A7 /* Default */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Default; + }; + 527F24220B5D938C007840A7 /* Build configuration list for PBXNativeTarget "X11" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 527F24230B5D938C007840A7 /* Development */, + 527F24240B5D938C007840A7 /* Deployment */, + 527F24250B5D938C007840A7 /* Default */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Default; + }; +/* End XCConfigurationList section */ + }; + rootObject = 20286C28FDCF999611CA2CEA /* Project object */; +} diff --git a/hw/darwin/launcher/bundle-main.c b/hw/darwin/launcher/bundle-main.c new file mode 100644 index 000000000..988c04f68 --- /dev/null +++ b/hw/darwin/launcher/bundle-main.c @@ -0,0 +1,79 @@ +/* main.c -- X application launcher + + Copyright (c) 2007 Apple Inc. + + Permission is hereby granted, free of charge, to any person + obtaining a copy of this software and associated documentation files + (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, + publish, distribute, sublicense, and/or sell copies of the Software, + and to permit persons to whom the Software is furnished to do so, + subject to the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT + HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. + + Except as contained in this notice, the name(s) of the above + copyright holders shall not be used in advertising or otherwise to + promote the sale, use or other dealings in this Software without + prior written authorization. */ + +#include +#include +#include + +#include + +#define DEFAULT_APP "/usr/X11/bin/xterm" + +int main (int argc, char **argv) { + char *command = DEFAULT_APP; + const char *newargv[5]; + int child; + + + CFPropertyListRef PlistRef = CFPreferencesCopyAppValue(CFSTR("app_to_run"), + kCFPreferencesCurrentApplication); + + if ((PlistRef == NULL) || (CFGetTypeID(PlistRef) != CFStringGetTypeID())) { + CFPreferencesSetAppValue(CFSTR("app_to_run"), CFSTR(DEFAULT_APP), + kCFPreferencesCurrentApplication); + CFPreferencesAppSynchronize(kCFPreferencesCurrentApplication); + } else { + int len = CFStringGetLength((CFStringRef)PlistRef)+1; + command = (char *) malloc(len); + CFStringGetCString((CFStringRef)PlistRef, command, len, kCFStringEncodingASCII); + fprintf(stderr, "command=%s\n", command); + } + + if (PlistRef) CFRelease(PlistRef); + + newargv[0] = "/usr/bin/login"; + newargv[1] = "-fp"; + newargv[2] = getlogin(); + newargv[3] = command; + newargv[4] = NULL; + + child = fork(); + + switch (child) { + case -1: /* error */ + perror ("fork"); + return EXIT_FAILURE; + case 0: /* child */ + execvp (newargv[0], (char **const) newargv); + perror ("Couldn't exec"); + _exit (1); + } + + return 0; +} diff --git a/hw/darwin/quartz/Makefile.am b/hw/darwin/quartz/Makefile.am index 993cdb0ec..bc6d4fc29 100644 --- a/hw/darwin/quartz/Makefile.am +++ b/hw/darwin/quartz/Makefile.am @@ -1,14 +1,16 @@ noinst_LIBRARIES = libXQuartz.a -AM_CFLAGS = @XORG_CFLAGS@ @DIX_CFLAGS@ -AM_OBJCFLAGS = @XORG_CFLAGS@ @DIX_CFLAGS@ +AM_CFLAGS = @XORG_CFLAGS@ +AM_OBJCFLAGS = @XORG_CFLAGS@ INCLUDES = -I$(srcdir) -I$(srcdir)/.. @XORG_INCS@ AM_DEFS = -DHAS_CG_MACH_PORT -DHAS_KL_API if HAVE_X_PLUGIN AM_DEFS += -DBUILD_XPR +XPR = xpr endif DEFS = @DEFS@ $(AM_DEFS) -DXBINDIR=\"${bindir}\" +SUBDIRS = cr fullscreen $(XPR) libXQuartz_a_SOURCES = \ Preferences.m \ @@ -37,6 +39,7 @@ install-exec-local: man1_MANS = XDarwinStartup.man + EXTRA_DIST = \ applewmExt.h \ keysym2ucs.h \ diff --git a/hw/darwin/quartz/cr/Makefile.am b/hw/darwin/quartz/cr/Makefile.am new file mode 100644 index 000000000..abfac991c --- /dev/null +++ b/hw/darwin/quartz/cr/Makefile.am @@ -0,0 +1,21 @@ +noinst_LIBRARIES = libcr.a +AM_CFLAGS = @XORG_CFLAGS@ +AM_OBJCFLAGS = @XORG_CFLAGS@ +DEFS = @DEFS@ -DDEFER_NSWINDOW +INCLUDES = @XORG_INCS@ \ + -I../fullscreen \ + -I$(srcdir) -I$(srcdir)/.. -I$(srcdir)/../.. \ + -I$(top_srcdir)/miext/rootless \ + -I$(top_srcdir)/miext/rootless/safeAlpha \ + -I$(top_srcdir)/mi + +libcr_a_SOURCES = crAppleWM.m \ + crFrame.m \ + crScreen.m \ + ../fullscreen/quartzCursor.c \ + XView.m + +EXTRA_DIST = \ + cr.h \ + XView.h + diff --git a/hw/darwin/quartz/fullscreen/Makefile.am b/hw/darwin/quartz/fullscreen/Makefile.am new file mode 100644 index 000000000..37c767c35 --- /dev/null +++ b/hw/darwin/quartz/fullscreen/Makefile.am @@ -0,0 +1,9 @@ +noinst_LIBRARIES = libfullscreen.a +AM_CFLAGS = @XORG_CFLAGS@ +INCLUDES = @XORG_INCS@ -I$(srcdir) -I$(srcdir)/.. -I$(srcdir)/../.. + +libfullscreen_a_SOURCES = fullscreen.c \ + quartzCursor.c + +EXTRA_DIST = \ + quartzCursor.h diff --git a/hw/darwin/quartz/xpr/Makefile.am b/hw/darwin/quartz/xpr/Makefile.am new file mode 100644 index 000000000..980c7a4d6 --- /dev/null +++ b/hw/darwin/quartz/xpr/Makefile.am @@ -0,0 +1,30 @@ +noinst_LIBRARIES = libxpr.a +AM_CFLAGS = @XORG_CFLAGS@ +INCLUDES = @XORG_INCS@ \ + -I$(srcdir) -I$(srcdir)/.. -I$(srcdir)/../.. \ + -I$(top_srcdir)/miext/rootless \ + -I$(top_srcdir)/miext/rootless/safeAlpha \ + -I$(top_srcdir)/miext + +libxpr_a_SOURCES = \ + appledri.c \ + dri.c \ + xprAppleWM.c \ + xprCursor.c \ + xprFrame.c \ + xprScreen.c \ + x-hash.c \ + x-hook.c \ + x-list.c + +xprbundledir = @APPLE_APPLICATIONS_DIR@/Resources/xpr.bundle/Contents/MacOS + +EXTRA_DIST = \ + dri.h \ + dristruct.h \ + x-hash.h \ + x-hook.h \ + x-list.h \ + Xplugin.h \ + xpr.h + diff --git a/hw/darwin/quartz/xpr/appledri.h b/hw/darwin/quartz/xpr/appledri.h index c4e43be12..9c630373d 100644 --- a/hw/darwin/quartz/xpr/appledri.h +++ b/hw/darwin/quartz/xpr/appledri.h @@ -1,3 +1,4 @@ +/* $XFree86: xc/lib/GL/dri/xf86dri.h,v 1.7 2000/12/07 20:26:02 dawes Exp $ */ /************************************************************************** Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas. diff --git a/hw/darwin/quartz/xpr/appledristr.h b/hw/darwin/quartz/xpr/appledristr.h index 8649fd329..36a2e891e 100644 --- a/hw/darwin/quartz/xpr/appledristr.h +++ b/hw/darwin/quartz/xpr/appledristr.h @@ -1,3 +1,4 @@ +/* $XFree86: xc/lib/GL/dri/xf86dristr.h,v 1.9 2001/03/21 16:01:08 dawes Exp $ */ /************************************************************************** Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas. diff --git a/hw/darwin/utils/Makefile.am b/hw/darwin/utils/Makefile.am index 11a26111e..92bf151cb 100644 --- a/hw/darwin/utils/Makefile.am +++ b/hw/darwin/utils/Makefile.am @@ -7,5 +7,6 @@ dumpkeymap_LDFLAGS = -Wl,-framework,IOKit man1_MANS = dumpkeymap.man EXTRA_DIST = \ - README.txt \ - dumpkeymap.man + README.txt \ + dumpkeymap.man + diff --git a/hw/darwin/utils/event_status_driver.h b/hw/darwin/utils/event_status_driver.h new file mode 100644 index 000000000..8948f3349 --- /dev/null +++ b/hw/darwin/utils/event_status_driver.h @@ -0,0 +1,133 @@ +/* + * Copyright (c) 1998-2000 Apple Computer, Inc. All rights reserved. + * + * @APPLE_LICENSE_HEADER_START@ + * + * The contents of this file constitute Original Code as defined in and + * are subject to the Apple Public Source License Version 1.1 (the + * "License"). You may not use this file except in compliance with the + * License. Please obtain a copy of the License at + * http://www.apple.com/publicsource and read it before using this file. + * + * This Original Code and all software distributed under the License are + * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the + * License for the specific language governing rights and limitations + * under the License. + * + * @APPLE_LICENSE_HEADER_END@ + */ +/****************************************************************************** + event_status_driver.h + API for the events status driver. + This file contains public API. + mpaque 11Oct91 + + Copyright 1991 NeXT Computer, Inc. + + Modified: + +******************************************************************************/ + +#ifndef _DRIVERS_EVENT_STATUS_DRIVER_ +#define _DRIVERS_EVENT_STATUS_DRIVER_ + +__BEGIN_DECLS + +#include +#include +#include +#include + +/* + * Event System Handle: + * + * Information used by the system between calls to NXOpenEventSystem and + * NXCloseEventSystem. The application should not + * access any of the elements of this structure. + */ +typedef mach_port_t NXEventHandle; + +/* Open and Close */ +NXEventHandle NXOpenEventStatus(void); +void NXCloseEventStatus(NXEventHandle handle); + +/* Status */ +extern NXEventSystemInfoType NXEventSystemInfo(NXEventHandle handle, + char *flavor, + int *evs_info, + unsigned int *evs_info_cnt); +/* Keyboard */ +extern void NXSetKeyRepeatInterval(NXEventHandle handle, double seconds); +extern double NXKeyRepeatInterval(NXEventHandle handle); +extern void NXSetKeyRepeatThreshold(NXEventHandle handle, double threshold); +extern double NXKeyRepeatThreshold(NXEventHandle handle); +extern void NXResetKeyboard(NXEventHandle handle); + +/* Mouse */ +extern void NXSetClickTime(NXEventHandle handle, double seconds); +extern double NXClickTime(NXEventHandle handle); +extern void NXSetClickSpace(NXEventHandle handle, _NXSize_ *area); +extern void NXGetClickSpace(NXEventHandle handle, _NXSize_ *area); +extern void NXResetMouse(NXEventHandle handle); + +/* DEPRECATED API */ + +/* NXIdleTime has been deprecated as this API does not take into account + events posted through the CG API set. Instead, we strongly encourage + developers to make use of the CGSSecondsSinceLastInputEvent API. */ +extern double NXIdleTime(NXEventHandle handle) +AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_4; + +/* These methods are NOT supported. */ +extern NXKeyMapping *NXSetKeyMapping(NXEventHandle h, NXKeyMapping *keymap) +AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_4; + +extern int NXKeyMappingLength(NXEventHandle handle) +AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_4; + +extern NXKeyMapping *NXGetKeyMapping(NXEventHandle h, NXKeyMapping *keymap) +AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_4; + +/* These methods are NOT supported and will return NULL values. */ +extern void NXSetMouseScaling(NXEventHandle handle, NXMouseScaling *scaling) +AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_4; + +extern void NXGetMouseScaling(NXEventHandle handle, NXMouseScaling *scaling) +AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_4; + +extern void NXSetAutoDimThreshold(NXEventHandle handle, double seconds) +AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_4; + +extern double NXAutoDimThreshold(NXEventHandle handle) +AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_4; + +extern double NXAutoDimTime(NXEventHandle handle) +AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_4; + +extern void NXSetAutoDimState(NXEventHandle handle, boolean_t dimmed) +AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_4; + +extern boolean_t NXAutoDimState(NXEventHandle handle) +AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_4; + +extern void NXSetAutoDimBrightness(NXEventHandle handle, double level) +AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_4; + +extern double NXAutoDimBrightness(NXEventHandle handle) +AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_4; + +extern void NXSetScreenBrightness(NXEventHandle handle, double level) +AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_4; + +extern double NXScreenBrightness(NXEventHandle handle) +AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_4; + +/* END DEPRECATED API */ + +__END_DECLS + +#endif /*_DRIVERS_EVENT_STATUS_DRIVER_ */ +