Aric Stewart : winemac.drv: Allow mac IME to clear text in system input method.
Module: wine Branch: master Commit: db3864e5b3804b1b7b5bb6ea9f032472e959856d URL: https://source.winehq.org/git/wine.git/?a=commit;h=db3864e5b3804b1b7b5bb6ea9... Author: Aric Stewart <aric(a)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(a)codeweavers.com> Signed-off-by: Ken Thomases <ken(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)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 */
participants (1)
-
Alexandre Julliard