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