Aric Stewart : winemac.drv: Allow mac IME to clear text in system input method.
Alexandre Julliard
julliard at winehq.org
Mon May 6 15:38:49 CDT 2019
Module: wine
Branch: master
Commit: db3864e5b3804b1b7b5bb6ea9f032472e959856d
URL: https://source.winehq.org/git/wine.git/?a=commit;h=db3864e5b3804b1b7b5bb6ea9f032472e959856d
Author: Aric Stewart <aric at 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 at codeweavers.com>
Signed-off-by: Ken Thomases <ken at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at 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 */
More information about the wine-cvs
mailing list