SDL
2.0
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
SDL_ime.c
Go to the documentation of this file.
1
/*
2
Simple DirectMedia Layer
3
Copyright (C) 1997-2018 Sam Lantinga <slouken@libsdl.org>
4
5
This software is provided 'as-is', without any express or implied
6
warranty. In no event will the authors be held liable for any damages
7
arising from the use of this software.
8
9
Permission is granted to anyone to use this software for any purpose,
10
including commercial applications, and to alter it and redistribute it
11
freely, subject to the following restrictions:
12
13
1. The origin of this software must not be misrepresented; you must not
14
claim that you wrote the original software. If you use this software
15
in a product, an acknowledgment in the product documentation would be
16
appreciated but is not required.
17
2. Altered source versions must be plainly marked as such, and must not be
18
misrepresented as being the original software.
19
3. This notice may not be removed or altered from any source distribution.
20
*/
21
22
#include "
SDL_ime.h
"
23
#include "
SDL_ibus.h
"
24
#include "
SDL_fcitx.h
"
25
26
typedef
SDL_bool
(*
_SDL_IME_Init
)();
27
typedef
void
(*
_SDL_IME_Quit
)();
28
typedef
void
(*
_SDL_IME_SetFocus
)(
SDL_bool
);
29
typedef
void
(*
_SDL_IME_Reset
)();
30
typedef
SDL_bool
(*
_SDL_IME_ProcessKeyEvent
)(
Uint32
,
Uint32
);
31
typedef
void
(*
_SDL_IME_UpdateTextRect
)(
SDL_Rect
*);
32
typedef
void
(*
_SDL_IME_PumpEvents
)();
33
34
static
_SDL_IME_Init
SDL_IME_Init_Real
=
NULL
;
35
static
_SDL_IME_Quit
SDL_IME_Quit_Real
=
NULL
;
36
static
_SDL_IME_SetFocus
SDL_IME_SetFocus_Real
=
NULL
;
37
static
_SDL_IME_Reset
SDL_IME_Reset_Real
=
NULL
;
38
static
_SDL_IME_ProcessKeyEvent
SDL_IME_ProcessKeyEvent_Real
=
NULL
;
39
static
_SDL_IME_UpdateTextRect
SDL_IME_UpdateTextRect_Real
=
NULL
;
40
static
_SDL_IME_PumpEvents
SDL_IME_PumpEvents_Real
=
NULL
;
41
42
static
void
43
InitIME
()
44
{
45
static
SDL_bool
inited =
SDL_FALSE
;
46
#ifdef HAVE_FCITX_FRONTEND_H
47
const
char
*im_module =
SDL_getenv
(
"SDL_IM_MODULE"
);
48
const
char
*xmodifiers =
SDL_getenv
(
"XMODIFIERS"
);
49
#endif
50
51
if
(inited ==
SDL_TRUE
)
52
return
;
53
54
inited =
SDL_TRUE
;
55
56
/* See if fcitx IME support is being requested */
57
#ifdef HAVE_FCITX_FRONTEND_H
58
if
(!
SDL_IME_Init_Real
&&
59
((im_module &&
SDL_strcmp
(im_module,
"fcitx"
) == 0) ||
60
(!im_module && xmodifiers &&
SDL_strstr
(xmodifiers,
"@im=fcitx"
) !=
NULL
))) {
61
SDL_IME_Init_Real
=
SDL_Fcitx_Init
;
62
SDL_IME_Quit_Real
=
SDL_Fcitx_Quit
;
63
SDL_IME_SetFocus_Real
=
SDL_Fcitx_SetFocus
;
64
SDL_IME_Reset_Real
=
SDL_Fcitx_Reset
;
65
SDL_IME_ProcessKeyEvent_Real
=
SDL_Fcitx_ProcessKeyEvent
;
66
SDL_IME_UpdateTextRect_Real
=
SDL_Fcitx_UpdateTextRect
;
67
SDL_IME_PumpEvents_Real
=
SDL_Fcitx_PumpEvents
;
68
}
69
#endif
/* HAVE_FCITX_FRONTEND_H */
70
71
/* default to IBus */
72
#ifdef HAVE_IBUS_IBUS_H
73
if
(!
SDL_IME_Init_Real
) {
74
SDL_IME_Init_Real
= SDL_IBus_Init;
75
SDL_IME_Quit_Real
= SDL_IBus_Quit;
76
SDL_IME_SetFocus_Real
= SDL_IBus_SetFocus;
77
SDL_IME_Reset_Real
= SDL_IBus_Reset;
78
SDL_IME_ProcessKeyEvent_Real
= SDL_IBus_ProcessKeyEvent;
79
SDL_IME_UpdateTextRect_Real
= SDL_IBus_UpdateTextRect;
80
SDL_IME_PumpEvents_Real
= SDL_IBus_PumpEvents;
81
}
82
#endif
/* HAVE_IBUS_IBUS_H */
83
}
84
85
SDL_bool
86
SDL_IME_Init
(
void
)
87
{
88
InitIME
();
89
90
if
(
SDL_IME_Init_Real
) {
91
if
(
SDL_IME_Init_Real
()) {
92
return
SDL_TRUE
;
93
}
94
95
/* uhoh, the IME implementation's init failed! Disable IME support. */
96
SDL_IME_Init_Real
=
NULL
;
97
SDL_IME_Quit_Real
=
NULL
;
98
SDL_IME_SetFocus_Real
=
NULL
;
99
SDL_IME_Reset_Real
=
NULL
;
100
SDL_IME_ProcessKeyEvent_Real
=
NULL
;
101
SDL_IME_UpdateTextRect_Real
=
NULL
;
102
SDL_IME_PumpEvents_Real
=
NULL
;
103
}
104
105
return
SDL_FALSE
;
106
}
107
108
void
109
SDL_IME_Quit
(
void
)
110
{
111
if
(
SDL_IME_Quit_Real
)
112
SDL_IME_Quit_Real
();
113
}
114
115
void
116
SDL_IME_SetFocus
(
SDL_bool
focused)
117
{
118
if
(
SDL_IME_SetFocus_Real
)
119
SDL_IME_SetFocus_Real
(focused);
120
}
121
122
void
123
SDL_IME_Reset
(
void
)
124
{
125
if
(
SDL_IME_Reset_Real
)
126
SDL_IME_Reset_Real
();
127
}
128
129
SDL_bool
130
SDL_IME_ProcessKeyEvent
(
Uint32
keysym,
Uint32
keycode)
131
{
132
if
(
SDL_IME_ProcessKeyEvent_Real
)
133
return
SDL_IME_ProcessKeyEvent_Real
(keysym, keycode);
134
135
return
SDL_FALSE
;
136
}
137
138
void
139
SDL_IME_UpdateTextRect
(
SDL_Rect
*
rect
)
140
{
141
if
(
SDL_IME_UpdateTextRect_Real
)
142
SDL_IME_UpdateTextRect_Real
(rect);
143
}
144
145
void
146
SDL_IME_PumpEvents
()
147
{
148
if
(
SDL_IME_PumpEvents_Real
)
149
SDL_IME_PumpEvents_Real
();
150
}
151
152
/* vi: set ts=4 sw=4 expandtab: */
src
core
linux
SDL_ime.c
Generated on Sun Jun 26 2022 23:07:10 for SDL by
1.8.1.2