// LetterFix2
//
// Created by kuri on 10/02/01.
-// Copyright 2010-2015 kuri. All rights reserved.
+// Copyright 2010-2017 kuri. All rights reserved.
//
#import <objc/runtime.h>
#import <objc/objc-runtime.h>
Ivar ivar = object_getInstanceVariable(backend, "_flags", NULL);
_LF_flags *_flags = (_LF_flags *)((char *)backend + ivar_getOffset(ivar));
_flags->encodingHint = encoding;
- } else if ([app ver] == LF_Yosemite || [app ver] == LF_ElCapitan) {
+ } else if ([app ver] == LF_Yosemite || [app ver] == LF_ElCapitan ||
+ [app ver] == LF_Sierra || [app ver] == LF_HighSierra ||
+ [app ver] == LF_Mojave) {
[backend setEncodingHint: encoding];
}
}
Ivar ivar = object_getInstanceVariable(backend, "_flags", NULL);
_LF_flags *_flags = (_LF_flags *)((char *)backend + ivar_getOffset(ivar));
return _flags->encodingHint; //FIXME: [backend _encodingHint] return wrong value?
- } else if ([app ver] == LF_Yosemite || [app ver] == LF_ElCapitan) {
+ } else if ([app ver] == LF_Yosemite || [app ver] == LF_ElCapitan ||
+ [app ver] == LF_Sierra || [app ver] == LF_HighSierra ||
+ [app ver] == LF_Mojave) {
return [backend encodingHint];
}
return LF_Encoding_Auto;
}
}
[[(LetterFix *)self backEnd] setSubject:substr];
- [[self window] setTitle:substr];
+ [[self _windowLF] setTitle:substr];
id headers = [self headersEditor];
NSTextField *subjectField = nil;
}
}
[[(LetterFix *)self backEnd] setSubject:substr];
- [[self window] setTitle:substr];
+ [[self _windowLF] setTitle:substr];
id headers = [self headersEditor];
NSTextField *subjectField = nil;
if ([app operationAtOpen] == 0) {
NSAlert *alert = [[[NSAlert alloc] init] autorelease];
[alert addButtonWithTitle:@"変換"];
- [alert addButtonWithTitle:@"変換しない"];
- [alert.buttons.lastObject setKeyEquivalent:@"\x1b"];
+ NSButton *button = [alert addButtonWithTitle:@"変換しない"];
+ button.keyEquivalent = @"\x1b";
[alert setShowsSuppressionButton:TRUE];
[alert setMessageText:@"編集前にメッセージを変換しますか?"];
[alert setInformativeText:@"このメッセージには ISO 2022-JP でエンコードできない文字が含まれています。"];
[alert setAlertStyle:NSInformationalAlertStyle];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.8 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
- [alert beginSheetModalForWindow:[self window] completionHandler:^(NSModalResponse returnCode){
+ [alert beginSheetModalForWindow:[self _windowLF] completionHandler:^(NSModalResponse returnCode){
if (returnCode == NSAlertFirstButtonReturn) {
fixSubjectOnLoad(self);
if ([app ver] == LF_Mavericks || [app ver] == LF_Yosemite) {
fixLetter(self, [self webView], FALSE, TRUE);
- } else if ([app ver] == LF_ElCapitan) {
+ } else if ([app ver] == LF_ElCapitan || [app ver] == LF_Sierra ||
+ [app ver] == LF_HighSierra|| [app ver] == LF_Mojave) {
fixLetter(self, [self composeWebView], FALSE, TRUE);
}
} else if (returnCode == NSAlertSecondButtonReturn) {
if ([app operationAtOpen] == 0) {
NSAlert *alert = [[[NSAlert alloc] init] autorelease];
[alert addButtonWithTitle:@"変換"];
- [alert addButtonWithTitle:@"変換しない"];
- [alert.buttons.lastObject setKeyEquivalent:@"\x1b"];
+ NSButton *button = [alert addButtonWithTitle:@"変換しない"];
+ button.keyEquivalent = @"\x1b";
[alert setShowsSuppressionButton:TRUE];
[alert setMessageText:@"編集前にメッセージを変換しますか?"];
[alert setInformativeText:@"このメッセージには ISO 2022-JP でエンコードできない文字が含まれています。"];
[alert setAlertStyle:NSInformationalAlertStyle];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
- [alert beginSheetModalForWindow:[self window] completionHandler:^(NSModalResponse returnCode){
+ [alert beginSheetModalForWindow:[self _windowLF] completionHandler:^(NSModalResponse returnCode){
if (returnCode == NSAlertFirstButtonReturn) {
fixSubjectOnLoad(self);
- if ([app ver] == LF_ElCapitan) {
+ if ([app ver] == LF_ElCapitan || [app ver] == LF_Sierra ||
+ [app ver] == LF_HighSierra|| [app ver] == LF_Mojave) {
fixLetter(self, [self composeWebView], FALSE, TRUE);
}
} else if (returnCode == NSAlertSecondButtonReturn) {
id composeView;
if ([app ver] == LF_Mavericks || [app ver] == LF_Yosemite) {
composeView = [self webView];
- } else if ([app ver] == LF_ElCapitan) {
+ } else if ([app ver] == LF_ElCapitan || [app ver] == LF_Sierra ||
+ [app ver] == LF_HighSierra|| [app ver] == LF_Mojave) {
composeView = [self composeWebView];
} else {
[self _LF_send: arg1];
if (0 < fixLetter(self, composeView, TRUE, FALSE)) {
NSAlert *alert = [[[NSAlert alloc] init] autorelease];
[alert addButtonWithTitle:@"変換して送信"];
- [alert addButtonWithTitle:@"キャンセル"];
- [alert.buttons.lastObject setKeyEquivalent:@"\x1b"];
+ NSButton *button = [alert addButtonWithTitle:@"キャンセル"];
+ button.keyEquivalent = @"\x1b";
[alert addButtonWithTitle:@"変換せずに送信"];
[alert addButtonWithTitle:@"変換のみ"];
[alert setMessageText:@"メッセージを変換して送信しますか?"];
[alert setInformativeText:@"送信しようとしているメッセージには ISO 2022-JP でエンコードできない文字が含まれています。"];
[alert setAlertStyle:NSInformationalAlertStyle];
- [alert beginSheetModalForWindow:[self window] completionHandler:^(NSModalResponse returnCode) {
+ [alert beginSheetModalForWindow:[self _windowLF] completionHandler:^(NSModalResponse returnCode) {
if (returnCode == NSAlertFirstButtonReturn) {
if ([app ver] == LF_Mavericks || [app ver] == LF_Yosemite) {
fixLetter(self, [self webView], FALSE, FALSE);
- } else if ([app ver] == LF_ElCapitan) {
+ } else if ([app ver] == LF_ElCapitan || [app ver] == LF_Sierra ||
+ [app ver] == LF_HighSierra|| [app ver] == LF_Mojave) {
fixLetter(self, [self composeWebView], FALSE, FALSE);
}
if (backendGetPreferredEncoding([self backEnd]) != LF_Encoding_ISO2022JP) backendSetPreferredEncoding([self backEnd], LF_Encoding_ISO2022JP);
} else if (returnCode == (NSAlertThirdButtonReturn + 1)) { // 変換のみ
if ([app ver] == LF_Mavericks || [app ver] == LF_Yosemite) {
fixLetter(self, [self webView], FALSE, FALSE);
- } else if ([app ver] == LF_ElCapitan) {
+ } else if ([app ver] == LF_ElCapitan || [app ver] == LF_Sierra ||
+ [app ver] == LF_HighSierra|| [app ver] == LF_Mojave) {
fixLetter(self, [self composeWebView], FALSE, FALSE);
}
if (backendGetPreferredEncoding([self backEnd]) != LF_Encoding_ISO2022JP) backendSetPreferredEncoding([self backEnd], LF_Encoding_ISO2022JP);
{
NSAlert *alert = [[[NSAlert alloc] init] autorelease];
[alert addButtonWithTitle:@"変換して送信"];
- [alert addButtonWithTitle:@"キャンセル"];
- [alert.buttons.lastObject setKeyEquivalent:@"\x1b"];
+ NSButton *button = [alert addButtonWithTitle:@"キャンセル"];
+ button.keyEquivalent = @"\x1b";
[alert addButtonWithTitle:@"変換せずに送信"];
[alert addButtonWithTitle:@"変換のみ"];
[alert setMessageText:@"件名を変換して送信しますか?"];
[alert setInformativeText:@"送信するメッセージの件名には ISO 2022-JP でエンコードできない文字が含まれています。"];
[alert setAlertStyle:NSInformationalAlertStyle];
- [alert beginSheetModalForWindow:[self window] completionHandler:^(NSModalResponse returnCode) {
+ [alert beginSheetModalForWindow:[self _windowLF] completionHandler:^(NSModalResponse returnCode) {
if (returnCode == NSAlertFirstButtonReturn) {
fixHeader(self);
[[alert window] orderOut:arg1];
id composeView;
if ([app willCheckOnSave] && ([app ver] == LF_Mavericks || [app ver] == LF_Yosemite)) {
composeView = [self webView];
- } else if ([app willCheckOnSave] && [app ver] == LF_ElCapitan) {
+ } else if ([app willCheckOnSave] &&
+ ([app ver] == LF_ElCapitan || [app ver] == LF_Sierra ||
+ [app ver] == LF_HighSierra|| [app ver] == LF_Mojave)) {
composeView = [self composeWebView];
} else {
[self _LF_saveDocument: arg1];
if (([app isActive] != NO) && ([check_at_save containsObject:self]==NO) &&(0 < fixLetter(self, composeView, TRUE, FALSE))) {
NSAlert *alert = [[[NSAlert alloc] init] autorelease];
[alert addButtonWithTitle:@"変換"];
- [alert addButtonWithTitle:@"変換しない"];
- [alert.buttons.lastObject setKeyEquivalent:@"\x1b"];
+ NSButton *button = [alert addButtonWithTitle:@"変換しない"];
+ button.keyEquivalent = @"\x1b";
[alert setMessageText:@"保存前にメッセージを変換しますか?"];
[alert setInformativeText:@"このメッセージには ISO 2022-JP でエンコードできない文字が含まれています。\n"
@"変換しないを選択した場合、メールの送信またはウインドウを開き直すまでエンコーディングの確認を行いません。"];
[alert setAlertStyle:NSWarningAlertStyle];
- [alert beginSheetModalForWindow:[self window] completionHandler:^(NSModalResponse returnCode) {
+ [alert beginSheetModalForWindow:[self _windowLF] completionHandler:^(NSModalResponse returnCode) {
if (returnCode == NSAlertFirstButtonReturn) {
if ([app ver] == LF_Mavericks || [app ver] == LF_Yosemite) {
fixLetter(self, [self webView], FALSE, FALSE);
- } else if ([app ver] == LF_ElCapitan) {
+ } else if ([app ver] == LF_ElCapitan || [app ver] == LF_Sierra ||
+ [app ver] == LF_HighSierra|| [app ver] == LF_Mojave) {
fixLetter(self, [self composeWebView], FALSE, FALSE);
}
} else if (returnCode == NSAlertSecondButtonReturn) {
[self _LF_animationCompleted];
}
+NSWindow *_LF_IMP_window(id self, SEL _cmd)
+{
+ if ([app ver] == LF_Mavericks || [app ver] == LF_Yosemite || [app ver] == LF_ElCapitan ) {
+ return [self window];
+ } else if ([app ver] == LF_Sierra || [app ver] == LF_HighSierra||
+ [app ver] == LF_Mojave) {
+ return [[self view] window];
+ }
+ return nil;
+}
+
#define MVMailBundle (NSClassFromString(@"MVMailBundle"))
@implementation LetterFix
Class editorClass = nil;
if ([app ver] == LF_Mavericks || [app ver] == LF_Yosemite) {
editorClass = NSClassFromString(@"DocumentEditor");
- } else if ([app ver] == LF_ElCapitan) {
+ } else if ([app ver] == LF_ElCapitan || [app ver] == LF_Sierra ||
+ [app ver] == LF_HighSierra|| [app ver] == LF_Mojave) {
editorClass = NSClassFromString(@"ComposeViewController");
} else {
return;
}
+ class_addMethod(editorClass, @selector(_windowLF), (IMP)_LF_IMP_window, "@@:");
//
// swizzling method
swizzlingMethod(editorClass, @selector(_animationCompleted), @selector(_LF_animationCompleted), (IMP)_LF_IMP_animationCompleted);
} else if ([app ver] == LF_ElCapitan) {
swizzlingMethod(editorClass, @selector(finishLoadingEditor), @selector(_LF_finishLoadingEditor), (IMP)_LF_IMP_finishLoadingEditor);
+ } else if ([app ver] == LF_Sierra || [app ver] == LF_HighSierra || [app ver] == LF_Mojave) {
+ swizzlingMethod(editorClass, @selector(_finishLoadingEditor), @selector(_LF_finishLoadingEditor), (IMP)_LF_IMP_finishLoadingEditor);
}
swizzlingMethod(editorClass, @selector(saveDocument:), @selector(_LF_saveDocument:), (IMP)_LF_IMP_saveDocument_);
swizzlingMethod(editorClass, @selector(send:), @selector(_LF_send:), (IMP)_LF_IMP_send_);