16#include <fmt/format.h>
97#define USE_GIZMO_MOUSE_PRIORITY_HACK
101 "These structs must match exactly!");
108 WM_HANDLER_BREAK = 1 << 0,
109 WM_HANDLER_HANDLED = 1 << 1,
111 WM_HANDLER_MODAL = 1 << 2,
115#define WM_HANDLER_CONTINUE ((eHandlerActionFlag)0)
125 const bool poll_only,
135 uint64_t *event_state_prev_press_time_ms_p,
136 const bool is_keyboard,
137 const bool check_double_click);
174 const wmEvent *event_to_add_after)
176 wmEvent *
event = MEM_cnew<wmEvent>(__func__);
178 *
event = *event_to_add;
180 if (event_to_add_after ==
nullptr) {
215 uint64_t eventstate_prev_press_time_ms = 0;
219 &eventstate_prev_press_time_ms,
245 event->customdata =
nullptr;
246 event->customdata_free =
false;
255 printf(
"%s: 'is_repeat=true' for non-keyboard event, this should not happen.\n", __func__);
259 printf(
"%s: 'val != NOTHING' for a cursor motion event, this should not happen.\n", __func__);
289 event->next =
event->prev =
nullptr;
301 if (event !=
nullptr) {
381 wmNotifier *note = MEM_cnew<wmNotifier>(__func__);
409 if (note->reference == reference) {
455 if (
wmMsgBus *mbus = wm->message_bus) {
456 mappings.
iter([&](
ID *old_id,
ID *new_id) {
457 if (new_id !=
nullptr) {
473 memset(((
char *)note) +
sizeof(
Link), 0,
sizeof(*note) -
sizeof(
Link));
487 if (wm->
runtime->is_interface_locked) {
505 scene->customdata_mask = win_combine_v3d_datamask;
514 if (is_after_open_file) {
533 if (area->do_refresh) {
579 bool do_anim =
false;
580 bool clear_info_stats =
false;
586 *note_next =
nullptr;
591 note_next = note->next;
598 if (note->category ==
NC_WM) {
606 else if (note->data ==
ND_UNDO) {
610 if (note->window == win) {
619 printf(
"%s: Workspace set %p\n", __func__, note->reference);
628 printf(
"%s: Workspace delete %p\n", __func__, workspace);
640 printf(
"%s: screen set %p\n", __func__, note->reference);
649 printf(
"%s: screen delete %p\n", __func__, note->reference);
655 if (note->window == win ||
656 (note->window ==
nullptr &&
ELEM(note->reference,
nullptr, scene)))
665 clear_info_stats =
true;
670 note_next = note->
next;
677 if (clear_info_stats) {
689 if (
G.is_rendering ==
false) {
718 if (note->category ==
NC_SCREEN && note->reference && note->reference != screen &&
723 else if (note->category ==
NC_SCENE && note->reference && note->reference != scene) {
731 printf(
"notifier win %d screen %s cat %x\n",
733 win->screen->id.name + 2,
741 region_params.
window = win;
742 region_params.area =
nullptr;
743 region_params.region = region;
745 region_params.notifier = note;
751 if ((note->category ==
NC_SPACE) && note->reference) {
754 if (!
ELEM(note->reference, area->spacedata.first, screen, scene)) {
760 area_params.area = area;
761 area_params.notifier = note;
766 region_params.
window = win;
767 region_params.area = area;
768 region_params.region = region;
770 region_params.notifier = note;
834 "Return value for events that should always pass should never be BREAK.");
849 const bool always_pass)
854 static bool do_wheel_ui =
true;
867 if (do_wheel_ui ==
false) {
911 return WM_HANDLER_BREAK;
925 bool reactivate_button)
962 if (win ==
nullptr) {
964 if (win ==
nullptr) {
988#ifdef WITH_INPUT_NDOF
989void WM_ndof_deadzone_set(
float deadzone)
991 GHOST_setNDOFDeadZone(deadzone);
1109 bool result =
false;
1129 area->region_active_win =
BLI_findindex(&area->regionbase, region);
1140 const bool caller_owns_reports)
1142 if (
G.background == 0 && caller_owns_reports ==
false) {
1149 if (win_prev ==
nullptr) {
1165 if (caller_owns_reports ==
false) {
1173 if (
G.background == 0) {
1208 const bool has_undo_step,
1209 const bool has_register)
1241 else if (has_undo_step) {
1246 if (!(has_register || do_register)) {
1277 if (hud_status != NOP) {
1278 if (hud_status ==
SET) {
1284 else if (hud_status == CLEAR) {
1303 if (op ==
nullptr || op->
type ==
nullptr) {
1339 C, op, repeat, store && wm->
op_undo_depth == 0, has_undo_step, has_register);
1341 else if (repeat == 0) {
1358 if (op ==
nullptr || op->
type ==
nullptr || op->
type->
exec ==
nullptr) {
1386 op->
flag |= op_flag;
1388 op->
flag &= ~op_flag;
1394 op->
flag |= op_flag;
1396 op->
flag &= ~op_flag;
1408 if (otm && otm->
exec ==
nullptr) {
1422 if (op->
prev ==
nullptr && op->
next ==
nullptr) {
1429 return (op_prev && (op->
type == op_prev->
type));
1446 op->
ptr = MEM_new<PointerRNA>(
"wmOperatorPtrRNA");
1447 if (properties && properties->
data) {
1460 op->
reports = MEM_cnew<ReportList>(
"wmOperatorReportList");
1470 if (motherop ==
nullptr) {
1481 if (otmacro ==
nullptr) {
1494 opm->
opm = motherop;
1496 otmacro = otmacro->
next;
1507 opm->
opm = motherop;
1535 if (region->gizmo_map !=
nullptr) {
1549 event->mval[0] =
event->xy[0] - region->winrct.xmin;
1550 event->mval[1] =
event->xy[1] - region->winrct.ymin;
1554 event->mval[0] = -1;
1555 event->mval[1] = -1;
1567 const bool poll_only,
1568 bool use_last_properties)
1588 if (event !=
nullptr) {
1593 if (!is_nested_call && use_last_properties) {
1600 "handle evt %d win %p op %s",
1601 event ? event->
type : 0,
1615 retval = op->
type->
invoke(C, op, &event_temp);
1652 const bool store = !is_nested_call && use_last_properties;
1663 const rcti *wrap_region =
nullptr;
1692 wrap_region = ®ion->winrct;
1695 wrap_region = &area->totrct;
1726 const bool poll_only,
1737 if (event ==
nullptr) {
1746 if (window ==
nullptr) {
1807 if (!(region && region->regiontype == type) && area) {
1867 const char *opstring,
1891 const char *opstring,
1923 if (!is_undo && wm) {
1962 if (opwait->
area !=
nullptr) {
1975 enum { CONTINUE = 0, EXECUTE, CANCEL }
state = CONTINUE;
1978 switch (event->
type) {
2008 if (
state != CONTINUE) {
2012 if (
state == EXECUTE) {
2041 const char *drawstr)
2048 depends_on_cursor =
true;
2053 if (!depends_on_cursor) {
2068 IFACE_(
"Input pending "),
2070 if (area !=
nullptr) {
2085 opwait->
area = area;
2090 if (properties->
data !=
nullptr) {
2139 *r_region =
nullptr;
2141 if (screen ==
nullptr || handler->
op ==
nullptr) {
2158 if (area ==
nullptr) {
2161 if (handler->
op ==
nullptr) {
2163 "internal error: handler (%s) has invalid area",
2283 region_popup_prev =
nullptr;
2335 if (winevent->
type != kmitype) {
2342 if (winevent->
val != kmi->
val) {
2445 const wmEvent *event_match =
nullptr;
2449 event_match = event;
2452 event_no_dbl_click = *event;
2455 event_match = &event_no_dbl_click;
2459 if (event_match !=
nullptr) {
2460 event_backup->
prev_type =
event->prev_type;
2461 event_backup->
prev_val =
event->prev_val;
2463 event->prev_type = event_match->
type;
2464 event->prev_val = event_match->
val;
2497 event->type =
event->prev_type;
2498 event->val =
event->prev_val;
2500 event->prev_type = event_backup->
prev_type;
2501 event->prev_val = event_backup->
prev_val;
2521 last_priority_handler = handler_iter;
2526 if (last_priority_handler) {
2543 const char *kmi_idname)
2579 retval =
ot->
modal(C, op, event);
2615 handler->
op =
nullptr;
2619 handler->
op =
nullptr;
2656 bool use_last_properties =
true;
2671 const bool is_tool = (keymap_tool !=
nullptr);
2672 const bool use_tool_properties = is_tool;
2674 if (use_tool_properties) {
2676 keymap_tool, &tool_properties, properties,
ot);
2677 properties = &tool_properties;
2678 use_last_properties =
false;
2683 if (use_tool_properties) {
2694 if (gzgt !=
nullptr) {
2697 if (region !=
nullptr) {
2701 gzmap_type, gzgt, region);
2717 return WM_HANDLER_HANDLED;
2722 return (WM_HANDLER_BREAK | WM_HANDLER_MODAL);
2729 return WM_HANDLER_BREAK;
2738 if (sfile->
op == file_operator) {
2739 sfile->
op =
nullptr;
2766 const rcti window_rect = {
2774 IFACE_(
"Blender File View"),
2777 U.filebrowser_display_type,
2790 sfile->
op = handler->
op;
2796 return WM_HANDLER_BREAK;
2799 action = WM_HANDLER_BREAK;
2826 ScrArea *file_area =
static_cast<ScrArea *
>(screen->areabase.first);
2832 if (file_area->
full) {
2863 else if (file_area->
full) {
2874 if (!temp_win && ctx_area->
full) {
2929 if (win_prev ==
nullptr) {
2973 action = WM_HANDLER_BREAK;
3005 if (action & WM_HANDLER_BREAK) {
3008 if (action & WM_HANDLER_HANDLED) {
3009 return "handled (and pass on)";
3011 return "un-handled";
3025 std::optional<std::string> kmi_props;
3037 return fmt::format(
"{}({})", kmi->
idname, kmi_props.value_or(
""));
3041 if (do_debug_handler) \
3052 const bool do_debug_handler)
3056 if (keymap ==
nullptr) {
3061 PRINT(
"%s: checking '%s' ...", __func__, keymap->
idname);
3072 C, handlers, &handler->
head, event, kmi->ptr, kmi->idname);
3076 "keymap '%s', %s, %s, event: %s",
3082 if (action & WM_HANDLER_BREAK) {
3084 if (keymap_post.
post_fn !=
nullptr) {
3109 const bool do_debug_handler,
3110 bool *r_keymap_poll)
3113 bool keymap_poll =
false;
3115 PRINT(
"%s: checking '%s' ...", __func__, keymap->
idname);
3122 PRINT(
"%s: item matched '%s'\n", __func__, kmi->idname);
3128 C, handlers, &handler->
head, event, kmi->ptr, kmi->idname);
3132 if (action & WM_HANDLER_BREAK) {
3134 printf(
"%s: handled - and pass on! '%s'\n", __func__, kmi->idname);
3138 if (action & WM_HANDLER_HANDLED) {
3140 printf(
"%s: handled - and pass on! '%s'\n", __func__, kmi->idname);
3144 PRINT(
"%s: un-handled '%s'\n", __func__, kmi->idname);
3153 if (r_keymap_poll) {
3154 *r_keymap_poll = keymap_poll;
3165 const bool do_debug_handler)
3174 const bool restore_highlight_unless_activated = is_event_drag;
3186 if (region->type->clip_gizmo_events_by_ui) {
3189 if (restore_highlight_unless_activated ==
false) {
3198 struct PrevGizmoData {
3203 PrevGizmoData prev{};
3208 if (region->gizmo_map != handler->
gizmo_map) {
3215 bool handle_highlight =
false;
3216 bool handle_keymap =
false;
3219 if ((prev.gz_modal ==
nullptr) &&
3220 ((event->
type ==
MOUSEMOVE) || is_event_modifier || is_event_drag))
3222 handle_highlight =
true;
3223 if (is_event_modifier || is_event_drag) {
3224 handle_keymap =
true;
3228 handle_keymap =
true;
3233 if (restore_highlight_unless_activated) {
3234 if ((handle_highlight ==
true) && (handle_keymap ==
false)) {
3239 if (handle_highlight) {
3244 if (gz || prev.gz) {
3245 if ((prev.gz != gz) || (prev.part != part)) {
3251 if (gz !=
nullptr) {
3262 if (handle_keymap) {
3265 bool keymap_poll =
false;
3269 C, event, handlers, handler, gzgroup, keymap, do_debug_handler, &keymap_poll);
3271#ifdef USE_GIZMO_MOUSE_PRIORITY_HACK
3272 if (((action & WM_HANDLER_BREAK) == 0) && !is_event_handle_all && keymap_poll) {
3275 wmEvent event_test_click = *event;
3278 wmEvent event_test_click_drag = *event;
3288 is_event_handle_all =
true;
3303 if ((action & WM_HANDLER_BREAK) == 0) {
3310 C, event, handlers, handler, gzgroup, keymap, do_debug_handler,
nullptr);
3311 if (action & WM_HANDLER_BREAK) {
3320 if (handle_highlight) {
3321 if (restore_highlight_unless_activated) {
3324 if (!(gz_modal && (gz_modal != prev.gz_modal))) {
3330 if (is_event_handle_all) {
3332 action |= WM_HANDLER_BREAK | WM_HANDLER_MODAL;
3354 const bool do_debug_handler =
3362 if (handlers ==
nullptr) {
3375 handler_base && handlers->
first;
3376 handler_base = handler_base_next)
3378 handler_base_next = handler_base->next;
3384 else if (handler_base->poll ==
nullptr || handler_base->poll(
CTX_wm_region(C), event)) {
3390 action |= WM_HANDLER_BREAK;
3399 for (
int km_index = 0; km_index < km_result.
keymaps_len; km_index++) {
3402 C, event, handlers, handler, keymap, do_debug_handler);
3403 if (action_iter & WM_HANDLER_BREAK) {
3407 action |= action_iter;
3411 if (action & WM_HANDLER_BREAK) {
3421 if (!wm->
runtime->is_interface_locked) {
3433 if (drop->poll(C, drag, event)) {
3440 event->customdata = &single_lb;
3445 C, drop->ot, drop->ptr,
nullptr, opcontext,
false, event) :
3453 action |= WM_HANDLER_BREAK;
3485 if (!wm->
runtime->is_interface_locked) {
3499 if (action & WM_HANDLER_BREAK) {
3501 action &= ~WM_HANDLER_BREAK;
3527 if (action == (WM_HANDLER_BREAK | WM_HANDLER_MODAL)) {
3545 if (win ==
nullptr) {
3567 const short prev_val =
event->val;
3568 const short prev_type =
event->type;
3569 const uint8_t prev_modifier =
event->modifier;
3570 const short prev_keymodifier =
event->keymodifier;
3573 event->type =
event->prev_press_type;
3574 event->modifier =
event->prev_press_modifier;
3575 event->keymodifier =
event->prev_press_keymodifier;
3576 event->direction = direction;
3582 event->direction = 0;
3583 event->keymodifier = prev_keymodifier;
3584 event->modifier = prev_modifier;
3585 event->val = prev_val;
3586 event->type = prev_type;
3631 WM_LOG_HANDLERS, 3,
"CLICK_DRAG: canceling (release event didn't match press)");
3646 "CLICK_DRAG: canceling (key-release exceeds drag threshold)");
3686 "CLICK_DRAG: canceling (button event was handled: value=%d)",
3748 if (screen && area) {
3762 if (pc->poll ==
nullptr || pc->poll(C)) {
3812 screen->do_draw_drag =
true;
3818 screen->do_draw_drag =
true;
3820 return WM_HANDLER_BREAK;
3830 event->customdata = &wm->
drags;
3831 event->customdata_free =
true;
3834 screen->do_draw_drag =
true;
3885#ifdef WITH_XR_OPENXR
3892static void wm_event_handle_xrevent(
bContext *C,
3915 if ((action & WM_HANDLER_BREAK) == 0) {
3916 wmXrActionData *actiondata =
static_cast<wmXrActionData *
>(
event->customdata);
3922 properties.
type = actiondata->ot->srna;
3923 properties.data = actiondata->op_properties;
3924 if (actiondata->ot->invoke) {
3930 actiondata->op_properties ? &properties : nullptr,
3938 wm, actiondata->ot, actiondata->op_properties ? &properties : nullptr, nullptr);
3995 if (!region_hovered) {
4022 if (screen ==
nullptr) {
4031 if (scene_eval !=
nullptr) {
4038 else if (is_playing_sound != -1) {
4039 bool is_playing_screen;
4043 if (((is_playing_sound == 1) && (is_playing_screen == 0)) ||
4044 ((is_playing_sound == 0) && (is_playing_screen == 1)))
4061 if (is_playing_sound == 0) {
4063 if (isfinite(time)) {
4064 int ncfra = round(time *
FPS);
4065 if (ncfra != scene->r.cfra) {
4066 scene->r.cfra = ncfra;
4107 else if (is_consecutive) {
4120 printf(
"\n%s: Handling event\n", __func__);
4136#ifdef WITH_XR_OPENXR
4138 wm_event_handle_xrevent(C, wm, win, event);
4147 if (screen->tool_tip && screen->tool_tip->exit_on_event) {
4179 if (screen->tool_tip && screen->tool_tip->timer) {
4189 if ((action & WM_HANDLER_BREAK) == 0) {
4199#ifdef WITH_INPUT_NDOF
4208 if (screen->skip_handling) {
4210 screen->skip_handling =
false;
4234 if ((action & WM_HANDLER_BREAK) == 0) {
4245 if ((action & WM_HANDLER_BREAK) == 0) {
4326 event.val = eventval;
4328 event.customdata = ophandle;
4356 for (
wmWindow *ctx_win_or_parent = ctx_win; ctx_win_or_parent;
4357 ctx_win_or_parent = ctx_win_or_parent->
parent)
4362 return ctx_win_or_parent;
4365 if (file_area->
full) {
4366 return ctx_win_or_parent;
4390 ARegion *root_region =
nullptr;
4394 if (ctx_win != root_win) {
4408 C, handler, ctx_win->
eventstate, &root_area, &root_region);
4427 if (!root_area && ctx_win == root_win) {
4451 if (ctx_win != root_win) {
4472 if (cdata &&
STREQ(cdata->
id,
id)) {
4484 const size_t id_size = strlen(
id) + 1;
4488 memcpy((cdata + 1),
id, id_size);
4495 if (cdata ==
nullptr) {
4531 handler->
op = op->
opm;
4533 handler->
op->
opm = op;
4566 if ((handler->
op == op) || (op->
opm && (handler->
op == op->
opm))) {
4646 if (handler->
keymap == keymap) {
4655 handler->
keymap = keymap;
4677 const bool with_gizmos)
4679 memset(km_result, 0x0,
sizeof(*km_result));
4681 const char *keymap_id_list[BOUNDED_ARRAY_TYPE_SIZE<
decltype(km_result->
keymaps)>()];
4682 int keymap_id_list_len = 0;
4688 BLI_assert_msg(win !=
nullptr,
"The window should always be set for tool interactions!");
4689 const Scene *scene = win ? win->
scene :
nullptr;
4693 bToolRef_Runtime *tref_rt = area->runtime.tool ? area->runtime.tool->runtime :
nullptr;
4695 if (tref_rt && tref_rt->
keymap[0]) {
4696 keymap_id_list[keymap_id_list_len++] = tref_rt->
keymap;
4699 bool is_gizmo_visible =
false;
4700 bool is_gizmo_highlight =
false;
4705 bool add_keymap =
false;
4712 if (with_gizmos && (tref_rt->
gizmo_group[0] !=
'\0')) {
4716 if (region->gizmo_map !=
nullptr) {
4717 gzmap = region->gizmo_map;
4719 if (gzgroup !=
nullptr) {
4724 if (gzgroup !=
nullptr) {
4727 is_gizmo_visible =
true;
4730 is_gizmo_highlight =
true;
4742 if (is_gizmo_visible && !is_gizmo_highlight) {
4743 if (keymap_id_list_len == 2) {
4744 std::swap(keymap_id_list[0], keymap_id_list[1]);
4748 for (
int i = 0; i < keymap_id_list_len; i++) {
4749 const char *keymap_id = keymap_id_list[i];
4755 if (km ==
nullptr) {
4756 printf(
"Key-map: '%s' not found for tool '%s'\n", keymap_id, area->runtime.tool->idname);
4819 handler->
keymap = keymap;
4837 rcti rect = region->v2d.mask;
4847 if (handler ==
nullptr) {
4865 if (handler->
keymap == keymap) {
4919 const bool postpone)
5002 if (handler->
op && handler->
op->
type ==
ot) {
5028#ifdef WITH_INPUT_NDOF
5034# define CASE_NDOF_BUTTON(button) \
5035 case GHOST_NDOF_BUTTON_##button: \
5036 return NDOF_BUTTON_##button
5038# define CASE_NDOF_BUTTON_IGNORE(button) \
5039 case GHOST_NDOF_BUTTON_##button: \
5043 CASE_NDOF_BUTTON(MENU);
5044 CASE_NDOF_BUTTON(FIT);
5045 CASE_NDOF_BUTTON(
TOP);
5046 CASE_NDOF_BUTTON(
LEFT);
5047 CASE_NDOF_BUTTON(
RIGHT);
5048 CASE_NDOF_BUTTON(
FRONT);
5049 CASE_NDOF_BUTTON(BOTTOM);
5050 CASE_NDOF_BUTTON(
BACK);
5051 CASE_NDOF_BUTTON(ROLL_CW);
5052 CASE_NDOF_BUTTON(ROLL_CCW);
5053 CASE_NDOF_BUTTON(ISO1);
5054 CASE_NDOF_BUTTON(ISO2);
5055 CASE_NDOF_BUTTON(1);
5056 CASE_NDOF_BUTTON(2);
5057 CASE_NDOF_BUTTON(3);
5058 CASE_NDOF_BUTTON(4);
5059 CASE_NDOF_BUTTON(5);
5060 CASE_NDOF_BUTTON(6);
5061 CASE_NDOF_BUTTON(7);
5062 CASE_NDOF_BUTTON(8);
5063 CASE_NDOF_BUTTON(9);
5064 CASE_NDOF_BUTTON(10);
5065 CASE_NDOF_BUTTON(11);
5066 CASE_NDOF_BUTTON(12);
5067 CASE_NDOF_BUTTON(ROTATE);
5068 CASE_NDOF_BUTTON(PANZOOM);
5069 CASE_NDOF_BUTTON(DOMINANT);
5070 CASE_NDOF_BUTTON(PLUS);
5071 CASE_NDOF_BUTTON(MINUS);
5072 CASE_NDOF_BUTTON(SPIN_CW);
5073 CASE_NDOF_BUTTON(SPIN_CCW);
5074 CASE_NDOF_BUTTON(TILT_CW);
5075 CASE_NDOF_BUTTON(TILT_CCW);
5076 CASE_NDOF_BUTTON(V1);
5077 CASE_NDOF_BUTTON(V2);
5078 CASE_NDOF_BUTTON(V3);
5079 CASE_NDOF_BUTTON(SAVE_V1);
5080 CASE_NDOF_BUTTON(SAVE_V2);
5081 CASE_NDOF_BUTTON(SAVE_V3);
5086 CASE_NDOF_BUTTON_IGNORE(ESC);
5087 CASE_NDOF_BUTTON_IGNORE(ENTER);
5088 CASE_NDOF_BUTTON_IGNORE(DELETE);
5089 CASE_NDOF_BUTTON_IGNORE(TAB);
5090 CASE_NDOF_BUTTON_IGNORE(SPACE);
5091 CASE_NDOF_BUTTON_IGNORE(ALT);
5092 CASE_NDOF_BUTTON_IGNORE(SHIFT);
5093 CASE_NDOF_BUTTON_IGNORE(CTRL);
5095 CASE_NDOF_BUTTON_IGNORE(KBP_F1);
5096 CASE_NDOF_BUTTON_IGNORE(KBP_F2);
5097 CASE_NDOF_BUTTON_IGNORE(KBP_F3);
5098 CASE_NDOF_BUTTON_IGNORE(KBP_F4);
5099 CASE_NDOF_BUTTON_IGNORE(KBP_F5);
5100 CASE_NDOF_BUTTON_IGNORE(KBP_F6);
5101 CASE_NDOF_BUTTON_IGNORE(KBP_F7);
5102 CASE_NDOF_BUTTON_IGNORE(KBP_F8);
5103 CASE_NDOF_BUTTON_IGNORE(KBP_F9);
5104 CASE_NDOF_BUTTON_IGNORE(KBP_F10);
5105 CASE_NDOF_BUTTON_IGNORE(KBP_F11);
5106 CASE_NDOF_BUTTON_IGNORE(KBP_F12);
5108 CASE_NDOF_BUTTON_IGNORE(NP_F1);
5109 CASE_NDOF_BUTTON_IGNORE(NP_F2);
5110 CASE_NDOF_BUTTON_IGNORE(NP_F3);
5111 CASE_NDOF_BUTTON_IGNORE(NP_F4);
5114 CASE_NDOF_BUTTON_IGNORE(
NONE);
5115 CASE_NDOF_BUTTON_IGNORE(INVALID);
5116 CASE_NDOF_BUTTON_IGNORE(USER);
5119# undef CASE_NDOF_BUTTON
5120# undef CASE_NDOF_BUTTON_IGNORE
5269#if defined(__GNUC__) || defined(__clang__)
5295#define CASE_BUTTON(ghost_button, type) \
5296 case ghost_button: \
5340 event->modifier &= ~mod_test;
5352 event->modifier &= ~mod_test;
5364 switch (event->
type) {
5412 tablet_data.pressure = 1.0f;
5413 tablet_data.x_tilt = 0.0f;
5414 tablet_data.y_tilt = 0.0f;
5415 tablet_data.is_motion_absolute =
false;
5441#ifdef WITH_INPUT_NDOF
5443static void attach_ndof_data(
wmEvent *event,
const GHOST_TEventNDOFMotionData *ghost)
5445 wmNDOFMotionData *data = MEM_cnew<wmNDOFMotionData>(
"Custom-data NDOF");
5447 const float ts =
U.ndof_sensitivity;
5448 const float rs =
U.ndof_orbit_sensitivity;
5456 data->tvec[1] = -data->tvec[2];
5460 data->dt = ghost->dt;
5462 data->progress = (
wmProgress)ghost->progress;
5465 event->customdata =
data;
5466 event->customdata_free =
true;
5476 if (!supports_window_position) {
5489 if (event_xy[0] < 0 || event_xy[1] < 0 || event_xy[0] > win_size[0] ||
5490 event_xy[1] > win_size[1] + 30)
5502 if (win_other && win_other != win) {
5512 const uint64_t event_prev_press_time_ms)
5521 if ((event_time_ms - event_prev_press_time_ms) <
uint64_t(
U.dbl_click_time)) {
5535 event->prev_val = event_state->
prev_val = event_state->
val;
5536 event->prev_type = event_state->
prev_type = event_state->
type;
5541 uint64_t *r_event_state_prev_press_time_ms)
5548 *r_event_state_prev_press_time_ms = event_time_ms;
5564 if (event_last ==
nullptr) {
5581 tevent = *event_last;
5589 memset(&tevent, 0x0,
sizeof(tevent));
5609 if (event_last && event_last->
type == event->
type) {
5610 deltax += event_last->
xy[0] - event_last->
prev_xy[0];
5611 deltay += event_last->
xy[1] - event_last->
prev_xy[1];
5618 event_new->
prev_xy[0] = event_new->
xy[0] - deltax;
5619 event_new->
prev_xy[1] = event_new->
xy[1] - deltay;
5633 uint64_t *event_state_prev_press_time_ms_p,
5634 const bool is_keyboard,
5635 const bool check_double_click)
5646 event_state->
val =
event->val;
5647 event_state->
type =
event->type;
5652 event_state->
modifier =
event->modifier;
5654 event_state->
flag = (
event->flag & event_state_flag_mask);
5659 if (check_double_click &&
5675 uint64_t *event_state_prev_press_time_ms_p,
5679 const bool check_double_click =
true;
5683 event_state_prev_press_time_ms_p,
5685 check_double_click);
5738 const void *customdata,
5759 event = *event_state;
5772 event.prev_type =
event.type;
5773 event.prev_val =
event.val;
5787 if ((event_state->
type || event_state->
val) &&
5791 "Non-keyboard/mouse button found in 'win->eventstate->type = %d'",
5798 "Non-keyboard/mouse button found in 'win->eventstate->prev_type = %d'",
5829 event_other.
modifier =
event.modifier;
5856 delta[0] = -delta[0];
5857 delta[1] = -delta[1];
5881#if !defined(WIN32) && !defined(__APPLE__)
5883 char trackpad_scroll_direction =
U.trackpad_scroll_direction;
5887 event.flag &= ~WM_EVENT_SCROLL_INVERT;
5920 event_state_prev_press_time_ms_p,
5929 event_other.
modifier =
event.modifier;
5938 event_other.
type =
event.type;
5939 event_other.
val =
event.val;
5940 event_other.
tablet =
event.tablet;
5973 "ghost on your platform is misbehaving, utf8 events on key up!");
5975 event.utf8_buf[0] =
'\0';
5981 event.utf8_buf[0] =
'\0';
5994 "ghost detected non-ASCII single byte character '%u', converting to utf8 "
5995 "('%.*s', length=%d)",
6003 if (utf8_buf_len == -1) {
6005 "ghost detected an invalid unicode character '%d'",
6007 event.utf8_buf[0] =
'\0';
6013 if (utf8_buf_len > 0) {
6015 event.utf8_buf[i] = 0xff;
6041 switch (event.
type) {
6078 event.keymodifier = 0;
6095 event_state_prev_press_time_ms_p,
6121 if (wheelData->
z > 0) {
6123 click_step = wheelData->
z;
6127 click_step = -wheelData->
z;
6134 click_step = std::min(click_step, 32);
6139 for (
int i = 0; i < click_step; i++) {
6146#ifdef WITH_INPUT_NDOF
6147 case GHOST_kEventNDOFMotion: {
6150 attach_ndof_data(&event,
static_cast<const GHOST_TEventNDOFMotionData *
>(customdata));
6157 case GHOST_kEventNDOFButton: {
6158 const GHOST_TEventNDOFButtonData *
e =
static_cast<const GHOST_TEventNDOFButtonData *
>(
6162 switch (
e->action) {
6166 case GHOST_kRelease:
6174 event.customdata =
nullptr;
6179 event_state_prev_press_time_ms_p,
6199#ifdef WITH_INPUT_IME
6202 win->
ime_data =
static_cast<const wmIMEData *
>(customdata);
6230#ifdef WITH_XR_OPENXR
6231void wm_event_add_xrevent(
wmWindow *win, wmXrActionData *actiondata,
short val)
6240 event.customdata = actiondata;
6241 event.customdata_free =
true;
6261 if (wm->
runtime->is_interface_locked) {
6307 memset(km_result, 0x0,
sizeof(*km_result));
6310 if (keymap !=
nullptr) {
6337 else if (handler_base->poll ==
nullptr || handler_base->poll(
CTX_wm_region(C), event)) {
6342 for (
int km_index = 0; km_index < km_result.
keymaps_len; km_index++) {
6346 if (kmi !=
nullptr) {
6387 char text[3][2][128];
6399 state->space_type = space_type;
6400 state->region_type = region_type;
6410 const char *msg = cd->
text[button_index][type_index];
6423 ScrArea *area_statusbar =
nullptr;
6426 area_statusbar = area;
6430 return area_statusbar;
6437 if (area !=
nullptr) {
6446 if (area_statusbar ==
nullptr) {
6468 ARegion *region = screen->active_region;
6469 if (region ==
nullptr) {
6480 if (area ==
nullptr) {
6488 if (
ELEM(region->regiontype,
6543 for (
int button_index = 0; button_index < 3; button_index++) {
6544 cd->
text[button_index][0][0] =
'\0';
6545 cd->
text[button_index][1][0] =
'\0';
6559 for (
int data_index = 0; data_index <
ARRAY_SIZE(event_data); data_index++) {
6560 const int button_index = event_data[data_index].button_index;
6561 const int type_index = event_data[data_index].type_index;
6562 if (cd->
text[button_index][type_index][0] != 0) {
6566 test_event.
type = event_data[data_index].event_type;
6567 test_event.
val = event_data[data_index].event_value;
6571 for (
int handler_index = 0; handler_index <
ARRAY_SIZE(handlers); handler_index++) {
6573 C, wm, win, handlers[handler_index], &test_event);
6581 const char *name = (
ot) ? operator_name.c_str() : kmi->
idname;
6582 STRNCPY(cd->
text[button_index][type_index], name);
6586 if (memcmp(&cd_prev.
text, &cd->
text,
sizeof(cd_prev.
text)) != 0) {
6607 if (handler->
op !=
nullptr) {
6612 keymap = keymap_test;
6619 if (keymap ==
nullptr || keymap->
modal_items ==
nullptr) {
6626 if (!items[i].identifier[0]) {
6636 if (num_items_used > 0) {
6638 i += num_items_used - 1;
6644 uiItemL(row, fmt::format(
"{}: {}", *
str, items[i].name).c_str(), ICON_NONE);
void AS_asset_library_remap_ids(const blender::bke::id::IDRemapper &mappings)
void CTX_wm_gizmo_group_set(bContext *C, wmGizmoGroup *gzgroup)
ReportList * CTX_wm_reports(const bContext *C)
bScreen * CTX_wm_screen(const bContext *C)
ARegion * CTX_wm_region_popup(const bContext *C)
void CTX_wm_operator_poll_msg_clear(bContext *C)
void CTX_wm_operator_poll_msg_set(bContext *C, const char *msg)
ScrArea * CTX_wm_area(const bContext *C)
wmWindow * CTX_wm_window(const bContext *C)
Depsgraph * CTX_data_depsgraph_pointer(const bContext *C)
void CTX_wm_screen_set(bContext *C, bScreen *screen)
void CTX_data_scene_set(bContext *C, Scene *scene)
Scene * CTX_data_scene(const bContext *C)
void CTX_wm_window_set(bContext *C, wmWindow *win)
Main * CTX_data_main(const bContext *C)
const bContextStore * CTX_store_get(const bContext *C)
void CTX_store_set(bContext *C, const bContextStore *store)
void CTX_wm_area_set(bContext *C, ScrArea *area)
void CTX_wm_region_set(bContext *C, ARegion *region)
ARegion * CTX_wm_region(const bContext *C)
wmWindowManager * CTX_wm_manager(const bContext *C)
void CTX_wm_region_popup_set(bContext *C, ARegion *region_popup)
ViewLayer * CTX_data_view_layer(const bContext *C)
CustomData interface, see also DNA_customdata_types.h.
void CustomData_MeshMasks_update(CustomData_MeshMasks *mask_dst, const CustomData_MeshMasks *mask_src)
char * IDP_reprN(const IDProperty *prop, uint *r_len)
void IDP_FreeProperty(IDProperty *prop)
IDProperty * IDP_CopyProperty(const IDProperty *prop) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
void IDP_ReplaceGroupInGroup(IDProperty *dest, const IDProperty *src) ATTR_NONNULL()
void BKE_reports_free(ReportList *reports)
void BKE_report_print_level_set(ReportList *reports, eReportType level)
void BKE_reports_clear(ReportList *reports)
void BKE_report(ReportList *reports, eReportType type, const char *message)
void BKE_reports_init(ReportList *reports, int flag)
void BKE_reports_print(ReportList *reports, eReportType level)
void BKE_reports_move_to_reports(ReportList *reports_dst, ReportList *reports_src)
Depsgraph * BKE_scene_ensure_depsgraph(Main *bmain, Scene *scene, ViewLayer *view_layer)
void BKE_scene_graph_update_tagged(Depsgraph *depsgraph, Main *bmain)
Depsgraph * BKE_scene_get_depsgraph(const Scene *scene, const ViewLayer *view_layer)
void BKE_spacedata_draw_locks(bool set)
ARegion * BKE_area_find_region_xy(const ScrArea *area, int regiontype, const int xy[2]) ATTR_NONNULL(3)
ARegion * BKE_area_find_region_active_win(const ScrArea *area)
ARegion * BKE_area_find_region_type(const ScrArea *area, int region_type)
double BKE_sound_sync_scene(struct Scene *scene)
int BKE_sound_scene_playing(struct Scene *scene)
bScreen * BKE_workspace_layout_screen_get(const WorkSpaceLayout *layout) GETTER_ATTRS
#define BLI_assert_unreachable()
#define BLI_STATIC_ASSERT(a, msg)
#define BLI_assert_msg(a, msg)
bool BLI_gset_ensure_p_ex(GSet *gs, const void *key, void ***r_key)
unsigned int BLI_ghashutil_ptrhash(const void *key)
GSet * BLI_gset_new_ex(GSetHashFP hashfp, GSetCmpFP cmpfp, const char *info, unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
bool BLI_gset_remove(GSet *gs, const void *key, GSetKeyFreeFP keyfreefp)
BLI_INLINE bool BLI_listbase_is_empty(const struct ListBase *lb)
void BLI_addhead(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
#define LISTBASE_FOREACH(type, var, list)
void * BLI_poptail(ListBase *listbase) ATTR_NONNULL(1)
#define LISTBASE_FOREACH_MUTABLE(type, var, list)
void BLI_insertlinkafter(struct ListBase *listbase, void *vprevlink, void *vnewlink) ATTR_NONNULL(1)
bool BLI_remlink_safe(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void void BLI_INLINE bool BLI_listbase_is_single(const struct ListBase *lb)
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void BLI_remlink(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
int BLI_findindex(const struct ListBase *listbase, const void *vlink) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void * BLI_pophead(ListBase *listbase) ATTR_NONNULL(1)
MINLINE void copy_v2_v2_int(int r[2], const int a[2])
MINLINE int len_manhattan_v2v2_int(const int a[2], const int b[2]) ATTR_WARN_UNUSED_RESULT
MINLINE void mul_v3_v3fl(float r[3], const float a[3], float f)
bool BLI_rcti_isect_pt_v(const struct rcti *rect, const int xy[2])
void BLI_rcti_translate(struct rcti *rect, int x, int y)
#define STRNCPY(dst, src)
#define SNPRINTF(dst, format,...)
char char * BLI_vsprintfN(const char *__restrict format, va_list args) ATTR_NONNULL(1
size_t BLI_str_utf8_from_unicode(unsigned int c, char *dst, size_t dst_maxncpy) ATTR_NONNULL(2)
int BLI_str_utf8_size_or_error(const char *p) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void BLI_timer_execute(void)
#define ENUM_OPERATORS(_type, _max)
#define UNUSED_VARS_NDEBUG(...)
#define SET_FLAG_FROM_TEST(value, test, flag)
#define CTX_IFACE_(context, msgid)
#define CLOG_ERROR(clg_ref,...)
#define CLOG_WARN(clg_ref,...)
#define CLOG_STR_INFO(clg_ref, level, str)
#define CLOG_INFO(clg_ref, level,...)
void DEG_graph_tag_on_visible_update(Depsgraph *depsgraph, bool do_time)
void DEG_make_active(Depsgraph *depsgraph)
Scene * DEG_get_evaluated_scene(const Depsgraph *graph)
These structs are the foundation for all linked lists in the library system.
@ SCE_WORKSPACE_TOOL_FALLBACK
@ AREA_FLAG_ACTIONZONES_UPDATE
@ RGN_TYPE_ASSET_SHELF_HEADER
#define RGN_TYPE_IS_HEADER_ANY(regiontype)
eUserpref_TrackpadScrollDir
@ USER_TRACKPAD_SCROLL_DIR_TRADITIONAL
@ USER_TRACKPAD_SCROLL_DIR_NATURAL
@ OP_IS_MODAL_CURSOR_REGION
@ OP_IS_MODAL_GRAB_CURSOR
#define OPERATOR_RETVAL_CHECK(ret)
@ TOOLREF_FLAG_FALLBACK_KEYMAP
ScrArea * ED_fileselect_handler_area_find(const wmWindow *win, const wmOperator *file_operator)
ScrArea * ED_fileselect_handler_area_find_any_with_op(const wmWindow *win)
void ED_fileselect_params_to_userdef(SpaceFile *sfile, const int temp_win_size[2], bool is_maximized)
void ED_fileselect_set_params_from_userdef(SpaceFile *sfile)
void ED_fileselect_window_params_get(const wmWindow *win, int r_win_size[2], bool *r_is_maximized)
void ED_info_stats_clear(wmWindowManager *wm, ViewLayer *view_layer)
void ED_preview_restart_queue_work(const bContext *C)
void ED_area_tag_redraw(ScrArea *area)
ScrArea * ED_screen_temp_space_open(bContext *C, const char *title, const rcti *rect_unscaled, eSpace_Type space_type, int display_type, bool dialog) ATTR_NONNULL(1
void ED_region_do_listen(wmRegionListenerParams *params)
ARegion * ED_area_find_region_xy_visual(const ScrArea *area, int regiontype, const int event_xy[2])
#define ED_screen_areas_iter(win, screen, area_name)
void ED_area_status_text(ScrArea *area, const char *str)
int ED_screen_animation_play(bContext *C, int sync, int mode)
void ED_workspace_do_listen(bContext *C, const wmNotifier *note)
void ED_area_do_listen(wmSpaceTypeListenerParams *params)
void ED_screen_do_listen(bContext *C, const wmNotifier *note)
bool ED_screen_change(bContext *C, bScreen *screen)
Change the active screen.
bool ED_workspace_layout_delete(WorkSpace *workspace, WorkSpaceLayout *layout_old, bContext *C) ATTR_NONNULL()
bool ED_workspace_delete(WorkSpace *workspace, Main *bmain, bContext *C, wmWindowManager *wm) ATTR_NONNULL()
bScreen * ED_screen_animation_playing(const wmWindowManager *wm)
void ED_area_type_hud_clear(wmWindowManager *wm, ScrArea *area_keep)
void ED_area_exit(bContext *C, ScrArea *area)
void ED_screen_set_active_region(bContext *C, wmWindow *win, const int xy[2])
void ED_area_do_refresh(bContext *C, ScrArea *area)
AZone * ED_area_azones_update(ScrArea *area, const int mouse_xy[2])
void ED_workspace_status_text(bContext *C, const char *str)
void ED_update_for_newframe(Main *bmain, Depsgraph *depsgraph)
void ED_region_tag_redraw(ARegion *region)
void ED_area_prevspace(bContext *C, ScrArea *area)
void ED_screen_full_prevspace(bContext *C, ScrArea *area)
void ED_area_type_hud_ensure(bContext *C, ScrArea *area)
void ED_undo_push_op(bContext *C, wmOperator *op)
bool ED_undo_is_state_valid(bContext *C)
void ED_undo_grouped_push_op(bContext *C, wmOperator *op)
void ED_spacedata_id_remap(ScrArea *area, SpaceLink *sl, const blender::bke::id::IDRemapper &mappings)
void ED_view3d_screen_datamask(const Scene *scene, ViewLayer *view_layer, const bScreen *screen, CustomData_MeshMasks *r_cddata_masks)
GHOST C-API function and type declarations.
@ GHOST_kTrackpadEventMagnify
@ GHOST_kTrackpadEventSmartMagnify
@ GHOST_kTrackpadEventRotate
@ GHOST_kTrackpadEventScroll
@ GHOST_kEventImeComposition
@ GHOST_kEventWindowDeactivate
@ GHOST_kEventImeCompositionStart
@ GHOST_kEventImeCompositionEnd
@ GHOST_kKeyNumpadAsterisk
#define GHOST_kNumEventTypes
@ GHOST_kButtonMaskButton4
@ GHOST_kButtonMaskButton7
@ GHOST_kButtonMaskButton6
@ GHOST_kButtonMaskButton5
@ GHOST_kButtonMaskMiddle
Read Guarded memory(de)allocation.
#define RNA_STRUCT_BEGIN(sptr, prop)
uiBlock * UI_region_block_find_mouse_over(const ARegion *region, const int xy[2], bool only_clip)
void uiItemL(uiLayout *layout, const char *name, int icon)
uiLayout * uiLayoutRow(uiLayout *layout, bool align)
void UI_popup_menu_reports(bContext *C, ReportList *reports) ATTR_NONNULL()
int uiTemplateStatusBarModalItem(uiLayout *layout, const wmKeyMap *keymap, const EnumPropertyItem *item)
void UI_popup_handlers_remove_all(bContext *C, ListBase *handlers)
int(*)(bContext *C, const wmEvent *event, void *userdata) wmUIHandlerFunc
@ WM_HANDLER_ACCEPT_DBL_CLICK
@ WM_CAPABILITY_WINDOW_POSITION
@ WM_CAPABILITY_TRACKPAD_PHYSICAL_DIRECTION
bool(*)(const ARegion *region, const wmEvent *event) EventHandlerPoll
void(*)(wmWindowManager *wm, wmWindow *win, wmEventHandler_Keymap *handler, wmEventHandler_KeymapResult *km_result) wmEventHandler_KeymapDynamicFn
void(*)(bContext *C, void *userdata) wmUIHandlerRemoveFunc
@ WM_GIZMO_EVENT_HANDLE_ALL
@ WM_GIZMO_OPERATOR_TOOL_INIT
@ WM_GIZMOGROUPTYPE_TOOL_INIT
@ WM_GIZMOGROUPTYPE_TOOL_FALLBACK_KEYMAP
#define WM_UI_HANDLER_CONTINUE
@ WM_EVENT_FORCE_DRAG_THRESHOLD
@ WM_EVENT_IS_CONSECUTIVE
CLG_LogRef * WM_LOG_OPERATORS
#define WM_OP_CONTEXT_HAS_AREA(type)
CLG_LogRef * WM_LOG_HANDLERS
CLG_LogRef * WM_LOG_EVENTS
#define ND_WORKSPACE_DELETE
#define ND_SPACE_INFO_REPORT
#define WM_EVENT_CURSOR_MOTION_THRESHOLD
@ WM_OP_INVOKE_REGION_WIN
@ WM_OP_EXEC_REGION_PREVIEW
@ WM_OP_INVOKE_REGION_PREVIEW
@ WM_OP_EXEC_REGION_CHANNELS
@ WM_OP_INVOKE_REGION_CHANNELS
#define NOTE_CATEGORY_TAG_CLEARED
#define WM_UI_HANDLER_BREAK
ATTR_WARN_UNUSED_RESULT const BMVert const BMEdge * e
void iter(FunctionRef< void(ID *old_id, ID *new_id)> func) const
local_group_size(16, 16) .push_constant(Type b
const Depsgraph * depsgraph
draw_view push_constant(Type::INT, "radiance_src") .push_constant(Type capture_info_buf storage_buf(1, Qualifier::READ, "ObjectBounds", "bounds_buf[]") .push_constant(Type draw_view int
void *(* MEM_mallocN)(size_t len, const char *str)
void MEM_freeN(void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
void *(* MEM_dupallocN)(const void *vmemh)
#define SET(a, b, c, d, k, s, Ti)
std::unique_ptr< IDProperty, IDPropertyDeleter > create_group(StringRefNull prop_name, eIDPropertyFlag flags={})
Allocate a new IDProperty of type IDP_GROUP.
void storage_id_remap(ID *id_old, ID *id_new)
float wrap(float value, float max, float min)
void RNA_string_set(PointerRNA *ptr, const char *name, const char *value)
PointerRNA RNA_property_pointer_get(PointerRNA *ptr, PropertyRNA *prop)
std::string RNA_pointer_as_string_keywords(bContext *C, PointerRNA *ptr, const bool as_function, const bool all_args, const bool nested_args, const int max_prop_length)
int RNA_property_flag(PropertyRNA *prop)
PointerRNA RNA_pointer_create(ID *id, StructRNA *type, void *data)
const char * RNA_property_identifier(const PropertyRNA *prop)
void RE_FreeUnusedGPUResources()
unsigned __int64 uint64_t
CursorKeymapInfo_State state
GHOST_TTrackpadEventSubTypes subtype
struct wmTimer * reporttimer
struct ARegion * active_region
struct wmGizmoMap * gizmo_map
wmEventHandler_KeymapDynamicFn keymap_fn
void(* post_fn)(wmKeyMap *keymap, wmKeyMapItem *kmi, void *user_data)
wmEventHandler_KeymapDynamic dynamic
wmEventHandler_KeymapPost post
struct wmEventHandler_Op::@1394 context
wmUIHandlerRemoveFunc remove_fn
wmUIHandlerFunc handle_fn
struct wmEventHandler_UI::@1393 context
eWM_EventHandlerType type
eWM_EventHandlerFlag flag
short prev_press_keymodifier
uint8_t prev_press_modifier
wmGizmoMapType_Params gzmap_params
eWM_GizmoFlagGroupTypeFlag flag
wmGizmoGroup * parent_gzgroup
bool(* poll_modal_item)(const struct wmOperator *op, int value)
wmOperatorCallContext opcontext
struct wmOperatorTypeMacro * next
struct IDProperty * properties
bool(* poll)(bContext *C) ATTR_WARN_UNUSED_RESULT
int(* modal)(bContext *C, wmOperator *op, const wmEvent *event) ATTR_WARN_UNUSED_RESULT
bool(* check)(bContext *C, wmOperator *op)
bool(* pyop_poll)(bContext *C, wmOperatorType *ot) ATTR_WARN_UNUSED_RESULT
int(* invoke)(bContext *C, wmOperator *op, const wmEvent *event) ATTR_WARN_UNUSED_RESULT
int(* exec)(bContext *C, wmOperator *op) ATTR_WARN_UNUSED_RESULT
bool(* ui_poll)(wmOperatorType *ot, PointerRNA *ptr)
const char * translation_context
void(* ui)(bContext *C, wmOperator *op)
void(* cancel)(bContext *C, wmOperator *op)
struct ReportList * reports
struct wmOperatorType * type
struct wmMsgBus * message_bus
WindowManagerRuntimeHandle * runtime
struct UndoStack * undo_stack
struct wmWindow * winactive
struct wmKeyConfig * userconf
struct GSet * notifier_queue_set
const struct wmNotifier * notifier_current
short pie_event_type_lock
uint64_t eventstate_prev_press_time_ms
struct wmEvent * eventstate
struct wmEvent * event_last_handled
char event_queue_check_click
char event_queue_consecutive_gesture_type
int event_queue_consecutive_gesture_xy[2]
const struct wmIMEData * ime_data
char ime_data_is_composing
char event_queue_check_drag_handled
struct wmEvent_ConsecutiveData * event_queue_consecutive_gesture_data
void * cursor_keymap_status
char event_queue_check_drag
void wm_operator_register(bContext *C, wmOperator *op)
void WM_operator_free(wmOperator *op)
void WM_cursor_modal_set(wmWindow *win, int val)
bool wm_cursor_arrow_move(wmWindow *win, const wmEvent *event)
void WM_cursor_modal_restore(wmWindow *win)
void WM_cursor_grab_enable(wmWindow *win, const eWM_CursorWrapAxis wrap, const rcti *wrap_region, const bool hide)
void WM_cursor_grab_disable(wmWindow *win, const int mouse_ungrab_xy[2])
void wm_drop_prepare(bContext *C, wmDrag *drag, wmDropBox *drop)
wmOperatorCallContext wm_drop_operator_context_get(const wmDropBox *)
void wm_drop_end(bContext *C, wmDrag *, wmDropBox *)
void wm_drags_check_ops(bContext *C, const wmEvent *event)
void wm_drags_exit(wmWindowManager *wm, wmWindow *win)
void WM_drag_free_list(ListBase *lb)
static ListBase dropboxes
bool WM_region_use_viewport(ScrArea *area, ARegion *region)
void WM_paint_cursor_tag_redraw(wmWindow *win, ARegion *)
float wm_pressure_curve(float raw_pressure)
bool WM_event_consecutive_gesture_test_break(const wmWindow *win, const wmEvent *event)
int WM_event_drag_direction(const wmEvent *event)
void WM_event_print(const wmEvent *event)
bool WM_event_drag_test(const wmEvent *event, const int prev_xy[2])
int WM_userdef_event_map(int kmitype)
bool WM_event_consecutive_gesture_test(const wmEvent *event)
static eHandlerActionFlag wm_handler_fileselect_do(bContext *C, ListBase *handlers, wmEventHandler_Op *handler, int val)
int WM_operator_repeat_last(bContext *C, wmOperator *op)
bool WM_operator_poll_context(bContext *C, wmOperatorType *ot, short context)
bool WM_window_modal_keymap_status_draw(bContext *C, wmWindow *win, uiLayout *layout)
constexpr wmTabletData wm_event_tablet_data_default()
wmEvent * wm_event_add(wmWindow *win, const wmEvent *event_to_add)
wmEventHandler_Dropbox * WM_event_add_dropbox_handler(ListBase *handlers, ListBase *dropboxes)
static int wm_operator_exec(bContext *C, wmOperator *op, const bool repeat, const bool store)
static void wm_event_custom_free(wmEvent *event)
wmEventHandler_Keymap * WM_event_add_keymap_handler_poll(ListBase *handlers, wmKeyMap *keymap, EventHandlerPoll poll)
static void wm_handler_op_context_get_if_valid(bContext *C, wmEventHandler_Op *handler, const wmEvent *event, ScrArea **r_area, ARegion **r_region)
wmEventHandler_Keymap * WM_event_add_keymap_handler(ListBase *handlers, wmKeyMap *keymap)
void WM_menu_name_call(bContext *C, const char *menu_name, short context)
bool WM_operator_ui_poll(wmOperatorType *ot, PointerRNA *ptr)
static void wm_eventemulation(wmEvent *event, bool test_only)
static bool wm_operator_register_check(wmWindowManager *wm, wmOperatorType *ot)
static wmEvent * wm_event_add_mousemove_to_head(wmWindow *win)
void WM_event_remove_keymap_handler(ListBase *handlers, wmKeyMap *keymap)
static void wm_handler_operator_insert(wmWindow *win, wmEventHandler_Op *handler)
void wm_event_do_handlers(bContext *C)
bool WM_operator_poll(bContext *C, wmOperatorType *ot)
bool WM_operator_repeat_check(const bContext *, wmOperator *op)
static eHandlerActionFlag wm_event_do_handlers_area_regions(bContext *C, wmEvent *event, ScrArea *area)
static intptr_t wm_operator_undo_active_id(const wmWindowManager *wm)
static ScrArea * area_event_inside(bContext *C, const int xy[2])
void WM_window_status_area_tag_redraw(wmWindow *win)
wmEvent * WM_event_add_simulate(wmWindow *win, const wmEvent *event_to_add)
BLI_INLINE bool wm_eventmatch(const wmEvent *winevent, const wmKeyMapItem *kmi)
void WM_event_add_fileselect(bContext *C, wmOperator *op)
void * WM_event_consecutive_data_get(wmWindow *win, const char *id)
wmEventHandler_UI * WM_event_add_ui_handler(const bContext *C, ListBase *handlers, wmUIHandlerFunc handle_fn, wmUIHandlerRemoveFunc remove_fn, void *user_data, const eWM_EventHandlerFlag flag)
static void wm_event_modalkeymap_end(wmEvent *event, const wmEvent_ModalMapStore *event_backup)
static std::string keymap_handler_log_kmi_op_str(bContext *C, const wmKeyMapItem *kmi)
void WM_main_remap_editor_id_reference(const blender::bke::id::IDRemapper &mappings)
static eHandlerActionFlag wm_handler_fileselect_call(bContext *C, ListBase *handlers, wmEventHandler_Op *handler, const wmEvent *event)
static bool wm_event_is_ignorable_key_press(const wmWindow *win, const wmEvent &event)
void wm_event_do_refresh_wm_and_depsgraph(bContext *C)
void WM_report_banners_cancel(Main *bmain)
#define CASE_BUTTON(ghost_button, type)
bool WM_operator_name_poll(bContext *C, const char *opstring)
static void ui_handler_wait_for_input_remove(bContext *C, void *userdata)
void WM_event_remove_area_handler(ListBase *handlers, void *area)
static eHandlerActionFlag wm_handlers_do_intern(bContext *C, wmWindow *win, wmEvent *event, ListBase *handlers)
wmOperator * WM_operator_find_modal_by_type(wmWindow *win, const wmOperatorType *ot)
static bool handler_region_v2d_mask_test(const ARegion *region, const wmEvent *event)
static void wm_region_tag_draw_on_gizmo_delay_refresh_for_tweak(wmWindow *win)
void wm_event_do_depsgraph(bContext *C, bool is_after_open_file)
void WM_event_add_notifier_ex(wmWindowManager *wm, const wmWindow *win, uint type, void *reference)
void WM_window_cursor_keymap_status_refresh(bContext *C, wmWindow *win)
static void wm_event_get_keymap_from_toolsystem_ex(wmWindowManager *wm, wmWindow *win, wmEventHandler_Keymap *handler, wmEventHandler_KeymapResult *km_result, const bool with_gizmos)
void WM_report(eReportType type, const char *message)
static void wm_operator_finished(bContext *C, wmOperator *op, const bool repeat, const bool store, const bool has_undo_step, const bool has_register)
static void wm_event_prev_values_set(wmEvent *event, wmEvent *event_state)
enum eHandlerActionFlag { WM_HANDLER_BREAK=1<< 0, WM_HANDLER_HANDLED=1<< 1, WM_HANDLER_MODAL=1<< 2, } eHandlerActionFlag
void wm_tablet_data_from_ghost(const GHOST_TabletData *tablet_data, wmTabletData *wmtab)
static eHandlerActionFlag wm_handlers_do_keymap_with_gizmo_handler(bContext *C, wmEvent *event, ListBase *handlers, wmEventHandler_Gizmo *handler, wmGizmoGroup *gzgroup, wmKeyMap *keymap, const bool do_debug_handler, bool *r_keymap_poll)
void WM_event_consecutive_data_free(wmWindow *win)
static eHandlerActionFlag wm_event_drag_and_drop_test(wmWindowManager *wm, wmWindow *win, wmEvent *event)
static bool wm_action_not_handled(const eHandlerActionFlag action)
static int ui_handler_wait_for_input(bContext *C, const wmEvent *event, void *userdata)
void WM_event_get_keymaps_from_handler(wmWindowManager *wm, wmWindow *win, wmEventHandler_Keymap *handler, wmEventHandler_KeymapResult *km_result)
void WM_event_free_ui_handler_all(bContext *C, ListBase *handlers, wmUIHandlerFunc handle_fn, wmUIHandlerRemoveFunc remove_fn)
void WM_reports_from_reports_move(wmWindowManager *wm, ReportList *reports)
static wmWindow * wm_event_cursor_other_windows(wmWindowManager *wm, wmWindow *win, wmEvent *event)
void WM_main_add_notifier(uint type, void *reference)
wmEventHandler_Op * WM_event_add_modal_handler(bContext *C, wmOperator *op)
static ARegion * region_event_inside(bContext *C, const int xy[2])
int WM_operator_repeat(bContext *C, wmOperator *op)
void wm_event_free_all(wmWindow *win)
void WM_event_get_keymap_from_toolsystem(wmWindowManager *wm, wmWindow *win, wmEventHandler_Keymap *handler, wmEventHandler_KeymapResult *km_result)
void WM_event_tablet_data_default_set(wmTabletData *tablet_data)
static void wm_event_cursor_store(CursorKeymapInfo_State *state, const wmEvent *event, short space_type, short region_type, const bToolRef *tref)
static void wm_region_mouse_co(bContext *C, wmEvent *event)
int WM_operator_call_notest(bContext *C, wmOperator *op)
int WM_operator_name_call_ptr(bContext *C, wmOperatorType *ot, wmOperatorCallContext context, PointerRNA *properties, const wmEvent *event)
static void wm_handler_op_context(bContext *C, wmEventHandler_Op *handler, const wmEvent *event)
void WM_event_modal_handler_region_replace(wmWindow *win, const ARegion *old_region, ARegion *new_region)
static uint note_hash_for_queue_fn(const void *ptr)
static bool wm_event_pie_filter(wmWindow *win, const wmEvent *event)
wmEventHandler_Keymap * WM_event_add_keymap_handler_priority(ListBase *handlers, wmKeyMap *keymap, int)
void WM_event_remove_modal_handler_all(const wmOperator *op, const bool postpone)
static eHandlerActionFlag wm_handler_ui_call(bContext *C, wmEventHandler_UI *handler, const wmEvent *event, const bool always_pass)
wmEventHandler_Op * WM_event_add_modal_handler_ex(wmWindow *win, ScrArea *area, ARegion *region, wmOperator *op)
const char * WM_window_cursor_keymap_status_get(const wmWindow *win, int button_index, int type_index)
void WM_event_fileselect_event(wmWindowManager *wm, void *ophandle, const int eventval)
static void wm_event_free_last(wmWindow *win)
static eHandlerActionFlag wm_handlers_do_keymap_with_keymap_handler(bContext *C, wmEvent *event, ListBase *handlers, wmEventHandler_Keymap *handler, wmKeyMap *keymap, const bool do_debug_handler)
static void wm_event_state_update_and_click_set(wmEvent *event, uint64_t event_time_ms, wmEvent *event_state, uint64_t *event_state_prev_press_time_ms_p, const GHOST_TEventType type)
static void wm_paintcursor_tag(bContext *C, wmWindowManager *wm, ARegion *region)
static eHandlerActionFlag wm_event_do_region_handlers(bContext *C, wmEvent *event, ARegion *region)
static bool wm_event_is_double_click(const wmEvent *event, const uint64_t event_time_ms, const uint64_t event_prev_press_time_ms)
void WM_operator_region_active_win_set(bContext *C)
void WM_reportf(eReportType type, const char *format,...)
static wmKeyMapItem * wm_eventmatch_modal_keymap_items(const wmKeyMap *keymap, wmOperator *op, const wmEvent *event)
wmKeyMapItem * WM_event_match_keymap_item_from_handlers(bContext *C, wmWindowManager *wm, wmWindow *win, ListBase *handlers, const wmEvent *event)
static bool wm_operator_check_locked_interface(bContext *C, wmOperatorType *ot)
static void wm_event_prev_click_set(uint64_t event_time_ms, wmEvent *event_state, uint64_t *r_event_state_prev_press_time_ms)
static std::optional< std::string > keymap_handler_log_kmi_event_str(const wmKeyMapItem *kmi)
static bool wm_event_is_same_key_press(const wmEvent &event_a, const wmEvent &event_b)
static void wm_event_timers_execute(bContext *C)
static void wm_event_handler_ui_cancel(bContext *C)
wmEventHandler_Keymap * WM_event_add_keymap_handler_v2d_mask(ListBase *handlers, wmKeyMap *keymap)
static int wm_operator_exec_notest(bContext *C, wmOperator *op)
wmEvent * wm_event_add_ex(wmWindow *win, const wmEvent *event_to_add, const wmEvent *event_to_add_after)
void WM_operator_name_call_ptr_with_depends_on_cursor(bContext *C, wmOperatorType *ot, wmOperatorCallContext opcontext, PointerRNA *properties, const wmEvent *event, const char *drawstr)
static bool note_cmp_for_queue_fn(const void *a, const void *b)
void WM_event_remove_ui_handler(ListBase *handlers, wmUIHandlerFunc handle_fn, wmUIHandlerRemoveFunc remove_fn, void *user_data, const bool postpone)
int WM_operator_call(bContext *C, wmOperator *op)
static int wm_operator_invoke(bContext *C, wmOperatorType *ot, const wmEvent *event, PointerRNA *properties, ReportList *reports, const bool poll_only, bool use_last_properties)
static void wm_notifier_clear(wmNotifier *note)
int WM_operator_name_call_with_properties(bContext *C, const char *opstring, wmOperatorCallContext context, IDProperty *properties, const wmEvent *event)
void WM_event_modal_handler_area_replace(wmWindow *win, const ScrArea *old_area, ScrArea *new_area)
static eHandlerActionFlag wm_handler_operator_call(bContext *C, ListBase *handlers, wmEventHandler *handler_base, wmEvent *event, PointerRNA *properties, const char *kmi_idname)
bool WM_operator_is_repeat(const bContext *C, const wmOperator *op)
static void wm_event_free_last_handled(wmWindow *win, wmEvent *event)
static eHandlerActionFlag wm_handlers_do(bContext *C, wmEvent *event, ListBase *handlers)
static eHandlerActionFlag wm_handlers_do_gizmo_handler(bContext *C, wmWindowManager *wm, wmEventHandler_Gizmo *handler, wmEvent *event, ListBase *handlers, const bool do_debug_handler)
void WM_event_remove_model_handler(ListBase *handlers, const wmOperator *op, const bool postpone)
void WM_main_remove_notifier_reference(const void *reference)
static void wm_event_state_update_and_click_set_ex(wmEvent *event, uint64_t event_time_ms, wmEvent *event_state, uint64_t *event_state_prev_press_time_ms_p, const bool is_keyboard, const bool check_double_click)
void WM_report_banner_show(wmWindowManager *wm, wmWindow *win)
void WM_event_add_notifier(const bContext *C, uint type, void *reference)
int WM_operator_name_call(bContext *C, const char *opstring, wmOperatorCallContext context, PointerRNA *properties, const wmEvent *event)
void wm_event_handler_ui_cancel_ex(bContext *C, wmWindow *win, ARegion *region, bool reactivate_button)
wmEventHandler_Keymap * WM_event_add_keymap_handler_dynamic(ListBase *handlers, wmEventHandler_KeymapDynamicFn keymap_fn, void *user_data)
static void wm_paintcursor_test(bContext *C, const wmEvent *event)
void wm_event_free(wmEvent *event)
static wmWindow * wm_event_find_fileselect_root_window_from_context(const bContext *C)
static void wm_operator_reports(bContext *C, wmOperator *op, const int retval, const bool caller_owns_reports)
static wmEvent * wm_event_add_trackpad(wmWindow *win, const wmEvent *event, int deltax, int deltay)
static bool event_or_prev_in_rect(const wmEvent *event, const rcti *rect)
ScrArea * WM_window_status_area_find(wmWindow *win, bScreen *screen)
static bool wm_notifier_is_clear(const wmNotifier *note)
void WM_event_set_keymap_handler_post_callback(wmEventHandler_Keymap *handler, void(keymap_tag)(wmKeyMap *keymap, wmKeyMapItem *kmi, void *user_data), void *user_data)
static int wm_operator_call_internal(bContext *C, wmOperatorType *ot, PointerRNA *properties, ReportList *reports, const wmOperatorCallContext context, const bool poll_only, const wmEvent *event)
static void wm_operator_free_for_fileselect(wmOperator *file_operator)
BLI_INLINE void wm_event_handler_return_value_check(const bContext *C, const wmEvent *event, const eHandlerActionFlag action)
#define WM_HANDLER_CONTINUE
static intptr_t wm_operator_register_active_id(const wmWindowManager *wm)
static bool screen_temp_region_exists(const ARegion *region)
static wmOperator * wm_operator_create(wmWindowManager *wm, wmOperatorType *ot, PointerRNA *properties, ReportList *reports)
wmKeyMapItem * WM_event_match_keymap_item(bContext *C, wmKeyMap *keymap, const wmEvent *event)
void wm_event_free_handler(wmEventHandler *handler)
static void wm_event_modalkeymap_begin(const bContext *C, wmOperator *op, wmEvent *event, wmEvent_ModalMapStore *event_backup)
void wm_event_do_notifiers(bContext *C)
void WM_event_consecutive_data_set(wmWindow *win, const char *id, void *custom_data)
static const char * keymap_handler_log_action_str(const eHandlerActionFlag action)
int WM_operator_call_py(bContext *C, wmOperatorType *ot, wmOperatorCallContext context, PointerRNA *properties, ReportList *reports, const bool is_undo)
static int wm_event_type_from_ghost_button(const GHOST_TButton button, const int fallback)
static void wm_event_free_and_remove_from_queue_if_valid(wmEvent *event)
static int wm_event_type_from_ghost_key(GHOST_TKey key)
void WM_event_ui_handler_region_popup_replace(wmWindow *win, const ARegion *old_region, ARegion *new_region)
static void wm_event_custom_clear(wmEvent *event)
void WM_event_get_keymap_from_toolsystem_with_gizmos(wmWindowManager *wm, wmWindow *win, wmEventHandler_Keymap *handler, wmEventHandler_KeymapResult *km_result)
bool WM_event_match(const wmEvent *winevent, const wmKeyMapItem *kmi)
void WM_set_locked_interface(wmWindowManager *wm, bool lock)
static wmEvent * wm_event_add_mousemove(wmWindow *win, const wmEvent *event)
int WM_operator_call_ex(bContext *C, wmOperator *op, const bool store)
void wm_event_add_ghostevent(wmWindowManager *wm, wmWindow *win, const int type, const void *customdata, const uint64_t event_time_ms)
static bool wm_event_always_pass(const wmEvent *event)
void wm_event_init_from_window(wmWindow *win, wmEvent *event)
void WM_event_remove_handlers(bContext *C, ListBase *handlers)
void WM_event_add_mousemove(wmWindow *win)
static bool wm_event_inside_rect(const wmEvent *event, const rcti *rect)
@ WM_HANDLER_TYPE_DROPBOX
#define ISMOUSE_BUTTON(event_type)
#define ISKEYBOARD_OR_BUTTON(event_type)
#define ISMOUSE_MOTION(event_type)
#define ISMOUSE_WHEEL(event_type)
#define ISKEYMODIFIER(event_type)
#define ISTIMER(event_type)
#define ISMOUSE_GESTURE(event_type)
#define ISKEYBOARD(event_type)
@ EVT_FILESELECT_FULL_OPEN
@ EVT_FILESELECT_EXTERNAL_CANCEL
void wm_test_autorun_warning(bContext *C)
void WM_gizmogroup_ensure_init(const bContext *C, wmGizmoGroup *gzgroup)
bool WM_gizmo_group_type_ensure_ptr_ex(wmGizmoGroupType *gzgt, wmGizmoMapType *gzmap_type)
wmGizmoGroup * WM_gizmomaptype_group_init_runtime_with_region(wmGizmoMapType *gzmap_type, wmGizmoGroupType *gzgt, ARegion *region)
bool wm_gizmogroup_is_any_selected(const wmGizmoGroup *gzgroup)
wmGizmoGroupType * WM_gizmogrouptype_find(const char *idname, bool quiet)
const ListBase * WM_gizmomap_group_list(wmGizmoMap *gzmap)
bool WM_gizmomap_is_any_selected(const wmGizmoMap *gzmap)
void wm_gizmomaps_handled_modal_update(bContext *C, wmEvent *event, wmEventHandler_Op *handler)
bool wm_gizmomap_highlight_set(wmGizmoMap *gzmap, const bContext *C, wmGizmo *gz, int part)
wmGizmoGroup * WM_gizmomap_group_find(wmGizmoMap *gzmap, const char *idname)
bool WM_gizmomap_tag_delay_refresh_for_tweak_check(wmGizmoMap *gzmap)
wmGizmo * wm_gizmomap_highlight_find(wmGizmoMap *gzmap, bContext *C, const wmEvent *event, int *r_part)
void WM_gizmomap_tag_refresh(wmGizmoMap *gzmap)
wmGizmo * wm_gizmomap_highlight_get(wmGizmoMap *gzmap)
void WM_gizmoconfig_update(Main *bmain)
ARegion * WM_gizmomap_tooltip_init(bContext *C, ARegion *region, int *, double *, bool *r_exit_on_event)
wmGizmoMapType * WM_gizmomaptype_ensure(const wmGizmoMapType_Params *gzmap_params)
void wm_gizmomap_handler_context_gizmo(bContext *, wmEventHandler_Gizmo *)
wmGizmo * wm_gizmomap_modal_get(wmGizmoMap *gzmap)
std::optional< std::string > WM_modalkeymap_operator_items_to_string(wmOperatorType *ot, const int propvalue, const bool compact)
wmKeyMap * WM_keymap_list_find_spaceid_or_empty(ListBase *lb, const char *idname, int spaceid, int regionid)
void WM_keyconfig_update(wmWindowManager *wm)
bool WM_keymap_poll(bContext *C, wmKeyMap *keymap)
wmKeyMap * WM_keymap_active(const wmWindowManager *wm, wmKeyMap *keymap)
std::optional< std::string > WM_keymap_item_to_string(const wmKeyMapItem *kmi, const bool compact)
void WM_msg_id_update(wmMsgBus *mbus, ID *id_src, ID *id_dst)
void WM_msgbus_handle(wmMsgBus *mbus, bContext *C)
void WM_msg_id_remove(wmMsgBus *mbus, const ID *id)
std::string WM_operatortype_name(wmOperatorType *ot, PointerRNA *properties)
bool WM_operator_depends_on_cursor(bContext &C, wmOperatorType &ot, PointerRNA *properties)
wmOperatorType * WM_operatortype_find(const char *idname, bool quiet)
bool WM_operator_last_properties_store(wmOperator *op)
wmOperator * WM_operator_last_redo(const bContext *C)
bool WM_operator_last_properties_init(wmOperator *op)
void WM_operator_properties_create_ptr(PointerRNA *ptr, wmOperatorType *ot)
std::string WM_operator_pystring(bContext *C, wmOperator *op, const bool all_args, const bool macro_args)
void WM_operator_properties_free(PointerRNA *ptr)
void WM_operator_properties_sanitize(PointerRNA *ptr, const bool no_context)
void wm_stereo3d_mouse_offset_apply(wmWindow *win, int r_mouse_xy[2])
void wm_surfaces_do_depsgraph(bContext *C)
blender::int2 WM_window_native_pixel_size(const wmWindow *win)
void wm_cursor_position_from_ghost_screen_coords(wmWindow *win, int *x, int *y)
void WM_window_set_active_workspace(bContext *C, wmWindow *win, WorkSpace *workspace)
void wm_test_gpu_backend_fallback(bContext *C)
WorkSpaceLayout * WM_window_get_active_layout(const wmWindow *win)
void wm_test_opengl_deprecation_warning(bContext *C)
bool wm_cursor_position_get(wmWindow *win, int *r_x, int *r_y)
void wm_window_close(bContext *C, wmWindowManager *wm, wmWindow *win)
void wm_window_make_drawable(wmWindowManager *wm, wmWindow *win)
bool WM_window_is_temp_screen(const wmWindow *win)
wmWindow * WM_window_find_under_cursor(wmWindow *win, const int event_xy[2], int r_event_xy_other[2])
eWM_CapabilitiesFlag WM_capabilities_flag()
ViewLayer * WM_window_get_active_view_layer(const wmWindow *win)
Scene * WM_window_get_active_scene(const wmWindow *win)
void WM_event_timer_remove(wmWindowManager *wm, wmWindow *, wmTimer *timer)
void WM_window_title(wmWindowManager *wm, wmWindow *win, const char *title)
WorkSpace * WM_window_get_active_workspace(const wmWindow *win)
wmTimer * WM_event_timer_add(wmWindowManager *wm, wmWindow *win, const int event_type, const double time_step)
bScreen * WM_window_get_active_screen(const wmWindow *win)
ScrArea * WM_xr_session_area_get(const wmXrData *xr)