來記錄一下修改的地方吧!
QSObjectView.m
在setSearchString:中加了一行
NSLog(@"setSearchString: %@", newSearchString);
作為debug用,不影響功能。
QSSearchObjectView.h
拿掉
//- (BOOL)handleSlashEvent:(NSEvent *)theEvent;
//- (BOOL)handleTildeEvent:(NSEvent *)theEvent;
這兩個method,取而代之的是
- (BOOL)handleSlash:(NSString *)aString;
- (BOOL)handleTilde:(NSString *)aString;
另外新增
- (void)processTextCommand:(NSString*)aString;
- (BOOL)handleBoundTextKey:(NSString *)aString;
兩個method。
QSSearchObjectView.h
1. 註解掉performKeyEquivalent:的實作。(目前先不註解,改成印出debug訊息)
2. setMarkedText: selectedRange:只留下空殼,內容都註解掉。(這應該是中文字一定要等打完才看得到的原因)
3. insertText:一開始檢查aString的型別,目的是處理NSAttributedString。後面會call processTextCommand:這個method。
4. 新增processTextCommand:與handleBoundTextKey:兩個method。前者處理slash與tilde鍵,後者處理定義在dict中的指令。最重要的改變是,這些指令從在keyDown就執行延後到insertText:時才執行了。
結果:
handleBoundKey只有在performKeyEquivalent:被call時才有可能執行。
已知bug:
1. 在pane1打「修改」,這時QS找不到東西,但仍可以按tab進入pane2,選Dictionary的話,會卡住。解法是用滑鼠點選pane1,並按兩下delete。
2. 不知名情況下,QS會停住,Xcode會花很久蒐集stack frame。
沒有留言:
張貼留言