Changeset View
Changeset View
Standalone View
Standalone View
source/blender/windowmanager/intern/wm_event_system.c
| Show First 20 Lines • Show All 92 Lines • ▼ Show 20 Lines | |||||
| WM_drag_free_list(lb); | WM_drag_free_list(lb); | ||||
| } | } | ||||
| else { | else { | ||||
| MEM_freeN(event->customdata); | MEM_freeN(event->customdata); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| #ifdef WITH_INPUT_IME | |||||
| if (event->ime_result.str) { | |||||
| MEM_freeN(event->ime_result.str); | |||||
| } | |||||
| #endif | |||||
| MEM_freeN(event); | MEM_freeN(event); | ||||
| } | } | ||||
| static void wm_event_free_last(wmWindow *win) | static void wm_event_free_last(wmWindow *win) | ||||
| { | { | ||||
| wmEvent *event = BLI_poptail(&win->event_queue); | wmEvent *event = BLI_poptail(&win->event_queue); | ||||
| if (event != NULL) { | if (event != NULL) { | ||||
| wm_event_free(event); | wm_event_free(event); | ||||
| ▲ Show 20 Lines • Show All 184 Lines • ▼ Show 20 Lines | |||||
| data->progress = (wmProgress)ghost->progress; | data->progress = (wmProgress)ghost->progress; | ||||
| event->custom = EVT_DATA_NDOF_MOTION; | event->custom = EVT_DATA_NDOF_MOTION; | ||||
| event->customdata = data; | event->customdata = data; | ||||
| event->customdatafree = 1; | event->customdatafree = 1; | ||||
| } | } | ||||
| #endif /* WITH_INPUT_NDOF */ | #endif /* WITH_INPUT_NDOF */ | ||||
| #ifdef WITH_INPUT_IME | |||||
| static void wm_ime_data_from_ghost(wmWindow *win, wmEvent *event, const GHOST_TEventImeData *ghost) | |||||
| { | |||||
| if (win->ime_data == NULL) { | |||||
| win->ime_data = MEM_callocN(sizeof(wmIMEData), __func__); | |||||
| } | |||||
| win->ime_data->str = ghost->composite; | |||||
| win->ime_data->len = (size_t)ghost->composite_len; | |||||
| win->ime_data->cursor_pos = ghost->cursor_position; | |||||
| win->ime_data->sel_start = ghost->target_start; | |||||
| win->ime_data->sel_end = ghost->target_end; | |||||
| if (ghost->result_len) { | |||||
| size_t len = (size_t)ghost->result_len; | |||||
| char *str = MEM_mallocN(sizeof(char) * (len + 1), __func__); | |||||
| BLI_strncpy(str, ghost->result, len + 1); | |||||
| event->ime_result.len = len; | |||||
| event->ime_result.str = str; | |||||
| } | |||||
| } | |||||
| #endif /* WITH_INPUT_IME */ | |||||
| /* Imperfect but probably usable... draw/enable drags to other windows. */ | /* Imperfect but probably usable... draw/enable drags to other windows. */ | ||||
| static wmWindow *wm_event_cursor_other_windows(wmWindowManager *wm, wmWindow *win, wmEvent *event) | static wmWindow *wm_event_cursor_other_windows(wmWindowManager *wm, wmWindow *win, wmEvent *event) | ||||
| { | { | ||||
| int mval[2] = {event->x, event->y}; | int mval[2] = {event->x, event->y}; | ||||
| if (wm->windows.first == wm->windows.last) { | if (wm->windows.first == wm->windows.last) { | ||||
| return NULL; | return NULL; | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 184 Lines • ▼ Show 20 Lines | |||||
| wm_event_add(win, &event); | wm_event_add(win, &event); | ||||
| break; | break; | ||||
| } | } | ||||
| #ifdef WITH_INPUT_IME | #ifdef WITH_INPUT_IME | ||||
| case GHOST_kEventImeCompositionStart: { | case GHOST_kEventImeCompositionStart: { | ||||
| event.val = KM_PRESS; | event.val = KM_PRESS; | ||||
| win->ime_data = customdata; | |||||
| win->ime_data->is_ime_composing = true; | |||||
| event.type = WM_IME_COMPOSITE_START; | event.type = WM_IME_COMPOSITE_START; | ||||
| wm_event_add(win, &event); | wm_event_add(win, &event); | ||||
| break; | break; | ||||
| } | } | ||||
| case GHOST_kEventImeComposition: { | case GHOST_kEventImeComposition: { | ||||
| event.val = KM_PRESS; | event.val = KM_PRESS; | ||||
| wm_ime_data_from_ghost(win, &event, customdata); | |||||
| event.type = WM_IME_COMPOSITE_EVENT; | event.type = WM_IME_COMPOSITE_EVENT; | ||||
| wm_event_add(win, &event); | wm_event_add(win, &event); | ||||
| break; | break; | ||||
| } | } | ||||
| case GHOST_kEventImeCompositionEnd: { | case GHOST_kEventImeCompositionEnd: { | ||||
| event.val = KM_PRESS; | event.val = KM_PRESS; | ||||
| if (win->ime_data) { | |||||
| win->ime_data->is_ime_composing = false; | |||||
| } | |||||
| event.type = WM_IME_COMPOSITE_END; | event.type = WM_IME_COMPOSITE_END; | ||||
| wm_event_add(win, &event); | wm_event_add(win, &event); | ||||
| break; | break; | ||||
| } | } | ||||
| #endif /* WITH_INPUT_IME */ | #endif /* WITH_INPUT_IME */ | ||||
| } | } | ||||
| #if 0 | #if 0 | ||||
| ▲ Show 20 Lines • Show All 92 Lines • Show Last 20 Lines | |||||