correctly allow space keybindings; bind by default to 'accept', along with return; -> allow space for hitting buttons, expansions, etc.

This commit is contained in:
Ryan Fleury
2025-05-09 09:05:51 -07:00
parent f237f6cb24
commit bbdbcead16
6 changed files with 21 additions and 18 deletions
+1
View File
@@ -156,6 +156,7 @@ os_codepoint_from_modifiers_and_key(OS_Modifiers modifiers, OS_Key key)
{'X', OS_Key_X, OS_Modifier_Shift},
{'Y', OS_Key_Y, OS_Modifier_Shift},
{'Z', OS_Key_Z, OS_Modifier_Shift},
{' ', OS_Key_Space, 0},
};
// rjf: check numeric
+2 -1
View File
@@ -722,7 +722,7 @@ RD_CmdKindInfo rd_cmd_kind_info_table[236] =
{ str8_lit_comp("geo3d"), str8_lit_comp("Opens a Geometry (3D) tab."), {0}, {0}, RD_CmdKindFlag_ListInUI|RD_CmdKindFlag_ListInIPCDocs|RD_CmdKindFlag_ListInTab},
};
struct {String8 string; RD_Binding binding;} rd_default_binding_table[115] =
struct {String8 string; RD_Binding binding;} rd_default_binding_table[116] =
{
{str8_lit_comp("kill_all"), {OS_Key_F5, 0 |OS_Modifier_Shift }},
{str8_lit_comp("step_into_inst"), {OS_Key_F11, 0 |OS_Modifier_Alt}},
@@ -775,6 +775,7 @@ struct {String8 string; RD_Binding binding;} rd_default_binding_table[115] =
{str8_lit_comp("save_project"), {OS_Key_S, 0 |OS_Modifier_Ctrl |OS_Modifier_Shift }},
{str8_lit_comp("edit"), {OS_Key_F2, 0 }},
{str8_lit_comp("accept"), {OS_Key_Return, 0 }},
{str8_lit_comp("accept"), {OS_Key_Space, 0 }},
{str8_lit_comp("cancel"), {OS_Key_Esc, 0 }},
{str8_lit_comp("move_left"), {OS_Key_Left, 0 }},
{str8_lit_comp("move_right"), {OS_Key_Right, 0 }},
+1
View File
@@ -1169,6 +1169,7 @@ RD_DefaultBindingTable:
//- rjf: meta controls
{ "edit" F2 0 0 0 }
{ "accept" Return 0 0 0 }
{ "accept" Space 0 0 0 }
{ "cancel" Esc 0 0 0 }
//- rjf: directional movement & text controls
+15 -15
View File
@@ -2577,7 +2577,7 @@ rd_view_ui(Rng2F32 rect)
RD_Cfg *input_root = rd_cfg_child_from_string(query_root, str8_lit("input"));
RD_Cfg *cmd_root = rd_cfg_child_from_string(query_root, str8_lit("cmd"));
String8 current_input = input_root->first->string;
B32 search_row_is_open = (vs->query_is_selected);
B32 search_row_is_open = (vs->query_is_open);
F32 search_row_open_t = ui_anim(ui_key_from_stringf(ui_key_zero(), "search_row_open_%p", view),
(F32)!!search_row_is_open,
.initial = (F32)!!search_row_is_open,
@@ -2615,7 +2615,7 @@ rd_view_ui(Rng2F32 rect)
}
//- rjf: build contents
UI_Parent(search_row) UI_WidthFill UI_HeightFill UI_Focus(vs->query_is_selected && !vs->contents_are_focused ? UI_FocusKind_On : UI_FocusKind_Off)
UI_Parent(search_row) UI_WidthFill UI_HeightFill UI_Focus(vs->query_is_open && !vs->contents_are_focused ? UI_FocusKind_On : UI_FocusKind_Off)
RD_Font(cmd_kind_info->query.flags & RD_QueryFlag_CodeInput ? RD_FontSlot_Code : RD_FontSlot_Main)
{
if(cmd_name.size != 0)
@@ -2659,7 +2659,7 @@ rd_view_ui(Rng2F32 rect)
#endif
if(ui_pressed(sig))
{
vs->query_is_selected = 1;
vs->query_is_open = 1;
rd_cmd(RD_CmdKind_FocusPanel);
}
}
@@ -3015,7 +3015,7 @@ rd_view_ui(Rng2F32 rect)
case RD_CmdKind_Search:
case RD_CmdKind_SearchBackwards:
{
vs->query_is_selected = 0;
vs->query_is_open = 0;
}break;
}
}
@@ -5439,11 +5439,11 @@ rd_view_ui(Rng2F32 rect)
////////////////////////////
//- rjf: catchall completion controls
//
if(vs->query_is_selected) UI_Focus(UI_FocusKind_On)
if(vs->query_is_open) UI_Focus(UI_FocusKind_On)
{
if(ui_is_focus_active() && ui_slot_press(UI_EventActionSlot_Cancel))
{
vs->query_is_selected = 0;
vs->query_is_open = 0;
vs->query_string_size = 0;
}
if(ui_is_focus_active() && ui_slot_press(UI_EventActionSlot_Accept))
@@ -7198,8 +7198,8 @@ rd_window_frame(void)
if(size_query_by_expr_eval)
{
F32 search_row_open_t = ui_anim(ui_key_from_stringf(ui_key_zero(), "search_row_open_%p", view),
(F32)!!vs->query_is_selected,
.initial = (F32)!!vs->query_is_selected,
(F32)!!vs->query_is_open,
.initial = (F32)!!vs->query_is_open,
.epsilon = 0.01f,
.rate = rd_state->menu_animation_rate);
query_height_px = row_height_px * (predicted_block_tree.total_row_count - !root_is_explicit) + ui_top_px_height()*search_row_open_t;
@@ -7443,8 +7443,8 @@ rd_window_frame(void)
// rjf: close queries
if(query_floating_view_task->pressed_outside ||
(rd_cfg_child_from_string(view, str8_lit("lister")) != &rd_nil_cfg && !vs->query_is_selected) ||
(cmd_name.size != 0 && !vs->query_is_selected) ||
(rd_cfg_child_from_string(view, str8_lit("lister")) != &rd_nil_cfg && !vs->query_is_open) ||
(cmd_name.size != 0 && !vs->query_is_open) ||
ui_slot_press(UI_EventActionSlot_Cancel))
{
rd_cmd(RD_CmdKind_CancelQuery);
@@ -14957,7 +14957,7 @@ rd_frame(void)
RD_ViewState *vs = rd_view_state_from_cfg(view);
if(cmd_name.size != 0)
{
if(!vs->query_is_selected && cmd_kind_info->query.flags & RD_QueryFlag_SelectOldInput)
if(!vs->query_is_open && cmd_kind_info->query.flags & RD_QueryFlag_SelectOldInput)
{
vs->query_cursor = txt_pt(1, 1+input->first->string.size);
vs->query_mark = txt_pt(1, 1);
@@ -14969,16 +14969,16 @@ rd_frame(void)
}
if(!str8_match(current_query_cmd_name, cmd_name, 0))
{
vs->query_is_selected = 1;
vs->query_is_open = 1;
}
else
{
vs->query_is_selected ^= 1;
vs->query_is_open ^= 1;
}
}
if(rd_regs()->do_lister)
{
vs->query_is_selected = 1;
vs->query_is_open = 1;
}
}
}break;
@@ -15013,7 +15013,7 @@ rd_frame(void)
else if(!(cmd_kind_info->query.flags & RD_QueryFlag_KeepOldInput))
{
RD_ViewState *vs = rd_view_state_from_cfg(view);
vs->query_is_selected = 0;
vs->query_is_open = 0;
vs->query_string_size = 0;
}
}break;
+1 -1
View File
@@ -223,7 +223,7 @@ struct RD_ViewState
void *user_data;
// rjf: query state
B32 query_is_selected;
B32 query_is_open;
TxtPt query_cursor;
TxtPt query_mark;
U8 query_buffer[KB(1)];
+1 -1
View File
@@ -161,7 +161,7 @@ rd_code_view_build(Arena *arena, RD_CodeViewState *cv, RD_CodeViewBuildFlags fla
{
RD_Cfg *view = rd_cfg_from_id(rd_regs()->view);
RD_ViewState *vs = rd_view_state_from_cfg(view);
if(!vs->query_is_selected)
if(!vs->query_is_open)
{
RD_Cfg *query = rd_cfg_child_from_string_or_alloc(view, str8_lit("query"));
RD_Cfg *input = rd_cfg_child_from_string_or_alloc(query, str8_lit("input"));