UI: Get rid of redundant UI_BUT_IMMEDIATE button flag

This flag was used to activate the hotkey input buttons (e.g. for
"Assign Shortcut") when opened in a popup. Since this was added, other
more generalized ways of getting this same behavior were implemented.
Had to tweak the hotkey button event handling a bit, but it seems to
behave exactly as before now.
This commit is contained in:
Julian Eisel 2022-05-20 16:27:08 +02:00
parent de561280fc
commit 8d65895af8
4 changed files with 8 additions and 19 deletions

View File

@ -202,7 +202,7 @@ enum {
UI_BUT_INACTIVE = 1 << 18,
UI_BUT_LAST_ACTIVE = 1 << 19,
UI_BUT_UNDO = 1 << 20,
UI_BUT_IMMEDIATE = 1 << 21,
/* UNUSED = 1 << 21, */
UI_BUT_NO_UTF8 = 1 << 22,
/** For popups, pressing return activates this button, overriding the highlighted button.

View File

@ -4511,7 +4511,8 @@ static int ui_do_but_HOTKEYEVT(bContext *C,
BLI_assert(but->type == UI_BTYPE_HOTKEY_EVENT);
if (data->state == BUTTON_STATE_HIGHLIGHT) {
if (ELEM(event->type, LEFTMOUSE, EVT_PADENTER, EVT_RETKEY) && event->val == KM_PRESS) {
if (ELEM(event->type, LEFTMOUSE, EVT_PADENTER, EVT_RETKEY, EVT_BUT_OPEN) &&
(event->val == KM_PRESS)) {
but->drawstr[0] = 0;
hotkey_but->modifier_key = 0;
button_activate_state(C, but, BUTTON_STATE_WAIT_KEY_EVENT);
@ -4534,13 +4535,9 @@ static int ui_do_but_HOTKEYEVT(bContext *C,
if (event->type == LEFTMOUSE && event->val == KM_PRESS) {
/* only cancel if click outside the button */
if (ui_but_contains_point_px(but, but->active->region, event->xy) == false) {
/* data->cancel doesn't work, this button opens immediate */
if (but->flag & UI_BUT_IMMEDIATE) {
ui_but_value_set(but, 0);
}
else {
data->cancel = true;
}
data->cancel = true;
/* Close the containing popup (if any). */
data->escapecancel = true;
button_activate_state(C, but, BUTTON_STATE_EXIT);
return WM_UI_HANDLER_BREAK;
}
@ -8501,14 +8498,6 @@ static void button_activate_init(bContext *C,
}
button_activate_state(C, but, BUTTON_STATE_HIGHLIGHT);
/* activate right away */
if (but->flag & UI_BUT_IMMEDIATE) {
if (but->type == UI_BTYPE_HOTKEY_EVENT) {
button_activate_state(C, but, BUTTON_STATE_WAIT_KEY_EVENT);
}
/* .. more to be added here */
}
if (type == BUTTON_ACTIVATE_OPEN) {
button_activate_state(C, but, BUTTON_STATE_MENU_OPEN);

View File

@ -1107,7 +1107,7 @@ static uiBut *ui_item_with_label(uiLayout *layout,
NULL);
UI_but_func_set(but, ui_keymap_but_cb, but, NULL);
if (flag & UI_ITEM_R_IMMEDIATE) {
UI_but_flag_enable(but, UI_BUT_IMMEDIATE);
UI_but_flag_enable(but, UI_BUT_ACTIVATE_ON_INIT);
}
}
else {

View File

@ -115,7 +115,7 @@ enum {
UI_STATE_TEXT_INPUT = UI_BUT_UNDO,
UI_STATE_ACTIVE_LEFT = UI_BUT_VALUE_CLEAR,
UI_STATE_ACTIVE_RIGHT = UI_BUT_TEXTEDIT_UPDATE,
UI_STATE_TEXT_BEFORE_WIDGET = UI_BUT_IMMEDIATE,
UI_STATE_TEXT_BEFORE_WIDGET = UI_BUT_ACTIVATE_ON_INIT,
UI_STATE_FLAGS_ALL = (UI_STATE_HOLD_ACTION | UI_STATE_TEXT_INPUT | UI_STATE_ACTIVE_LEFT |
UI_STATE_ACTIVE_RIGHT | UI_STATE_TEXT_BEFORE_WIDGET),