Module: wine Branch: master Commit: db3864e5b3804b1b7b5bb6ea9f032472e959856d URL: https://source.winehq.org/git/wine.git/?a=commit;h=db3864e5b3804b1b7b5bb6ea9...
Author: Aric Stewart aric@codeweavers.com Date: Mon May 6 11:30:14 2019 -0500
winemac.drv: Allow mac IME to clear text in system input method.
Signed-off-by: Aric Stewart aric@codeweavers.com Signed-off-by: Ken Thomases ken@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/winemac.drv/cocoa_window.m | 26 +++++++++++++++++++++++--- dlls/winemac.drv/ime.c | 2 +- dlls/winemac.drv/macdrv_cocoa.h | 2 ++ 3 files changed, 26 insertions(+), 4 deletions(-)
diff --git a/dlls/winemac.drv/cocoa_window.m b/dlls/winemac.drv/cocoa_window.m index f43b26b..0bc4d38 100644 --- a/dlls/winemac.drv/cocoa_window.m +++ b/dlls/winemac.drv/cocoa_window.m @@ -702,6 +702,13 @@ static CVReturn WineDisplayLinkCallback(CVDisplayLinkRef displayLink, const CVTi [self invalidateHasGLDescendant]; }
+ - (void) clearMarkedText + { + [markedText deleteCharactersInRange:NSMakeRange(0, [markedText length])]; + markedTextSelection = NSMakeRange(0, 0); + [[self inputContext] discardMarkedText]; + } + - (void) completeText:(NSString*)text { macdrv_event* event; @@ -716,9 +723,7 @@ static CVReturn WineDisplayLinkCallback(CVDisplayLinkRef displayLink, const CVTi
macdrv_release_event(event);
- [markedText deleteCharactersInRange:NSMakeRange(0, [markedText length])]; - markedTextSelection = NSMakeRange(0, 0); - [[self inputContext] discardMarkedText]; + [self clearMarkedText]; }
- (void) didAddSubview:(NSView*)subview @@ -3907,3 +3912,18 @@ void macdrv_send_text_input_event(int pressed, unsigned int flags, int repeat, i macdrv_release_event(event); }); } + +void macdrv_clear_ime_text(void) +{ + OnMainThreadAsync(^{ + WineWindow* window = (WineWindow*)[NSApp keyWindow]; + if (![window isKindOfClass:[WineWindow class]]) + { + window = (WineWindow*)[NSApp mainWindow]; + if (![window isKindOfClass:[WineWindow class]]) + window = [[WineApplicationController sharedController] frontWineWindow]; + } + if (window) + [[window contentView] clearMarkedText]; + }); +} diff --git a/dlls/winemac.drv/ime.c b/dlls/winemac.drv/ime.c index 4d95275..1f5cb6b 100644 --- a/dlls/winemac.drv/ime.c +++ b/dlls/winemac.drv/ime.c @@ -76,7 +76,6 @@ static UINT WM_MSIME_RECONVERT; static UINT WM_MSIME_QUERYPOSITION; static UINT WM_MSIME_DOCUMENTFEED;
- static HIMC RealIMC(HIMC hIMC) { if (hIMC == FROM_MACDRV) @@ -840,6 +839,7 @@ BOOL WINAPI NotifyIME(HIMC hIMC, DWORD dwAction, DWORD dwIndex, DWORD dwValue)
TRACE("NI_COMPOSITIONSTR: CPS_CANCEL\n");
+ macdrv_clear_ime_text(); if (lpIMC->hCompStr) ImmDestroyIMCC(lpIMC->hCompStr);
diff --git a/dlls/winemac.drv/macdrv_cocoa.h b/dlls/winemac.drv/macdrv_cocoa.h index 6165dc5..8ca9b9a 100644 --- a/dlls/winemac.drv/macdrv_cocoa.h +++ b/dlls/winemac.drv/macdrv_cocoa.h @@ -580,4 +580,6 @@ extern void macdrv_destroy_status_item(macdrv_status_item s) DECLSPEC_HIDDEN; extern void macdrv_set_status_item_image(macdrv_status_item s, CGImageRef cgimage) DECLSPEC_HIDDEN; extern void macdrv_set_status_item_tooltip(macdrv_status_item s, CFStringRef cftip) DECLSPEC_HIDDEN;
+extern void macdrv_clear_ime_text(void) DECLSPEC_HIDDEN; + #endif /* __WINE_MACDRV_COCOA_H */