事件适配器适配 XCB_MAPPING_NOTIFY 和 XCB_BUTTON_PRESS 事件
This commit is contained in:
@@ -40,8 +40,15 @@ typedef enum notify_detail_t {
|
||||
notify_detail_none = 7,
|
||||
} notify_detail_t;
|
||||
|
||||
typedef enum mapping_t {
|
||||
MAPPING_MODIFIER = 0,
|
||||
MAPPING_KEYBOARD = 1,
|
||||
MAPPING_POINTER = 2
|
||||
} mapping_t;
|
||||
|
||||
typedef struct mapping_notify_event_t {
|
||||
event_type_t type;
|
||||
mapping_t request;
|
||||
} mapping_notify_event_t;
|
||||
|
||||
typedef struct key_press_event_t {
|
||||
@@ -52,6 +59,10 @@ typedef struct key_press_event_t {
|
||||
|
||||
typedef struct button_press_event_t {
|
||||
event_type_t type;
|
||||
xcb_window_t window;
|
||||
xcb_window_t root;
|
||||
int32_t x, y, root_x, root_y;
|
||||
uint32_t time; /* 时间戳(单位:ms) */
|
||||
} button_press_event_t;
|
||||
|
||||
typedef struct configure_request_event_t {
|
||||
|
||||
@@ -18,11 +18,13 @@ struct event_adapter_t {
|
||||
static void convert_event(xcb_generic_event_t *xcb_event,
|
||||
generic_event_t *event) {
|
||||
uint8_t event_type = XCB_EVENT_RESPONSE_TYPE(xcb_event);
|
||||
const char *label = xcb_event_get_label(event_type);
|
||||
switch (event_type) {
|
||||
case XCB_MAPPING_NOTIFY:
|
||||
event->type = EVENT_TYPE_MAPPING_NOTIFY;
|
||||
case XCB_MAPPING_NOTIFY: {
|
||||
xcb_mapping_notify_event_t *ev = (xcb_mapping_notify_event_t *)xcb_event;
|
||||
event->mapping_notify.type = EVENT_TYPE_MAPPING_NOTIFY;
|
||||
event->mapping_notify.request = ev->request;
|
||||
break;
|
||||
}
|
||||
case XCB_KEY_PRESS: {
|
||||
xcb_key_press_event_t *ev = (xcb_key_press_event_t *)xcb_event;
|
||||
int col = ev->state & XCB_MOD_MASK_2 ? 1 : 0;
|
||||
@@ -32,9 +34,18 @@ static void convert_event(xcb_generic_event_t *xcb_event,
|
||||
event->key_press.modifiers = ev->state;
|
||||
break;
|
||||
}
|
||||
case XCB_BUTTON_PRESS:
|
||||
event->type = EVENT_TYPE_BUTTON_PRESS;
|
||||
case XCB_BUTTON_PRESS: {
|
||||
xcb_button_press_event_t *ev = (xcb_button_press_event_t *)xcb_event;
|
||||
event->button_press.type = EVENT_TYPE_BUTTON_PRESS;
|
||||
event->button_press.window = ev->event;
|
||||
event->button_press.root = ev->root;
|
||||
event->button_press.x = ev->event_x;
|
||||
event->button_press.y = ev->event_y;
|
||||
event->button_press.root_x = ev->root_x;
|
||||
event->button_press.root_y = ev->root_y;
|
||||
event->button_press.time = ev->time;
|
||||
break;
|
||||
}
|
||||
case XCB_CONFIGURE_REQUEST: {
|
||||
xcb_configure_request_event_t *ev =
|
||||
(xcb_configure_request_event_t *)xcb_event;
|
||||
@@ -66,7 +77,8 @@ static void convert_event(xcb_generic_event_t *xcb_event,
|
||||
event->unmap_notify.type = EVENT_TYPE_UNMAP_NOTIFY;
|
||||
event->unmap_notify.window = ev->window;
|
||||
event->unmap_notify.send_event = XCB_EVENT_SENT(ev);
|
||||
} break;
|
||||
break;
|
||||
}
|
||||
case XCB_DESTROY_NOTIFY: {
|
||||
xcb_destroy_notify_event_t *ev = (xcb_destroy_notify_event_t *)xcb_event;
|
||||
event->destroy_notify.type = EVENT_TYPE_DESTROY_NOTIFY;
|
||||
@@ -127,7 +139,8 @@ static void convert_event(xcb_generic_event_t *xcb_event,
|
||||
event->type = -1;
|
||||
return;
|
||||
}
|
||||
if (event->type != EVENT_TYPE_MOTION_NOTIFY) {
|
||||
if (event->type) {
|
||||
const char *label = xcb_event_get_label(event_type);
|
||||
logger("========================== %s ==========================\n", label);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user