Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
d81c4ce1
Commit
d81c4ce1
authored
Jan 23, 2024
by
Tim Clem
Committed by
Alexandre Julliard
Jan 23, 2024
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
winemac.drv: Detect active handwriting and panel IMEs.
Allows such IMEs that process keyboard input to do so. For instance, fixes backspace and escape for handwriting methods.
parent
7bd070ae
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
55 additions
and
14 deletions
+55
-14
cocoa_app.h
dlls/winemac.drv/cocoa_app.h
+0
-1
cocoa_app.m
dlls/winemac.drv/cocoa_app.m
+55
-13
No files found.
dlls/winemac.drv/cocoa_app.h
View file @
d81c4ce1
...
@@ -92,7 +92,6 @@ enum {
...
@@ -92,7 +92,6 @@ enum {
CGEventSourceKeyboardType
keyboardType
;
CGEventSourceKeyboardType
keyboardType
;
NSEvent
*
lastFlagsChanged
;
NSEvent
*
lastFlagsChanged
;
BOOL
inputSourceIsInputMethod
;
BOOL
inputSourceIsInputMethod
;
BOOL
inputSourceIsInputMethodValid
;
uint32_t
pressedKeyCodes
[
128
/
32
];
uint32_t
pressedKeyCodes
[
128
/
32
];
CGFloat
primaryScreenHeight
;
CGFloat
primaryScreenHeight
;
...
...
dlls/winemac.drv/cocoa_app.m
View file @
d81c4ce1
...
@@ -478,8 +478,6 @@ static NSString* WineLocalizedString(unsigned int stringID)
...
@@ -478,8 +478,6 @@ static NSString* WineLocalizedString(unsigned int stringID)
CFRelease
(
lastKeyboardLayoutInputSource
);
CFRelease
(
lastKeyboardLayoutInputSource
);
lastKeyboardLayoutInputSource
=
inputSourceLayout
;
lastKeyboardLayoutInputSource
=
inputSourceLayout
;
inputSourceIsInputMethodValid
=
FALSE
;
if
(
inputSourceLayout
)
if
(
inputSourceLayout
)
{
{
CFDataRef
uchr
;
CFDataRef
uchr
;
...
@@ -2064,24 +2062,68 @@ static NSString* WineLocalizedString(unsigned int stringID)
...
@@ -2064,24 +2062,68 @@ static NSString* WineLocalizedString(unsigned int stringID)
[
NSApp
activate
];
[
NSApp
activate
];
}
}
static
BOOL
InputSourceShouldBeIgnored
(
TISInputSourceRef
inputSource
)
{
/* Certain system utilities are technically input sources, but we
shouldn't consider them as such for our purposes.
Dictation is its own source too (com.apple.inputmethod.ironwood), but
it should receive keypresses; it cancels input on escape. */
static
CFStringRef
ignoredIDs
[]
=
{
/* The "Emoji & Symbols" palette. */
CFSTR
(
"com.apple.CharacterPaletteIM"
),
/* The on-screen keyboard and accessibility panel. */
CFSTR
(
"com.apple.inputmethod.AssistiveControl"
),
/* The popup for accented characters when you hold down a key. */
CFSTR
(
"com.apple.PressAndHold"
),
};
CFStringRef
sourceID
=
TISGetInputSourceProperty
(
inputSource
,
kTISPropertyInputSourceID
);
for
(
int
i
=
0
;
i
<
sizeof
(
ignoredIDs
)
/
sizeof
(
CFStringRef
);
i
++
)
{
if
(
CFEqual
(
sourceID
,
ignoredIDs
[
i
]))
return
YES
;
}
return
NO
;
}
-
(
BOOL
)
inputSourceIsInputMethod
-
(
BOOL
)
inputSourceIsInputMethod
{
{
if
(
!
inputSourceIsInputMethodValid
)
static
dispatch_once_t
onceToken
;
static
CFDictionaryRef
filterDict
;
CFArrayRef
enabledSources
;
CFIndex
i
;
BOOL
ret
=
NO
;
/* There may be multiple active ("selected") input sources, but there is
always exactly one selected keyboard input source. For instance,
handwriting methods are active simultaneously with a keyboard source.
As the name implies, TISCopyCurrentKeyboardInputSource only returns
the keyboard source, so it's not sufficient for our needs. We use
TISCreateInputSourceList instead to find all selected sources. */
dispatch_once
(
&
onceToken
,
^
{
filterDict
=
CFDictionaryCreate
(
NULL
,
(
const
void
**
)
&
kTISPropertyInputSourceIsSelected
,
(
const
void
**
)
&
kCFBooleanTrue
,
1
,
&
kCFTypeDictionaryKeyCallBacks
,
&
kCFTypeDictionaryValueCallBacks
);
});
enabledSources
=
TISCreateInputSourceList
(
filterDict
,
false
);
for
(
i
=
0
;
i
<
CFArrayGetCount
(
enabledSources
);
i
++
)
{
{
TISInputSourceRef
inputSource
=
TISCopyCurrentKeyboardInputSource
();
TISInputSourceRef
source
=
(
TISInputSourceRef
)
CFArrayGetValueAtIndex
(
enabledSources
,
i
);
if
(
inputSource
)
CFStringRef
type
=
TISGetInputSourceProperty
(
source
,
kTISPropertyInputSourceType
);
/* kTISTypeKeyboardLayout is for physical keyboards. Any type other
than that is an IME. */
if
(
!
CFEqual
(
type
,
kTISTypeKeyboardLayout
)
&&
!
InputSourceShouldBeIgnored
(
source
))
{
{
CFStringRef
type
=
TISGetInputSourceProperty
(
inputSource
,
kTISPropertyInputSourceType
);
ret
=
YES
;
inputSourceIsInputMethod
=
!
CFEqual
(
type
,
kTISTypeKeyboardLayout
);
break
;
CFRelease
(
inputSource
);
}
}
else
inputSourceIsInputMethod
=
FALSE
;
inputSourceIsInputMethodValid
=
TRUE
;
}
}
return
inputSourceIsInputMethod
;
CFRelease
(
enabledSources
);
}
return
ret
;
}
-
(
void
)
releaseMouseCapture
-
(
void
)
releaseMouseCapture
{
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment