Blender V4.3
rna_wm.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
9#include <cstdlib>
10
11#include "DNA_screen_types.h"
12#include "DNA_space_types.h"
13#include "DNA_userdef_types.h"
15
17#include "BLI_utildefines.h"
18
19#include "BLT_translation.hh"
20
21#include "BKE_keyconfig.h"
22#include "BKE_screen.hh"
23#include "BKE_workspace.hh"
24
25#include "RNA_access.hh"
26#include "RNA_define.hh"
27#include "RNA_enum_types.hh"
28
29#include "rna_internal.hh"
30
31#include "WM_api.hh"
32#include "WM_types.hh"
33
34#ifdef RNA_RUNTIME
35
36# include "wm_event_system.hh"
37
38static const EnumPropertyItem event_mouse_type_items[] = {
39 {LEFTMOUSE, "LEFTMOUSE", 0, CTX_N_(BLT_I18NCONTEXT_UI_EVENTS, "Left"), ""},
40 {MIDDLEMOUSE, "MIDDLEMOUSE", 0, CTX_N_(BLT_I18NCONTEXT_UI_EVENTS, "Middle"), ""},
41 {RIGHTMOUSE, "RIGHTMOUSE", 0, CTX_N_(BLT_I18NCONTEXT_UI_EVENTS, "Right"), ""},
42 {BUTTON4MOUSE, "BUTTON4MOUSE", 0, CTX_N_(BLT_I18NCONTEXT_UI_EVENTS, "Button4"), ""},
43 {BUTTON5MOUSE, "BUTTON5MOUSE", 0, CTX_N_(BLT_I18NCONTEXT_UI_EVENTS, "Button5"), ""},
44 {BUTTON6MOUSE, "BUTTON6MOUSE", 0, CTX_N_(BLT_I18NCONTEXT_UI_EVENTS, "Button6"), ""},
45 {BUTTON7MOUSE, "BUTTON7MOUSE", 0, CTX_N_(BLT_I18NCONTEXT_UI_EVENTS, "Button7"), ""},
47 {TABLET_STYLUS, "PEN", 0, CTX_N_(BLT_I18NCONTEXT_UI_EVENTS, "Pen"), ""},
48 {TABLET_ERASER, "ERASER", 0, CTX_N_(BLT_I18NCONTEXT_UI_EVENTS, "Eraser"), ""},
50 {MOUSEMOVE, "MOUSEMOVE", 0, CTX_N_(BLT_I18NCONTEXT_UI_EVENTS, "Move"), ""},
51 {MOUSEPAN, "TRACKPADPAN", 0, CTX_N_(BLT_I18NCONTEXT_UI_EVENTS, "Mouse/Trackpad Pan"), ""},
52 {MOUSEZOOM, "TRACKPADZOOM", 0, CTX_N_(BLT_I18NCONTEXT_UI_EVENTS, "Mouse/Trackpad Zoom"), ""},
54 "MOUSEROTATE",
55 0,
56 CTX_N_(BLT_I18NCONTEXT_UI_EVENTS, "Mouse/Trackpad Rotate"),
57 ""},
59 "MOUSESMARTZOOM",
60 0,
61 CTX_N_(BLT_I18NCONTEXT_UI_EVENTS, "Mouse/Trackpad Smart Zoom"),
62 ""},
64 {WHEELUPMOUSE, "WHEELUPMOUSE", 0, CTX_N_(BLT_I18NCONTEXT_UI_EVENTS, "Wheel Up"), ""},
65 {WHEELDOWNMOUSE, "WHEELDOWNMOUSE", 0, CTX_N_(BLT_I18NCONTEXT_UI_EVENTS, "Wheel Down"), ""},
66 {WHEELINMOUSE, "WHEELINMOUSE", 0, CTX_N_(BLT_I18NCONTEXT_UI_EVENTS, "Wheel In"), ""},
67 {WHEELOUTMOUSE, "WHEELOUTMOUSE", 0, CTX_N_(BLT_I18NCONTEXT_UI_EVENTS, "Wheel Out"), ""},
68 {0, nullptr, 0, nullptr, nullptr},
69};
70
71static const EnumPropertyItem event_timer_type_items[] = {
72 {TIMER, "TIMER", 0, "Timer", ""},
73 {TIMER0, "TIMER0", 0, "Timer 0", ""},
74 {TIMER1, "TIMER1", 0, "Timer 1", ""},
75 {TIMER2, "TIMER2", 0, "Timer 2", ""},
76 {TIMERJOBS, "TIMER_JOBS", 0, "Timer Jobs", ""},
77 {TIMERAUTOSAVE, "TIMER_AUTOSAVE", 0, "Timer Autosave", ""},
78 {TIMERREPORT, "TIMER_REPORT", 0, "Timer Report", ""},
79 {TIMERREGION, "TIMERREGION", 0, "Timer Region", ""},
80 {0, nullptr, 0, nullptr, nullptr},
81};
82
83static const EnumPropertyItem event_textinput_type_items[] = {
84 {KM_TEXTINPUT, "TEXTINPUT", 0, "Text Input", ""},
85 {0, nullptr, 0, nullptr, nullptr},
86};
87
88static const EnumPropertyItem event_ndof_type_items[] = {
89 {NDOF_MOTION, "NDOF_MOTION", 0, CTX_N_(BLT_I18NCONTEXT_UI_EVENTS, "Motion"), ""},
90 /* buttons on all 3dconnexion devices */
91 {NDOF_BUTTON_MENU, "NDOF_BUTTON_MENU", 0, CTX_N_(BLT_I18NCONTEXT_UI_EVENTS, "Menu"), ""},
92 {NDOF_BUTTON_FIT, "NDOF_BUTTON_FIT", 0, CTX_N_(BLT_I18NCONTEXT_UI_EVENTS, "Fit"), ""},
93 /* view buttons */
94 {NDOF_BUTTON_TOP, "NDOF_BUTTON_TOP", 0, CTX_N_(BLT_I18NCONTEXT_UI_EVENTS, "Top"), ""},
95 {NDOF_BUTTON_BOTTOM, "NDOF_BUTTON_BOTTOM", 0, CTX_N_(BLT_I18NCONTEXT_UI_EVENTS, "Bottom"), ""},
96 {NDOF_BUTTON_LEFT, "NDOF_BUTTON_LEFT", 0, CTX_N_(BLT_I18NCONTEXT_UI_EVENTS, "Left"), ""},
97 {NDOF_BUTTON_RIGHT, "NDOF_BUTTON_RIGHT", 0, CTX_N_(BLT_I18NCONTEXT_UI_EVENTS, "Right"), ""},
98 {NDOF_BUTTON_FRONT, "NDOF_BUTTON_FRONT", 0, CTX_N_(BLT_I18NCONTEXT_UI_EVENTS, "Front"), ""},
99 {NDOF_BUTTON_BACK, "NDOF_BUTTON_BACK", 0, CTX_N_(BLT_I18NCONTEXT_UI_EVENTS, "Back"), ""},
100 /* more views */
102 "NDOF_BUTTON_ISO1",
103 0,
104 CTX_N_(BLT_I18NCONTEXT_UI_EVENTS, "Isometric 1"),
105 ""},
107 "NDOF_BUTTON_ISO2",
108 0,
109 CTX_N_(BLT_I18NCONTEXT_UI_EVENTS, "Isometric 2"),
110 ""},
111 /* 90 degree rotations */
113 "NDOF_BUTTON_ROLL_CW",
114 0,
116 ""},
118 "NDOF_BUTTON_ROLL_CCW",
119 0,
121 ""},
123 "NDOF_BUTTON_SPIN_CW",
124 0,
126 ""},
128 "NDOF_BUTTON_SPIN_CCW",
129 0,
131 ""},
133 "NDOF_BUTTON_TILT_CW",
134 0,
136 ""},
138 "NDOF_BUTTON_TILT_CCW",
139 0,
141 ""},
142 /* device control */
143 {NDOF_BUTTON_ROTATE, "NDOF_BUTTON_ROTATE", 0, CTX_N_(BLT_I18NCONTEXT_UI_EVENTS, "Rotate"), ""},
145 "NDOF_BUTTON_PANZOOM",
146 0,
148 ""},
150 "NDOF_BUTTON_DOMINANT",
151 0,
153 ""},
154 {NDOF_BUTTON_PLUS, "NDOF_BUTTON_PLUS", 0, CTX_N_(BLT_I18NCONTEXT_UI_EVENTS, "Plus"), ""},
155 {NDOF_BUTTON_MINUS, "NDOF_BUTTON_MINUS", 0, CTX_N_(BLT_I18NCONTEXT_UI_EVENTS, "Minus"), ""},
156 /* View buttons. */
157 {NDOF_BUTTON_V1, "NDOF_BUTTON_V1", 0, CTX_N_(BLT_I18NCONTEXT_UI_EVENTS, "View 1"), ""},
158 {NDOF_BUTTON_V2, "NDOF_BUTTON_V2", 0, CTX_N_(BLT_I18NCONTEXT_UI_EVENTS, "View 2"), ""},
159 {NDOF_BUTTON_V3, "NDOF_BUTTON_V3", 0, CTX_N_(BLT_I18NCONTEXT_UI_EVENTS, "View 3"), ""},
160 /* general-purpose buttons */
161 {NDOF_BUTTON_1, "NDOF_BUTTON_1", 0, CTX_N_(BLT_I18NCONTEXT_UI_EVENTS, "Button 1"), ""},
162 {NDOF_BUTTON_2, "NDOF_BUTTON_2", 0, CTX_N_(BLT_I18NCONTEXT_UI_EVENTS, "Button 2"), ""},
163 {NDOF_BUTTON_3, "NDOF_BUTTON_3", 0, CTX_N_(BLT_I18NCONTEXT_UI_EVENTS, "Button 3"), ""},
164 {NDOF_BUTTON_4, "NDOF_BUTTON_4", 0, CTX_N_(BLT_I18NCONTEXT_UI_EVENTS, "Button 4"), ""},
165 {NDOF_BUTTON_5, "NDOF_BUTTON_5", 0, CTX_N_(BLT_I18NCONTEXT_UI_EVENTS, "Button 5"), ""},
166 {NDOF_BUTTON_6, "NDOF_BUTTON_6", 0, CTX_N_(BLT_I18NCONTEXT_UI_EVENTS, "Button 6"), ""},
167 {NDOF_BUTTON_7, "NDOF_BUTTON_7", 0, CTX_N_(BLT_I18NCONTEXT_UI_EVENTS, "Button 7"), ""},
168 {NDOF_BUTTON_8, "NDOF_BUTTON_8", 0, CTX_N_(BLT_I18NCONTEXT_UI_EVENTS, "Button 8"), ""},
169 {NDOF_BUTTON_9, "NDOF_BUTTON_9", 0, CTX_N_(BLT_I18NCONTEXT_UI_EVENTS, "Button 9"), ""},
170 {NDOF_BUTTON_10, "NDOF_BUTTON_10", 0, CTX_N_(BLT_I18NCONTEXT_UI_EVENTS, "Button 10"), ""},
171 {NDOF_BUTTON_11, "NDOF_BUTTON_11", 0, CTX_N_(BLT_I18NCONTEXT_UI_EVENTS, "Button 11"), ""},
172 {NDOF_BUTTON_12, "NDOF_BUTTON_12", 0, CTX_N_(BLT_I18NCONTEXT_UI_EVENTS, "Button 12"), ""},
173# if 0 /* Never used (converted to keyboard events by GHOST). */
174 /* keyboard emulation */
175 {NDOF_BUTTON_ESC, "NDOF_BUTTON_ESC", 0, CTX_N_(BLT_I18NCONTEXT_UI_EVENTS, "Esc")},
176 {NDOF_BUTTON_ENTER, "NDOF_BUTTON_ENTER", 0, CTX_N_(BLT_I18NCONTEXT_UI_EVENTS, "Enter")},
177 {NDOF_BUTTON_DELETE, "NDOF_BUTTON_DELETE", 0, CTX_N_(BLT_I18NCONTEXT_UI_EVENTS, "Delete")},
178 {NDOF_BUTTON_TAB, "NDOF_BUTTON_TAB", 0, CTX_N_(BLT_I18NCONTEXT_UI_EVENTS, "Tab")},
179 {NDOF_BUTTON_SPACE, "NDOF_BUTTON_SPACE", 0, CTX_N_(BLT_I18NCONTEXT_UI_EVENTS, "Space")},
180 {NDOF_BUTTON_ALT, "NDOF_BUTTON_ALT", 0, CTX_N_(BLT_I18NCONTEXT_UI_EVENTS, "Alt")},
181 {NDOF_BUTTON_SHIFT, "NDOF_BUTTON_SHIFT", 0, CTX_N_(BLT_I18NCONTEXT_UI_EVENTS, "Shift")},
182 {NDOF_BUTTON_CTRL, "NDOF_BUTTON_CTRL", 0, CTX_N_(BLT_I18NCONTEXT_UI_EVENTS, "Ctrl")},
183# endif
184 {0, nullptr, 0, nullptr, nullptr},
185};
186#endif /* RNA_RUNTIME */
187
198 {WM_JOB_TYPE_RENDER, "RENDER", 0, "Regular rendering", ""},
199 {WM_JOB_TYPE_RENDER_PREVIEW, "RENDER_PREVIEW", 0, "Rendering previews", ""},
200 {WM_JOB_TYPE_OBJECT_BAKE, "OBJECT_BAKE", 0, "Object Baking", ""},
201 {WM_JOB_TYPE_COMPOSITE, "COMPOSITE", 0, "Compositing", ""},
202 {WM_JOB_TYPE_SHADER_COMPILATION, "SHADER_COMPILATION", 0, "Shader compilation", ""},
203 {0, nullptr, 0, nullptr, nullptr},
204};
205
207 /* - Note we abuse 'tooltip' message here to store a 'compact' form of some (too) long names.
208 * - Intentionally excluded: #CAPSLOCKKEY, #UNKNOWNKEY.
209 */
210 {0, "NONE", 0, "", ""},
211 {LEFTMOUSE, "LEFTMOUSE", 0, "Left Mouse", "LMB"},
212 {MIDDLEMOUSE, "MIDDLEMOUSE", 0, "Middle Mouse", "MMB"},
213 {RIGHTMOUSE, "RIGHTMOUSE", 0, "Right Mouse", "RMB"},
214 {BUTTON4MOUSE, "BUTTON4MOUSE", 0, "Button4 Mouse", "MB4"},
215 {BUTTON5MOUSE, "BUTTON5MOUSE", 0, "Button5 Mouse", "MB5"},
216 {BUTTON6MOUSE, "BUTTON6MOUSE", 0, "Button6 Mouse", "MB6"},
217 {BUTTON7MOUSE, "BUTTON7MOUSE", 0, "Button7 Mouse", "MB7"},
219 {TABLET_STYLUS, "PEN", 0, "Pen", ""},
220 {TABLET_ERASER, "ERASER", 0, "Eraser", ""},
222 {MOUSEMOVE, "MOUSEMOVE", 0, "Mouse Move", "MsMov"},
223 {INBETWEEN_MOUSEMOVE, "INBETWEEN_MOUSEMOVE", 0, "In-between Move", "MsSubMov"},
224 {MOUSEPAN, "TRACKPADPAN", 0, "Mouse/Trackpad Pan", "MsPan"},
225 {MOUSEZOOM, "TRACKPADZOOM", 0, "Mouse/Trackpad Zoom", "MsZoom"},
226 {MOUSEROTATE, "MOUSEROTATE", 0, "Mouse/Trackpad Rotate", "MsRot"},
227 {MOUSESMARTZOOM, "MOUSESMARTZOOM", 0, "Mouse/Trackpad Smart Zoom", "MsSmartZoom"},
229 {WHEELUPMOUSE, "WHEELUPMOUSE", 0, "Wheel Up", "WhUp"},
230 {WHEELDOWNMOUSE, "WHEELDOWNMOUSE", 0, "Wheel Down", "WhDown"},
231 {WHEELINMOUSE, "WHEELINMOUSE", 0, "Wheel In", "WhIn"},
232 {WHEELOUTMOUSE, "WHEELOUTMOUSE", 0, "Wheel Out", "WhOut"},
234 {EVT_AKEY, "A", 0, "A", ""},
235 {EVT_BKEY, "B", 0, "B", ""},
236 {EVT_CKEY, "C", 0, "C", ""},
237 {EVT_DKEY, "D", 0, "D", ""},
238 {EVT_EKEY, "E", 0, "E", ""},
239 {EVT_FKEY, "F", 0, "F", ""},
240 {EVT_GKEY, "G", 0, "G", ""},
241 {EVT_HKEY, "H", 0, "H", ""},
242 {EVT_IKEY, "I", 0, "I", ""},
243 {EVT_JKEY, "J", 0, "J", ""},
244 {EVT_KKEY, "K", 0, "K", ""},
245 {EVT_LKEY, "L", 0, "L", ""},
246 {EVT_MKEY, "M", 0, "M", ""},
247 {EVT_NKEY, "N", 0, "N", ""},
248 {EVT_OKEY, "O", 0, "O", ""},
249 {EVT_PKEY, "P", 0, "P", ""},
250 {EVT_QKEY, "Q", 0, "Q", ""},
251 {EVT_RKEY, "R", 0, "R", ""},
252 {EVT_SKEY, "S", 0, "S", ""},
253 {EVT_TKEY, "T", 0, "T", ""},
254 {EVT_UKEY, "U", 0, "U", ""},
255 {EVT_VKEY, "V", 0, "V", ""},
256 {EVT_WKEY, "W", 0, "W", ""},
257 {EVT_XKEY, "X", 0, "X", ""},
258 {EVT_YKEY, "Y", 0, "Y", ""},
259 {EVT_ZKEY, "Z", 0, "Z", ""},
261 {EVT_ZEROKEY, "ZERO", 0, "0", ""},
262 {EVT_ONEKEY, "ONE", 0, "1", ""},
263 {EVT_TWOKEY, "TWO", 0, "2", ""},
264 {EVT_THREEKEY, "THREE", 0, "3", ""},
265 {EVT_FOURKEY, "FOUR", 0, "4", ""},
266 {EVT_FIVEKEY, "FIVE", 0, "5", ""},
267 {EVT_SIXKEY, "SIX", 0, "6", ""},
268 {EVT_SEVENKEY, "SEVEN", 0, "7", ""},
269 {EVT_EIGHTKEY, "EIGHT", 0, "8", ""},
270 {EVT_NINEKEY, "NINE", 0, "9", ""},
272 {EVT_LEFTCTRLKEY, "LEFT_CTRL", 0, "Left Ctrl", "CtrlL"},
273 {EVT_LEFTALTKEY, "LEFT_ALT", 0, "Left Alt", "AltL"},
274 {EVT_LEFTSHIFTKEY, "LEFT_SHIFT", 0, "Left Shift", "ShiftL"},
275 {EVT_RIGHTALTKEY, "RIGHT_ALT", 0, "Right Alt", "AltR"},
276 {EVT_RIGHTCTRLKEY, "RIGHT_CTRL", 0, "Right Ctrl", "CtrlR"},
277 {EVT_RIGHTSHIFTKEY, "RIGHT_SHIFT", 0, "Right Shift", "ShiftR"},
279 {EVT_OSKEY, "OSKEY", 0, "OS Key", "Cmd"},
280 {EVT_APPKEY, "APP", 0, "Application", "App"},
281 {EVT_GRLESSKEY, "GRLESS", 0, "Grless", ""},
282 {EVT_ESCKEY, "ESC", 0, "Esc", ""},
283 {EVT_TABKEY, "TAB", 0, "Tab", ""},
284 {EVT_RETKEY, "RET", 0, "Return", "Enter"},
285 {EVT_SPACEKEY, "SPACE", 0, "Spacebar", "Space"},
286 {EVT_LINEFEEDKEY, "LINE_FEED", 0, "Line Feed", ""},
287 {EVT_BACKSPACEKEY, "BACK_SPACE", 0, "Backspace", "BkSpace"},
288 {EVT_DELKEY, "DEL", 0, "Delete", "Del"},
289 {EVT_SEMICOLONKEY, "SEMI_COLON", 0, ";", ""},
290 {EVT_PERIODKEY, "PERIOD", 0, ".", ""},
291 {EVT_COMMAKEY, "COMMA", 0, ",", ""},
292 {EVT_QUOTEKEY, "QUOTE", 0, "\"", ""},
293 {EVT_ACCENTGRAVEKEY, "ACCENT_GRAVE", 0, "`", ""},
294 {EVT_MINUSKEY, "MINUS", 0, "-", ""},
295 {EVT_PLUSKEY, "PLUS", 0, "+", ""},
296 {EVT_SLASHKEY, "SLASH", 0, "/", ""},
297 {EVT_BACKSLASHKEY, "BACK_SLASH", 0, "\\", ""},
298 {EVT_EQUALKEY, "EQUAL", 0, "=", ""},
299 {EVT_LEFTBRACKETKEY, "LEFT_BRACKET", 0, "[", ""},
300 {EVT_RIGHTBRACKETKEY, "RIGHT_BRACKET", 0, "]", ""},
301 {EVT_LEFTARROWKEY, "LEFT_ARROW", 0, "Left Arrow", BLI_STR_UTF8_LEFTWARDS_ARROW},
302 {EVT_DOWNARROWKEY, "DOWN_ARROW", 0, "Down Arrow", BLI_STR_UTF8_DOWNWARDS_ARROW},
303 {EVT_RIGHTARROWKEY, "RIGHT_ARROW", 0, "Right Arrow", BLI_STR_UTF8_RIGHTWARDS_ARROW},
304 {EVT_UPARROWKEY, "UP_ARROW", 0, "Up Arrow", BLI_STR_UTF8_UPWARDS_ARROW},
305 {EVT_PAD2, "NUMPAD_2", 0, "Numpad 2", "Pad2"},
306 {EVT_PAD4, "NUMPAD_4", 0, "Numpad 4", "Pad4"},
307 {EVT_PAD6, "NUMPAD_6", 0, "Numpad 6", "Pad6"},
308 {EVT_PAD8, "NUMPAD_8", 0, "Numpad 8", "Pad8"},
309 {EVT_PAD1, "NUMPAD_1", 0, "Numpad 1", "Pad1"},
310 {EVT_PAD3, "NUMPAD_3", 0, "Numpad 3", "Pad3"},
311 {EVT_PAD5, "NUMPAD_5", 0, "Numpad 5", "Pad5"},
312 {EVT_PAD7, "NUMPAD_7", 0, "Numpad 7", "Pad7"},
313 {EVT_PAD9, "NUMPAD_9", 0, "Numpad 9", "Pad9"},
314 {EVT_PADPERIOD, "NUMPAD_PERIOD", 0, "Numpad .", "Pad."},
315 {EVT_PADSLASHKEY, "NUMPAD_SLASH", 0, "Numpad /", "Pad/"},
316 {EVT_PADASTERKEY, "NUMPAD_ASTERIX", 0, "Numpad *", "Pad*"},
317 {EVT_PAD0, "NUMPAD_0", 0, "Numpad 0", "Pad0"},
318 {EVT_PADMINUS, "NUMPAD_MINUS", 0, "Numpad -", "Pad-"},
319 {EVT_PADENTER, "NUMPAD_ENTER", 0, "Numpad Enter", "PadEnter"},
320 {EVT_PADPLUSKEY, "NUMPAD_PLUS", 0, "Numpad +", "Pad+"},
321 {EVT_F1KEY, "F1", 0, "F1", ""},
322 {EVT_F2KEY, "F2", 0, "F2", ""},
323 {EVT_F3KEY, "F3", 0, "F3", ""},
324 {EVT_F4KEY, "F4", 0, "F4", ""},
325 {EVT_F5KEY, "F5", 0, "F5", ""},
326 {EVT_F6KEY, "F6", 0, "F6", ""},
327 {EVT_F7KEY, "F7", 0, "F7", ""},
328 {EVT_F8KEY, "F8", 0, "F8", ""},
329 {EVT_F9KEY, "F9", 0, "F9", ""},
330 {EVT_F10KEY, "F10", 0, "F10", ""},
331 {EVT_F11KEY, "F11", 0, "F11", ""},
332 {EVT_F12KEY, "F12", 0, "F12", ""},
333 {EVT_F13KEY, "F13", 0, "F13", ""},
334 {EVT_F14KEY, "F14", 0, "F14", ""},
335 {EVT_F15KEY, "F15", 0, "F15", ""},
336 {EVT_F16KEY, "F16", 0, "F16", ""},
337 {EVT_F17KEY, "F17", 0, "F17", ""},
338 {EVT_F18KEY, "F18", 0, "F18", ""},
339 {EVT_F19KEY, "F19", 0, "F19", ""},
340 {EVT_F20KEY, "F20", 0, "F20", ""},
341 {EVT_F21KEY, "F21", 0, "F21", ""},
342 {EVT_F22KEY, "F22", 0, "F22", ""},
343 {EVT_F23KEY, "F23", 0, "F23", ""},
344 {EVT_F24KEY, "F24", 0, "F24", ""},
345 {EVT_PAUSEKEY, "PAUSE", 0, "Pause", ""},
346 {EVT_INSERTKEY, "INSERT", 0, "Insert", "Ins"},
347 {EVT_HOMEKEY, "HOME", 0, "Home", ""},
348 {EVT_PAGEUPKEY, "PAGE_UP", 0, "Page Up", "PgUp"},
349 {EVT_PAGEDOWNKEY, "PAGE_DOWN", 0, "Page Down", "PgDown"},
350 {EVT_ENDKEY, "END", 0, "End", ""},
353 "MEDIA_PLAY",
354 0,
355 "Media Play/Pause",
357 {EVT_MEDIASTOP, "MEDIA_STOP", 0, "Media Stop", BLI_STR_UTF8_BLACK_SQUARE_FOR_STOP},
359 "MEDIA_FIRST",
360 0,
361 "Media First",
364 "MEDIA_LAST",
365 0,
366 "Media Last",
369 {KM_TEXTINPUT, "TEXTINPUT", 0, "Text Input", "TxtIn"},
371 {WINDEACTIVATE, "WINDOW_DEACTIVATE", 0, "Window Deactivate", ""},
372 {TIMER, "TIMER", 0, "Timer", "Tmr"},
373 {TIMER0, "TIMER0", 0, "Timer 0", "Tmr0"},
374 {TIMER1, "TIMER1", 0, "Timer 1", "Tmr1"},
375 {TIMER2, "TIMER2", 0, "Timer 2", "Tmr2"},
376 {TIMERJOBS, "TIMER_JOBS", 0, "Timer Jobs", "TmrJob"},
377 {TIMERAUTOSAVE, "TIMER_AUTOSAVE", 0, "Timer Autosave", "TmrSave"},
378 {TIMERREPORT, "TIMER_REPORT", 0, "Timer Report", "TmrReport"},
379 {TIMERREGION, "TIMERREGION", 0, "Timer Region", "TmrReg"},
381 {NDOF_MOTION, "NDOF_MOTION", 0, "NDOF Motion", "NdofMov"},
382 /* buttons on all 3dconnexion devices */
383 {NDOF_BUTTON_MENU, "NDOF_BUTTON_MENU", 0, "NDOF Menu", "NdofMenu"},
384 {NDOF_BUTTON_FIT, "NDOF_BUTTON_FIT", 0, "NDOF Fit", "NdofFit"},
385 /* view buttons */
386 {NDOF_BUTTON_TOP, "NDOF_BUTTON_TOP", 0, "NDOF Top", "Ndof" BLI_STR_UTF8_UPWARDS_ARROW},
388 "NDOF_BUTTON_BOTTOM",
389 0,
390 "NDOF Bottom",
392 {NDOF_BUTTON_LEFT, "NDOF_BUTTON_LEFT", 0, "NDOF Left", "Ndof" BLI_STR_UTF8_LEFTWARDS_ARROW},
394 "NDOF_BUTTON_RIGHT",
395 0,
396 "NDOF Right",
398 {NDOF_BUTTON_FRONT, "NDOF_BUTTON_FRONT", 0, "NDOF Front", "NdofFront"},
399 {NDOF_BUTTON_BACK, "NDOF_BUTTON_BACK", 0, "NDOF Back", "NdofBack"},
400 /* more views */
401 {NDOF_BUTTON_ISO1, "NDOF_BUTTON_ISO1", 0, "NDOF Isometric 1", "NdofIso1"},
402 {NDOF_BUTTON_ISO2, "NDOF_BUTTON_ISO2", 0, "NDOF Isometric 2", "NdofIso2"},
403 /* 90 degree rotations */
404 {NDOF_BUTTON_ROLL_CW, "NDOF_BUTTON_ROLL_CW", 0, "NDOF Roll CW", "NdofRCW"},
405 {NDOF_BUTTON_ROLL_CCW, "NDOF_BUTTON_ROLL_CCW", 0, "NDOF Roll CCW", "NdofRCCW"},
406 {NDOF_BUTTON_SPIN_CW, "NDOF_BUTTON_SPIN_CW", 0, "NDOF Spin CW", "NdofSCW"},
407 {NDOF_BUTTON_SPIN_CCW, "NDOF_BUTTON_SPIN_CCW", 0, "NDOF Spin CCW", "NdofSCCW"},
408 {NDOF_BUTTON_TILT_CW, "NDOF_BUTTON_TILT_CW", 0, "NDOF Tilt CW", "NdofTCW"},
409 {NDOF_BUTTON_TILT_CCW, "NDOF_BUTTON_TILT_CCW", 0, "NDOF Tilt CCW", "NdofTCCW"},
410 /* device control */
411 {NDOF_BUTTON_ROTATE, "NDOF_BUTTON_ROTATE", 0, "NDOF Rotate", "NdofRot"},
412 {NDOF_BUTTON_PANZOOM, "NDOF_BUTTON_PANZOOM", 0, "NDOF Pan/Zoom", "NdofPanZoom"},
413 {NDOF_BUTTON_DOMINANT, "NDOF_BUTTON_DOMINANT", 0, "NDOF Dominant", "NdofDom"},
414 {NDOF_BUTTON_PLUS, "NDOF_BUTTON_PLUS", 0, "NDOF Plus", "Ndof+"},
415 {NDOF_BUTTON_MINUS, "NDOF_BUTTON_MINUS", 0, "NDOF Minus", "Ndof-"},
416#if 0 /* Never used (converted to keyboard events by GHOST). */
417 /* keyboard emulation */
418 {NDOF_BUTTON_ESC, "NDOF_BUTTON_ESC", 0, "NDOF Esc", "NdofEsc"},
419 {NDOF_BUTTON_ALT, "NDOF_BUTTON_ALT", 0, "NDOF Alt", "NdofAlt"},
420 {NDOF_BUTTON_SHIFT, "NDOF_BUTTON_SHIFT", 0, "NDOF Shift", "NdofShift"},
421 {NDOF_BUTTON_CTRL, "NDOF_BUTTON_CTRL", 0, "NDOF Ctrl", "NdofCtrl"},
422#endif
423 /* View buttons. */
424 {NDOF_BUTTON_V1, "NDOF_BUTTON_V1", 0, "NDOF View 1", "NdofView1"},
425 {NDOF_BUTTON_V2, "NDOF_BUTTON_V2", 0, "NDOF View 2", "NdofView2"},
426 {NDOF_BUTTON_V3, "NDOF_BUTTON_V3", 0, "NDOF View 3", "NdofView3"},
427 {NDOF_BUTTON_SAVE_V1, "NDOF_BUTTON_SAVE_V1", 0, "NDOF Save View 1", "NdofSaveView1"},
428 {NDOF_BUTTON_SAVE_V2, "NDOF_BUTTON_SAVE_V2", 0, "NDOF Save View 2", "NdofSaveView2"},
429 {NDOF_BUTTON_SAVE_V3, "NDOF_BUTTON_SAVE_V3", 0, "NDOF Save View 3", "NdofSaveView3"},
430 /* general-purpose buttons */
431 {NDOF_BUTTON_1, "NDOF_BUTTON_1", 0, "NDOF Button 1", "NdofB1"},
432 {NDOF_BUTTON_2, "NDOF_BUTTON_2", 0, "NDOF Button 2", "NdofB2"},
433 {NDOF_BUTTON_3, "NDOF_BUTTON_3", 0, "NDOF Button 3", "NdofB3"},
434 {NDOF_BUTTON_4, "NDOF_BUTTON_4", 0, "NDOF Button 4", "NdofB4"},
435 {NDOF_BUTTON_5, "NDOF_BUTTON_5", 0, "NDOF Button 5", "NdofB5"},
436 {NDOF_BUTTON_6, "NDOF_BUTTON_6", 0, "NDOF Button 6", "NdofB6"},
437 {NDOF_BUTTON_7, "NDOF_BUTTON_7", 0, "NDOF Button 7", "NdofB7"},
438 {NDOF_BUTTON_8, "NDOF_BUTTON_8", 0, "NDOF Button 8", "NdofB8"},
439 {NDOF_BUTTON_9, "NDOF_BUTTON_9", 0, "NDOF Button 9", "NdofB9"},
440 {NDOF_BUTTON_10, "NDOF_BUTTON_10", 0, "NDOF Button 10", "NdofB10"},
441 {NDOF_BUTTON_11, "NDOF_BUTTON_11", 0, "NDOF Button 11", "NdofB11"},
442 {NDOF_BUTTON_12, "NDOF_BUTTON_12", 0, "NDOF Button 12", "NdofB12"},
443
444 /* Action Zones. */
445 {EVT_ACTIONZONE_AREA, "ACTIONZONE_AREA", 0, "ActionZone Area", "AZone Area"},
446 {EVT_ACTIONZONE_REGION, "ACTIONZONE_REGION", 0, "ActionZone Region", "AZone Region"},
448 "ACTIONZONE_FULLSCREEN",
449 0,
450 "ActionZone Fullscreen",
451 "AZone FullScr"},
452 /* xr */
453 {EVT_XR_ACTION, "XR_ACTION", 0, "XR Action", ""},
454 {0, nullptr, 0, nullptr, nullptr},
455};
456
466 {KM_ANY, "ANY", 0, "Any", ""},
467 {KM_PRESS, "PRESS", 0, "Press", ""},
468 {KM_RELEASE, "RELEASE", 0, "Release", ""},
469 {KM_CLICK, "CLICK", 0, "Click", ""},
470 {KM_DBL_CLICK, "DOUBLE_CLICK", 0, "Double Click", ""},
471 {KM_CLICK_DRAG, "CLICK_DRAG", 0, "Click Drag", ""},
472 /* Used for NDOF and trackpad events. */
473 {KM_NOTHING, "NOTHING", 0, "Nothing", ""},
474 {0, nullptr, 0, nullptr, nullptr},
475};
476
478 {KM_ANY, "ANY", 0, "Any", ""},
479 {KM_DIRECTION_N, "NORTH", 0, "North", ""},
480 {KM_DIRECTION_NE, "NORTH_EAST", 0, "North-East", ""},
481 {KM_DIRECTION_E, "EAST", 0, "East", ""},
482 {KM_DIRECTION_SE, "SOUTH_EAST", 0, "South-East", ""},
483 {KM_DIRECTION_S, "SOUTH", 0, "South", ""},
484 {KM_DIRECTION_SW, "SOUTH_WEST", 0, "South-West", ""},
485 {KM_DIRECTION_W, "WEST", 0, "West", ""},
486 {KM_DIRECTION_NW, "NORTH_WEST", 0, "North-West", ""},
487 {0, nullptr, 0, nullptr, nullptr},
488};
489
491 {0, "NONE", 0, "", ""},
492 {0, nullptr, 0, nullptr, nullptr},
493};
494
495/* Mask event types used in keymap items. */
497 {EVT_TYPE_MASK_KEYBOARD_MODIFIER, "KEYBOARD_MODIFIER", 0, "Keyboard Modifier", ""},
498 {EVT_TYPE_MASK_KEYBOARD, "KEYBOARD", 0, "Keyboard", ""},
499 {EVT_TYPE_MASK_MOUSE_WHEEL, "MOUSE_WHEEL", 0, "Mouse Wheel", ""},
500 {EVT_TYPE_MASK_MOUSE_GESTURE, "MOUSE_GESTURE", 0, "Mouse Gesture", ""},
501 {EVT_TYPE_MASK_MOUSE_BUTTON, "MOUSE_BUTTON", 0, "Mouse Button", ""},
502 {EVT_TYPE_MASK_MOUSE, "MOUSE", 0, "Mouse", ""},
503 {EVT_TYPE_MASK_NDOF, "NDOF", 0, "NDOF", ""},
504 {EVT_TYPE_MASK_ACTIONZONE, "ACTIONZONE", 0, "Action Zone", ""},
505 {0, nullptr, 0, nullptr, nullptr},
506};
507
508#if 0
509static const EnumPropertyItem keymap_modifiers_items[] = {
510 {KM_ANY, "ANY", 0, "Any", ""},
511 {0, "NONE", 0, "None", ""},
512 {KM_MOD_HELD, "HELD", 0, "Held", ""},
513 {0, nullptr, 0, nullptr, nullptr},
514};
515#endif
516
519 "REGISTER",
520 0,
521 "Register",
522 "Display in the info window and support the redo toolbar panel"},
524 "UNDO",
525 0,
526 "Undo",
527 "Push an undo event when the operator returns `FINISHED` (needed for operator redo, "
528 "mandatory if the operator modifies Blender data)"},
530 "UNDO_GROUPED",
531 0,
532 "Grouped Undo",
533 "Push a single undo event for repeated instances of this operator"},
534 {OPTYPE_BLOCKING, "BLOCKING", 0, "Blocking", "Block anything else from using the cursor"},
535 {OPTYPE_MACRO, "MACRO", 0, "Macro", "Use to check if an operator is a macro"},
537 "GRAB_CURSOR",
538 0,
539 "Grab Pointer",
540 "Use so the operator grabs the mouse focus, enables wrapping when continuous grab "
541 "is enabled"},
542 {OPTYPE_GRAB_CURSOR_X, "GRAB_CURSOR_X", 0, "Grab Pointer X", "Grab, only warping the X axis"},
543 {OPTYPE_GRAB_CURSOR_Y, "GRAB_CURSOR_Y", 0, "Grab Pointer Y", "Grab, only warping the Y axis"},
545 "DEPENDS_ON_CURSOR",
546 0,
547 "Depends on Cursor",
548 "The initial cursor location is used, "
549 "when running from a menus or buttons the user is prompted to place the cursor "
550 "before beginning the operation"},
551 {OPTYPE_PRESET, "PRESET", 0, "Preset", "Display a preset button with the operators settings"},
552 {OPTYPE_INTERNAL, "INTERNAL", 0, "Internal", "Removes the operator from search results"},
554 "MODAL_PRIORITY",
555 0,
556 "Modal Priority",
557 "Handle events before other modal operators without this option. Use with caution, do not "
558 "modify data that other modal operators assume is unchanged during their operation."},
559 {0, nullptr, 0, nullptr, nullptr},
560};
561
564 "RUNNING_MODAL",
565 0,
566 "Running Modal",
567 "Keep the operator running with blender"},
569 "CANCELLED",
570 0,
571 "Cancelled",
572 "The operator exited without doing anything, so no undo entry should be pushed"},
574 "FINISHED",
575 0,
576 "Finished",
577 "The operator exited after completing its action"},
578 /* used as a flag */
579 {OPERATOR_PASS_THROUGH, "PASS_THROUGH", 0, "Pass Through", "Do nothing and pass the event on"},
580 {OPERATOR_INTERFACE, "INTERFACE", 0, "Interface", "Handled but not executed (popup menus)"},
581 {0, nullptr, 0, nullptr, nullptr},
582};
583
586 "ADVANCED",
587 0,
588 "Advanced",
589 "The property is advanced so UI is suggested to hide it"},
590 {0, nullptr, 0, nullptr, nullptr},
591};
592
593/* flag/enum */
595 {RPT_DEBUG, "DEBUG", 0, "Debug", ""},
596 {RPT_INFO, "INFO", 0, "Info", ""},
597 {RPT_OPERATOR, "OPERATOR", 0, "Operator", ""},
598 {RPT_PROPERTY, "PROPERTY", 0, "Property", ""},
599 {RPT_WARNING, "WARNING", 0, "Warning", ""},
600 {RPT_ERROR, "ERROR", 0, "Error", ""},
601 {RPT_ERROR_INVALID_INPUT, "ERROR_INVALID_INPUT", 0, "Invalid Input", ""},
602 {RPT_ERROR_INVALID_CONTEXT, "ERROR_INVALID_CONTEXT", 0, "Invalid Context", ""},
603 {RPT_ERROR_OUT_OF_MEMORY, "ERROR_OUT_OF_MEMORY", 0, "Out of Memory", ""},
604 {0, nullptr, 0, nullptr, nullptr},
605};
606
607#ifdef RNA_RUNTIME
608
609# include "BLI_string_utils.hh"
610
611# include "WM_api.hh"
612
613# include "DNA_object_types.h"
614# include "DNA_workspace_types.h"
615
616# include "ED_screen.hh"
617
618# include "UI_interface.hh"
619
620# include "BKE_global.hh"
621# include "BKE_idprop.hh"
622
623# include "MEM_guardedalloc.h"
624
625# ifdef WITH_PYTHON
626# include "BPY_extern.hh"
627# endif
628
629static wmOperator *rna_OperatorProperties_find_operator(PointerRNA *ptr)
630{
631 if (ptr->owner_id == nullptr || GS(ptr->owner_id->name) != ID_WM) {
632 return nullptr;
633 }
634
636
637 IDProperty *properties = (IDProperty *)ptr->data;
638 for (wmOperator *op = static_cast<wmOperator *>(wm->operators.last); op; op = op->prev) {
639 if (op->properties == properties) {
640 return op;
641 }
642 }
643
644 return nullptr;
645}
646
647static StructRNA *rna_OperatorProperties_refine(PointerRNA *ptr)
648{
649 wmOperator *op = rna_OperatorProperties_find_operator(ptr);
650
651 if (op) {
652 return op->type->srna;
653 }
654 else {
655 return ptr->type;
656 }
657}
658
659static IDProperty **rna_OperatorProperties_idprops(PointerRNA *ptr)
660{
661 return (IDProperty **)&ptr->data;
662}
663
664static void rna_Operator_name_get(PointerRNA *ptr, char *value)
665{
666 wmOperator *op = (wmOperator *)ptr->data;
667 strcpy(value, op->type->name);
668}
669
670static int rna_Operator_name_length(PointerRNA *ptr)
671{
672 wmOperator *op = (wmOperator *)ptr->data;
673 return strlen(op->type->name);
674}
675
676static bool rna_Operator_has_reports_get(PointerRNA *ptr)
677{
678 wmOperator *op = (wmOperator *)ptr->data;
679 return (op->reports && op->reports->list.first);
680}
681
682static PointerRNA rna_Operator_layout_get(PointerRNA *ptr)
683{
684 /* Operator owner is not inherited, layout is owned by WM. */
685 wmOperator *op = (wmOperator *)ptr->data;
686 return RNA_pointer_create(nullptr, &RNA_UILayout, op->layout);
687}
688
689static PointerRNA rna_Operator_options_get(PointerRNA *ptr)
690{
691 return rna_pointer_inherit_refine(ptr, &RNA_OperatorOptions, ptr->data);
692}
693
694static PointerRNA rna_Operator_properties_get(PointerRNA *ptr)
695{
696 wmOperator *op = (wmOperator *)ptr->data;
697
699 WM_operator_properties_create_ptr(&result, op->type);
700 result.owner_id = (ptr->owner_id) ? ptr->owner_id : result.owner_id;
701 result.data = op->properties;
702 return result;
703}
704
705static PointerRNA rna_OperatorMacro_properties_get(PointerRNA *ptr)
706{
708 wmOperatorType *ot = WM_operatortype_find(otmacro->idname, true);
709
712 result.owner_id = (ptr->owner_id) ? ptr->owner_id : result.owner_id;
713 result.data = otmacro->properties;
714 return result;
715}
716
717static void rna_Event_ascii_get(PointerRNA *ptr, char *value)
718{
719 const wmEvent *event = static_cast<wmEvent *>(ptr->data);
720 value[0] = WM_event_utf8_to_ascii(event);
721 value[1] = '\0';
722}
723
724static int rna_Event_ascii_length(PointerRNA *ptr)
725{
726 const wmEvent *event = static_cast<wmEvent *>(ptr->data);
727 return WM_event_utf8_to_ascii(event) ? 1 : 0;
728}
729
730static void rna_Event_unicode_get(PointerRNA *ptr, char *value)
731{
732 const wmEvent *event = static_cast<wmEvent *>(ptr->data);
733 size_t len = 0;
734
735 if (event->utf8_buf[0]) {
736 if (BLI_str_utf8_as_unicode_step_or_error(event->utf8_buf, sizeof(event->utf8_buf), &len) !=
738 memcpy(value, event->utf8_buf, len);
739 }
740
741 value[len] = '\0';
742}
743
744static int rna_Event_unicode_length(PointerRNA *ptr)
745{
746 const wmEvent *event = static_cast<wmEvent *>(ptr->data);
747 int len = 0;
748 if (event->utf8_buf[0]) {
749 len = BLI_str_utf8_size_or_error(event->utf8_buf);
750 if (len == -1) {
751 /* Even though this is documented as always being a valid UTF8 sequence,
752 * assert instead of returning a negative length if it is. */
754 len = 0;
755 }
756 }
757 return len;
758}
759
760static bool rna_Event_is_repeat_get(PointerRNA *ptr)
761{
762 const wmEvent *event = static_cast<wmEvent *>(ptr->data);
763 return (event->flag & WM_EVENT_IS_REPEAT) != 0;
764}
765
766static bool rna_Event_is_consecutive_get(PointerRNA *ptr)
767{
768 const wmEvent *event = static_cast<wmEvent *>(ptr->data);
769 return (event->flag & WM_EVENT_IS_CONSECUTIVE) != 0;
770}
771
772static float rna_Event_pressure_get(PointerRNA *ptr)
773{
774 const wmEvent *event = static_cast<wmEvent *>(ptr->data);
775 return WM_event_tablet_data(event, nullptr, nullptr);
776}
777
778static bool rna_Event_is_tablet_get(PointerRNA *ptr)
779{
780 const wmEvent *event = static_cast<wmEvent *>(ptr->data);
781 return WM_event_is_tablet(event);
782}
783
784static void rna_Event_tilt_get(PointerRNA *ptr, float *values)
785{
786 wmEvent *event = static_cast<wmEvent *>(ptr->data);
787 WM_event_tablet_data(event, nullptr, values);
788}
789
790static PointerRNA rna_Event_xr_get(PointerRNA *ptr)
791{
792# ifdef WITH_XR_OPENXR
793 wmEvent *event = static_cast<wmEvent *>(ptr->data);
794 wmXrActionData *actiondata = static_cast<wmXrActionData *>(
795 WM_event_is_xr(event) ? event->customdata : nullptr);
796 return rna_pointer_inherit_refine(ptr, &RNA_XrEventData, actiondata);
797# else
799 return PointerRNA_NULL;
800# endif
801}
802
803static PointerRNA rna_PopupMenu_layout_get(PointerRNA *ptr)
804{
805 uiPopupMenu *pup = static_cast<uiPopupMenu *>(ptr->data);
806 uiLayout *layout = UI_popup_menu_layout(pup);
807
808 PointerRNA rptr = RNA_pointer_create(ptr->owner_id, &RNA_UILayout, layout);
809 return rptr;
810}
811
812static PointerRNA rna_PopoverMenu_layout_get(PointerRNA *ptr)
813{
814 uiPopover *pup = static_cast<uiPopover *>(ptr->data);
815 uiLayout *layout = UI_popover_layout(pup);
816
817 PointerRNA rptr = RNA_pointer_create(ptr->owner_id, &RNA_UILayout, layout);
818 return rptr;
819}
820
821static PointerRNA rna_PieMenu_layout_get(PointerRNA *ptr)
822{
823 uiPieMenu *pie = static_cast<uiPieMenu *>(ptr->data);
824 uiLayout *layout = UI_pie_menu_layout(pie);
825
826 PointerRNA rptr = RNA_pointer_create(ptr->owner_id, &RNA_UILayout, layout);
827 return rptr;
828}
829
830static void rna_Window_scene_set(PointerRNA *ptr, PointerRNA value, ReportList * /*reports*/)
831{
832 wmWindow *win = static_cast<wmWindow *>(ptr->data);
833
834 if (value.data == nullptr) {
835 return;
836 }
837
838 win->new_scene = static_cast<Scene *>(value.data);
839}
840
841static void rna_Window_scene_update(bContext *C, PointerRNA *ptr)
842{
843 Main *bmain = CTX_data_main(C);
844 wmWindow *win = static_cast<wmWindow *>(ptr->data);
845
846 /* Exception: must use context so notifier gets to the right window. */
847 if (win->new_scene) {
848# ifdef WITH_PYTHON
850# endif
851
852 WM_window_set_active_scene(bmain, C, win, win->new_scene);
853
854# ifdef WITH_PYTHON
856# endif
857
860
861 if (G.debug & G_DEBUG) {
862 printf("scene set %p\n", win->new_scene);
863 }
864
865 win->new_scene = nullptr;
866 }
867}
868
869static PointerRNA rna_Window_workspace_get(PointerRNA *ptr)
870{
871 wmWindow *win = static_cast<wmWindow *>(ptr->data);
873 ptr, &RNA_WorkSpace, BKE_workspace_active_get(win->workspace_hook));
874}
875
876static void rna_Window_workspace_set(PointerRNA *ptr, PointerRNA value, ReportList * /*reports*/)
877{
878 wmWindow *win = (wmWindow *)ptr->data;
879
880 /* disallow ID-browsing away from temp screens */
881 if (WM_window_is_temp_screen(win)) {
882 return;
883 }
884 if (value.data == nullptr) {
885 return;
886 }
887
888 /* exception: can't set workspaces inside of area/region handlers */
889 win->workspace_hook->temp_workspace_store = static_cast<WorkSpace *>(value.data);
890}
891
892static void rna_Window_workspace_update(bContext *C, PointerRNA *ptr)
893{
894 wmWindow *win = static_cast<wmWindow *>(ptr->data);
895 WorkSpace *new_workspace = win->workspace_hook->temp_workspace_store;
896
897 /* exception: can't set screens inside of area/region handlers,
898 * and must use context so notifier gets to the right window */
899 if (new_workspace) {
901 WM_event_add_notifier_ex(wm, win, NC_SCREEN | ND_WORKSPACE_SET, new_workspace);
903 win->workspace_hook->temp_workspace_store = nullptr;
904 }
905}
906
907PointerRNA rna_Window_screen_get(PointerRNA *ptr)
908{
909 wmWindow *win = static_cast<wmWindow *>(ptr->data);
912}
913
914static void rna_Window_screen_set(PointerRNA *ptr, PointerRNA value, ReportList * /*reports*/)
915{
916 wmWindow *win = static_cast<wmWindow *>(ptr->data);
918 WorkSpaceLayout *layout_new;
920
921 /* disallow ID-browsing away from temp screens */
922 if (screen->temp) {
923 return;
924 }
925 if (value.data == nullptr) {
926 return;
927 }
928
929 /* exception: can't set screens inside of area/region handlers */
930 layout_new = static_cast<WorkSpaceLayout *>(
931 BKE_workspace_layout_find(workspace, static_cast<bScreen *>(value.data)));
932 win->workspace_hook->temp_layout_store = layout_new;
933}
934
935static bool rna_Window_screen_assign_poll(PointerRNA * /*ptr*/, PointerRNA value)
936{
937 bScreen *screen = (bScreen *)value.owner_id;
938 return !screen->temp;
939}
940
941static void rna_workspace_screen_update(bContext *C, PointerRNA *ptr)
942{
943 wmWindow *win = static_cast<wmWindow *>(ptr->data);
945
946 /* exception: can't set screens inside of area/region handlers,
947 * and must use context so notifier gets to the right window */
948 if (layout_new) {
950 WM_event_add_notifier_ex(wm, win, NC_SCREEN | ND_LAYOUTBROWSE, layout_new);
951 win->workspace_hook->temp_layout_store = nullptr;
952 }
953}
954
955static PointerRNA rna_Window_view_layer_get(PointerRNA *ptr)
956{
957 wmWindow *win = static_cast<wmWindow *>(ptr->data);
958 Scene *scene = WM_window_get_active_scene(win);
960
961 PointerRNA scene_ptr = RNA_id_pointer_create(&scene->id);
962 return rna_pointer_inherit_refine(&scene_ptr, &RNA_ViewLayer, view_layer);
963}
964
965static void rna_Window_view_layer_set(PointerRNA *ptr, PointerRNA value, ReportList * /*reports*/)
966{
967 wmWindow *win = static_cast<wmWindow *>(ptr->data);
968 ViewLayer *view_layer = static_cast<ViewLayer *>(value.data);
969
970 WM_window_set_active_view_layer(win, view_layer);
971}
972
973static bool rna_Window_modal_handler_skip(CollectionPropertyIterator * /*iter*/, void *data)
974{
975 const wmEventHandler_Op *handler = (wmEventHandler_Op *)data;
976 return handler->head.type != WM_HANDLER_TYPE_OP;
977}
978
979static void rna_Window_modal_operators_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
980{
981 wmWindow *window = static_cast<wmWindow *>(ptr->data);
982 rna_iterator_listbase_begin(iter, &window->modalhandlers, rna_Window_modal_handler_skip);
983}
984
985static PointerRNA rna_Window_modal_operators_get(CollectionPropertyIterator *iter)
986{
987 const wmEventHandler_Op *handler = static_cast<wmEventHandler_Op *>(
989 return RNA_pointer_create(iter->parent.owner_id, &RNA_Operator, handler->op);
990}
991
992static void rna_KeyMap_modal_event_values_items_begin(CollectionPropertyIterator *iter,
994{
995 wmKeyMap *km = static_cast<wmKeyMap *>(ptr->data);
996
998 if ((km->flag & KEYMAP_MODAL) != 0 && km->modal_items != nullptr) {
999 items = static_cast<const EnumPropertyItem *>(km->modal_items);
1000 }
1001
1002 const int totitem = RNA_enum_items_count(items);
1003
1004 rna_iterator_array_begin(iter, (void *)items, sizeof(EnumPropertyItem), totitem, false, nullptr);
1005}
1006
1007static PointerRNA rna_KeyMapItem_properties_get(PointerRNA *ptr)
1008{
1009 wmKeyMapItem *kmi = static_cast<wmKeyMapItem *>(ptr->data);
1010
1011 if (kmi->ptr) {
1012 BLI_assert(kmi->ptr->owner_id == nullptr);
1013 return *(kmi->ptr);
1014 }
1015
1016 // return rna_pointer_inherit_refine(ptr, &RNA_OperatorProperties, op->properties);
1017 return PointerRNA_NULL;
1018}
1019
1020static int rna_wmKeyMapItem_map_type_get(PointerRNA *ptr)
1021{
1022 wmKeyMapItem *kmi = static_cast<wmKeyMapItem *>(ptr->data);
1023
1024 return WM_keymap_item_map_type_get(kmi);
1025}
1026
1027static void rna_wmKeyMapItem_map_type_set(PointerRNA *ptr, int value)
1028{
1029 wmKeyMapItem *kmi = static_cast<wmKeyMapItem *>(ptr->data);
1030 int map_type = rna_wmKeyMapItem_map_type_get(ptr);
1031
1032 if (value != map_type) {
1033 switch (value) {
1034 case KMI_TYPE_KEYBOARD:
1035 kmi->type = EVT_AKEY;
1036 kmi->val = KM_PRESS;
1037 break;
1038 case KMI_TYPE_MOUSE:
1039 kmi->type = LEFTMOUSE;
1040 kmi->val = KM_PRESS;
1041 break;
1042 case KMI_TYPE_TEXTINPUT:
1043 kmi->type = KM_TEXTINPUT;
1044 kmi->val = KM_NOTHING;
1045 break;
1046 case KMI_TYPE_TIMER:
1047 kmi->type = TIMER;
1048 kmi->val = KM_NOTHING;
1049 break;
1050 case KMI_TYPE_NDOF:
1051 kmi->type = NDOF_MOTION;
1052 kmi->val = KM_NOTHING;
1053 break;
1054 }
1055 }
1056}
1057
1062static void rna_wmKeyMapItem_keymodifier_set(PointerRNA *ptr, int value)
1063{
1064 wmKeyMapItem *kmi = static_cast<wmKeyMapItem *>(ptr->data);
1065
1066 /* XXX, this should really be managed in an _itemf function,
1067 * giving a list of valid enums, then silently changing them when they are set is not
1068 * a good precedent, don't do this unless you have a good reason! */
1069 if (value == EVT_ESCKEY) {
1070 /* pass */
1071 }
1072 else if (ISKEYBOARD(value) && !ISKEYMODIFIER(value)) {
1073 kmi->keymodifier = value;
1074 }
1075 else {
1076 kmi->keymodifier = 0;
1077 }
1078}
1079
1080static const EnumPropertyItem *rna_KeyMapItem_type_itemf(bContext * /*C*/,
1081 PointerRNA *ptr,
1082 PropertyRNA * /*prop*/,
1083 bool * /*r_free*/)
1084{
1085 int map_type = rna_wmKeyMapItem_map_type_get(ptr);
1086
1087 if (map_type == KMI_TYPE_MOUSE) {
1088 return event_mouse_type_items;
1089 }
1090 if (map_type == KMI_TYPE_TIMER) {
1091 return event_timer_type_items;
1092 }
1093 if (map_type == KMI_TYPE_NDOF) {
1094 return event_ndof_type_items;
1095 }
1096 if (map_type == KMI_TYPE_TEXTINPUT) {
1097 return event_textinput_type_items;
1098 }
1099 else {
1101 }
1102}
1103
1104static const EnumPropertyItem *rna_KeyMapItem_propvalue_itemf(bContext *C,
1105 PointerRNA *ptr,
1106 PropertyRNA * /*prop*/,
1107 bool * /*r_free*/)
1108{
1110 wmKeyConfig *kc;
1111 wmKeyMap *km;
1112
1113 for (kc = static_cast<wmKeyConfig *>(wm->keyconfigs.first); kc; kc = kc->next) {
1114 for (km = static_cast<wmKeyMap *>(kc->keymaps.first); km; km = km->next) {
1115 /* only check if it's a modal keymap */
1116 if (km->modal_items) {
1117 wmKeyMapItem *kmi;
1118 for (kmi = static_cast<wmKeyMapItem *>(km->items.first); kmi; kmi = kmi->next) {
1119 if (kmi == ptr->data) {
1120 return static_cast<const EnumPropertyItem *>(km->modal_items);
1121 }
1122 }
1123 }
1124 }
1125 }
1126
1127 return rna_enum_keymap_propvalue_items; /* ERROR */
1128}
1129
1130static bool rna_KeyMapItem_any_get(PointerRNA *ptr)
1131{
1132 wmKeyMapItem *kmi = (wmKeyMapItem *)ptr->data;
1133
1134 if (kmi->shift == KM_ANY && kmi->ctrl == KM_ANY && kmi->alt == KM_ANY && kmi->oskey == KM_ANY) {
1135 return 1;
1136 }
1137 else {
1138 return 0;
1139 }
1140}
1141
1142static void rna_KeyMapItem_any_set(PointerRNA *ptr, bool value)
1143{
1144 wmKeyMapItem *kmi = (wmKeyMapItem *)ptr->data;
1145
1146 if (value) {
1147 kmi->shift = kmi->ctrl = kmi->alt = kmi->oskey = KM_ANY;
1148 }
1149 else {
1150 kmi->shift = kmi->ctrl = kmi->alt = kmi->oskey = 0;
1151 }
1152}
1153
1154static bool rna_KeyMapItem_shift_get(PointerRNA *ptr)
1155{
1156 wmKeyMapItem *kmi = (wmKeyMapItem *)ptr->data;
1157 return kmi->shift != 0;
1158}
1159
1160static bool rna_KeyMapItem_ctrl_get(PointerRNA *ptr)
1161{
1162 wmKeyMapItem *kmi = (wmKeyMapItem *)ptr->data;
1163 return kmi->ctrl != 0;
1164}
1165
1166static bool rna_KeyMapItem_alt_get(PointerRNA *ptr)
1167{
1168 wmKeyMapItem *kmi = (wmKeyMapItem *)ptr->data;
1169 return kmi->alt != 0;
1170}
1171
1172static bool rna_KeyMapItem_oskey_get(PointerRNA *ptr)
1173{
1174 wmKeyMapItem *kmi = (wmKeyMapItem *)ptr->data;
1175 return kmi->oskey != 0;
1176}
1177
1178static PointerRNA rna_WindowManager_active_keyconfig_get(PointerRNA *ptr)
1179{
1180 wmWindowManager *wm = static_cast<wmWindowManager *>(ptr->data);
1181 wmKeyConfig *kc;
1182
1183 kc = static_cast<wmKeyConfig *>(
1184 BLI_findstring(&wm->keyconfigs, U.keyconfigstr, offsetof(wmKeyConfig, idname)));
1185
1186 if (!kc) {
1187 kc = wm->defaultconf;
1188 }
1189
1190 return rna_pointer_inherit_refine(ptr, &RNA_KeyConfig, kc);
1191}
1192
1193static void rna_WindowManager_active_keyconfig_set(PointerRNA *ptr,
1194 PointerRNA value,
1195 ReportList * /*reports*/)
1196{
1197 wmWindowManager *wm = static_cast<wmWindowManager *>(ptr->data);
1198 wmKeyConfig *kc = static_cast<wmKeyConfig *>(value.data);
1199
1200 if (kc) {
1202 }
1203}
1204
1205static void rna_WindowManager_extensions_statusbar_update(Main * /*bmain*/,
1206 Scene * /*scene*/,
1207 PointerRNA *ptr)
1208{
1209 if ((U.statusbar_flag & STATUSBAR_SHOW_EXTENSIONS_UPDATES) == 0) {
1210 return;
1211 }
1212
1213 wmWindowManager *wm = static_cast<wmWindowManager *>(ptr->data);
1214 LISTBASE_FOREACH (wmWindow *, win, &wm->windows) {
1216 }
1217}
1218
1219/* -------------------------------------------------------------------- */
1223static PointerRNA rna_wmKeyConfig_preferences_get(PointerRNA *ptr)
1224{
1225 wmKeyConfig *kc = static_cast<wmKeyConfig *>(ptr->data);
1227 if (kpt_rt) {
1229 return rna_pointer_inherit_refine(ptr, kpt_rt->rna_ext.srna, kpt->prop);
1230 }
1231 else {
1232 return PointerRNA_NULL;
1233 }
1234}
1235
1236static IDProperty **rna_wmKeyConfigPref_idprops(PointerRNA *ptr)
1237{
1238 return (IDProperty **)&ptr->data;
1239}
1240
1241static bool rna_wmKeyConfigPref_unregister(Main * /*bmain*/, StructRNA *type)
1242{
1245
1246 if (!kpt_rt) {
1247 return false;
1248 }
1249
1250 RNA_struct_free_extension(type, &kpt_rt->rna_ext);
1252
1253 /* Possible we're not in the preferences if they have been reset. */
1255
1256 /* update while blender is running */
1258 return true;
1259}
1260
1261static StructRNA *rna_wmKeyConfigPref_register(Main *bmain,
1262 ReportList *reports,
1263 void *data,
1264 const char *identifier,
1265 StructValidateFunc validate,
1266 StructCallbackFunc call,
1268{
1269 const char *error_prefix = "Registering key-config preferences class:";
1270 wmKeyConfigPrefType_Runtime *kpt_rt, dummy_kpt_rt = {{'\0'}};
1271 wmKeyConfigPref dummy_kpt = {nullptr};
1272 // bool have_function[1];
1273
1274 /* setup dummy keyconf-prefs & keyconf-prefs type to store static properties in */
1275 PointerRNA dummy_kpt_ptr = RNA_pointer_create(nullptr, &RNA_KeyConfigPreferences, &dummy_kpt);
1276
1277 /* validate the python class */
1278 if (validate(&dummy_kpt_ptr, data, nullptr /*have_function*/) != 0) {
1279 return nullptr;
1280 }
1281
1282 STRNCPY(dummy_kpt_rt.idname, dummy_kpt.idname);
1283 if (strlen(identifier) >= sizeof(dummy_kpt_rt.idname)) {
1284 BKE_reportf(reports,
1285 RPT_ERROR,
1286 "%s '%s' is too long, maximum length is %d",
1287 error_prefix,
1288 identifier,
1289 int(sizeof(dummy_kpt_rt.idname)));
1290 return nullptr;
1291 }
1292
1293 /* check if we have registered this keyconf-prefs type before, and remove it */
1294 kpt_rt = BKE_keyconfig_pref_type_find(dummy_kpt.idname, true);
1295 if (kpt_rt) {
1296 BKE_reportf(reports,
1297 RPT_INFO,
1298 "%s '%s', bl_idname '%s' has been registered before, unregistering previous",
1299 error_prefix,
1300 identifier,
1301 dummy_kpt.idname);
1302
1303 StructRNA *srna = kpt_rt->rna_ext.srna;
1304 if (!(srna && rna_wmKeyConfigPref_unregister(bmain, srna))) {
1305 BKE_reportf(reports,
1306 RPT_ERROR,
1307 "%s '%s', bl_idname '%s' %s",
1308 error_prefix,
1309 identifier,
1310 dummy_kpt.idname,
1311 srna ? "is built-in" : "could not be unregistered");
1312 return nullptr;
1313 }
1314 }
1315
1316 /* create a new keyconf-prefs type */
1317 kpt_rt = static_cast<wmKeyConfigPrefType_Runtime *>(
1318 MEM_mallocN(sizeof(wmKeyConfigPrefType_Runtime), "keyconfigpreftype"));
1319 memcpy(kpt_rt, &dummy_kpt_rt, sizeof(dummy_kpt_rt));
1320
1322
1323 kpt_rt->rna_ext.srna = RNA_def_struct_ptr(&BLENDER_RNA, identifier, &RNA_KeyConfigPreferences);
1324 kpt_rt->rna_ext.data = data;
1325 kpt_rt->rna_ext.call = call;
1326 kpt_rt->rna_ext.free = free;
1327 RNA_struct_blender_type_set(kpt_rt->rna_ext.srna, kpt_rt);
1328
1329 // kpt_rt->draw = (have_function[0]) ? header_draw : nullptr;
1330
1331 /* update while blender is running */
1333
1334 return kpt_rt->rna_ext.srna;
1335}
1336
1337/* placeholder, doesn't do anything useful yet */
1338static StructRNA *rna_wmKeyConfigPref_refine(PointerRNA *ptr)
1339{
1340 return (ptr->type) ? ptr->type : &RNA_KeyConfigPreferences;
1341}
1342
1345static void rna_wmKeyMapItem_idname_get(PointerRNA *ptr, char *value)
1346{
1347 wmKeyMapItem *kmi = static_cast<wmKeyMapItem *>(ptr->data);
1348 /* Pass in a fixed size buffer as the value may be allocated based on the callbacks length. */
1349 char value_buf[OP_MAX_TYPENAME];
1350 int len = WM_operator_py_idname(value_buf, kmi->idname);
1351 memcpy(value, value_buf, len + 1);
1352}
1353
1354static int rna_wmKeyMapItem_idname_length(PointerRNA *ptr)
1355{
1356 wmKeyMapItem *kmi = static_cast<wmKeyMapItem *>(ptr->data);
1357 char pyname[OP_MAX_TYPENAME];
1358 return WM_operator_py_idname(pyname, kmi->idname);
1359}
1360
1361static void rna_wmKeyMapItem_idname_set(PointerRNA *ptr, const char *value)
1362{
1363 wmKeyMapItem *kmi = static_cast<wmKeyMapItem *>(ptr->data);
1364 char idname[OP_MAX_TYPENAME];
1365
1366 WM_operator_bl_idname(idname, value);
1367
1368 if (!STREQ(idname, kmi->idname)) {
1369 STRNCPY(kmi->idname, idname);
1370
1371 WM_keymap_item_properties_reset(kmi, nullptr);
1372 }
1373}
1374
1375static void rna_wmKeyMapItem_name_get(PointerRNA *ptr, char *value)
1376{
1377 wmKeyMapItem *kmi = static_cast<wmKeyMapItem *>(ptr->data);
1379 strcpy(value, ot ? WM_operatortype_name(ot, kmi->ptr).c_str() : kmi->idname);
1380}
1381
1382static int rna_wmKeyMapItem_name_length(PointerRNA *ptr)
1383{
1384 wmKeyMapItem *kmi = static_cast<wmKeyMapItem *>(ptr->data);
1386 return strlen(ot ? WM_operatortype_name(ot, kmi->ptr).c_str() : kmi->idname);
1387}
1388
1389static bool rna_KeyMapItem_userdefined_get(PointerRNA *ptr)
1390{
1391 wmKeyMapItem *kmi = static_cast<wmKeyMapItem *>(ptr->data);
1392 return kmi->id < 0;
1393}
1394
1395static PointerRNA rna_WindowManager_xr_session_state_get(PointerRNA *ptr)
1396{
1397 wmWindowManager *wm = static_cast<wmWindowManager *>(ptr->data);
1398 struct wmXrSessionState *state =
1399# ifdef WITH_XR_OPENXR
1401# else
1402 nullptr;
1403 UNUSED_VARS(wm);
1404# endif
1405
1406 return rna_pointer_inherit_refine(ptr, &RNA_XrSessionState, state);
1407}
1408
1409# ifdef WITH_PYTHON
1410
1411static bool rna_operator_poll_cb(bContext *C, wmOperatorType *ot)
1412{
1413 extern FunctionRNA rna_Operator_poll_func;
1414
1415 ParameterList list;
1416 FunctionRNA *func;
1417 void *ret;
1418 bool visible;
1419
1420 PointerRNA ptr = RNA_pointer_create(nullptr, ot->rna_ext.srna, nullptr); /* dummy */
1421 func = &rna_Operator_poll_func; /* RNA_struct_find_function(&ptr, "poll"); */
1422
1423 RNA_parameter_list_create(&list, &ptr, func);
1424 RNA_parameter_set_lookup(&list, "context", &C);
1425 ot->rna_ext.call(C, &ptr, func, &list);
1426
1427 RNA_parameter_get_lookup(&list, "visible", &ret);
1428 visible = *(bool *)ret;
1429
1431
1432 return visible;
1433}
1434
1435static int rna_operator_exec_cb(bContext *C, wmOperator *op)
1436{
1437 extern FunctionRNA rna_Operator_execute_func;
1438
1439 ParameterList list;
1440 FunctionRNA *func;
1441 void *ret;
1442 int result;
1443
1444 ID *owner_id = (op->ptr) ? op->ptr->owner_id : nullptr;
1445 PointerRNA opr = RNA_pointer_create(owner_id, op->type->rna_ext.srna, op);
1446 func = &rna_Operator_execute_func; /* RNA_struct_find_function(&opr, "execute"); */
1447
1448 RNA_parameter_list_create(&list, &opr, func);
1449 RNA_parameter_set_lookup(&list, "context", &C);
1450 const bool has_error = op->type->rna_ext.call(C, &opr, func, &list) == -1;
1451
1452 RNA_parameter_get_lookup(&list, "result", &ret);
1453 result = *(int *)ret;
1454
1456
1457 if (UNLIKELY(has_error)) {
1458 /* A modal handler may have been added, ensure this is removed, see: #113479. */
1460 }
1461
1462 return result;
1463}
1464
1465/* same as execute() but no return value */
1466static bool rna_operator_check_cb(bContext *C, wmOperator *op)
1467{
1468 extern FunctionRNA rna_Operator_check_func;
1469
1470 ParameterList list;
1471 FunctionRNA *func;
1472 void *ret;
1473 bool result;
1474
1475 ID *owner_id = (op->ptr) ? op->ptr->owner_id : nullptr;
1476 PointerRNA opr = RNA_pointer_create(owner_id, op->type->rna_ext.srna, op);
1477 func = &rna_Operator_check_func; /* RNA_struct_find_function(&opr, "check"); */
1478
1479 RNA_parameter_list_create(&list, &opr, func);
1480 RNA_parameter_set_lookup(&list, "context", &C);
1481 op->type->rna_ext.call(C, &opr, func, &list);
1482
1483 RNA_parameter_get_lookup(&list, "result", &ret);
1484 result = (*(bool *)ret) != 0;
1485
1487
1488 return result;
1489}
1490
1491static int rna_operator_invoke_cb(bContext *C, wmOperator *op, const wmEvent *event)
1492{
1493 extern FunctionRNA rna_Operator_invoke_func;
1494
1495 ParameterList list;
1496 FunctionRNA *func;
1497 void *ret;
1498 int result;
1499
1500 ID *owner_id = (op->ptr) ? op->ptr->owner_id : nullptr;
1501 PointerRNA opr = RNA_pointer_create(owner_id, op->type->rna_ext.srna, op);
1502 func = &rna_Operator_invoke_func; /* RNA_struct_find_function(&opr, "invoke"); */
1503
1504 RNA_parameter_list_create(&list, &opr, func);
1505 RNA_parameter_set_lookup(&list, "context", &C);
1506 RNA_parameter_set_lookup(&list, "event", &event);
1507 const bool has_error = op->type->rna_ext.call(C, &opr, func, &list) == -1;
1508
1509 RNA_parameter_get_lookup(&list, "result", &ret);
1510 result = *(int *)ret;
1511
1513
1514 if (UNLIKELY(has_error)) {
1515 /* A modal handler may have been added, ensure this is removed, see: #113479. */
1517 }
1518
1519 return result;
1520}
1521
1522/* same as invoke */
1523static int rna_operator_modal_cb(bContext *C, wmOperator *op, const wmEvent *event)
1524{
1525 extern FunctionRNA rna_Operator_modal_func;
1526
1527 ParameterList list;
1528 FunctionRNA *func;
1529 void *ret;
1530 int result;
1531
1532 ID *owner_id = (op->ptr) ? op->ptr->owner_id : nullptr;
1533 PointerRNA opr = RNA_pointer_create(owner_id, op->type->rna_ext.srna, op);
1534 func = &rna_Operator_modal_func; /* RNA_struct_find_function(&opr, "modal"); */
1535
1536 RNA_parameter_list_create(&list, &opr, func);
1537 RNA_parameter_set_lookup(&list, "context", &C);
1538 RNA_parameter_set_lookup(&list, "event", &event);
1539 op->type->rna_ext.call(C, &opr, func, &list);
1540
1541 RNA_parameter_get_lookup(&list, "result", &ret);
1542 result = *(int *)ret;
1543
1545
1546 return result;
1547}
1548
1549static void rna_operator_draw_cb(bContext *C, wmOperator *op)
1550{
1551 extern FunctionRNA rna_Operator_draw_func;
1552
1553 ParameterList list;
1554 FunctionRNA *func;
1555
1556 /* Operator draw gets reused for drawing stored properties, in which
1557 * case we need a proper owner. */
1558 ID *owner_id = (op->ptr) ? op->ptr->owner_id : nullptr;
1559 PointerRNA opr = RNA_pointer_create(owner_id, op->type->rna_ext.srna, op);
1560 func = &rna_Operator_draw_func; /* RNA_struct_find_function(&opr, "draw"); */
1561
1562 RNA_parameter_list_create(&list, &opr, func);
1563 RNA_parameter_set_lookup(&list, "context", &C);
1564 op->type->rna_ext.call(C, &opr, func, &list);
1565
1567}
1568
1569/* same as exec(), but call cancel */
1570static void rna_operator_cancel_cb(bContext *C, wmOperator *op)
1571{
1572 extern FunctionRNA rna_Operator_cancel_func;
1573
1574 ParameterList list;
1575 FunctionRNA *func;
1576
1577 ID *owner_id = (op->ptr) ? op->ptr->owner_id : nullptr;
1578 PointerRNA opr = RNA_pointer_create(owner_id, op->type->rna_ext.srna, op);
1579 func = &rna_Operator_cancel_func; /* RNA_struct_find_function(&opr, "cancel"); */
1580
1581 RNA_parameter_list_create(&list, &opr, func);
1582 RNA_parameter_set_lookup(&list, "context", &C);
1583 op->type->rna_ext.call(C, &opr, func, &list);
1584
1586}
1587
1588static std::string rna_operator_description_cb(bContext *C,
1590 PointerRNA *prop_ptr)
1591{
1592 extern FunctionRNA rna_Operator_description_func;
1593
1594 ParameterList list;
1595 FunctionRNA *func;
1596 void *ret;
1597
1598 PointerRNA ptr = RNA_pointer_create(nullptr, ot->rna_ext.srna, nullptr); /* dummy */
1599 func = &rna_Operator_description_func; /* RNA_struct_find_function(&ptr, "description"); */
1600
1601 RNA_parameter_list_create(&list, &ptr, func);
1602 RNA_parameter_set_lookup(&list, "context", &C);
1603 RNA_parameter_set_lookup(&list, "properties", prop_ptr);
1604 ot->rna_ext.call(C, &ptr, func, &list);
1605
1606 RNA_parameter_get_lookup(&list, "result", &ret);
1607 std::string result = ret ? std::string(static_cast<const char *>(ret)) : "";
1608
1610
1611 return result;
1612}
1613
1614static bool rna_Operator_unregister(Main *bmain, StructRNA *type);
1615
1616/* `bpy_operator_wrap.cc` */
1617
1618extern void BPY_RNA_operator_wrapper(wmOperatorType *ot, void *userdata);
1619extern void BPY_RNA_operator_macro_wrapper(wmOperatorType *ot, void *userdata);
1620
1621static StructRNA *rna_Operator_register(Main *bmain,
1622 ReportList *reports,
1623 void *data,
1624 const char *identifier,
1625 StructValidateFunc validate,
1626 StructCallbackFunc call,
1628{
1629 const char *error_prefix = "Registering operator class:";
1630 wmOperatorType dummy_ot = {nullptr};
1631 wmOperator dummy_operator = {nullptr};
1632 bool have_function[8];
1633
1634 struct {
1635 char idname[OP_MAX_TYPENAME];
1636 char name[OP_MAX_TYPENAME];
1637 char description[RNA_DYN_DESCR_MAX];
1638 char translation_context[BKE_ST_MAXNAME];
1639 char undo_group[OP_MAX_TYPENAME];
1640 } temp_buffers;
1641
1642 /* setup dummy operator & operator type to store static properties in */
1643 dummy_operator.type = &dummy_ot;
1644 dummy_ot.idname = temp_buffers.idname; /* only assign the pointer, string is nullptr'd */
1645 dummy_ot.name = temp_buffers.name; /* only assign the pointer, string is nullptr'd */
1646 dummy_ot.description =
1647 temp_buffers.description; /* only assign the pointer, string is nullptr'd */
1648 dummy_ot.translation_context =
1649 temp_buffers.translation_context; /* only assign the pointer, string is nullptr'd */
1650 dummy_ot.undo_group = temp_buffers.undo_group; /* only assign the pointer, string is nullptr'd */
1651 PointerRNA dummy_operator_ptr = RNA_pointer_create(nullptr, &RNA_Operator, &dummy_operator);
1652
1653 /* clear in case they are left unset */
1654 temp_buffers.idname[0] = temp_buffers.name[0] = temp_buffers.description[0] =
1655 temp_buffers.undo_group[0] = temp_buffers.translation_context[0] = '\0';
1656
1657 /* validate the python class */
1658 if (validate(&dummy_operator_ptr, data, have_function) != 0) {
1659 return nullptr;
1660 }
1661
1662 /* check if we have registered this operator type before, and remove it */
1663 {
1664 wmOperatorType *ot = WM_operatortype_find(dummy_ot.idname, true);
1665 if (ot) {
1666 BKE_reportf(reports,
1667 RPT_INFO,
1668 "%s '%s', bl_idname '%s' has been registered before, unregistering previous",
1669 error_prefix,
1670 identifier,
1671 dummy_ot.idname);
1672
1673 StructRNA *srna = ot->rna_ext.srna;
1674 if (!(srna && rna_Operator_unregister(bmain, srna))) {
1675 BKE_reportf(reports,
1676 RPT_ERROR,
1677 "%s '%s', bl_idname '%s' %s",
1678 error_prefix,
1679 identifier,
1680 dummy_ot.idname,
1681 srna ? "is built-in" : "could not be unregistered");
1682 return nullptr;
1683 }
1684 }
1685 }
1686
1687 if (!WM_operator_py_idname_ok_or_report(reports, identifier, dummy_ot.idname)) {
1688 return nullptr;
1689 }
1690
1691 char idname_conv[sizeof(dummy_operator.idname)];
1692 WM_operator_bl_idname(idname_conv, dummy_ot.idname); /* convert the idname from python */
1693
1694 if (!RNA_struct_available_or_report(reports, idname_conv)) {
1695 return nullptr;
1696 }
1697
1698 /* We have to set default context if the class doesn't define it. */
1699 if (temp_buffers.translation_context[0] == '\0') {
1700 STRNCPY(temp_buffers.translation_context, BLT_I18NCONTEXT_OPERATOR_DEFAULT);
1701 }
1702
1703 /* Convert foo.bar to FOO_OT_bar
1704 * allocate all strings at once. */
1705 {
1706 const char *strings[] = {
1707 idname_conv,
1708 temp_buffers.name,
1709 temp_buffers.description,
1710 temp_buffers.translation_context,
1711 temp_buffers.undo_group,
1712 };
1713 char *strings_table[ARRAY_SIZE(strings)];
1715 '\0', strings_table, strings, ARRAY_SIZE(strings));
1716
1717 dummy_ot.idname = strings_table[0]; /* allocated string stored here */
1718 dummy_ot.name = strings_table[1];
1719 dummy_ot.description = *strings_table[2] ? strings_table[2] : nullptr;
1720 dummy_ot.translation_context = strings_table[3];
1721 dummy_ot.undo_group = strings_table[4];
1722 BLI_assert(ARRAY_SIZE(strings) == 5);
1723 }
1724
1725 /* XXX, this doubles up with the operator name #29666.
1726 * for now just remove from `dir(bpy.types)`. */
1727
1728 /* create a new operator type */
1729 dummy_ot.rna_ext.srna = RNA_def_struct_ptr(&BLENDER_RNA, dummy_ot.idname, &RNA_Operator);
1730
1731 /* Operator properties are registered separately. */
1733
1736 dummy_ot.rna_ext.data = data;
1737 dummy_ot.rna_ext.call = call;
1738 dummy_ot.rna_ext.free = free;
1739
1740 dummy_ot.pyop_poll = (have_function[0]) ? rna_operator_poll_cb : nullptr;
1741 dummy_ot.exec = (have_function[1]) ? rna_operator_exec_cb : nullptr;
1742 dummy_ot.check = (have_function[2]) ? rna_operator_check_cb : nullptr;
1743 dummy_ot.invoke = (have_function[3]) ? rna_operator_invoke_cb : nullptr;
1744 dummy_ot.modal = (have_function[4]) ? rna_operator_modal_cb : nullptr;
1745 dummy_ot.ui = (have_function[5]) ? rna_operator_draw_cb : nullptr;
1746 dummy_ot.cancel = (have_function[6]) ? rna_operator_cancel_cb : nullptr;
1747 dummy_ot.get_description = (have_function[7]) ? rna_operator_description_cb : nullptr;
1749
1750 /* update while blender is running */
1752
1753 return dummy_ot.rna_ext.srna;
1754}
1755
1756static bool rna_Operator_unregister(Main *bmain, StructRNA *type)
1757{
1758 const char *idname;
1760 wmWindowManager *wm;
1761
1762 if (!ot) {
1763 return false;
1764 }
1765
1766 /* update while blender is running */
1767 wm = static_cast<wmWindowManager *>(bmain->wm.first);
1768 if (wm) {
1770
1772 }
1774
1776
1777 idname = ot->idname;
1779
1780 /* Not to be confused with the RNA_struct_free that WM_operatortype_remove calls,
1781 * they are 2 different srna's. */
1783
1784 MEM_freeN((void *)idname);
1785 return true;
1786}
1787
1788static void **rna_Operator_instance(PointerRNA *ptr)
1789{
1790 wmOperator *op = static_cast<wmOperator *>(ptr->data);
1791 return &op->py_instance;
1792}
1793
1794static StructRNA *rna_MacroOperator_register(Main *bmain,
1795 ReportList *reports,
1796 void *data,
1797 const char *identifier,
1798 StructValidateFunc validate,
1799 StructCallbackFunc call,
1801{
1802 const char *error_prefix = "Registering operator macro class:";
1803 wmOperatorType dummy_ot = {nullptr};
1804 wmOperator dummy_operator = {nullptr};
1805 bool have_function[2];
1806
1807 struct {
1808 char idname[OP_MAX_TYPENAME];
1809 char name[OP_MAX_TYPENAME];
1810 char description[RNA_DYN_DESCR_MAX];
1811 char translation_context[BKE_ST_MAXNAME];
1812 char undo_group[OP_MAX_TYPENAME];
1813 } temp_buffers;
1814
1815 /* setup dummy operator & operator type to store static properties in */
1816 dummy_operator.type = &dummy_ot;
1817 dummy_ot.idname = temp_buffers.idname; /* only assign the pointer, string is nullptr'd */
1818 dummy_ot.name = temp_buffers.name; /* only assign the pointer, string is nullptr'd */
1819 dummy_ot.description =
1820 temp_buffers.description; /* only assign the pointer, string is nullptr'd */
1821 dummy_ot.translation_context =
1822 temp_buffers.translation_context; /* only assign the pointer, string is nullptr'd */
1823 dummy_ot.undo_group = temp_buffers.undo_group; /* only assign the pointer, string is nullptr'd */
1824 PointerRNA dummy_operator_ptr = RNA_pointer_create(nullptr, &RNA_Macro, &dummy_operator);
1825
1826 /* clear in case they are left unset */
1827 temp_buffers.idname[0] = temp_buffers.name[0] = temp_buffers.description[0] =
1828 temp_buffers.undo_group[0] = temp_buffers.translation_context[0] = '\0';
1829
1830 /* validate the python class */
1831 if (validate(&dummy_operator_ptr, data, have_function) != 0) {
1832 return nullptr;
1833 }
1834
1835 if (!WM_operator_py_idname_ok_or_report(reports, identifier, dummy_ot.idname)) {
1836 return nullptr;
1837 }
1838
1839 /* check if we have registered this operator type before, and remove it */
1840 {
1841 wmOperatorType *ot = WM_operatortype_find(dummy_ot.idname, true);
1842 if (ot) {
1843 BKE_reportf(reports,
1844 RPT_INFO,
1845 "%s '%s', bl_idname '%s' has been registered before, unregistering previous",
1846 error_prefix,
1847 identifier,
1848 dummy_ot.idname);
1849
1850 StructRNA *srna = ot->rna_ext.srna;
1851 if (!(srna && rna_Operator_unregister(bmain, srna))) {
1852 BKE_reportf(reports,
1853 RPT_ERROR,
1854 "%s '%s', bl_idname '%s' %s",
1855 error_prefix,
1856 identifier,
1857 dummy_ot.idname,
1858 srna ? "is built-in" : "could not be unregistered");
1859 return nullptr;
1860 }
1861 }
1862 }
1863
1864 char idname_conv[sizeof(dummy_operator.idname)];
1865 WM_operator_bl_idname(idname_conv, dummy_ot.idname); /* convert the idname from python */
1866
1867 if (!RNA_struct_available_or_report(reports, idname_conv)) {
1868 return nullptr;
1869 }
1870
1871 /* We have to set default context if the class doesn't define it. */
1872 if (temp_buffers.translation_context[0] == '\0') {
1873 STRNCPY(temp_buffers.translation_context, BLT_I18NCONTEXT_OPERATOR_DEFAULT);
1874 }
1875
1876 /* Convert foo.bar to FOO_OT_bar
1877 * allocate all strings at once. */
1878 {
1879 const char *strings[] = {
1880 idname_conv,
1881 temp_buffers.name,
1882 temp_buffers.description,
1883 temp_buffers.translation_context,
1884 temp_buffers.undo_group,
1885 };
1886 char *strings_table[ARRAY_SIZE(strings)];
1888 '\0', strings_table, strings, ARRAY_SIZE(strings));
1889
1890 dummy_ot.idname = strings_table[0]; /* allocated string stored here */
1891 dummy_ot.name = strings_table[1];
1892 dummy_ot.description = *strings_table[2] ? strings_table[2] : nullptr;
1893 dummy_ot.translation_context = strings_table[3];
1894 dummy_ot.undo_group = strings_table[4];
1895 BLI_assert(ARRAY_SIZE(strings) == 5);
1896 }
1897
1898 /* XXX, this doubles up with the operator name #29666.
1899 * for now just remove from `dir(bpy.types)`. */
1900
1901 /* create a new operator type */
1902 dummy_ot.rna_ext.srna = RNA_def_struct_ptr(&BLENDER_RNA, dummy_ot.idname, &RNA_Operator);
1904 dummy_ot.rna_ext.data = data;
1905 dummy_ot.rna_ext.call = call;
1906 dummy_ot.rna_ext.free = free;
1907
1908 dummy_ot.pyop_poll = (have_function[0]) ? rna_operator_poll_cb : nullptr;
1909 dummy_ot.ui = (have_function[1]) ? rna_operator_draw_cb : nullptr;
1910
1912
1913 /* update while blender is running */
1915
1916 return dummy_ot.rna_ext.srna;
1917}
1918# endif /* WITH_PYTHON */
1919
1920static StructRNA *rna_Operator_refine(PointerRNA *opr)
1921{
1922 wmOperator *op = (wmOperator *)opr->data;
1923 return (op->type && op->type->rna_ext.srna) ? op->type->rna_ext.srna : &RNA_Operator;
1924}
1925
1926static StructRNA *rna_MacroOperator_refine(PointerRNA *opr)
1927{
1928 wmOperator *op = (wmOperator *)opr->data;
1929 return (op->type && op->type->rna_ext.srna) ? op->type->rna_ext.srna : &RNA_Macro;
1930}
1931
1932/* just to work around 'const char *' warning and to ensure this is a python op */
1933static void rna_Operator_bl_idname_set(PointerRNA *ptr, const char *value)
1934{
1935 wmOperator *data = (wmOperator *)(ptr->data);
1936 char *str = (char *)data->type->idname;
1937 if (!str[0]) {
1938 /* Calling UTF8 copy is disputable since registering ensures the value isn't truncated.
1939 * Use a UTF8 copy to ensure truncating never causes an incomplete UTF8 sequence,
1940 * even before registration. */
1942 }
1943 else {
1944 BLI_assert_msg(0, "setting the bl_idname on a non-builtin operator");
1945 }
1946}
1947
1948static void rna_Operator_bl_label_set(PointerRNA *ptr, const char *value)
1949{
1950 wmOperator *data = (wmOperator *)(ptr->data);
1951 char *str = (char *)data->type->name;
1952 if (!str[0]) {
1954 }
1955 else {
1956 BLI_assert_msg(0, "setting the bl_label on a non-builtin operator");
1957 }
1958}
1959
1965# define OPERATOR_STR_MAYBE_NULL_GETSET(attr, attr_maxncpy) \
1966 static void rna_Operator_bl_##attr##_set(PointerRNA *ptr, const char *value) \
1967 { \
1968 wmOperator *data = (wmOperator *)(ptr->data); \
1969 char *str = (char *)data->type->attr; \
1970 if (str && !str[0]) { \
1971 BLI_strncpy_utf8(str, value, attr_maxncpy); \
1972 } \
1973 else { \
1974 BLI_assert_msg(false, "setting the bl_" #attr " on a non-builtin operator"); \
1975 } \
1976 } \
1977 static void rna_Operator_bl_##attr##_get(PointerRNA *ptr, char *value) \
1978 { \
1979 const wmOperator *data = (wmOperator *)(ptr->data); \
1980 const char *str = data->type->attr; \
1981 strcpy(value, str ? str : ""); \
1982 } \
1983 static int rna_Operator_bl_##attr##_length(PointerRNA *ptr) \
1984 { \
1985 const wmOperator *data = (wmOperator *)(ptr->data); \
1986 const char *str = data->type->attr; \
1987 return str ? strlen(str) : 0; \
1988 }
1989
1990OPERATOR_STR_MAYBE_NULL_GETSET(translation_context, BKE_ST_MAXNAME)
1991OPERATOR_STR_MAYBE_NULL_GETSET(description, RNA_DYN_DESCR_MAX)
1992OPERATOR_STR_MAYBE_NULL_GETSET(undo_group, OP_MAX_TYPENAME)
1993
1994static void rna_KeyMapItem_update(Main * /*bmain*/, Scene * /*scene*/, PointerRNA *ptr)
1995{
1996 wmKeyMapItem *kmi = static_cast<wmKeyMapItem *>(ptr->data);
1997 WM_keyconfig_update_tag(nullptr, kmi);
1998}
1999
2000#else /* RNA_RUNTIME */
2001
2007{
2008 StructRNA *srna;
2009 PropertyRNA *prop;
2010
2011 srna = RNA_def_struct(brna, "OperatorOptions", nullptr);
2012 RNA_def_struct_ui_text(srna, "Operator Options", "Runtime options");
2013 RNA_def_struct_sdna(srna, "wmOperator");
2014
2015 prop = RNA_def_property(srna, "is_grab_cursor", PROP_BOOLEAN, PROP_BOOLEAN);
2017 RNA_def_property_ui_text(prop, "Grab Cursor", "True when the cursor is grabbed");
2019
2020 prop = RNA_def_property(srna, "is_invoke", PROP_BOOLEAN, PROP_BOOLEAN);
2021 RNA_def_property_boolean_sdna(prop, nullptr, "flag", OP_IS_INVOKE);
2023 prop, "Invoke", "True when invoked (even if only the execute callbacks available)");
2025
2026 prop = RNA_def_property(srna, "is_repeat", PROP_BOOLEAN, PROP_BOOLEAN);
2027 RNA_def_property_boolean_sdna(prop, nullptr, "flag", OP_IS_REPEAT);
2028 RNA_def_property_ui_text(prop, "Repeat", "True when run from the 'Adjust Last Operation' panel");
2030
2031 prop = RNA_def_property(srna, "is_repeat_last", PROP_BOOLEAN, PROP_BOOLEAN);
2032 RNA_def_property_boolean_sdna(prop, nullptr, "flag", OP_IS_REPEAT_LAST);
2033 RNA_def_property_ui_text(prop, "Repeat Call", "True when run from the operator 'Repeat Last'");
2035
2036 prop = RNA_def_property(srna, "use_cursor_region", PROP_BOOLEAN, PROP_BOOLEAN);
2039 prop, "Focus Region", "Enable to use the region under the cursor for modal execution");
2040}
2041
2043{
2044 PropertyRNA *prop;
2045
2046 prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
2049 prop, "rna_Operator_name_get", "rna_Operator_name_length", nullptr);
2050 RNA_def_property_ui_text(prop, "Name", "");
2051
2052 prop = RNA_def_property(srna, "properties", PROP_POINTER, PROP_NONE);
2054 RNA_def_property_struct_type(prop, "OperatorProperties");
2055 RNA_def_property_ui_text(prop, "Properties", "");
2056 RNA_def_property_pointer_funcs(prop, "rna_Operator_properties_get", nullptr, nullptr, nullptr);
2057
2058 prop = RNA_def_property(srna, "has_reports", PROP_BOOLEAN, PROP_NONE);
2059 RNA_def_property_clear_flag(prop, PROP_EDITABLE); /* this is 'virtual' property */
2060 RNA_def_property_boolean_funcs(prop, "rna_Operator_has_reports_get", nullptr);
2062 prop,
2063 "Has Reports",
2064 "Operator has a set of reports (warnings and errors) from last execution");
2065
2066 /* Registration */
2067 prop = RNA_def_property(srna, "bl_idname", PROP_STRING, PROP_NONE);
2068 RNA_def_property_string_sdna(prop, nullptr, "type->idname");
2069 /* String stored here is the 'BL' identifier (`OPMODULE_OT_my_op`),
2070 * not the 'python' identifier (`opmodule.my_op`). */
2072 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_Operator_bl_idname_set");
2073 // RNA_def_property_clear_flag(prop, PROP_EDITABLE);
2075 RNA_def_struct_name_property(srna, prop);
2076
2077 prop = RNA_def_property(srna, "bl_label", PROP_STRING, PROP_NONE);
2078 RNA_def_property_string_sdna(prop, nullptr, "type->name");
2079 RNA_def_property_string_maxlength(prop, OP_MAX_TYPENAME); /* else it uses the pointer size! */
2080 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_Operator_bl_label_set");
2081 // RNA_def_property_clear_flag(prop, PROP_EDITABLE);
2083
2084 prop = RNA_def_property(srna, "bl_translation_context", PROP_STRING, PROP_NONE);
2085 RNA_def_property_string_sdna(prop, nullptr, "type->translation_context");
2086 RNA_def_property_string_maxlength(prop, BKE_ST_MAXNAME); /* else it uses the pointer size! */
2088 "rna_Operator_bl_translation_context_get",
2089 "rna_Operator_bl_translation_context_length",
2090 "rna_Operator_bl_translation_context_set");
2093
2094 prop = RNA_def_property(srna, "bl_description", PROP_STRING, PROP_NONE);
2095 RNA_def_property_string_sdna(prop, nullptr, "type->description");
2096 RNA_def_property_string_maxlength(prop, RNA_DYN_DESCR_MAX); /* else it uses the pointer size! */
2098 "rna_Operator_bl_description_get",
2099 "rna_Operator_bl_description_length",
2100 "rna_Operator_bl_description_set");
2101 // RNA_def_property_clear_flag(prop, PROP_EDITABLE);
2103
2104 prop = RNA_def_property(srna, "bl_undo_group", PROP_STRING, PROP_NONE);
2105 RNA_def_property_string_sdna(prop, nullptr, "type->undo_group");
2106 RNA_def_property_string_maxlength(prop, OP_MAX_TYPENAME); /* else it uses the pointer size! */
2108 "rna_Operator_bl_undo_group_get",
2109 "rna_Operator_bl_undo_group_length",
2110 "rna_Operator_bl_undo_group_set");
2111 // RNA_def_property_clear_flag(prop, PROP_EDITABLE);
2113
2114 prop = RNA_def_property(srna, "bl_options", PROP_ENUM, PROP_NONE);
2115 RNA_def_property_enum_sdna(prop, nullptr, "type->flag");
2118 RNA_def_property_ui_text(prop, "Options", "Options for this operator type");
2119
2120 prop = RNA_def_property(srna, "bl_cursor_pending", PROP_ENUM, PROP_NONE);
2121 RNA_def_property_enum_sdna(prop, nullptr, "type->cursor_pending");
2125 prop,
2126 "Idle Cursor",
2127 "Cursor to use when waiting for the user to select a location to activate the operator "
2128 "(when ``bl_options`` has ``DEPENDS_ON_CURSOR`` set)");
2129}
2130
2132{
2133 StructRNA *srna;
2134 PropertyRNA *prop;
2135
2136 srna = RNA_def_struct(brna, "Operator", nullptr);
2138 srna, "Operator", "Storage of an operator being executed, or registered after execution");
2139 RNA_def_struct_sdna(srna, "wmOperator");
2140 RNA_def_struct_refine_func(srna, "rna_Operator_refine");
2141# ifdef WITH_PYTHON
2143 srna, "rna_Operator_register", "rna_Operator_unregister", "rna_Operator_instance");
2144# endif
2147
2149
2150 prop = RNA_def_property(srna, "layout", PROP_POINTER, PROP_NONE);
2151 RNA_def_property_struct_type(prop, "UILayout");
2152 RNA_def_property_pointer_funcs(prop, "rna_Operator_layout_get", nullptr, nullptr, nullptr);
2153
2154 prop = RNA_def_property(srna, "options", PROP_POINTER, PROP_NONE);
2156 RNA_def_property_struct_type(prop, "OperatorOptions");
2157 RNA_def_property_pointer_funcs(prop, "rna_Operator_options_get", nullptr, nullptr, nullptr);
2158 RNA_def_property_ui_text(prop, "Options", "Runtime options");
2159
2160 prop = RNA_def_property(srna, "macros", PROP_COLLECTION, PROP_NONE);
2161 RNA_def_property_collection_sdna(prop, nullptr, "macro", nullptr);
2162 RNA_def_property_struct_type(prop, "Macro");
2163 RNA_def_property_ui_text(prop, "Macros", "");
2164
2165 RNA_api_operator(srna);
2166
2167 srna = RNA_def_struct(brna, "OperatorProperties", nullptr);
2168 RNA_def_struct_ui_text(srna, "Operator Properties", "Input properties of an operator");
2169 RNA_def_struct_refine_func(srna, "rna_OperatorProperties_refine");
2170 RNA_def_struct_idprops_func(srna, "rna_OperatorProperties_idprops");
2173}
2174
2176{
2177 StructRNA *srna;
2178
2179 srna = RNA_def_struct(brna, "Macro", nullptr);
2181 srna,
2182 "Macro Operator",
2183 "Storage of a macro operator being executed, or registered after execution");
2184 RNA_def_struct_sdna(srna, "wmOperator");
2185 RNA_def_struct_refine_func(srna, "rna_MacroOperator_refine");
2186# ifdef WITH_PYTHON
2188 srna, "rna_MacroOperator_register", "rna_Operator_unregister", "rna_Operator_instance");
2189# endif
2192
2194
2195 RNA_api_macro(srna);
2196}
2197
2199{
2200 StructRNA *srna;
2201 PropertyRNA *prop;
2202
2203 srna = RNA_def_struct(brna, "OperatorMacro", nullptr);
2205 srna, "Operator Macro", "Storage of a sub operator in a macro after it has been added");
2206 RNA_def_struct_sdna(srna, "wmOperatorTypeMacro");
2207
2208# if 0
2209 prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
2211 RNA_def_property_string_sdna(prop, nullptr, "idname");
2212 RNA_def_property_ui_text(prop, "Name", "Name of the sub operator");
2213 RNA_def_struct_name_property(srna, prop);
2214# endif
2215
2216 prop = RNA_def_property(srna, "properties", PROP_POINTER, PROP_NONE);
2218 RNA_def_property_struct_type(prop, "OperatorProperties");
2219 RNA_def_property_ui_text(prop, "Properties", "");
2221 prop, "rna_OperatorMacro_properties_get", nullptr, nullptr, nullptr);
2222}
2223
2225{
2226 StructRNA *srna;
2227 PropertyRNA *prop;
2228
2229 srna = RNA_def_struct(brna, "OperatorMousePath", "PropertyGroup");
2231 srna, "Operator Mouse Path", "Mouse path values for operators that record such paths");
2232
2233 prop = RNA_def_property(srna, "loc", PROP_FLOAT, PROP_XYZ);
2235 RNA_def_property_array(prop, 2);
2236 RNA_def_property_ui_text(prop, "Location", "Mouse location");
2237
2238 prop = RNA_def_property(srna, "time", PROP_FLOAT, PROP_NONE);
2240 RNA_def_property_ui_text(prop, "Time", "Time of mouse location");
2241}
2242
2244{
2245 StructRNA *srna;
2246 PropertyRNA *prop;
2247
2248 srna = RNA_def_struct(brna, "OperatorFileListElement", "PropertyGroup");
2249 RNA_def_struct_ui_text(srna, "Operator File List Element", "");
2250
2251 prop = RNA_def_property(srna, "name", PROP_STRING, PROP_FILENAME);
2253 RNA_def_property_ui_text(prop, "Name", "Name of a file or directory within a file list");
2254}
2255
2256static void rna_def_event(BlenderRNA *brna)
2257{
2258 StructRNA *srna;
2259 PropertyRNA *prop;
2260
2261 srna = RNA_def_struct(brna, "Event", nullptr);
2262 RNA_def_struct_ui_text(srna, "Event", "Window Manager Event");
2263 RNA_def_struct_sdna(srna, "wmEvent");
2264
2265 RNA_define_verify_sdna(false); /* not in sdna */
2266
2267 /* strings */
2268 prop = RNA_def_property(srna, "ascii", PROP_STRING, PROP_NONE);
2270 RNA_def_property_string_funcs(prop, "rna_Event_ascii_get", "rna_Event_ascii_length", nullptr);
2271 RNA_def_property_ui_text(prop, "ASCII", "Single ASCII character for this event");
2272
2273 prop = RNA_def_property(srna, "unicode", PROP_STRING, PROP_NONE);
2276 prop, "rna_Event_unicode_get", "rna_Event_unicode_length", nullptr);
2277 RNA_def_property_ui_text(prop, "Unicode", "Single unicode character for this event");
2278
2279 /* enums */
2280 prop = RNA_def_property(srna, "value", PROP_ENUM, PROP_NONE);
2281 RNA_def_property_enum_sdna(prop, nullptr, "val");
2284 RNA_def_property_ui_text(prop, "Value", "The type of event, only applies to some");
2285
2286 prop = RNA_def_property(srna, "value_prev", PROP_ENUM, PROP_NONE);
2287 RNA_def_property_enum_sdna(prop, nullptr, "prev_val");
2290 RNA_def_property_ui_text(prop, "Previous Value", "The type of event, only applies to some");
2291
2292 prop = RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
2293 RNA_def_property_enum_sdna(prop, nullptr, "type");
2297 RNA_def_property_ui_text(prop, "Type", "");
2298
2299 prop = RNA_def_property(srna, "type_prev", PROP_ENUM, PROP_NONE);
2300 RNA_def_property_enum_sdna(prop, nullptr, "prev_type");
2304 RNA_def_property_ui_text(prop, "Previous Type", "");
2305
2306 prop = RNA_def_property(srna, "direction", PROP_ENUM, PROP_NONE);
2307 RNA_def_property_enum_sdna(prop, nullptr, "direction");
2310 RNA_def_property_ui_text(prop, "Direction", "The direction (only applies to drag events)");
2311
2312 /* keyboard */
2313 prop = RNA_def_property(srna, "is_repeat", PROP_BOOLEAN, PROP_NONE);
2315 RNA_def_property_boolean_funcs(prop, "rna_Event_is_repeat_get", nullptr);
2316 RNA_def_property_ui_text(prop, "Is Repeat", "The event is generated by holding a key down");
2317
2318 /* Trackpad & NDOF. */
2319 prop = RNA_def_property(srna, "is_consecutive", PROP_BOOLEAN, PROP_NONE);
2321 RNA_def_property_boolean_funcs(prop, "rna_Event_is_consecutive_get", nullptr);
2323 "Is Consecutive",
2324 "Part of a trackpad or NDOF motion, "
2325 "interrupted by cursor motion, button or key press events");
2326
2327 /* mouse */
2328 prop = RNA_def_property(srna, "mouse_x", PROP_INT, PROP_NONE);
2329 RNA_def_property_int_sdna(prop, nullptr, "xy[0]");
2332 prop, "Mouse X Position", "The window relative horizontal location of the mouse");
2333
2334 prop = RNA_def_property(srna, "mouse_y", PROP_INT, PROP_NONE);
2335 RNA_def_property_int_sdna(prop, nullptr, "xy[1]");
2338 prop, "Mouse Y Position", "The window relative vertical location of the mouse");
2339
2340 prop = RNA_def_property(srna, "mouse_region_x", PROP_INT, PROP_NONE);
2341 RNA_def_property_int_sdna(prop, nullptr, "mval[0]");
2344 prop, "Mouse X Position", "The region relative horizontal location of the mouse");
2345
2346 prop = RNA_def_property(srna, "mouse_region_y", PROP_INT, PROP_NONE);
2347 RNA_def_property_int_sdna(prop, nullptr, "mval[1]");
2350 prop, "Mouse Y Position", "The region relative vertical location of the mouse");
2351
2352 prop = RNA_def_property(srna, "mouse_prev_x", PROP_INT, PROP_NONE);
2353 RNA_def_property_int_sdna(prop, nullptr, "prev_xy[0]");
2356 prop, "Mouse Previous X Position", "The window relative horizontal location of the mouse");
2357
2358 prop = RNA_def_property(srna, "mouse_prev_y", PROP_INT, PROP_NONE);
2359 RNA_def_property_int_sdna(prop, nullptr, "prev_xy[1]");
2362 prop, "Mouse Previous Y Position", "The window relative vertical location of the mouse");
2363
2364 prop = RNA_def_property(srna, "mouse_prev_press_x", PROP_INT, PROP_NONE);
2365 RNA_def_property_int_sdna(prop, nullptr, "prev_press_xy[0]");
2368 "Mouse Previous X Press Position",
2369 "The window relative horizontal location of the last press event");
2370
2371 prop = RNA_def_property(srna, "mouse_prev_press_y", PROP_INT, PROP_NONE);
2372 RNA_def_property_int_sdna(prop, nullptr, "prev_press_xy[1]");
2375 "Mouse Previous Y Press Position",
2376 "The window relative vertical location of the last press event");
2377
2378 prop = RNA_def_property(srna, "pressure", PROP_FLOAT, PROP_FACTOR);
2381 RNA_def_property_float_funcs(prop, "rna_Event_pressure_get", nullptr, nullptr);
2383 prop, "Tablet Pressure", "The pressure of the tablet or 1.0 if no tablet present");
2384
2385 prop = RNA_def_property(srna, "tilt", PROP_FLOAT, PROP_XYZ_LENGTH);
2386 RNA_def_property_array(prop, 2);
2388 RNA_def_property_float_funcs(prop, "rna_Event_tilt_get", nullptr, nullptr);
2390 prop, "Tablet Tilt", "The pressure of the tablet or zeroes if no tablet present");
2391
2392 prop = RNA_def_property(srna, "is_tablet", PROP_BOOLEAN, PROP_NONE);
2394 RNA_def_property_boolean_funcs(prop, "rna_Event_is_tablet_get", nullptr);
2395 RNA_def_property_ui_text(prop, "Is Tablet", "The event has tablet data");
2396
2397 prop = RNA_def_property(srna, "is_mouse_absolute", PROP_BOOLEAN, PROP_NONE);
2398 RNA_def_property_boolean_sdna(prop, nullptr, "tablet.is_motion_absolute", 1);
2400 RNA_def_property_ui_text(prop, "Absolute Motion", "The last motion event was an absolute input");
2401
2402 /* xr */
2403 prop = RNA_def_property(srna, "xr", PROP_POINTER, PROP_NONE);
2404 RNA_def_property_struct_type(prop, "XrEventData");
2406 RNA_def_property_pointer_funcs(prop, "rna_Event_xr_get", nullptr, nullptr, nullptr);
2407 RNA_def_property_ui_text(prop, "XR", "XR event data");
2408
2409 /* modifiers */
2410 prop = RNA_def_property(srna, "shift", PROP_BOOLEAN, PROP_NONE);
2411 RNA_def_property_boolean_sdna(prop, nullptr, "modifier", KM_SHIFT);
2413 RNA_def_property_ui_text(prop, "Shift", "True when the Shift key is held");
2415
2416 prop = RNA_def_property(srna, "ctrl", PROP_BOOLEAN, PROP_NONE);
2417 RNA_def_property_boolean_sdna(prop, nullptr, "modifier", KM_CTRL);
2419 RNA_def_property_ui_text(prop, "Ctrl", "True when the Ctrl key is held");
2420
2421 prop = RNA_def_property(srna, "alt", PROP_BOOLEAN, PROP_NONE);
2422 RNA_def_property_boolean_sdna(prop, nullptr, "modifier", KM_ALT);
2424 RNA_def_property_ui_text(prop, "Alt", "True when the Alt/Option key is held");
2425
2426 prop = RNA_def_property(srna, "oskey", PROP_BOOLEAN, PROP_NONE);
2427 RNA_def_property_boolean_sdna(prop, nullptr, "modifier", KM_OSKEY);
2429 RNA_def_property_ui_text(prop, "OS Key", "True when the Cmd key is held");
2430
2431 RNA_define_verify_sdna(true); /* not in sdna */
2432}
2433
2434static void rna_def_timer(BlenderRNA *brna)
2435{
2436 StructRNA *srna;
2437 PropertyRNA *prop;
2438
2439 srna = RNA_def_struct(brna, "Timer", nullptr);
2440 RNA_def_struct_ui_text(srna, "Timer", "Window event timer");
2441 RNA_def_struct_sdna(srna, "wmTimer");
2442
2443 RNA_define_verify_sdna(false); /* not in sdna */
2444
2445 /* could wrap more, for now this is enough */
2446 prop = RNA_def_property(srna, "time_step", PROP_FLOAT, PROP_NONE);
2447 RNA_def_property_float_sdna(prop, nullptr, "time_step");
2449 RNA_def_property_ui_text(prop, "Time Step", "");
2450
2451 prop = RNA_def_property(srna, "time_delta", PROP_FLOAT, PROP_NONE);
2452 RNA_def_property_float_sdna(prop, nullptr, "time_delta");
2454 RNA_def_property_ui_text(prop, "Delta", "Time since last step in seconds");
2455
2456 prop = RNA_def_property(srna, "time_duration", PROP_FLOAT, PROP_NONE);
2457 RNA_def_property_float_sdna(prop, nullptr, "time_duration");
2459 RNA_def_property_ui_text(prop, "Delta", "Time since the timer started seconds");
2460
2461 RNA_define_verify_sdna(true); /* not in sdna */
2462}
2463
2465 const char *rna_type,
2466 const char *c_type,
2467 const char *layout_get_fn)
2468{
2469 StructRNA *srna;
2470 PropertyRNA *prop;
2471
2472 srna = RNA_def_struct(brna, rna_type, nullptr);
2473 /* UI name isn't visible, name same as type. */
2474 RNA_def_struct_ui_text(srna, rna_type, "");
2475 RNA_def_struct_sdna(srna, c_type);
2476
2477 RNA_define_verify_sdna(false); /* not in sdna */
2478
2479 /* could wrap more, for now this is enough */
2480 prop = RNA_def_property(srna, "layout", PROP_POINTER, PROP_NONE);
2481 RNA_def_property_struct_type(prop, "UILayout");
2482 RNA_def_property_pointer_funcs(prop, layout_get_fn, nullptr, nullptr, nullptr);
2483
2484 RNA_define_verify_sdna(true); /* not in sdna */
2485}
2486
2488{
2489 rna_def_popup_menu_wrapper(brna, "UIPopupMenu", "uiPopupMenu", "rna_PopupMenu_layout_get");
2490}
2491
2493{
2494 rna_def_popup_menu_wrapper(brna, "UIPopover", "uiPopover", "rna_PopoverMenu_layout_get");
2495}
2496
2497static void rna_def_piemenu(BlenderRNA *brna)
2498{
2499 rna_def_popup_menu_wrapper(brna, "UIPieMenu", "uiPieMenu", "rna_PieMenu_layout_get");
2500}
2501
2503{
2504 StructRNA *srna;
2505 PropertyRNA *prop;
2506
2507 srna = RNA_def_struct(brna, "Stereo3dDisplay", nullptr);
2508 RNA_def_struct_sdna(srna, "Stereo3dFormat");
2509 RNA_def_struct_ui_text(srna, "Stereo 3D Display", "Settings for stereo 3D display");
2510
2511 prop = RNA_def_property(srna, "display_mode", PROP_ENUM, PROP_NONE);
2513 RNA_def_property_ui_text(prop, "Display Mode", "");
2514
2515 prop = RNA_def_property(srna, "anaglyph_type", PROP_ENUM, PROP_NONE);
2517 RNA_def_property_ui_text(prop, "Anaglyph Type", "");
2518
2519 prop = RNA_def_property(srna, "interlace_type", PROP_ENUM, PROP_NONE);
2521 RNA_def_property_ui_text(prop, "Interlace Type", "");
2522
2523 prop = RNA_def_property(srna, "use_interlace_swap", PROP_BOOLEAN, PROP_BOOLEAN);
2524 RNA_def_property_boolean_sdna(prop, nullptr, "flag", S3D_INTERLACE_SWAP);
2525 RNA_def_property_ui_text(prop, "Swap Left/Right", "Swap left and right stereo channels");
2526
2527 prop = RNA_def_property(srna, "use_sidebyside_crosseyed", PROP_BOOLEAN, PROP_BOOLEAN);
2529 RNA_def_property_ui_text(prop, "Cross-Eyed", "Right eye should see left image and vice versa");
2530}
2531
2532static void rna_def_window(BlenderRNA *brna)
2533{
2534 StructRNA *srna;
2535 PropertyRNA *prop;
2536
2537 srna = RNA_def_struct(brna, "Window", nullptr);
2538 RNA_def_struct_ui_text(srna, "Window", "Open window");
2539 RNA_def_struct_sdna(srna, "wmWindow");
2540
2541 prop = RNA_def_property(srna, "parent", PROP_POINTER, PROP_NONE);
2542 RNA_def_property_ui_text(prop, "Parent Window", "Active workspace and scene follow this window");
2543
2545
2546 prop = RNA_def_property(srna, "scene", PROP_POINTER, PROP_NONE);
2548 RNA_def_property_pointer_funcs(prop, nullptr, "rna_Window_scene_set", nullptr, nullptr);
2549 RNA_def_property_ui_text(prop, "Scene", "Active scene to be edited in the window");
2551 RNA_def_property_update(prop, 0, "rna_Window_scene_update");
2552
2553 prop = RNA_def_property(srna, "workspace", PROP_POINTER, PROP_NONE);
2555 RNA_def_property_struct_type(prop, "WorkSpace");
2556 RNA_def_property_ui_text(prop, "Workspace", "Active workspace showing in the window");
2558 prop, "rna_Window_workspace_get", "rna_Window_workspace_set", nullptr, nullptr);
2560 RNA_def_property_update(prop, 0, "rna_Window_workspace_update");
2561
2562 prop = RNA_def_property(srna, "screen", PROP_POINTER, PROP_NONE);
2563 RNA_def_property_struct_type(prop, "Screen");
2564 RNA_def_property_ui_text(prop, "Screen", "Active workspace screen showing in the window");
2566 "rna_Window_screen_get",
2567 "rna_Window_screen_set",
2568 nullptr,
2569 "rna_Window_screen_assign_poll");
2572 RNA_def_property_update(prop, 0, "rna_workspace_screen_update");
2573
2574 prop = RNA_def_property(srna, "view_layer", PROP_POINTER, PROP_NONE);
2575 RNA_def_property_struct_type(prop, "ViewLayer");
2577 prop, "rna_Window_view_layer_get", "rna_Window_view_layer_set", nullptr, nullptr);
2579 prop, "Active View Layer", "The active workspace view layer showing in the window");
2581 RNA_def_property_update(prop, NC_SCREEN | ND_LAYER, nullptr);
2582
2583 prop = RNA_def_property(srna, "x", PROP_INT, PROP_NONE);
2584 RNA_def_property_int_sdna(prop, nullptr, "posx");
2586 RNA_def_property_ui_text(prop, "X Position", "Horizontal location of the window");
2587
2588 prop = RNA_def_property(srna, "y", PROP_INT, PROP_NONE);
2589 RNA_def_property_int_sdna(prop, nullptr, "posy");
2591 RNA_def_property_ui_text(prop, "Y Position", "Vertical location of the window");
2592
2593 prop = RNA_def_property(srna, "width", PROP_INT, PROP_UNSIGNED);
2594 RNA_def_property_int_sdna(prop, nullptr, "sizex");
2596 RNA_def_property_ui_text(prop, "Width", "Window width");
2597
2598 prop = RNA_def_property(srna, "height", PROP_INT, PROP_UNSIGNED);
2599 RNA_def_property_int_sdna(prop, nullptr, "sizey");
2601 RNA_def_property_ui_text(prop, "Height", "Window height");
2602
2603 prop = RNA_def_property(srna, "stereo_3d_display", PROP_POINTER, PROP_NONE);
2604 RNA_def_property_pointer_sdna(prop, nullptr, "stereo3d_format");
2606 RNA_def_property_struct_type(prop, "Stereo3dDisplay");
2607 RNA_def_property_ui_text(prop, "Stereo 3D Display", "Settings for stereo 3D display");
2608
2609 prop = RNA_def_property(srna, "modal_operators", PROP_COLLECTION, PROP_NONE);
2610 RNA_def_property_struct_type(prop, "Operator");
2613 "rna_Window_modal_operators_begin",
2614 "rna_iterator_listbase_next",
2615 "rna_iterator_listbase_end",
2616 "rna_Window_modal_operators_get",
2617 nullptr,
2618 nullptr,
2619 nullptr,
2620 nullptr);
2621 RNA_def_property_ui_text(prop, "Modal Operators", "A list of currently running modal operators");
2622
2623 RNA_api_window(srna);
2624}
2625
2626/* curve.splines */
2628{
2629 StructRNA *srna;
2630 PropertyRNA *prop;
2631
2632 RNA_def_property_srna(cprop, "KeyConfigurations");
2633 srna = RNA_def_struct(brna, "KeyConfigurations", nullptr);
2634 RNA_def_struct_sdna(srna, "wmWindowManager");
2635 RNA_def_struct_ui_text(srna, "KeyConfigs", "Collection of KeyConfigs");
2636
2637 prop = RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
2638 RNA_def_property_struct_type(prop, "KeyConfig");
2640 "rna_WindowManager_active_keyconfig_get",
2641 "rna_WindowManager_active_keyconfig_set",
2642 nullptr,
2643 nullptr);
2645 RNA_def_property_ui_text(prop, "Active KeyConfig", "Active key configuration (preset)");
2646
2647 prop = RNA_def_property(srna, "default", PROP_POINTER, PROP_NEVER_NULL);
2648 RNA_def_property_pointer_sdna(prop, nullptr, "defaultconf");
2649 RNA_def_property_struct_type(prop, "KeyConfig");
2650 RNA_def_property_ui_text(prop, "Default Key Configuration", "Default builtin key configuration");
2651
2652 prop = RNA_def_property(srna, "addon", PROP_POINTER, PROP_NEVER_NULL);
2653 RNA_def_property_pointer_sdna(prop, nullptr, "addonconf");
2654 RNA_def_property_struct_type(prop, "KeyConfig");
2656 prop,
2657 "Add-on Key Configuration",
2658 "Key configuration that can be extended by add-ons, and is added to the active "
2659 "configuration when handling events");
2660
2661 prop = RNA_def_property(srna, "user", PROP_POINTER, PROP_NEVER_NULL);
2662 RNA_def_property_pointer_sdna(prop, nullptr, "userconf");
2663 RNA_def_property_struct_type(prop, "KeyConfig");
2665 prop,
2666 "User Key Configuration",
2667 "Final key configuration that combines keymaps from the active and add-on configurations, "
2668 "and can be edited by the user");
2669
2670 RNA_api_keyconfigs(srna);
2671}
2672
2674{
2675 StructRNA *srna;
2676 PropertyRNA *prop;
2677
2678 srna = RNA_def_struct(brna, "WindowManager", "ID");
2680 srna,
2681 "Window Manager",
2682 "Window manager data-block defining open windows and other user interface data");
2684 RNA_def_struct_sdna(srna, "wmWindowManager");
2685
2686 prop = RNA_def_property(srna, "operators", PROP_COLLECTION, PROP_NONE);
2687 RNA_def_property_struct_type(prop, "Operator");
2688 RNA_def_property_ui_text(prop, "Operators", "Operator registry");
2689
2690 prop = RNA_def_property(srna, "windows", PROP_COLLECTION, PROP_NONE);
2691 RNA_def_property_struct_type(prop, "Window");
2692 RNA_def_property_ui_text(prop, "Windows", "Open windows");
2693
2694 prop = RNA_def_property(srna, "keyconfigs", PROP_COLLECTION, PROP_NONE);
2695 RNA_def_property_struct_type(prop, "KeyConfig");
2696 RNA_def_property_ui_text(prop, "Key Configurations", "Registered key configurations");
2697 rna_def_wm_keyconfigs(brna, prop);
2698
2699 prop = RNA_def_property(srna, "xr_session_settings", PROP_POINTER, PROP_NONE);
2700 RNA_def_property_pointer_sdna(prop, nullptr, "xr.session_settings");
2702 RNA_def_property_ui_text(prop, "XR Session Settings", "");
2703
2704 prop = RNA_def_property(srna, "xr_session_state", PROP_POINTER, PROP_NONE);
2705 RNA_def_property_struct_type(prop, "XrSessionState");
2707 prop, "rna_WindowManager_xr_session_state_get", nullptr, nullptr, nullptr);
2710 prop, "XR Session State", "Runtime state information about the VR session");
2711
2712 prop = RNA_def_property(srna, "extensions_updates", PROP_INT, PROP_NONE);
2714 prop, "Extensions Updates", "Number of extensions with available update");
2715 RNA_def_property_update(prop, 0, "rna_WindowManager_extensions_statusbar_update");
2716
2717 prop = RNA_def_property(srna, "extensions_blocked", PROP_INT, PROP_NONE);
2719 prop, "Extensions Blocked", "Number of installed extensions which are blocked");
2720 RNA_def_property_update(prop, 0, "rna_WindowManager_extensions_statusbar_update");
2721
2722 RNA_api_wm(srna);
2723}
2724
2725/* keyconfig.items */
2727{
2728 StructRNA *srna;
2729
2730 RNA_def_property_srna(cprop, "KeyMapItems");
2731 srna = RNA_def_struct(brna, "KeyMapItems", nullptr);
2732 RNA_def_struct_sdna(srna, "wmKeyMap");
2733 RNA_def_struct_ui_text(srna, "KeyMap Items", "Collection of keymap items");
2734
2735 RNA_api_keymapitems(srna);
2736}
2737
2739{
2740 StructRNA *srna;
2741
2742 RNA_def_property_srna(cprop, "KeyMaps");
2743 srna = RNA_def_struct(brna, "KeyMaps", nullptr);
2744 RNA_def_struct_sdna(srna, "wmKeyConfig");
2745 RNA_def_struct_ui_text(srna, "Key Maps", "Collection of keymaps");
2746
2747 RNA_api_keymaps(srna);
2748}
2749
2751{
2752 StructRNA *srna;
2753 PropertyRNA *prop;
2754
2755 srna = RNA_def_struct(brna, "KeyConfigPreferences", nullptr);
2756 RNA_def_struct_ui_text(srna, "Key-Config Preferences", "");
2757 RNA_def_struct_sdna(srna, "wmKeyConfigPref"); /* WARNING: only a bAddon during registration */
2758
2759 RNA_def_struct_refine_func(srna, "rna_wmKeyConfigPref_refine");
2761 srna, "rna_wmKeyConfigPref_register", "rna_wmKeyConfigPref_unregister", nullptr);
2762 RNA_def_struct_idprops_func(srna, "rna_wmKeyConfigPref_idprops");
2764
2765 /* registration */
2767 prop = RNA_def_property(srna, "bl_idname", PROP_STRING, PROP_NONE);
2768 RNA_def_property_string_sdna(prop, nullptr, "idname");
2771}
2772
2774{
2775 StructRNA *srna;
2776 PropertyRNA *prop;
2777
2778 static const EnumPropertyItem map_type_items[] = {
2779 {KMI_TYPE_KEYBOARD, "KEYBOARD", 0, "Keyboard", ""},
2780 {KMI_TYPE_MOUSE, "MOUSE", 0, "Mouse", ""},
2781 {KMI_TYPE_NDOF, "NDOF", 0, "NDOF", ""},
2782 {KMI_TYPE_TEXTINPUT, "TEXTINPUT", 0, "Text Input", ""},
2783 {KMI_TYPE_TIMER, "TIMER", 0, "Timer", ""},
2784 {0, nullptr, 0, nullptr, nullptr},
2785 };
2786
2787 /* KeyConfig */
2788 srna = RNA_def_struct(brna, "KeyConfig", nullptr);
2789 RNA_def_struct_sdna(srna, "wmKeyConfig");
2790 RNA_def_struct_ui_text(srna, "Key Configuration", "Input configuration, including keymaps");
2791
2792 prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
2793 RNA_def_property_string_sdna(prop, nullptr, "idname");
2794 RNA_def_property_ui_text(prop, "Name", "Name of the key configuration");
2795 RNA_def_struct_name_property(srna, prop);
2796
2797 prop = RNA_def_property(srna, "keymaps", PROP_COLLECTION, PROP_NONE);
2798 RNA_def_property_struct_type(prop, "KeyMap");
2799 RNA_def_property_ui_text(prop, "Key Maps", "Key maps configured as part of this configuration");
2800 rna_def_wm_keymaps(brna, prop);
2801
2802 prop = RNA_def_property(srna, "is_user_defined", PROP_BOOLEAN, PROP_NONE);
2803 RNA_def_property_boolean_sdna(prop, nullptr, "flag", KEYCONF_USER);
2806 prop, "User Defined", "Indicates that a keyconfig was defined by the user");
2807
2808 /* Collection active property */
2809 prop = RNA_def_property(srna, "preferences", PROP_POINTER, PROP_NONE);
2810 RNA_def_property_struct_type(prop, "KeyConfigPreferences");
2812 prop, "rna_wmKeyConfig_preferences_get", nullptr, nullptr, nullptr);
2813
2814 RNA_api_keyconfig(srna);
2815
2816 /* KeyMap */
2817 srna = RNA_def_struct(brna, "KeyMap", nullptr);
2818 RNA_def_struct_sdna(srna, "wmKeyMap");
2819 RNA_def_struct_ui_text(srna, "Key Map", "Input configuration, including keymaps");
2820
2821 prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
2822 RNA_def_property_string_sdna(prop, nullptr, "idname");
2824 RNA_def_property_ui_text(prop, "Name", "Name of the key map");
2825 RNA_def_struct_name_property(srna, prop);
2826
2827 prop = RNA_def_property(srna, "bl_owner_id", PROP_STRING, PROP_NONE);
2828 RNA_def_property_string_sdna(prop, nullptr, "owner_id");
2829 RNA_def_property_ui_text(prop, "Owner", "Internal owner");
2830
2831 prop = RNA_def_property(srna, "space_type", PROP_ENUM, PROP_NONE);
2832 RNA_def_property_enum_sdna(prop, nullptr, "spaceid");
2835 RNA_def_property_ui_text(prop, "Space Type", "Optional space type keymap is associated with");
2836
2837 prop = RNA_def_property(srna, "region_type", PROP_ENUM, PROP_NONE);
2838 RNA_def_property_enum_sdna(prop, nullptr, "regionid");
2841 RNA_def_property_ui_text(prop, "Region Type", "Optional region type keymap is associated with");
2842
2843 prop = RNA_def_property(srna, "keymap_items", PROP_COLLECTION, PROP_NONE);
2844 RNA_def_property_collection_sdna(prop, nullptr, "items", nullptr);
2845 RNA_def_property_struct_type(prop, "KeyMapItem");
2847 prop, "Items", "Items in the keymap, linking an operator to an input event");
2848 rna_def_keymap_items(brna, prop);
2849
2850 prop = RNA_def_property(srna, "is_user_modified", PROP_BOOLEAN, PROP_NONE);
2852 RNA_def_property_ui_text(prop, "User Defined", "Keymap is defined by the user");
2853
2854 prop = RNA_def_property(srna, "is_modal", PROP_BOOLEAN, PROP_NONE);
2855 RNA_def_property_boolean_sdna(prop, nullptr, "flag", KEYMAP_MODAL);
2858 prop,
2859 "Modal Keymap",
2860 "Indicates that a keymap is used for translate modal events for an operator");
2861
2862 prop = RNA_def_property(srna, "show_expanded_items", PROP_BOOLEAN, PROP_NONE);
2863 RNA_def_property_boolean_sdna(prop, nullptr, "flag", KEYMAP_EXPANDED);
2864 RNA_def_property_ui_text(prop, "Items Expanded", "Expanded in the user interface");
2865 RNA_def_property_ui_icon(prop, ICON_RIGHTARROW, 1);
2866
2867 prop = RNA_def_property(srna, "show_expanded_children", PROP_BOOLEAN, PROP_NONE);
2869 RNA_def_property_ui_text(prop, "Children Expanded", "Children expanded in the user interface");
2870 RNA_def_property_ui_icon(prop, ICON_RIGHTARROW, 1);
2871
2872 prop = RNA_def_property(srna, "modal_event_values", PROP_COLLECTION, PROP_NONE);
2874 RNA_def_property_struct_type(prop, "EnumPropertyItem");
2876 "rna_KeyMap_modal_event_values_items_begin",
2877 "rna_iterator_array_next",
2878 "rna_iterator_array_end",
2879 "rna_iterator_array_get",
2880 nullptr,
2881 nullptr,
2882 nullptr,
2883 nullptr);
2885 "Modal Events",
2886 "Give access to the possible event values of this modal keymap's items "
2887 "(#KeyMapItem.propvalue), for API introspection");
2888
2889 RNA_api_keymap(srna);
2890
2891 /* KeyMapItem */
2892 srna = RNA_def_struct(brna, "KeyMapItem", nullptr);
2893 RNA_def_struct_sdna(srna, "wmKeyMapItem");
2894 RNA_def_struct_ui_text(srna, "Key Map Item", "Item in a Key Map");
2895
2896 prop = RNA_def_property(srna, "idname", PROP_STRING, PROP_NONE);
2897 RNA_def_property_string_sdna(prop, nullptr, "idname");
2898 RNA_def_property_ui_text(prop, "Identifier", "Identifier of operator to call on input event");
2900 "rna_wmKeyMapItem_idname_get",
2901 "rna_wmKeyMapItem_idname_length",
2902 "rna_wmKeyMapItem_idname_set");
2904 "WM_operatortype_idname_visit_for_search",
2906 RNA_def_struct_name_property(srna, prop);
2907 RNA_def_property_update(prop, 0, "rna_KeyMapItem_update");
2908
2909 /* this is in fact the operator name, but if the operator can't be found we
2910 * fallback on the operator ID */
2911 prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
2913 RNA_def_property_ui_text(prop, "Name", "Name of operator (translated) to call on input event");
2915 prop, "rna_wmKeyMapItem_name_get", "rna_wmKeyMapItem_name_length", nullptr);
2916
2917 prop = RNA_def_property(srna, "properties", PROP_POINTER, PROP_NONE);
2918 RNA_def_property_struct_type(prop, "OperatorProperties");
2919 RNA_def_property_pointer_funcs(prop, "rna_KeyMapItem_properties_get", nullptr, nullptr, nullptr);
2920 RNA_def_property_ui_text(prop, "Properties", "Properties to set when the operator is called");
2921 RNA_def_property_update(prop, 0, "rna_KeyMapItem_update");
2922
2923 prop = RNA_def_property(srna, "map_type", PROP_ENUM, PROP_NONE);
2924 RNA_def_property_enum_sdna(prop, nullptr, "maptype");
2925 RNA_def_property_enum_items(prop, map_type_items);
2927 prop, "rna_wmKeyMapItem_map_type_get", "rna_wmKeyMapItem_map_type_set", nullptr);
2928 RNA_def_property_ui_text(prop, "Map Type", "Type of event mapping");
2929 RNA_def_property_update(prop, 0, "rna_KeyMapItem_update");
2930
2931 prop = RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
2932 RNA_def_property_enum_sdna(prop, nullptr, "type");
2935 RNA_def_property_enum_funcs(prop, nullptr, nullptr, "rna_KeyMapItem_type_itemf");
2936 RNA_def_property_ui_text(prop, "Type", "Type of event");
2937 RNA_def_property_update(prop, 0, "rna_KeyMapItem_update");
2938
2939 prop = RNA_def_property(srna, "value", PROP_ENUM, PROP_NONE);
2940 RNA_def_property_enum_sdna(prop, nullptr, "val");
2942 RNA_def_property_ui_text(prop, "Value", "");
2943 RNA_def_property_update(prop, 0, "rna_KeyMapItem_update");
2944
2945 prop = RNA_def_property(srna, "direction", PROP_ENUM, PROP_NONE);
2946 RNA_def_property_enum_sdna(prop, nullptr, "direction");
2948 RNA_def_property_ui_text(prop, "Direction", "The direction (only applies to drag events)");
2949 RNA_def_property_update(prop, 0, "rna_KeyMapItem_update");
2950
2951 prop = RNA_def_property(srna, "id", PROP_INT, PROP_NONE);
2952 RNA_def_property_int_sdna(prop, nullptr, "id");
2954 RNA_def_property_ui_text(prop, "ID", "ID of the item");
2955 RNA_def_property_update(prop, 0, "rna_KeyMapItem_update");
2956
2957 prop = RNA_def_property(srna, "any", PROP_BOOLEAN, PROP_NONE);
2958 RNA_def_property_boolean_funcs(prop, "rna_KeyMapItem_any_get", "rna_KeyMapItem_any_set");
2959 RNA_def_property_ui_text(prop, "Any", "Any modifier keys pressed");
2960 RNA_def_property_update(prop, 0, "rna_KeyMapItem_update");
2961
2962 prop = RNA_def_property(srna, "shift", PROP_INT, PROP_NONE);
2963 RNA_def_property_int_sdna(prop, nullptr, "shift");
2965 RNA_def_property_ui_text(prop, "Shift", "Shift key pressed, -1 for any state");
2967 RNA_def_property_update(prop, 0, "rna_KeyMapItem_update");
2968
2969 prop = RNA_def_property(srna, "ctrl", PROP_INT, PROP_NONE);
2970 RNA_def_property_int_sdna(prop, nullptr, "ctrl");
2972 RNA_def_property_ui_text(prop, "Ctrl", "Control key pressed, -1 for any state");
2973 RNA_def_property_update(prop, 0, "rna_KeyMapItem_update");
2974
2975 prop = RNA_def_property(srna, "alt", PROP_INT, PROP_NONE);
2976 RNA_def_property_int_sdna(prop, nullptr, "alt");
2978 RNA_def_property_ui_text(prop, "Alt", "Alt key pressed, -1 for any state");
2979 RNA_def_property_update(prop, 0, "rna_KeyMapItem_update");
2980
2981 prop = RNA_def_property(srna, "oskey", PROP_INT, PROP_NONE);
2982 RNA_def_property_int_sdna(prop, nullptr, "oskey");
2984 RNA_def_property_ui_text(prop, "OS Key", "Operating system key pressed, -1 for any state");
2985 RNA_def_property_update(prop, 0, "rna_KeyMapItem_update");
2986
2987 /* XXX(@ideasman42): the `*_ui` suffix is only for the UI, may be removed,
2988 * since this is only exposed so the UI can show these settings as toggle-buttons. */
2989 prop = RNA_def_property(srna, "shift_ui", PROP_BOOLEAN, PROP_NONE);
2990 RNA_def_property_boolean_sdna(prop, nullptr, "shift", 0);
2991 RNA_def_property_boolean_funcs(prop, "rna_KeyMapItem_shift_get", nullptr);
2992 // RNA_def_property_enum_items(prop, keymap_modifiers_items);
2993 RNA_def_property_ui_text(prop, "Shift", "Shift key pressed");
2995 RNA_def_property_update(prop, 0, "rna_KeyMapItem_update");
2996
2997 prop = RNA_def_property(srna, "ctrl_ui", PROP_BOOLEAN, PROP_NONE);
2998 RNA_def_property_boolean_sdna(prop, nullptr, "ctrl", 0);
2999 RNA_def_property_boolean_funcs(prop, "rna_KeyMapItem_ctrl_get", nullptr);
3000 // RNA_def_property_enum_items(prop, keymap_modifiers_items);
3001 RNA_def_property_ui_text(prop, "Ctrl", "Control key pressed");
3002 RNA_def_property_update(prop, 0, "rna_KeyMapItem_update");
3003
3004 prop = RNA_def_property(srna, "alt_ui", PROP_BOOLEAN, PROP_NONE);
3005 RNA_def_property_boolean_sdna(prop, nullptr, "alt", 0);
3006 RNA_def_property_boolean_funcs(prop, "rna_KeyMapItem_alt_get", nullptr);
3007 // RNA_def_property_enum_items(prop, keymap_modifiers_items);
3008 RNA_def_property_ui_text(prop, "Alt", "Alt key pressed");
3009 RNA_def_property_update(prop, 0, "rna_KeyMapItem_update");
3010
3011 prop = RNA_def_property(srna, "oskey_ui", PROP_BOOLEAN, PROP_NONE);
3012 RNA_def_property_boolean_sdna(prop, nullptr, "oskey", 0);
3013 RNA_def_property_boolean_funcs(prop, "rna_KeyMapItem_oskey_get", nullptr);
3014 // RNA_def_property_enum_items(prop, keymap_modifiers_items);
3015 RNA_def_property_ui_text(prop, "OS Key", "Operating system key pressed");
3016 RNA_def_property_update(prop, 0, "rna_KeyMapItem_update");
3017 /* End `_ui` modifiers. */
3018
3019 prop = RNA_def_property(srna, "key_modifier", PROP_ENUM, PROP_NONE);
3020 RNA_def_property_enum_sdna(prop, nullptr, "keymodifier");
3023 RNA_def_property_enum_funcs(prop, nullptr, "rna_wmKeyMapItem_keymodifier_set", nullptr);
3024 RNA_def_property_ui_text(prop, "Key Modifier", "Regular key pressed as a modifier");
3025 RNA_def_property_update(prop, 0, "rna_KeyMapItem_update");
3026
3027 prop = RNA_def_property(srna, "repeat", PROP_BOOLEAN, PROP_NONE);
3030 RNA_def_property_ui_text(prop, "Repeat", "Active on key-repeat events (when a key is held)");
3031 RNA_def_property_update(prop, 0, "rna_KeyMapItem_update");
3032
3033 prop = RNA_def_property(srna, "show_expanded", PROP_BOOLEAN, PROP_NONE);
3035 RNA_def_property_boolean_sdna(prop, nullptr, "flag", KMI_EXPANDED);
3037 prop, "Expanded", "Show key map event and property details in the user interface");
3038 RNA_def_property_ui_icon(prop, ICON_RIGHTARROW, 1);
3039 /* Display only, no need to call `rna_KeyMapItem_update`. */
3040
3041 prop = RNA_def_property(srna, "propvalue", PROP_ENUM, PROP_NONE);
3042 RNA_def_property_enum_sdna(prop, nullptr, "propvalue");
3044 RNA_def_property_enum_funcs(prop, nullptr, nullptr, "rna_KeyMapItem_propvalue_itemf");
3046 prop, "Property Value", "The value this event translates to in a modal keymap");
3048 RNA_def_property_update(prop, 0, "rna_KeyMapItem_update");
3049
3050 prop = RNA_def_property(srna, "active", PROP_BOOLEAN, PROP_NONE);
3052 RNA_def_property_ui_text(prop, "Active", "Activate or deactivate item");
3053 RNA_def_property_ui_icon(prop, ICON_CHECKBOX_DEHLT, 1);
3054 RNA_def_property_update(prop, 0, "rna_KeyMapItem_update");
3055
3056 prop = RNA_def_property(srna, "is_user_modified", PROP_BOOLEAN, PROP_NONE);
3057 RNA_def_property_boolean_sdna(prop, nullptr, "flag", KMI_USER_MODIFIED);
3059 RNA_def_property_ui_text(prop, "User Modified", "Is this keymap item modified by the user");
3060
3061 prop = RNA_def_property(srna, "is_user_defined", PROP_BOOLEAN, PROP_NONE);
3064 prop,
3065 "User Defined",
3066 "Is this keymap item user defined (doesn't just replace a builtin item)");
3067 RNA_def_property_boolean_funcs(prop, "rna_KeyMapItem_userdefined_get", nullptr);
3068
3069 RNA_api_keymapitem(srna);
3070}
3071
3073{
3074 rna_def_operator(brna);
3080 rna_def_event(brna);
3081 rna_def_timer(brna);
3082 rna_def_popupmenu(brna);
3083 rna_def_popovermenu(brna);
3084 rna_def_piemenu(brna);
3085 rna_def_window(brna);
3088 rna_def_keyconfig(brna);
3089}
3090
3091#endif /* RNA_RUNTIME */
Main * CTX_data_main(const bContext *C)
wmWindowManager * CTX_wm_manager(const bContext *C)
@ G_DEBUG
void BKE_keyconfig_pref_type_add(struct wmKeyConfigPrefType_Runtime *kpt_rt)
Definition keyconfig.cc:85
void BKE_keyconfig_pref_type_remove(const struct wmKeyConfigPrefType_Runtime *kpt_rt)
struct wmKeyConfigPref * BKE_keyconfig_pref_ensure(struct UserDef *userdef, const char *kc_idname)
Definition keyconfig.cc:35
struct wmKeyConfigPrefType_Runtime wmKeyConfigPrefType_Runtime
struct wmKeyConfigPrefType_Runtime * BKE_keyconfig_pref_type_find(const char *idname, bool quiet)
Definition keyconfig.cc:61
void BKE_reportf(ReportList *reports, eReportType type, const char *format,...) ATTR_PRINTF_FORMAT(3
#define BKE_ST_MAXNAME
Definition BKE_screen.hh:66
WorkSpaceLayout * BKE_workspace_layout_find(const WorkSpace *workspace, const bScreen *screen) ATTR_NONNULL() ATTR_WARN_UNUSED_RESULT
Definition workspace.cc:427
bScreen * BKE_workspace_active_screen_get(const WorkSpaceInstanceHook *hook) GETTER_ATTRS
Definition workspace.cc:613
WorkSpace * BKE_workspace_active_get(WorkSpaceInstanceHook *hook) GETTER_ATTRS
Definition workspace.cc:562
#define BLI_assert_unreachable()
Definition BLI_assert.h:97
#define BLI_assert(a)
Definition BLI_assert.h:50
#define BLI_assert_msg(a, msg)
Definition BLI_assert.h:57
void BLI_kdtree_nd_ free(KDTree *tree)
void * BLI_findstring(const struct ListBase *listbase, const char *id, int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
#define LISTBASE_FOREACH(type, var, list)
#define STRNCPY(dst, src)
Definition BLI_string.h:593
char * BLI_strncpy_utf8(char *__restrict dst, const char *__restrict src, size_t dst_maxncpy) ATTR_NONNULL(1
unsigned int unsigned int BLI_str_utf8_as_unicode_step_or_error(const char *__restrict p, size_t p_len, size_t *__restrict index) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1
#define BLI_UTF8_ERR
int BLI_str_utf8_size_or_error(const char *p) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
#define BLI_STR_UTF8_LEFTWARDS_ARROW
#define BLI_STR_UTF8_UPWARDS_ARROW
#define BLI_STR_UTF8_DOWNWARDS_ARROW
#define BLI_STR_UTF8_BLACK_RIGHT_POINTING_DOUBLE_TRIANGLE_WITH_VERTICAL_BAR
#define BLI_STR_UTF8_BLACK_SQUARE_FOR_STOP
#define BLI_STR_UTF8_RIGHTWARDS_ARROW
#define BLI_STR_UTF8_BLACK_LEFT_POINTING_DOUBLE_TRIANGLE_WITH_VERTICAL_BAR
#define BLI_STR_UTF8_BLACK_RIGHT_POINTING_TRIANGLE_WITH_DOUBLE_VERTICAL_BAR
void void char * BLI_string_join_array_by_sep_char_with_tableN(char sep, char *table[], const char *strings[], uint strings_num) ATTR_NONNULL(2
#define ARRAY_SIZE(arr)
#define UNUSED_VARS(...)
#define UNLIKELY(x)
#define STREQ(a, b)
#define BLT_I18NCONTEXT_ID_WINDOWMANAGER
#define CTX_N_(context, msgid)
#define BLT_I18NCONTEXT_ID_SCREEN
#define BLT_I18NCONTEXT_OPERATOR_DEFAULT
#define BLT_I18NCONTEXT_UI_EVENTS
#define BPy_BEGIN_ALLOW_THREADS
Definition BPY_extern.hh:50
#define BPy_END_ALLOW_THREADS
Definition BPY_extern.hh:54
@ ID_WM
Object is a sort of wrapper for general info.
@ S3D_INTERLACE_SWAP
@ S3D_SIDEBYSIDE_CROSSEYED
@ STATUSBAR_SHOW_EXTENSIONS_UPDATES
#define OP_MAX_TYPENAME
@ KEYMAP_USER_MODIFIED
@ KEYMAP_CHILDREN_EXPANDED
@ OP_IS_MODAL_CURSOR_REGION
@ OP_IS_MODAL_GRAB_CURSOR
@ OPERATOR_RUNNING_MODAL
@ OPERATOR_PASS_THROUGH
@ RPT_ERROR_OUT_OF_MEMORY
@ RPT_ERROR_INVALID_INPUT
@ RPT_ERROR_INVALID_CONTEXT
Read Guarded memory(de)allocation.
#define RNA_DYN_DESCR_MAX
@ STRUCT_ID_REFCOUNT
Definition RNA_types.hh:720
@ STRUCT_NO_CONTEXT_WITHOUT_OWNER_ID
Definition RNA_types.hh:743
@ STRUCT_NO_DATABLOCK_IDPROPERTIES
Definition RNA_types.hh:731
@ STRUCT_NO_IDPROPERTIES
Definition RNA_types.hh:729
@ STRUCT_PUBLIC_NAMESPACE_INHERIT
Definition RNA_types.hh:737
@ PROP_STRING_SEARCH_SUGGESTION
Definition RNA_types.hh:584
@ PROP_STRING_SEARCH_SORT
Definition RNA_types.hh:577
int(*)(PointerRNA *ptr, void *data, bool *have_function) StructValidateFunc
Definition RNA_types.hh:746
@ PROP_FLOAT
Definition RNA_types.hh:67
@ PROP_BOOLEAN
Definition RNA_types.hh:65
@ PROP_ENUM
Definition RNA_types.hh:69
@ PROP_INT
Definition RNA_types.hh:66
@ PROP_STRING
Definition RNA_types.hh:68
@ PROP_POINTER
Definition RNA_types.hh:70
@ PROP_COLLECTION
Definition RNA_types.hh:71
#define RNA_ENUM_ITEM_SEPR
Definition RNA_types.hh:528
void(*)(void *data) StructFreeFunc
Definition RNA_types.hh:751
int(*)(bContext *C, PointerRNA *ptr, FunctionRNA *func, ParameterList *list) StructCallbackFunc
Definition RNA_types.hh:747
@ PROP_CONTEXT_UPDATE
Definition RNA_types.hh:296
@ PROP_EDITABLE
Definition RNA_types.hh:207
@ PROP_ENUM_FLAG
Definition RNA_types.hh:293
@ PROP_REGISTER_OPTIONAL
Definition RNA_types.hh:301
@ PROP_NEVER_NULL
Definition RNA_types.hh:266
@ PROP_NO_DEG_UPDATE
Definition RNA_types.hh:328
@ PROP_REGISTER
Definition RNA_types.hh:300
@ PROP_IDPROPERTY
Definition RNA_types.hh:315
@ PROP_XYZ
Definition RNA_types.hh:172
@ PROP_FILENAME
Definition RNA_types.hh:141
@ PROP_NONE
Definition RNA_types.hh:136
@ PROP_FACTOR
Definition RNA_types.hh:154
@ PROP_XYZ_LENGTH
Definition RNA_types.hh:173
@ PROP_UNSIGNED
Definition RNA_types.hh:152
constexpr PointerRNA PointerRNA_NULL
Definition RNA_types.hh:45
uiLayout * UI_pie_menu_layout(uiPieMenu *pie)
uiLayout * UI_popover_layout(uiPopover *pup)
uiLayout * UI_popup_menu_layout(uiPopupMenu *pup)
@ WM_JOB_TYPE_COMPOSITE
Definition WM_api.hh:1577
@ WM_JOB_TYPE_OBJECT_BAKE
Definition WM_api.hh:1585
@ WM_JOB_TYPE_RENDER_PREVIEW
Definition WM_api.hh:1579
@ WM_JOB_TYPE_RENDER
Definition WM_api.hh:1578
@ WM_JOB_TYPE_SHADER_COMPILATION
Definition WM_api.hh:1600
@ OPTYPE_PRESET
Definition WM_types.hh:175
@ OPTYPE_INTERNAL
Definition WM_types.hh:182
@ OPTYPE_MACRO
Definition WM_types.hh:165
@ OPTYPE_BLOCKING
Definition WM_types.hh:164
@ OPTYPE_MODAL_PRIORITY
Definition WM_types.hh:201
@ OPTYPE_UNDO_GROUPED
Definition WM_types.hh:187
@ OPTYPE_DEPENDS_ON_CURSOR
Definition WM_types.hh:198
@ OPTYPE_UNDO
Definition WM_types.hh:162
@ OPTYPE_GRAB_CURSOR_XY
Definition WM_types.hh:168
@ OPTYPE_REGISTER
Definition WM_types.hh:160
@ OPTYPE_GRAB_CURSOR_X
Definition WM_types.hh:170
@ OPTYPE_GRAB_CURSOR_Y
Definition WM_types.hh:172
#define NC_WINDOW
Definition WM_types.hh:342
#define ND_SPACE_INFO
Definition WM_types.hh:487
@ WM_EVENT_IS_CONSECUTIVE
Definition WM_types.hh:658
@ WM_EVENT_IS_REPEAT
Definition WM_types.hh:650
@ KM_NOTHING
Definition WM_types.hh:283
@ KM_ANY
Definition WM_types.hh:282
@ KM_PRESS
Definition WM_types.hh:284
@ KM_CLICK_DRAG
Definition WM_types.hh:292
@ KM_DBL_CLICK
Definition WM_types.hh:287
@ KM_RELEASE
Definition WM_types.hh:285
@ KM_CLICK
Definition WM_types.hh:286
#define NC_SCREEN
Definition WM_types.hh:344
#define NC_SCENE
Definition WM_types.hh:345
#define NA_EDITED
Definition WM_types.hh:550
#define OP_PROP_TAG_ADVANCED
Definition WM_types.hh:243
@ KM_DIRECTION_NW
Definition WM_types.hh:308
@ KM_DIRECTION_N
Definition WM_types.hh:301
@ KM_DIRECTION_SW
Definition WM_types.hh:306
@ KM_DIRECTION_NE
Definition WM_types.hh:302
@ KM_DIRECTION_E
Definition WM_types.hh:303
@ KM_DIRECTION_W
Definition WM_types.hh:307
@ KM_DIRECTION_SE
Definition WM_types.hh:304
@ KM_DIRECTION_S
Definition WM_types.hh:305
#define ND_LAYER
Definition WM_types.hh:417
#define ND_WORKSPACE_SET
Definition WM_types.hh:395
@ KM_CTRL
Definition WM_types.hh:256
@ KM_ALT
Definition WM_types.hh:257
@ KM_OSKEY
Definition WM_types.hh:259
@ KM_SHIFT
Definition WM_types.hh:255
#define ND_LAYOUTBROWSE
Definition WM_types.hh:389
@ KM_TEXTINPUT
Definition WM_types.hh:277
#define ND_SCENEBROWSE
Definition WM_types.hh:399
#define NC_SPACE
Definition WM_types.hh:359
#define KM_MOD_HELD
Definition WM_types.hh:270
void BPY_RNA_operator_macro_wrapper(wmOperatorType *ot, void *userdata)
void BPY_RNA_operator_wrapper(wmOperatorType *ot, void *userdata)
unsigned int U
Definition btGjkEpa3.h:78
#define printf
#define offsetof(t, d)
int len
#define str(s)
#define GS(x)
Definition iris.cc:202
void *(* MEM_mallocN)(size_t len, const char *str)
Definition mallocn.cc:44
void MEM_freeN(void *vmemh)
Definition mallocn.cc:105
static ulong state[N]
#define G(x, y, z)
return ret
bool RNA_struct_available_or_report(ReportList *reports, const char *identifier)
void RNA_struct_blender_type_set(StructRNA *srna, void *blender_type)
uint RNA_enum_items_count(const EnumPropertyItem *item)
void * RNA_struct_blender_type_get(StructRNA *srna)
void RNA_parameter_list_free(ParameterList *parms)
void rna_iterator_listbase_begin(CollectionPropertyIterator *iter, ListBase *lb, IteratorSkipFunc skip)
void rna_iterator_array_begin(CollectionPropertyIterator *iter, void *ptr, int itemsize, int length, bool free_ptr, IteratorSkipFunc skip)
void RNA_parameter_set_lookup(ParameterList *parms, const char *identifier, const void *value)
PointerRNA rna_pointer_inherit_refine(const PointerRNA *ptr, StructRNA *type, void *data)
ParameterList * RNA_parameter_list_create(ParameterList *parms, PointerRNA *, FunctionRNA *func)
PointerRNA RNA_pointer_create(ID *id, StructRNA *type, void *data)
void * rna_iterator_listbase_get(CollectionPropertyIterator *iter)
void RNA_parameter_get_lookup(ParameterList *parms, const char *identifier, void **r_value)
PointerRNA RNA_id_pointer_create(ID *id)
void RNA_def_struct_name_property(StructRNA *srna, PropertyRNA *prop)
void RNA_def_struct_refine_func(StructRNA *srna, const char *refine)
void RNA_def_property_pointer_sdna(PropertyRNA *prop, const char *structname, const char *propname)
void RNA_def_struct_flag(StructRNA *srna, int flag)
void RNA_def_property_boolean_sdna(PropertyRNA *prop, const char *structname, const char *propname, int64_t bit)
void RNA_def_property_string_funcs(PropertyRNA *prop, const char *get, const char *length, const char *set)
void RNA_def_property_float_default(PropertyRNA *prop, float value)
void RNA_def_property_float_funcs(PropertyRNA *prop, const char *get, const char *set, const char *range)
void RNA_define_verify_sdna(bool verify)
void RNA_def_property_string_search_func(PropertyRNA *prop, const char *search, const eStringPropertySearchFlag search_flag)
void RNA_def_property_ui_text(PropertyRNA *prop, const char *name, const char *description)
void RNA_def_property_string_sdna(PropertyRNA *prop, const char *structname, const char *propname)
void RNA_def_property_ui_icon(PropertyRNA *prop, int icon, int consecutive)
void RNA_def_struct_property_tags(StructRNA *srna, const EnumPropertyItem *prop_tag_defines)
void RNA_def_property_srna(PropertyRNA *prop, const char *type)
void RNA_def_property_collection_funcs(PropertyRNA *prop, const char *begin, const char *next, const char *end, const char *get, const char *length, const char *lookupint, const char *lookupstring, const char *assignint)
void RNA_def_struct_ui_text(StructRNA *srna, const char *name, const char *description)
void RNA_def_property_boolean_funcs(PropertyRNA *prop, const char *get, const char *set)
void RNA_def_struct_register_funcs(StructRNA *srna, const char *reg, const char *unreg, const char *instance)
void RNA_def_property_enum_items(PropertyRNA *prop, const EnumPropertyItem *item)
void RNA_def_struct_sdna(StructRNA *srna, const char *structname)
void RNA_def_struct_clear_flag(StructRNA *srna, int flag)
void RNA_def_property_array(PropertyRNA *prop, int length)
void RNA_def_property_range(PropertyRNA *prop, double min, double max)
void RNA_def_property_string_maxlength(PropertyRNA *prop, int maxlength)
void RNA_def_property_struct_type(PropertyRNA *prop, const char *type)
void RNA_def_property_collection_sdna(PropertyRNA *prop, const char *structname, const char *propname, const char *lengthpropname)
void RNA_def_property_update(PropertyRNA *prop, int noteflag, const char *func)
PropertyRNA * RNA_def_property(StructOrFunctionRNA *cont_, const char *identifier, int type, int subtype)
void RNA_def_property_enum_funcs(PropertyRNA *prop, const char *get, const char *set, const char *item)
StructRNA * RNA_def_struct_ptr(BlenderRNA *brna, const char *identifier, StructRNA *srnafrom)
StructRNA * RNA_def_struct(BlenderRNA *brna, const char *identifier, const char *from)
void RNA_def_property_clear_flag(PropertyRNA *prop, PropertyFlag flag)
void RNA_struct_free_extension(StructRNA *srna, ExtensionRNA *rna_ext)
void RNA_def_property_pointer_funcs(PropertyRNA *prop, const char *get, const char *set, const char *type_fn, const char *poll)
void RNA_def_property_enum_sdna(PropertyRNA *prop, const char *structname, const char *propname)
void RNA_def_property_string_default(PropertyRNA *prop, const char *value)
void RNA_struct_free(BlenderRNA *brna, StructRNA *srna)
void RNA_def_struct_idprops_func(StructRNA *srna, const char *idproperties)
void RNA_def_property_translation_context(PropertyRNA *prop, const char *context)
void RNA_def_property_flag(PropertyRNA *prop, PropertyFlag flag)
void RNA_def_property_float_sdna(PropertyRNA *prop, const char *structname, const char *propname)
void RNA_def_property_int_sdna(PropertyRNA *prop, const char *structname, const char *propname)
void RNA_def_struct_translation_context(StructRNA *srna, const char *context)
void RNA_def_property_boolean_negative_sdna(PropertyRNA *prop, const char *structname, const char *propname, int64_t booleanbit)
void RNA_api_keymapitem(StructRNA *srna)
void RNA_api_window(StructRNA *srna)
void RNA_api_wm(StructRNA *srna)
BlenderRNA BLENDER_RNA
void RNA_api_keyconfigs(StructRNA *srna)
void RNA_api_macro(StructRNA *srna)
void RNA_api_keymap(StructRNA *srna)
void RNA_api_keymapitems(StructRNA *srna)
void RNA_api_keymaps(StructRNA *srna)
void RNA_api_operator(StructRNA *srna)
void RNA_api_keyconfig(StructRNA *srna)
const EnumPropertyItem rna_enum_stereo3d_display_items[]
Definition rna_scene.cc:502
const EnumPropertyItem rna_enum_stereo3d_anaglyph_type_items[]
Definition rna_scene.cc:534
const EnumPropertyItem rna_enum_stereo3d_interlace_type_items[]
Definition rna_scene.cc:541
const EnumPropertyItem rna_enum_region_type_items[]
Definition rna_screen.cc:24
const EnumPropertyItem rna_enum_space_type_items[]
Definition rna_space.cc:97
const EnumPropertyItem rna_enum_wm_job_type_items[]
Definition rna_wm.cc:197
static void rna_def_wm_keymaps(BlenderRNA *brna, PropertyRNA *cprop)
Definition rna_wm.cc:2738
void RNA_def_wm(BlenderRNA *brna)
Definition rna_wm.cc:3072
const EnumPropertyItem rna_enum_event_direction_items[]
Definition rna_wm.cc:477
static void rna_def_operator_type_macro(BlenderRNA *brna)
Definition rna_wm.cc:2198
static void rna_def_timer(BlenderRNA *brna)
Definition rna_wm.cc:2434
static void rna_def_keyconfig_prefs(BlenderRNA *brna)
Definition rna_wm.cc:2750
static void rna_def_operator_common(StructRNA *srna)
Definition rna_wm.cc:2042
static void rna_def_popup_menu_wrapper(BlenderRNA *brna, const char *rna_type, const char *c_type, const char *layout_get_fn)
Definition rna_wm.cc:2464
static void rna_def_event(BlenderRNA *brna)
Definition rna_wm.cc:2256
const EnumPropertyItem rna_enum_event_value_items[]
Definition rna_wm.cc:465
static void rna_def_window_stereo3d(BlenderRNA *brna)
Definition rna_wm.cc:2502
static void rna_def_macro_operator(BlenderRNA *brna)
Definition rna_wm.cc:2175
const EnumPropertyItem rna_enum_event_type_mask_items[]
Definition rna_wm.cc:496
const EnumPropertyItem rna_enum_operator_property_tag_items[]
Definition rna_wm.cc:584
static void rna_def_popovermenu(BlenderRNA *brna)
Definition rna_wm.cc:2492
static void rna_def_operator_filelist_element(BlenderRNA *brna)
Definition rna_wm.cc:2243
static void rna_def_windowmanager(BlenderRNA *brna)
Definition rna_wm.cc:2673
static void rna_def_wm_keyconfigs(BlenderRNA *brna, PropertyRNA *cprop)
Definition rna_wm.cc:2627
static void rna_def_operator(BlenderRNA *brna)
Definition rna_wm.cc:2131
const EnumPropertyItem rna_enum_event_type_items[]
Definition rna_wm.cc:206
static void rna_def_operator_options_runtime(BlenderRNA *brna)
Definition rna_wm.cc:2006
static void rna_def_piemenu(BlenderRNA *brna)
Definition rna_wm.cc:2497
static void rna_def_window(BlenderRNA *brna)
Definition rna_wm.cc:2532
const EnumPropertyItem rna_enum_wm_report_items[]
Definition rna_wm.cc:594
const EnumPropertyItem rna_enum_keymap_propvalue_items[]
Definition rna_wm.cc:490
const EnumPropertyItem rna_enum_operator_type_flag_items[]
Definition rna_wm.cc:517
const EnumPropertyItem rna_enum_operator_return_items[]
Definition rna_wm.cc:562
static void rna_def_keyconfig(BlenderRNA *brna)
Definition rna_wm.cc:2773
static void rna_def_operator_utils(BlenderRNA *brna)
Definition rna_wm.cc:2224
static void rna_def_popupmenu(BlenderRNA *brna)
Definition rna_wm.cc:2487
static void rna_def_keymap_items(BlenderRNA *brna, PropertyRNA *cprop)
Definition rna_wm.cc:2726
const EnumPropertyItem rna_enum_window_cursor_items[]
Definition rna_wm_api.cc:33
StructRNA * srna
Definition RNA_types.hh:780
StructCallbackFunc call
Definition RNA_types.hh:781
StructFreeFunc free
Definition RNA_types.hh:782
Definition DNA_ID.h:413
char name[66]
Definition DNA_ID.h:425
void * first
ListBase wm
Definition BKE_main.hh:239
ID * owner_id
Definition RNA_types.hh:40
StructRNA * type
Definition RNA_types.hh:41
void * data
Definition RNA_types.hh:42
struct WorkSpaceLayout * temp_layout_store
Wrapper for bScreen.
wmEventHandler head
eWM_EventHandlerType type
struct wmKeyConfig * next
struct PointerRNA * ptr
struct wmKeyMapItem * next
struct wmKeyMap * next
const void * modal_items
const char * name
Definition WM_types.hh:990
std::string(* get_description)(bContext *C, wmOperatorType *ot, PointerRNA *ptr)
Definition WM_types.hh:1074
const char * idname
Definition WM_types.hh:992
int(* modal)(bContext *C, wmOperator *op, const wmEvent *event) ATTR_WARN_UNUSED_RESULT
Definition WM_types.hh:1036
bool(* check)(bContext *C, wmOperator *op)
Definition WM_types.hh:1014
bool(* pyop_poll)(bContext *C, wmOperatorType *ot) ATTR_WARN_UNUSED_RESULT
Definition WM_types.hh:1101
int(* invoke)(bContext *C, wmOperator *op, const wmEvent *event) ATTR_WARN_UNUSED_RESULT
Definition WM_types.hh:1022
int(* exec)(bContext *C, wmOperator *op) ATTR_WARN_UNUSED_RESULT
Definition WM_types.hh:1006
ExtensionRNA rna_ext
Definition WM_types.hh:1104
const char * translation_context
Definition WM_types.hh:994
const char * description
Definition WM_types.hh:996
void(* ui)(bContext *C, wmOperator *op)
Definition WM_types.hh:1053
const char * undo_group
Definition WM_types.hh:998
StructRNA * srna
Definition WM_types.hh:1080
void(* cancel)(bContext *C, wmOperator *op)
Definition WM_types.hh:1028
struct wmOperatorType * type
struct PointerRNA * ptr
struct wmKeyConfig * defaultconf
struct WorkSpaceInstanceHook * workspace_hook
struct Scene * new_scene
void WM_operator_stack_clear(wmWindowManager *wm)
Definition wm.cc:382
void WM_operator_handlers_clear(wmWindowManager *wm, wmOperatorType *ot)
Definition wm.cc:391
float WM_event_tablet_data(const wmEvent *event, bool *r_pen_flip, float r_tilt[2])
char WM_event_utf8_to_ascii(const wmEvent *event)
bool WM_event_is_tablet(const wmEvent *event)
void WM_window_status_area_tag_redraw(wmWindow *win)
void WM_event_add_notifier_ex(wmWindowManager *wm, const wmWindow *win, uint type, void *reference)
void WM_main_add_notifier(uint type, void *reference)
void WM_event_remove_modal_handler_all(const wmOperator *op, const bool postpone)
void WM_event_add_notifier(const bContext *C, uint type, void *reference)
@ WM_HANDLER_TYPE_OP
@ EVT_TYPE_MASK_ACTIONZONE
@ EVT_TYPE_MASK_KEYBOARD_MODIFIER
@ EVT_TYPE_MASK_NDOF
@ EVT_TYPE_MASK_MOUSE_WHEEL
@ EVT_TYPE_MASK_MOUSE_GESTURE
@ EVT_TYPE_MASK_MOUSE_BUTTON
@ EVT_TYPE_MASK_MOUSE
@ EVT_TYPE_MASK_KEYBOARD
#define ISKEYMODIFIER(event_type)
#define ISKEYBOARD(event_type)
@ EVT_PAD8
@ EVT_F14KEY
@ EVT_PAD2
@ MOUSEPAN
@ BUTTON7MOUSE
@ RIGHTMOUSE
@ EVT_SIXKEY
@ EVT_QUOTEKEY
@ EVT_PADPERIOD
@ NDOF_BUTTON_SPIN_CW
@ EVT_OKEY
@ NDOF_BUTTON_TILT_CCW
@ TIMER
@ EVT_EKEY
@ EVT_PAD4
@ EVT_JKEY
@ EVT_PADASTERKEY
@ NDOF_BUTTON_7
@ BUTTON6MOUSE
@ NDOF_BUTTON_V2
@ EVT_F18KEY
@ EVT_PLUSKEY
@ EVT_PAD0
@ EVT_F7KEY
@ EVT_FOURKEY
@ NDOF_BUTTON_2
@ EVT_YKEY
@ EVT_RIGHTCTRLKEY
@ EVT_F17KEY
@ EVT_SKEY
@ EVT_VKEY
@ MOUSEZOOM
@ NDOF_BUTTON_8
@ EVT_IKEY
@ NDOF_BUTTON_MENU
@ EVT_F1KEY
@ EVT_PERIODKEY
@ EVT_PADSLASHKEY
@ EVT_XKEY
@ NDOF_BUTTON_1
@ EVT_COMMAKEY
@ NDOF_BUTTON_BOTTOM
@ EVT_MEDIAPLAY
@ EVT_LEFTBRACKETKEY
@ EVT_ACTIONZONE_FULLSCREEN
@ EVT_MEDIAFIRST
@ EVT_F23KEY
@ EVT_ZEROKEY
@ EVT_F10KEY
@ EVT_FKEY
@ EVT_PAD9
@ EVT_DELKEY
@ EVT_SEVENKEY
@ TIMERJOBS
@ NDOF_BUTTON_V1
@ EVT_F20KEY
@ EVT_CKEY
@ EVT_F2KEY
@ EVT_GKEY
@ EVT_ACTIONZONE_REGION
@ EVT_KKEY
@ EVT_TABKEY
@ EVT_DOWNARROWKEY
@ NDOF_BUTTON_BACK
@ EVT_UKEY
@ EVT_MEDIASTOP
@ EVT_AKEY
@ EVT_PAD3
@ EVT_MINUSKEY
@ MOUSEROTATE
@ WHEELUPMOUSE
@ EVT_PAGEUPKEY
@ EVT_OSKEY
@ EVT_F4KEY
@ EVT_PAGEDOWNKEY
@ NDOF_BUTTON_5
@ TIMERAUTOSAVE
@ TIMER1
@ EVT_F8KEY
@ NDOF_BUTTON_SAVE_V2
@ NDOF_BUTTON_RIGHT
@ EVT_LEFTCTRLKEY
@ NDOF_BUTTON_ROLL_CW
@ NDOF_BUTTON_10
@ TABLET_ERASER
@ EVT_EQUALKEY
@ NDOF_BUTTON_3
@ EVT_RIGHTARROWKEY
@ EVT_F6KEY
@ EVT_F5KEY
@ EVT_PADENTER
@ EVT_F22KEY
@ EVT_F19KEY
@ EVT_NINEKEY
@ NDOF_BUTTON_PLUS
@ EVT_SPACEKEY
@ BUTTON4MOUSE
@ WHEELDOWNMOUSE
@ EVT_PAD6
@ EVT_ACTIONZONE_AREA
@ NDOF_BUTTON_ISO2
@ EVT_PAD5
@ EVT_HOMEKEY
@ TABLET_STYLUS
@ MOUSEMOVE
@ EVT_RIGHTBRACKETKEY
@ EVT_WKEY
@ NDOF_BUTTON_PANZOOM
@ EVT_ENDKEY
@ EVT_RIGHTALTKEY
@ EVT_MEDIALAST
@ EVT_MKEY
@ EVT_LINEFEEDKEY
@ TIMER2
@ EVT_TKEY
@ EVT_HKEY
@ MOUSESMARTZOOM
@ NDOF_BUTTON_MINUS
@ EVT_BACKSLASHKEY
@ EVT_FIVEKEY
@ EVT_APPKEY
@ EVT_F24KEY
@ TIMER0
@ EVT_ACCENTGRAVEKEY
@ EVT_PADMINUS
@ EVT_F21KEY
@ EVT_ONEKEY
@ EVT_UPARROWKEY
@ LEFTMOUSE
@ EVT_F11KEY
@ EVT_SLASHKEY
@ EVT_EIGHTKEY
@ EVT_F13KEY
@ NDOF_BUTTON_DOMINANT
@ EVT_F15KEY
@ EVT_LEFTARROWKEY
@ NDOF_MOTION
@ EVT_INSERTKEY
@ EVT_NKEY
@ EVT_QKEY
@ MIDDLEMOUSE
@ TIMERREPORT
@ NDOF_BUTTON_TILT_CW
@ EVT_LEFTALTKEY
@ EVT_ZKEY
@ EVT_ESCKEY
@ NDOF_BUTTON_9
@ NDOF_BUTTON_LEFT
@ NDOF_BUTTON_FIT
@ EVT_THREEKEY
@ WHEELOUTMOUSE
@ NDOF_BUTTON_V3
@ EVT_BACKSPACEKEY
@ WHEELINMOUSE
@ EVT_F12KEY
@ INBETWEEN_MOUSEMOVE
@ EVT_DKEY
@ NDOF_BUTTON_SAVE_V3
@ EVT_F16KEY
@ NDOF_BUTTON_4
@ EVT_PAD1
@ EVT_TWOKEY
@ EVT_GRLESSKEY
@ EVT_LKEY
@ NDOF_BUTTON_12
@ EVT_RIGHTSHIFTKEY
@ NDOF_BUTTON_FRONT
@ NDOF_BUTTON_SAVE_V1
@ NDOF_BUTTON_11
@ EVT_PAUSEKEY
@ EVT_PAD7
@ NDOF_BUTTON_SPIN_CCW
@ EVT_LEFTSHIFTKEY
@ NDOF_BUTTON_ISO1
@ EVT_PADPLUSKEY
@ NDOF_BUTTON_6
@ EVT_F3KEY
@ NDOF_BUTTON_TOP
@ EVT_F9KEY
@ EVT_RKEY
@ WINDEACTIVATE
@ EVT_SEMICOLONKEY
@ EVT_BKEY
@ EVT_PKEY
@ EVT_XR_ACTION
@ TIMERREGION
@ NDOF_BUTTON_ROTATE
@ EVT_RETKEY
@ BUTTON5MOUSE
@ NDOF_BUTTON_ROLL_CCW
PointerRNA * ptr
Definition wm_files.cc:4126
wmOperatorType * ot
Definition wm_files.cc:4125
void WM_keymap_item_properties_reset(wmKeyMapItem *kmi, IDProperty *properties)
Definition wm_keymap.cc:204
int WM_keymap_item_map_type_get(const wmKeyMapItem *kmi)
Definition wm_keymap.cc:221
void WM_keyconfig_set_active(wmWindowManager *wm, const char *idname)
Definition wm_keymap.cc:381
void WM_keyconfig_update_tag(wmKeyMap *keymap, wmKeyMapItem *kmi)
void WM_operatortype_append_macro_ptr(void(*opfunc)(wmOperatorType *ot, void *userdata), void *userdata)
std::string WM_operatortype_name(wmOperatorType *ot, PointerRNA *properties)
wmOperatorType * WM_operatortype_find(const char *idname, bool quiet)
void WM_operatortype_append_ptr(void(*opfunc)(wmOperatorType *, void *), void *userdata)
void WM_operatortype_remove_ptr(wmOperatorType *ot)
size_t WM_operator_py_idname(char *dst, const char *src)
size_t WM_operator_bl_idname(char *dst, const char *src)
void WM_operator_properties_create_ptr(PointerRNA *ptr, wmOperatorType *ot)
bool WM_operator_py_idname_ok_or_report(ReportList *reports, const char *classname, const char *idname)
void WM_window_set_active_scene(Main *bmain, bContext *C, wmWindow *win, Scene *scene)
bool WM_window_is_temp_screen(const wmWindow *win)
void WM_window_set_active_view_layer(wmWindow *win, ViewLayer *view_layer)
ViewLayer * WM_window_get_active_view_layer(const wmWindow *win)
Scene * WM_window_get_active_scene(const wmWindow *win)
wmXrSessionState * WM_xr_session_state_handle_get(const wmXrData *xr)