From: Marc-Aurel Zent mzent@codeweavers.com
--- dlls/winemac.drv/cocoa_window.m | 20 ++++-------------- dlls/winemac.drv/event.c | 37 +++++---------------------------- dlls/winemac.drv/macdrv_cocoa.h | 9 +++----- 3 files changed, 12 insertions(+), 54 deletions(-)
diff --git a/dlls/winemac.drv/cocoa_window.m b/dlls/winemac.drv/cocoa_window.m index 69613c857fc..2ecf5183e94 100644 --- a/dlls/winemac.drv/cocoa_window.m +++ b/dlls/winemac.drv/cocoa_window.m @@ -920,28 +920,16 @@ - (NSArray*) validAttributesForMarkedText
- (NSRect) firstRectForCharacterRange:(NSRange)aRange actualRange:(NSRangePointer)actualRange { - macdrv_query* query; WineWindow* window = (WineWindow*)[self window]; NSRect ret;
aRange = NSIntersectionRange(aRange, NSMakeRange(0, [markedText length]));
- query = macdrv_create_query(); - query->type = QUERY_IME_CHAR_RECT; - query->window = (macdrv_window)[window retain]; - query->ime_char_rect.himc = [window himc]; - query->ime_char_rect.range = CFRangeMake(aRange.location, aRange.length); + pthread_mutex_lock(&ime_composition_rect_mutex); + ret = NSRectFromCGRect(cgrect_mac_from_win(ime_composition_rect)); + pthread_mutex_unlock(&ime_composition_rect_mutex);
- if ([window.queue query:query timeout:0.3 flags:WineQueryNoPreemptWait]) - { - aRange = NSMakeRange(query->ime_char_rect.range.location, query->ime_char_rect.range.length); - ret = NSRectFromCGRect(cgrect_mac_from_win(query->ime_char_rect.rect)); - [[WineApplicationController sharedController] flipRect:&ret]; - } - else - ret = NSMakeRect(100, 100, aRange.length ? 1 : 0, 12); - - macdrv_release_query(query); + [[WineApplicationController sharedController] flipRect:&ret];
if (actualRange) *actualRange = aRange; diff --git a/dlls/winemac.drv/event.c b/dlls/winemac.drv/event.c index 05f2eca50e3..ed288ae29c0 100644 --- a/dlls/winemac.drv/event.c +++ b/dlls/winemac.drv/event.c @@ -36,8 +36,8 @@ WINE_DEFAULT_DEBUG_CHANNEL(event); WINE_DECLARE_DEBUG_CHANNEL(imm);
-static pthread_mutex_t ime_mutex = PTHREAD_MUTEX_INITIALIZER; -static RECT ime_composition_rect; +pthread_mutex_t ime_composition_rect_mutex = PTHREAD_MUTEX_INITIALIZER; +CGRect ime_composition_rect;
/* return the name of an Mac event */ static const char *dbgstr_event(int type) @@ -290,38 +290,15 @@ static BOOL query_drag_drop_drag(macdrv_query *query) }
-/************************************************************************** - * query_ime_char_rect - */ -BOOL query_ime_char_rect(macdrv_query* query) -{ - HWND hwnd = macdrv_get_window_hwnd(query->window); - void *himc = query->ime_char_rect.himc; - CFRange *range = &query->ime_char_rect.range; - - TRACE_(imm)("win %p/%p himc %p range %ld-%ld\n", hwnd, query->window, himc, range->location, - range->length); - - pthread_mutex_lock(&ime_mutex); - query->ime_char_rect.rect = cgrect_from_rect(ime_composition_rect); - pthread_mutex_unlock(&ime_mutex); - - TRACE_(imm)(" -> range %ld-%ld rect %s\n", range->location, - range->length, wine_dbgstr_cgrect(query->ime_char_rect.rect)); - - return TRUE; -} - - /*********************************************************************** * SetIMECompositionRect (MACDRV.@) */ BOOL macdrv_SetIMECompositionRect(HWND hwnd, RECT rect) { TRACE("hwnd %p, rect %s\n", hwnd, wine_dbgstr_rect(&rect)); - pthread_mutex_lock(&ime_mutex); - ime_composition_rect = rect; - pthread_mutex_unlock(&ime_mutex); + pthread_mutex_lock(&ime_composition_rect_mutex); + ime_composition_rect = cgrect_from_rect(rect); + pthread_mutex_unlock(&ime_composition_rect_mutex); return TRUE; }
@@ -364,10 +341,6 @@ static void macdrv_query_event(HWND hwnd, const macdrv_event *event) TRACE("QUERY_DRAG_DROP_DROP\n"); success = query_drag_drop_drop(query); break; - case QUERY_IME_CHAR_RECT: - TRACE("QUERY_IME_CHAR_RECT\n"); - success = query_ime_char_rect(query); - break; case QUERY_PASTEBOARD_DATA: TRACE("QUERY_PASTEBOARD_DATA\n"); success = query_pasteboard_data(hwnd, query->pasteboard_data.type); diff --git a/dlls/winemac.drv/macdrv_cocoa.h b/dlls/winemac.drv/macdrv_cocoa.h index e6999670cb5..d4d1dde6bda 100644 --- a/dlls/winemac.drv/macdrv_cocoa.h +++ b/dlls/winemac.drv/macdrv_cocoa.h @@ -415,7 +415,6 @@ extern int macdrv_set_display_mode(const struct macdrv_display* display, QUERY_DRAG_DROP_LEAVE, QUERY_DRAG_DROP_DRAG, QUERY_DRAG_DROP_DROP, - QUERY_IME_CHAR_RECT, QUERY_PASTEBOARD_DATA, QUERY_RESIZE_SIZE, QUERY_RESIZE_START, @@ -436,11 +435,6 @@ extern int macdrv_set_display_mode(const struct macdrv_display* display, uint32_t ops; CFTypeRef pasteboard; } drag_drop; - struct { - void *himc; - CFRange range; - CGRect rect; - } ime_char_rect; struct { CFStringRef type; } pasteboard_data; @@ -578,6 +572,9 @@ extern void macdrv_get_input_source_info(CFDataRef* uchr,CGEventSourceKeyboardTy extern void macdrv_set_status_item_image(macdrv_status_item s, CGImageRef cgimage); extern void macdrv_set_status_item_tooltip(macdrv_status_item s, CFStringRef cftip);
+/* ime */ +extern pthread_mutex_t ime_composition_rect_mutex; +extern CGRect ime_composition_rect; extern void macdrv_clear_ime_text(void);
#endif /* __WINE_MACDRV_COCOA_H */