Skip to content

Commit c3a6265

Browse files
feat: update xcb-imdkit to 1.0.9-1
1 parent c0680f9 commit c3a6265

File tree

15 files changed

+190
-103
lines changed

15 files changed

+190
-103
lines changed

.gitignore

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,6 @@
1-
.pc/
1+
*.kdev4
2+
build*/
3+
*~
4+
*.swp
5+
cscope.*
6+
i18nIMProto.c

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
cmake_minimum_required(VERSION 3.8)
2-
project(xcb-imdkit VERSION 1.0.5)
2+
project(xcb-imdkit VERSION 1.0.9)
33

44
find_package(ECM 0.0.11 REQUIRED NO_MODULE)
55
set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH})

debian/changelog

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,28 @@
1+
xcb-imdkit (1.0.9-1) unstable; urgency=medium
2+
3+
* New upstream release.
4+
5+
-- Boyuan Yang <byang@debian.org> Thu, 06 Jun 2024 22:07:59 -0400
6+
7+
xcb-imdkit (1.0.8-1) unstable; urgency=medium
8+
9+
* New upstream release.
10+
* debian/libxcb-imdkit1.symbols: Refresh symbols file.
11+
12+
-- Boyuan Yang <byang@debian.org> Wed, 24 Apr 2024 14:28:21 -0400
13+
14+
xcb-imdkit (1.0.7-1) unstable; urgency=medium
15+
16+
* New upstream release.
17+
18+
-- Boyuan Yang <byang@debian.org> Mon, 18 Mar 2024 22:54:31 -0400
19+
20+
xcb-imdkit (1.0.6-1) unstable; urgency=medium
21+
22+
* New upstream release.
23+
24+
-- Boyuan Yang <byang@debian.org> Thu, 04 Jan 2024 15:29:15 -0500
25+
126
xcb-imdkit (1.0.5-1) unstable; urgency=medium
227

328
* Upload to unstable.

debian/libxcb-imdkit1.symbols

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ libxcb-imdkit.so.1 libxcb-imdkit1 #MINVER#
88
xcb_im_destroy@Base 1.0.1
99
xcb_im_filter_event@Base 1.0.1
1010
xcb_im_forward_event@Base 1.0.1
11+
xcb_im_forward_event_full@Base 1.0.8
1112
xcb_im_geometry_callback@Base 1.0.1
1213
xcb_im_input_context_get_client_window@Base 1.0.1
1314
xcb_im_input_context_get_data@Base 1.0.1
@@ -47,6 +48,7 @@ libxcb-imdkit.so.1 libxcb-imdkit1 #MINVER#
4748
xcb_xim_ext_move@Base 1.0.1
4849
xcb_xim_filter_event@Base 1.0.1
4950
xcb_xim_forward_event@Base 1.0.1
51+
xcb_xim_forward_event_full@Base 1.0.8
5052
xcb_xim_get_encoding@Base 1.0.3
5153
xcb_xim_get_ic_values@Base 1.0.1
5254
xcb_xim_get_im_values@Base 1.0.1

src/common.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323

2424
#define ARRAY_SIZE(X) (sizeof(X) / sizeof(X[0]))
2525

26-
#define XIM_MESSAGE_BYTES(hdr) ((hdr)->length * 4)
26+
#define XIM_MESSAGE_BYTES(hdr) ((hdr)->length * 4u)
2727

2828
/*
2929
* categories in XIM_SERVERS

src/imclient.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -792,6 +792,7 @@ bool _xcb_xim_filter_property_changed(xcb_xim_t *im,
792792

793793
bool xcb_xim_filter_event(xcb_xim_t *im, xcb_generic_event_t *event) {
794794
im->yield_recheck = false;
795+
im->event_sequence = event->full_sequence;
795796
bool result = _xcb_xim_preconnect_im(im, event) ||
796797
_xcb_xim_filter_event(im, event) ||
797798
_xcb_xim_filter_destroy_window(im, event) ||
@@ -1487,6 +1488,12 @@ bool xcb_xim_unset_ic_focus(xcb_xim_t *im, xcb_xic_t ic) {
14871488

14881489
bool xcb_xim_forward_event(xcb_xim_t *im, xcb_xic_t ic,
14891490
xcb_key_press_event_t *event) {
1491+
return xcb_xim_forward_event_full(im, ic, (im->event_sequence >> 16),
1492+
event);
1493+
}
1494+
1495+
bool xcb_xim_forward_event_full(xcb_xim_t *im, xcb_xic_t ic, uint16_t sequence,
1496+
xcb_key_press_event_t *event) {
14901497
xcb_xim_request_queue_t *queue =
14911498
_xcb_xim_new_request(im, XCB_XIM_FORWARD_EVENT, 0, NULL, NULL);
14921499
if (!queue) {
@@ -1496,7 +1503,7 @@ bool xcb_xim_forward_event(xcb_xim_t *im, xcb_xic_t ic,
14961503
frame.input_method_ID = im->connect_id;
14971504
frame.input_context_ID = ic;
14981505
frame.flag = XCB_XIM_SYNCHRONOUS;
1499-
frame.sequence_number = event->sequence;
1506+
frame.sequence_number = sequence;
15001507

15011508
const size_t length =
15021509
xcb_im_forward_event_fr_size(&frame) + sizeof(xcb_key_press_event_t);

src/imclient.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,9 @@ XCBIMDKIT_EXPORT bool xcb_xim_set_ic_focus(xcb_xim_t *im, xcb_xic_t ic);
162162
XCBIMDKIT_EXPORT bool xcb_xim_unset_ic_focus(xcb_xim_t *im, xcb_xic_t ic);
163163
XCBIMDKIT_EXPORT bool xcb_xim_forward_event(xcb_xim_t *im, xcb_xic_t ic,
164164
xcb_key_press_event_t *event);
165+
XCBIMDKIT_EXPORT bool xcb_xim_forward_event_full(xcb_xim_t *im, xcb_xic_t ic,
166+
uint16_t sequence,
167+
xcb_key_press_event_t *event);
165168
XCBIMDKIT_EXPORT bool xcb_xim_reset_ic(xcb_xim_t *im, xcb_xic_t ic,
166169
xcb_xim_reset_ic_callback callback,
167170
void *user_data);

src/imclient_p.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,13 +171,15 @@ struct _xcb_xim_t {
171171
bool use_compound_text;
172172
bool use_utf8_string;
173173
xcb_xim_encoding_t encoding;
174+
175+
uint32_t event_sequence;
174176
};
175177

176178
#define _xcb_xim_read_frame(FRAME, DATA, LEN, FAIL) \
177179
do { \
178180
FAIL = false; \
179181
uint8_t *_data = DATA; \
180-
size_t len = (LEN); \
182+
size_t len = (size_t)(LEN); \
181183
frame_read_func(FRAME)(&FRAME, &_data, &len, false); \
182184
if (!_data) { \
183185
frame_free_func(FRAME)(&FRAME); \

src/imdkit.c

Lines changed: 30 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -836,11 +836,17 @@ void xcb_im_destroy(xcb_im_t *im) {
836836

837837
void xcb_im_forward_event(xcb_im_t *im, xcb_im_input_context_t *ic,
838838
xcb_key_press_event_t *event) {
839+
xcb_im_forward_event_full(im, ic, ic->forward_event_sequence, event);
840+
}
841+
842+
void xcb_im_forward_event_full(xcb_im_t *im, xcb_im_input_context_t *ic,
843+
uint16_t sequence,
844+
xcb_key_press_event_t *event) {
839845
xcb_im_client_t *client = ic->client;
840846
xcb_im_forward_event_fr_t frame;
841847
frame.input_method_ID = ic->client->connect_id;
842848
frame.input_context_ID = ic->id;
843-
frame.sequence_number = event->sequence;
849+
frame.sequence_number = sequence;
844850
if (im->use_sync_mode) {
845851
frame.flag = XCB_XIM_SYNCHRONOUS;
846852
client->sync = true;
@@ -891,22 +897,19 @@ void xcb_im_commit_string(xcb_im_t *im, xcb_im_input_context_t *ic,
891897
}
892898

893899
void xcb_im_preedit_start(xcb_im_t *im, xcb_im_input_context_t *ic) {
894-
if (im->onKeys.nKeys == 0 && im->offKeys.nKeys == 0) {
900+
if (!_xcb_im_has_trigger_key(im)) {
895901
return;
896902
}
897903

898-
uint32_t sync_event_mask = im->use_sync_event ? 0 : im->event_mask;
899-
sync_event_mask = ~sync_event_mask;
900-
_xcb_im_set_event_mask(im, ic->client, ic->id, im->event_mask,
901-
sync_event_mask);
904+
_xcb_im_set_ic_event_mask(im, ic);
902905
}
903906

904907
void xcb_im_preedit_end(xcb_im_t *im, xcb_im_input_context_t *ic) {
905-
if (im->onKeys.nKeys == 0 && im->offKeys.nKeys == 0) {
908+
if (!_xcb_im_has_trigger_key(im)) {
906909
return;
907910
}
908911

909-
_xcb_im_set_event_mask(im, ic->client, ic->id, 0, 0);
912+
_xcb_im_send_set_event_mask(im, ic->client, ic->id, 0, 0);
910913
}
911914

912915
void xcb_im_sync_xlib(xcb_im_t *im, xcb_im_input_context_t *ic) {
@@ -1019,9 +1022,9 @@ void _xcb_im_destroy_client(xcb_im_t *im, xcb_im_client_t *client) {
10191022
im->free_list = client;
10201023
}
10211024

1022-
void _xcb_im_set_event_mask(xcb_im_t *im, xcb_im_client_t *client,
1023-
uint32_t icid, uint32_t forward_event_mask,
1024-
uint32_t sync_mask) {
1025+
void _xcb_im_send_set_event_mask(xcb_im_t *im, xcb_im_client_t *client,
1026+
uint32_t icid, uint32_t forward_event_mask,
1027+
uint32_t sync_mask) {
10251028
xcb_im_set_event_mask_fr_t frame;
10261029
frame.forward_event_mask = forward_event_mask;
10271030
frame.synchronous_event_mask = sync_mask;
@@ -1169,6 +1172,22 @@ bool xcb_im_support_extension(xcb_im_t *im, uint16_t major_code,
11691172
return false;
11701173
}
11711174

1175+
void _xcb_im_set_ic_event_mask(xcb_im_t *im, xcb_im_input_context_t *ic) {
1176+
DebugLog("xcb_im_set_ic_event_mask");
1177+
uint32_t sync_event_mask = im->use_sync_event ? 0 : im->event_mask;
1178+
sync_event_mask = ~sync_event_mask;
1179+
_xcb_im_send_set_event_mask(im, ic->client, ic->id, im->event_mask,
1180+
sync_event_mask);
1181+
}
1182+
1183+
void _xcb_im_set_im_event_mask(xcb_im_t *im, xcb_im_client_t *client) {
1184+
DebugLog("xcb_im_set_im_event_mask");
1185+
uint32_t sync_event_mask = im->use_sync_event ? 0 : im->event_mask;
1186+
sync_event_mask = ~sync_event_mask;
1187+
// Zero id means set im forward mask.
1188+
_xcb_im_send_set_event_mask(im, client, 0, im->event_mask, sync_event_mask);
1189+
}
1190+
11721191
void xcb_im_input_context_set_data(xcb_im_input_context_t *ic, void *data,
11731192
xcb_im_free_function free_data_function) {
11741193
if (ic->free_data_function) {

src/imdkit.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#ifndef _XCB_IMDKIT_IMDKIT_H_
88
#define _XCB_IMDKIT_IMDKIT_H_
99

10+
#include "xcbimdkit_export.h"
1011
#include "ximcommon.h"
1112
#include "ximproto.h"
1213
#include <stdbool.h>
@@ -196,6 +197,21 @@ XCBIMDKIT_EXPORT void xcb_im_forward_event(xcb_im_t *im,
196197
xcb_im_input_context_t *ic,
197198
xcb_key_press_event_t *event);
198199

200+
/**
201+
* Send a key event to the client.
202+
*
203+
* @param im XIM server
204+
* @param ic Input context.
205+
* @param sequence sequence number, when re-inject, should be the value from
206+
* forward_event
207+
* @param event key event.
208+
* @see xcb_im_forward_event_fr_t.
209+
*/
210+
XCBIMDKIT_EXPORT void xcb_im_forward_event_full(xcb_im_t *im,
211+
xcb_im_input_context_t *ic,
212+
uint16_t sequence,
213+
xcb_key_press_event_t *event);
214+
199215
/**
200216
* Commit a string to the client.
201217
*

0 commit comments

Comments
 (0)