# HG changeset patch # User William Bowling # Date 1257121622 -39600 # Node ID 24c2afb2e56b94c0323fc9ef239f67eca1074b0e # Parent f3da0426c16a9274c37e443630eb683dada95010 # Parent a79db9a3f818014ddce7dbcfbe7b134f4345a64c merge diff -r f3da0426c16a9274c37e443630eb683dada95010 -r 24c2afb2e56b94c0323fc9ef239f67eca1074b0e Frameworks/AIUtilities Framework/Source/AIObjectAdditions.h --- a/Frameworks/AIUtilities Framework/Source/AIObjectAdditions.h Mon Nov 02 11:22:07 2009 +1100 +++ b/Frameworks/AIUtilities Framework/Source/AIObjectAdditions.h Mon Nov 02 11:27:02 2009 +1100 @@ -29,10 +29,13 @@ - (void)mainPerformSelector:(SEL)aSelector withObjects:(id)argument1, ... NS_REQUIRES_NIL_TERMINATION; - (void)mainPerformSelector:(SEL)aSelector withObject:(id)argument1 withObject:(id)argument2 withObject:(id)argument3 withObject:(id)argument4 waitUntilDone:(BOOL)flag; + - (void)performSelector:(SEL)aSelector withObject:(id)argument1 withObject:(id)argument2 afterDelay:(NSTimeInterval)delay; - (void)performSelector:(SEL)aSelector withObject:(id)argument1 withObject:(id)argument2 withObject:(id)argument3 afterDelay:(NSTimeInterval)delay; - (void)performSelector:(SEL)aSelector withObject:(id)argument1 withObject:(id)argument2 withObject:(id)argument3; +- (void)performSelector:(SEL)aSelector withObject:(id)argument1 withObject:(id)argument2 withObject:(id)argument3 withObject:(id)argument4 afterDelay:(NSTimeInterval)delay; + - (void)handleInvocation:(NSInvocation *)anInvocation; @end diff -r f3da0426c16a9274c37e443630eb683dada95010 -r 24c2afb2e56b94c0323fc9ef239f67eca1074b0e Frameworks/AIUtilities Framework/Source/AIObjectAdditions.m --- a/Frameworks/AIUtilities Framework/Source/AIObjectAdditions.m Mon Nov 02 11:22:07 2009 +1100 +++ b/Frameworks/AIUtilities Framework/Source/AIObjectAdditions.m Mon Nov 02 11:27:02 2009 +1100 @@ -261,6 +261,21 @@ [self performSelector:@selector(handleInvocation:) withObject:invocation]; } +- (void)performSelector:(SEL)aSelector withObject:(id)argument1 withObject:(id)argument2 withObject:(id)argument3 withObject:(id)argument4 afterDelay:(NSTimeInterval)delay +{ + NSInvocation *invocation; + invocation = [NSInvocation invocationWithMethodSignature:[self methodSignatureForSelector:aSelector]]; + + [invocation setSelector:aSelector]; + [invocation setArgument:&argument1 atIndex:2]; + [invocation setArgument:&argument2 atIndex:3]; + [invocation setArgument:&argument3 atIndex:4]; + [invocation setArgument:&argument4 atIndex:5]; + [invocation retainArguments]; + + [self performSelector:@selector(handleInvocation:) withObject:invocation afterDelay:delay]; +} + - (void)handleInvocation:(NSInvocation *)anInvocation { [anInvocation invokeWithTarget:self]; diff -r f3da0426c16a9274c37e443630eb683dada95010 -r 24c2afb2e56b94c0323fc9ef239f67eca1074b0e Plugins/Purple Service/CBPurpleAccount.h --- a/Plugins/Purple Service/CBPurpleAccount.h Mon Nov 02 11:22:07 2009 +1100 +++ b/Plugins/Purple Service/CBPurpleAccount.h Mon Nov 02 11:27:02 2009 +1100 @@ -146,7 +146,7 @@ - (void)receivedEventForChat:(AIChat *)chat message:(NSString *)message date:(NSDate *)date - flags:(PurpleMessageFlags)flags; + flags:(NSNumber *)flagsNumber; - (void)receivedIMChatMessage:(NSDictionary *)messageDict inChat:(AIChat *)chat; - (void)receivedMultiChatMessage:(NSDictionary *)messageDict inChat:(AIChat *)chat; - (void)leftChat:(AIChat *)chat; diff -r f3da0426c16a9274c37e443630eb683dada95010 -r 24c2afb2e56b94c0323fc9ef239f67eca1074b0e Plugins/Purple Service/CBPurpleAccount.m --- a/Plugins/Purple Service/CBPurpleAccount.m Mon Nov 02 11:22:07 2009 +1100 +++ b/Plugins/Purple Service/CBPurpleAccount.m Mon Nov 02 11:27:02 2009 +1100 @@ -1175,8 +1175,10 @@ - (void)receivedEventForChat:(AIChat *)chat message:(NSString *)message date:(NSDate *)date - flags:(PurpleMessageFlags)flags + flags:(NSNumber *)flagsNumber { + PurpleMessageFlags flags = [flagsNumber integerValue]; + AIContentEvent *event = [AIContentEvent eventInChat:chat withSource:nil destination:self diff -r f3da0426c16a9274c37e443630eb683dada95010 -r 24c2afb2e56b94c0323fc9ef239f67eca1074b0e Plugins/Purple Service/ESPurpleNotifyEmailController.m --- a/Plugins/Purple Service/ESPurpleNotifyEmailController.m Mon Nov 02 11:22:07 2009 +1100 +++ b/Plugins/Purple Service/ESPurpleNotifyEmailController.m Mon Nov 02 11:27:02 2009 +1100 @@ -167,19 +167,22 @@ + (void)showNotifyEmailWindowForAccount:(AIAccount *)account withMessage:(NSAttributedString *)inMessage URLString:(NSString *)inURLString { NSString *mailApplicationName = [self mailApplicationName]; - [ESTextAndButtonsWindowController showTextAndButtonsWindowWithTitle:AILocalizedString(@"New Mail",nil) - defaultButton:nil - alternateButton:(inURLString ? - AILocalizedString(@"Open Mail in Browser",nil) : - nil) - otherButton:((mailApplicationName && [mailApplicationName length]) ? - [NSString stringWithFormat:AILocalizedString(@"Launch %@", nil), mailApplicationName] : - nil) - onWindow:nil - withMessageHeader:nil - andMessage:inMessage - target:self - userInfo:inURLString]; + + if (![[NSUserDefaults standardUserDefaults] boolForKey:@"AINoNewMailWindow"]) { + [ESTextAndButtonsWindowController showTextAndButtonsWindowWithTitle:AILocalizedString(@"New Mail",nil) + defaultButton:nil + alternateButton:(inURLString ? + AILocalizedString(@"Open Mail in Browser",nil) : + nil) + otherButton:((mailApplicationName && [mailApplicationName length]) ? + [NSString stringWithFormat:AILocalizedString(@"Launch %@", nil), mailApplicationName] : + nil) + onWindow:nil + withMessageHeader:nil + andMessage:inMessage + target:self + userInfo:inURLString]; + } //XXX - Hook this to the account for listobject [adium.contactAlertsController generateEvent:ACCOUNT_RECEIVED_EMAIL diff -r f3da0426c16a9274c37e443630eb683dada95010 -r 24c2afb2e56b94c0323fc9ef239f67eca1074b0e Plugins/Purple Service/adiumPurpleConversation.m --- a/Plugins/Purple Service/adiumPurpleConversation.m Mon Nov 02 11:22:07 2009 +1100 +++ b/Plugins/Purple Service/adiumPurpleConversation.m Mon Nov 02 11:27:02 2009 +1100 @@ -85,7 +85,7 @@ [account receivedEventForChat:groupChatLookupFromConv(conv) message:messageString date:date - flags:flags]; + flags:[NSNumber numberWithInteger:flags]]; } else { NSAttributedString *attributedMessage = [AIHTMLDecoder decodeHTML:messageString]; NSNumber *purpleMessageFlags = [NSNumber numberWithInteger:flags]; @@ -213,15 +213,15 @@ */ if (errorType != AIChatUnknownError) { [accountLookup(purple_conversation_get_account(conv)) performSelector:@selector(errorForChat:type:) - withObject:chat - withObject:[NSNumber numberWithInteger:errorType] - afterDelay:0]; + withObject:chat + withObject:[NSNumber numberWithInteger:errorType] + afterDelay:0]; } else { [adium.contentController performSelector:@selector(displayEvent:ofType:inChat:) - withObject:messageString - withObject:@"libpurpleMessage" - withObject:chat - afterDelay:0]; + withObject:messageString + withObject:@"libpurpleMessage" + withObject:chat + afterDelay:0]; } AILog(@"*** Conversation error %@: %@", chat, messageString); @@ -273,10 +273,12 @@ if (shouldDisplayMessage) { CBPurpleAccount *account = accountLookup(purple_conversation_get_account(conv)); - [account receivedEventForChat:chat - message:messageString - date:[NSDate dateWithTimeIntervalSince1970:mtime] - flags:flags]; + [account performSelector:@selector(receivedEventForChat:message:date:flags:) + withObject:chat + withObject:messageString + withObject:[NSDate dateWithTimeIntervalSince1970:mtime] + withObject:[NSNumber numberWithInteger:flags] + afterDelay:0]; } } } diff -r f3da0426c16a9274c37e443630eb683dada95010 -r 24c2afb2e56b94c0323fc9ef239f67eca1074b0e Plugins/WebKit Message View/ESWebView.m --- a/Plugins/WebKit Message View/ESWebView.m Mon Nov 02 11:22:07 2009 +1100 +++ b/Plugins/WebKit Message View/ESWebView.m Mon Nov 02 11:27:02 2009 +1100 @@ -93,9 +93,22 @@ //into this view. - (void)keyDown:(NSEvent *)theEvent { + BOOL forwarded = YES; + if (shouldForwardEvents) { - [self forwardSelector:@selector(keyDown:) withObject:theEvent]; - } else { + unichar inChar = [[theEvent charactersIgnoringModifiers] characterAtIndex:0]; + + // Don't forward navigation key events. If we're receiving them, it's because + // the frame itself didn't support them. + if (inChar != NSUpArrowFunctionKey && inChar != NSDownArrowFunctionKey && + inChar != NSPageUpFunctionKey && inChar != NSPageDownFunctionKey) + { + [self forwardSelector:@selector(keyDown:) withObject:theEvent]; + forwarded = YES; + } + } + + if (!forwarded) { [super keyDown:theEvent]; } } diff -r f3da0426c16a9274c37e443630eb683dada95010 -r 24c2afb2e56b94c0323fc9ef239f67eca1074b0e Source/AIListWindowController.m --- a/Source/AIListWindowController.m Mon Nov 02 11:22:07 2009 +1100 +++ b/Source/AIListWindowController.m Mon Nov 02 11:27:02 2009 +1100 @@ -318,7 +318,7 @@ showOnAllSpaces = [[prefDict objectForKey:KEY_CL_ALL_SPACES] boolValue]; [[self window] setCollectionBehavior:showOnAllSpaces ? NSWindowCollectionBehaviorCanJoinAllSpaces : NSWindowCollectionBehaviorDefault]; - + if (windowHidingStyle == AIContactListWindowHidingStyleSliding) { if (!slideWindowIfNeededTimer) { slideWindowIfNeededTimer = [[NSTimer scheduledTimerWithTimeInterval:DOCK_HIDING_MOUSE_POLL_INTERVAL @@ -812,7 +812,6 @@ shouldSlide = YES; } } - return shouldSlide; } @@ -1225,25 +1224,25 @@ { if ([self windowSlidOffScreenEdgeMask] != AINoEdges) { NSWindow *window = [self window]; - NSRect windowFrame = [window frame]; - if (!NSEqualRects(windowFrame, oldFrame)) { - //Restore shadow and frame if we're appearing from having slid off-screen - [window setHasShadow:[[adium.preferenceController preferenceForKey:KEY_CL_WINDOW_HAS_SHADOW - group:PREF_GROUP_CONTACT_LIST] boolValue]]; - [window orderFront:nil]; - [contactListController contactListWillSlideOnScreen]; + animate = animate && !NSEqualRects(window.frame, oldFrame); + + //Restore shadow and frame if we're appearing from having slid off-screen + [window setHasShadow:[[adium.preferenceController preferenceForKey:KEY_CL_WINDOW_HAS_SHADOW + group:PREF_GROUP_CONTACT_LIST] boolValue]]; + [window orderFront:nil]; + + [contactListController contactListWillSlideOnScreen]; - windowSlidOffScreenEdgeMask = AINoEdges; - - if (animate) { - [self slideWindowToPoint:oldFrame.origin]; - } else { - [self moveWindowToPoint:oldFrame.origin]; - } - - [windowLastScreen release]; windowLastScreen = nil; + windowSlidOffScreenEdgeMask = AINoEdges; + + if (animate) { + [self slideWindowToPoint:oldFrame.origin]; + } else { + [self moveWindowToPoint:oldFrame.origin]; } + + [windowLastScreen release]; windowLastScreen = nil; } }