107 if (kmi->
idname[0] == 0) {
149 if (kmdi->add_item) {
152 if (kmdi->remove_item) {
161 return (
STREQ(
a->idname,
b->idname) &&
170 a->shift ==
b->shift &&
a->ctrl ==
b->ctrl &&
a->alt ==
b->alt &&
a->oskey ==
b->oskey &&
171 a->keymodifier ==
b->keymodifier &&
a->maptype ==
b->maptype &&
300 U.runtime.is_dirty =
true;
350 U.runtime.is_dirty =
true;
446 if (!
U.app_template[0] &&
457 return keymap->
poll(
C);
618 if (!orig_kmi && addon_km) {
644 if (kmdi->remove_item) {
652 if (kmdi->add_item) {
673 if (kmi_add !=
NULL && kmi_add == kmi_remove) {
677 else if (!kmi_add && (!kmdi->remove_item || kmi_remove)) {
684 kmi_add->
id = kmi_remove->
id;
733 kmi->id = orig_kmi->
id;
736 kmi->id = -(km->
kmi_id++);
826 if (km->spaceid == spaceid && km->regionid == regionid) {
842 if (
ELEM(km->spaceid, spaceid,
SPACE_EMPTY) && km->regionid == regionid) {
967 for (; kmi; kmi = kmi->
next) {
1018 if (kmi->propvalue_str[0]) {
1021 kmi->propvalue = propvalue;
1023 kmi->propvalue_str[0] =
'\0';
1038 const char *single_glyph)
1050 const char *single_glyph =
NULL;
1058 #if defined(__APPLE__)
1060 #elif defined(_WIN32)
1070 if (platform == MACOS) {
1071 single_glyph =
"\xe2\x87\xa7";
1078 if (platform == MACOS) {
1084 if (platform == MACOS) {
1086 single_glyph =
"\xe2\x8c\xa5";
1091 if (platform == MACOS) {
1094 if (platform == MSWIN) {
1104 if (platform == MACOS) {
1105 single_glyph =
"\xe2\x8e\x8b";
1145 const short keymodifier,
1150 const int result_len)
1216 const int result_len)
1231 const int propvalue,
1234 const int result_len)
1237 bool add_sep =
false;
1260 const int propvalue,
1263 const int result_len)
1271 const int propvalue,
1274 int *r_available_len,
1277 char *
ret = *r_result;
1279 if (*r_available_len > 1) {
1281 ot, propvalue, compact,
ret,
min_ii(*r_available_len, max_len)) +
1284 *r_available_len -= used_len;
1285 *r_result += used_len;
1286 if (*r_available_len == 0) {
1306 const bool is_strict,
1315 bool kmi_match =
false;
1317 if (
STREQ(kmi->idname, opname)) {
1322 if (
STREQ(
"MESH_OT_rip_move", opname)) {
1323 printf(
"OPERATOR\n");
1336 if (is_strict && kmi->ptr) {
1351 "%s: Some set values in menu entry match default op values, "
1352 "this might not be desired!\n",
1354 printf(
"\tkm: '%s', kmi: '%s'\n", keymap->
idname, kmi_str);
1357 printf(
"OPERATOR\n");
1392 const bool is_strict,
1402 for (
int km_index = 0; km_index < km_result.
keymaps_len; km_index++) {
1406 keymap, opname, properties, is_strict,
params);
1428 const bool is_strict,
1450 if (found ==
NULL) {
1452 C, wm, win, &win->
handlers, opname, opcontext, properties, is_strict,
params, r_keymap);
1458 C, wm, win, &
area->handlers, opname, opcontext, properties, is_strict,
params, r_keymap);
1461 if (found ==
NULL) {
1555 C, opname, opcontext, properties, is_strict,
params, r_keymap);
1566 if (!found && properties) {
1580 C, opname, opcontext, properties_temp, is_strict,
params, r_keymap);
1589 if (!found && is_strict && properties) {
1600 C, opname, opcontext, properties_default, is_strict,
params, &km);
1605 "%s: Some set values in keymap entry match default op values, "
1606 "this might not be desired!\n",
1608 printf(
"\tkm: '%s', kmi: '%s'\n", km->
idname, kmi_str);
1611 printf(
"OPERATOR\n");
1640 const bool is_strict,
1642 const int result_len)
1676 const short include_mask,
1677 const short exclude_mask,
1680 short user_data_mask[2] = {include_mask, exclude_mask};
1690 .user_data = use_mask ? user_data_mask :
NULL,
1698 const short include_mask,
1699 const short exclude_mask)
1701 short user_data_mask[2] = {include_mask, exclude_mask};
1710 .user_data = use_mask ? user_data_mask :
NULL,
1724 if (k1type !=
KM_ANY && k2type !=
KM_ANY && k1type != k2type) {
1736 if (k1->
val != k2->
val) {
1831 bool compat_update =
false;
1850 for (i = 0; keymaps_lb[i]; i++) {
1866 if (kmdi->add_item) {
1869 if (kmdi->remove_item) {
1903 &
U.user_keymaps, km->idname, km->spaceid, km->regionid);
1915 kmn->
poll = km->poll;
1920 compat_update = compat_update || (usermap && !(usermap->
flag &
KEYMAP_DIFF));
1928 if (compat_update) {
2044 if (kmi->
id ==
id) {
struct WorkSpace * CTX_wm_workspace(const bContext *C)
struct ScrArea * CTX_wm_area(const bContext *C)
struct wmWindowManager * CTX_wm_manager(const bContext *C)
struct ARegion * CTX_wm_region(const bContext *C)
struct wmWindow * CTX_wm_window(const bContext *C)
void IDP_print(const struct IDProperty *prop)
void IDP_FreeProperty(struct IDProperty *prop)
bool IDP_EqualsProperties_ex(struct IDProperty *prop1, struct IDProperty *prop2, bool is_strict) ATTR_WARN_UNUSED_RESULT
struct IDProperty * IDP_CopyProperty(const struct IDProperty *prop) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
struct ARegion * BKE_area_find_region_type(const struct ScrArea *area, int type)
bool BKE_workspace_owner_id_check(const struct WorkSpace *workspace, const char *owner_id) ATTR_NONNULL()
bool BLF_has_glyph(int fontid, unsigned int unicode)
#define BLI_assert_msg(a, msg)
BLI_INLINE bool BLI_listbase_is_empty(const struct ListBase *lb)
void BLI_addhead(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
#define LISTBASE_FOREACH(type, var, list)
void BLI_freelinkN(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
BLI_INLINE void BLI_listbase_clear(struct ListBase *lb)
void void BLI_freelistN(struct ListBase *listbase) ATTR_NONNULL(1)
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void BLI_remlink(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
int BLI_findindex(const struct ListBase *listbase, const void *vlink) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void BLI_insertlinkbefore(struct ListBase *listbase, void *vnextlink, void *vnewlink) ATTR_NONNULL(1)
void * BLI_findstring(const struct ListBase *listbase, const char *id, int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
MINLINE int min_ii(int a, int b)
size_t BLI_strcpy_rlen(char *__restrict dst, const char *__restrict src) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
bool BLI_str_endswith(const char *__restrict str, const char *__restrict end) ATTR_NONNULL()
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, size_t maxncpy) ATTR_NONNULL()
unsigned int BLI_str_utf8_as_unicode(const char *p) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
size_t BLI_strlen_utf8(const char *strc) ATTR_NONNULL(1) ATTR_WARN_UNUSED_RESULT
char size_t BLI_strncpy_utf8_rlen(char *__restrict dst, const char *__restrict src, size_t maxncpy) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1
#define STREQLEN(a, b, n)
#define BLT_I18NCONTEXT_ID_WINDOWMANAGER
#define CTX_IFACE_(context, msgid)
#define BLT_I18NCONTEXT_UI_EVENTS
#define CLOG_ERROR(clg_ref,...)
#define CLOG_WARN(clg_ref,...)
Object is a sort of wrapper for general info.
@ KEYMAP_CHILDREN_EXPANDED
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum type
Read Guarded memory(de)allocation.
@ RNA_EQ_UNSET_MATCH_NONE
struct CLG_LogRef * WM_LOG_KEYMAPS
@ WM_OP_INVOKE_REGION_WIN
@ WM_OP_EXEC_REGION_PREVIEW
@ WM_OP_INVOKE_REGION_PREVIEW
@ WM_OP_EXEC_REGION_CHANNELS
@ WM_OP_INVOKE_REGION_CHANNELS
void(* MEM_freeN)(void *vmemh)
void *(* MEM_dupallocN)(const void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
static void area(int d1, int d2, int e1, int e2, float weights[2])
static const pxr::TfToken b("b", pxr::TfToken::Immortal)
static void update(bNodeTree *ntree)
void RNA_pointer_create(ID *id, StructRNA *type, void *data, PointerRNA *r_ptr)
bool RNA_enum_value_from_id(const EnumPropertyItem *item, const char *identifier, int *r_value)
bool RNA_property_is_set(PointerRNA *ptr, PropertyRNA *prop)
int RNA_enum_from_value(const EnumPropertyItem *item, const int value)
const char * RNA_struct_state_owner_get(void)
void RNA_property_unset(PointerRNA *ptr, PropertyRNA *prop)
bool RNA_struct_equals(Main *bmain, PointerRNA *ptr_a, PointerRNA *ptr_b, eRNACompareMode mode)
const EnumPropertyItem rna_enum_event_type_items[]
wmKeyMapItem * remove_item
struct wmKeyMapDiffItem * next
struct wmKeyMapDiffItem * prev
bool(* filter_fn)(const wmKeyMap *km, const wmKeyMapItem *kmi, void *user_data)
struct wmKeyMapItem * next
struct wmKeyMapItem * prev
bool(* poll_modal_item)(const struct wmOperator *op, int value)
bool(* poll)(struct bContext *)
struct wmKeyMap * modalkeymap
struct wmKeyConfig * defaultconf
struct wmKeyConfig * userconf
struct wmKeyConfig * addonconf
int WM_userdef_event_map(int kmitype)
bool WM_event_type_mask_test(const int event_type, const enum eEventType_Mask mask)
void WM_event_get_keymaps_from_handler(wmWindowManager *wm, wmWindow *win, wmEventHandler_Keymap *handler, wmEventHandler_KeymapResult *km_result)
#define ISTIMER(event_type)
#define IS_EVENT_ACTIONZONE(event_type)
#define ISKEYBOARD(event_type)
#define EVT_TYPE_MASK_ALL
#define ISNDOF(event_type)
#define ISMOUSE(event_type)
static wmKeyMapItem * wm_keymap_item_find_handlers(const bContext *C, wmWindowManager *wm, wmWindow *win, ListBase *handlers, const char *opname, wmOperatorCallContext UNUSED(opcontext), IDProperty *properties, const bool is_strict, const struct wmKeyMapItemFind_Params *params, wmKeyMap **r_keymap)
void WM_keyconfig_clear(wmKeyConfig *keyconf)
static char wm_keymap_update_flag
static wmKeyMapItem * wm_keymap_item_find_in_keymap(wmKeyMap *keymap, const char *opname, IDProperty *properties, const bool is_strict, const struct wmKeyMapItemFind_Params *params)
static void wm_user_modal_keymap_set_items(wmWindowManager *wm, wmKeyMap *km)
static void keymap_item_set_id(wmKeyMap *keymap, wmKeyMapItem *kmi)
wmKeyMap * WM_modalkeymap_find(wmKeyConfig *keyconf, const char *idname)
static wmKeyConfig * WM_keyconfig_active(wmWindowManager *wm)
const char * WM_key_event_string(const short type, const bool compact)
int WM_modalkeymap_operator_items_to_string(wmOperatorType *ot, const int propvalue, const bool compact, char *result, const int result_len)
static wmKeyMapDiffItem * wm_keymap_diff_item_copy(wmKeyMapDiffItem *kmdi)
static wmKeyMapItem * wm_keymap_item_find_props(const bContext *C, const char *opname, wmOperatorCallContext opcontext, IDProperty *properties, const bool is_strict, const struct wmKeyMapItemFind_Params *params, wmKeyMap **r_keymap)
static wmKeyMapItem * wm_keymap_find_item_equals_result(wmKeyMap *km, wmKeyMapItem *needle)
wmKeyMapItem * WM_keymap_item_find_id(wmKeyMap *keymap, int id)
void WM_keymap_item_restore_to_default(wmWindowManager *wm, wmKeyMap *keymap, wmKeyMapItem *kmi)
static void wm_keymap_item_properties_update_ot_from_list(ListBase *km_lb)
void WM_keymap_restore_to_default(wmKeyMap *keymap, wmWindowManager *wm)
static void wm_keymap_item_properties_set(wmKeyMapItem *kmi)
wmKeyMap * WM_keymap_ensure(wmKeyConfig *keyconf, const char *idname, int spaceid, int regionid)
wmKeyMap * WM_keymap_find_all(wmWindowManager *wm, const char *idname, int spaceid, int regionid)
void WM_keyconfig_update(wmWindowManager *wm)
static wmKeyMapItem * wm_keymap_item_copy(wmKeyMapItem *kmi)
void WM_modalkeymap_assign(wmKeyMap *km, const char *opname)
void WM_keymap_clear(wmKeyMap *keymap)
static void wm_keymap_addon_add(wmKeyMap *keymap, wmKeyMap *addonmap)
int WM_modalkeymap_items_to_string(const wmKeyMap *km, const int propvalue, const bool compact, char *result, const int result_len)
wmKeyMapItem * WM_key_event_operator_from_keymap(wmKeyMap *keymap, const char *opname, IDProperty *properties, const short include_mask, const short exclude_mask)
const char * WM_bool_as_string(bool test)
wmKeyMap * WM_keymap_list_find(ListBase *lb, const char *idname, int spaceid, int regionid)
int WM_keymap_item_to_string(const wmKeyMapItem *kmi, const bool compact, char *result, const int result_len)
static wmKeyMap * wm_keymap_new(const char *idname, int spaceid, int regionid)
static void wm_keymap_patch(wmKeyMap *km, wmKeyMap *diff_km)
bool WM_keymap_remove_item(wmKeyMap *keymap, wmKeyMapItem *kmi)
wmKeyMap * WM_keymap_active(const wmWindowManager *wm, wmKeyMap *keymap)
static bool wm_keymap_test_and_clear_update(wmKeyMap *km)
char * WM_key_event_operator_string(const bContext *C, const char *opname, wmOperatorCallContext opcontext, IDProperty *properties, const bool is_strict, char *result, const int result_len)
void WM_keyconfig_update_operatortype(void)
int WM_keymap_item_map_type_get(const wmKeyMapItem *kmi)
wmKeyMap * WM_keymap_find_all_spaceid_or_empty(wmWindowManager *wm, const char *idname, int spaceid, int regionid)
static void wm_keymap_diff_item_free(wmKeyMapDiffItem *kmdi)
@ WM_KEYMAP_UPDATE_RECONFIGURE
@ WM_KEYMAP_UPDATE_OPERATORTYPE
wmKeyMapItem * WM_modalkeymap_add_item(wmKeyMap *km, const KeyMapItem_Params *params, int value)
void WM_keyconfig_free(wmKeyConfig *keyconf)
bool WM_keymap_poll(bContext *C, wmKeyMap *keymap)
static const char * key_event_glyph_or_text(const int font_id, const char *text, const char *single_glyph)
bool WM_keyconfig_remove(wmWindowManager *wm, wmKeyConfig *keyconf)
bool WM_keymap_remove(wmKeyConfig *keyconf, wmKeyMap *keymap)
wmKeyMapItem * WM_key_event_operator(const bContext *C, const char *opname, wmOperatorCallContext opcontext, IDProperty *properties, const short include_mask, const short exclude_mask, wmKeyMap **r_keymap)
static void wm_keymap_diff_update(ListBase *lb, wmKeyMap *defaultmap, wmKeyMap *addonmap, wmKeyMap *km)
wmKeyMapItem * WM_keymap_add_item(wmKeyMap *keymap, const char *idname, const KeyMapItem_Params *params)
wmKeyConfig * WM_keyconfig_new(wmWindowManager *wm, const char *idname, bool user_defined)
static void wm_keymap_item_properties_update_ot(wmKeyMapItem *kmi)
static bool kmi_filter_is_visible_type_mask(const wmKeyMap *km, const wmKeyMapItem *kmi, void *user_data)
static wmKeyMap * wm_keymap_preset(wmWindowManager *wm, wmKeyMap *km)
static wmKeyMapItem * wm_keymap_item_find(const bContext *C, const char *opname, wmOperatorCallContext opcontext, IDProperty *properties, bool is_strict, const struct wmKeyMapItemFind_Params *params, wmKeyMap **r_keymap)
static wmKeyMap * wm_keymap_copy(wmKeyMap *keymap)
void WM_keyconfig_set_active(wmWindowManager *wm, const char *idname)
static wmKeyMapItem * wm_keymap_find_item_equals(wmKeyMap *km, wmKeyMapItem *needle)
const wmKeyMapItem * WM_modalkeymap_find_propvalue(const wmKeyMap *km, const int propvalue)
static const wmKeyMapItem * wm_modalkeymap_find_propvalue_iter(const wmKeyMap *km, const wmKeyMapItem *kmi, const int propvalue)
static void wm_keymap_diff(wmKeyMap *diff_km, wmKeyMap *from_km, wmKeyMap *to_km, wmKeyMap *orig_km, wmKeyMap *addon_km)
static void wm_keymap_item_free(wmKeyMapItem *kmi)
static wmKeyMap * wm_keymap_patch_update(ListBase *lb, wmKeyMap *defaultmap, wmKeyMap *addonmap, wmKeyMap *usermap)
static bool wm_keymap_item_equals(wmKeyMapItem *a, wmKeyMapItem *b)
static bool kmi_filter_is_visible(const wmKeyMap *UNUSED(km), const wmKeyMapItem *kmi, void *UNUSED(user_data))
void WM_keyconfig_update_tag(wmKeyMap *keymap, wmKeyMapItem *kmi)
wmKeyMap * WM_modalkeymap_ensure(wmKeyConfig *keyconf, const char *idname, const EnumPropertyItem *items)
bool WM_keymap_item_compare(const wmKeyMapItem *k1, const wmKeyMapItem *k2)
void WM_keymap_item_properties_reset(wmKeyMapItem *kmi, struct IDProperty *properties)
wmKeyMapItem * WM_modalkeymap_add_item_str(wmKeyMap *km, const KeyMapItem_Params *params, const char *value)
wmKeyMap * WM_keymap_list_find_spaceid_or_empty(ListBase *lb, const char *idname, int spaceid, int regionid)
char * WM_modalkeymap_operator_items_to_string_buf(wmOperatorType *ot, const int propvalue, const bool compact, const int max_len, int *r_available_len, char **r_result)
int WM_keymap_item_raw_to_string(const short shift, const short ctrl, const short alt, const short oskey, const short keymodifier, const short val, const short type, const bool compact, char *result, const int result_len)
static bool wm_keymap_item_equals_result(wmKeyMapItem *a, wmKeyMapItem *b)
static void keymap_event_set(wmKeyMapItem *kmi, const KeyMapItem_Params *params)
wmKeyMapItem * WM_keymap_add_item_copy(struct wmKeyMap *keymap, wmKeyMapItem *kmi_src)
wmKeyConfig * WM_keyconfig_new_user(wmWindowManager *wm, const char *idname)
wmOperatorType * WM_operatortype_find(const char *idname, bool quiet)
void WM_operator_properties_alloc(PointerRNA **ptr, IDProperty **properties, const char *opstring)
void WM_operator_properties_create_ptr(PointerRNA *ptr, wmOperatorType *ot)
bool WM_operator_properties_default(PointerRNA *ptr, const bool do_update)
void WM_operator_properties_create(PointerRNA *ptr, const char *opstring)
void WM_operator_properties_free(PointerRNA *ptr)
void WM_operator_properties_sanitize(PointerRNA *ptr, const bool no_context)