RNA: move the "contains" checks into the RNA API
C++ callers must ensure the arguments are valid, reserve validity for the RNA API for raising errors. This is already the case for most RNA API calls that wrap BKE API's.
This commit is contained in:
@@ -386,7 +386,7 @@ static void rna_KeyMap_item_remove(wmKeyMap *km, ReportList *reports, PointerRNA
|
||||
{
|
||||
wmKeyMapItem *kmi = static_cast<wmKeyMapItem *>(kmi_ptr->data);
|
||||
|
||||
if (WM_keymap_remove_item(km, kmi) == false) {
|
||||
if (UNLIKELY(BLI_findindex(&km->items, kmi) == -1)) {
|
||||
BKE_reportf(reports,
|
||||
RPT_ERROR,
|
||||
"KeyMapItem '%s' cannot be removed from '%s'",
|
||||
@@ -395,6 +395,7 @@ static void rna_KeyMap_item_remove(wmKeyMap *km, ReportList *reports, PointerRNA
|
||||
return;
|
||||
}
|
||||
|
||||
WM_keymap_remove_item(km, kmi);
|
||||
RNA_POINTER_INVALIDATE(kmi_ptr);
|
||||
}
|
||||
|
||||
@@ -482,11 +483,12 @@ static void rna_KeyMap_remove(wmKeyConfig *keyconfig, ReportList *reports, Point
|
||||
{
|
||||
wmKeyMap *keymap = static_cast<wmKeyMap *>(keymap_ptr->data);
|
||||
|
||||
if (WM_keymap_remove(keyconfig, keymap) == false) {
|
||||
if (UNLIKELY(BLI_findindex(&keyconfig->keymaps, keymap) == -1)) {
|
||||
BKE_reportf(reports, RPT_ERROR, "KeyConfig '%s' cannot be removed", keymap->idname);
|
||||
return;
|
||||
}
|
||||
|
||||
WM_keymap_remove(keyconfig, keymap);
|
||||
RNA_POINTER_INVALIDATE(keymap_ptr);
|
||||
}
|
||||
|
||||
@@ -498,12 +500,11 @@ wmKeyConfig *rna_KeyConfig_new(wmWindowManager *wm, const char *idname)
|
||||
static void rna_KeyConfig_remove(wmWindowManager *wm, ReportList *reports, PointerRNA *keyconf_ptr)
|
||||
{
|
||||
wmKeyConfig *keyconf = static_cast<wmKeyConfig *>(keyconf_ptr->data);
|
||||
|
||||
if (WM_keyconfig_remove(wm, keyconf) == false) {
|
||||
if (UNLIKELY(BLI_findindex(&wm->keyconfigs, keyconf) == -1)) {
|
||||
BKE_reportf(reports, RPT_ERROR, "KeyConfig '%s' cannot be removed", keyconf->idname);
|
||||
return;
|
||||
}
|
||||
|
||||
WM_keyconfig_remove(wm, keyconf);
|
||||
RNA_POINTER_INVALIDATE(keyconf_ptr);
|
||||
}
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ void WM_keyconfig_reload(bContext *C);
|
||||
|
||||
wmKeyConfig *WM_keyconfig_new(wmWindowManager *wm, const char *idname, bool user_defined);
|
||||
wmKeyConfig *WM_keyconfig_ensure(wmWindowManager *wm, const char *idname, bool user_defined);
|
||||
bool WM_keyconfig_remove(wmWindowManager *wm, wmKeyConfig *keyconf);
|
||||
void WM_keyconfig_remove(wmWindowManager *wm, wmKeyConfig *keyconf);
|
||||
void WM_keyconfig_clear(wmKeyConfig *keyconf);
|
||||
void WM_keyconfig_free(wmKeyConfig *keyconf);
|
||||
|
||||
@@ -57,7 +57,7 @@ wmKeyMapItem *WM_keymap_add_item(wmKeyMap *keymap,
|
||||
const KeyMapItem_Params *params);
|
||||
wmKeyMapItem *WM_keymap_add_item_copy(wmKeyMap *keymap, wmKeyMapItem *kmi_src);
|
||||
|
||||
bool WM_keymap_remove_item(wmKeyMap *keymap, wmKeyMapItem *kmi);
|
||||
void WM_keymap_remove_item(wmKeyMap *keymap, wmKeyMapItem *kmi);
|
||||
int WM_keymap_item_to_string(const wmKeyMapItem *kmi,
|
||||
bool compact,
|
||||
char *result,
|
||||
@@ -75,7 +75,7 @@ wmKeyMap *WM_keymap_find_all_spaceid_or_empty(wmWindowManager *wm,
|
||||
int spaceid,
|
||||
int regionid);
|
||||
wmKeyMap *WM_keymap_active(const wmWindowManager *wm, wmKeyMap *keymap);
|
||||
bool WM_keymap_remove(wmKeyConfig *keyconfig, wmKeyMap *keymap);
|
||||
void WM_keymap_remove(wmKeyConfig *keyconfig, wmKeyMap *keymap);
|
||||
bool WM_keymap_poll(bContext *C, wmKeyMap *keymap);
|
||||
|
||||
wmKeyMapItem *WM_keymap_item_find_id(wmKeyMap *keymap, int id);
|
||||
|
||||
@@ -298,12 +298,9 @@ wmKeyConfig *WM_keyconfig_ensure(wmWindowManager *wm, const char *idname, bool u
|
||||
return WM_keyconfig_new(wm, idname, user_defined);
|
||||
}
|
||||
|
||||
bool WM_keyconfig_remove(wmWindowManager *wm, wmKeyConfig *keyconf)
|
||||
void WM_keyconfig_remove(wmWindowManager *wm, wmKeyConfig *keyconf)
|
||||
{
|
||||
if (UNLIKELY(BLI_findindex(&wm->keyconfigs, keyconf) == -1)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
BLI_assert(BLI_findindex(&wm->keyconfigs, keyconf) != -1);
|
||||
if (STREQLEN(U.keyconfigstr, keyconf->idname, sizeof(U.keyconfigstr))) {
|
||||
STRNCPY(U.keyconfigstr, wm->defaultconf->idname);
|
||||
U.runtime.is_dirty = true;
|
||||
@@ -321,7 +318,6 @@ bool WM_keyconfig_remove(wmWindowManager *wm, wmKeyConfig *keyconf)
|
||||
*kc_p = nullptr;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void WM_keyconfig_clear(wmKeyConfig *keyconf)
|
||||
@@ -432,17 +428,12 @@ void WM_keymap_clear(wmKeyMap *keymap)
|
||||
BLI_freelistN(&keymap->items);
|
||||
}
|
||||
|
||||
bool WM_keymap_remove(wmKeyConfig *keyconf, wmKeyMap *keymap)
|
||||
void WM_keymap_remove(wmKeyConfig *keyconf, wmKeyMap *keymap)
|
||||
{
|
||||
if (UNLIKELY(BLI_findindex(&keyconf->keymaps, keymap) == -1)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
BLI_assert(BLI_findindex(&keyconf->keymaps, keymap) != -1);
|
||||
WM_keymap_clear(keymap);
|
||||
BLI_remlink(&keyconf->keymaps, keymap);
|
||||
MEM_freeN(keymap);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool WM_keymap_poll(bContext *C, wmKeyMap *keymap)
|
||||
@@ -555,12 +546,9 @@ wmKeyMapItem *WM_keymap_add_item_copy(wmKeyMap *keymap, wmKeyMapItem *kmi_src)
|
||||
return kmi_dst;
|
||||
}
|
||||
|
||||
bool WM_keymap_remove_item(wmKeyMap *keymap, wmKeyMapItem *kmi)
|
||||
void WM_keymap_remove_item(wmKeyMap *keymap, wmKeyMapItem *kmi)
|
||||
{
|
||||
if (UNLIKELY(BLI_findindex(&keymap->items, kmi) == -1)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
BLI_assert(BLI_findindex(&keymap->items, kmi) != -1);
|
||||
if (kmi->ptr) {
|
||||
WM_operator_properties_free(kmi->ptr);
|
||||
MEM_freeN(kmi->ptr);
|
||||
@@ -568,7 +556,6 @@ bool WM_keymap_remove_item(wmKeyMap *keymap, wmKeyMapItem *kmi)
|
||||
BLI_freelinkN(&keymap->items, kmi);
|
||||
|
||||
WM_keyconfig_update_tag(keymap, nullptr);
|
||||
return true;
|
||||
}
|
||||
|
||||
/** \} */
|
||||
|
||||
Reference in New Issue
Block a user