UI: Add file browser operator to edit directory field

This allows using a shortcut from the file browser to edit the directory
path. The shortcut Ctrl + L is quite standard and used in multiple
GNU/Linux desktop desktop environments, Windows, as well as most web
browsers. Safari on macOS uses Cmd + L.

Reviewed by: Jacques Lucke, Julian Eisel

Differential Revision: https://developer.blender.org/D15196
This commit is contained in:
Damien Picard 2022-06-16 19:44:39 +02:00 committed by Julian Eisel
parent 650d2f863d
commit 209bf7780e
4 changed files with 43 additions and 0 deletions

View File

@ -2223,6 +2223,7 @@ def km_file_browser(params):
("file.smoothscroll", {"type": 'TIMER1', "value": 'ANY', "any": True}, None),
("file.bookmark_add", {"type": 'B', "value": 'PRESS', "ctrl": True}, None),
("file.start_filter", {"type": 'F', "value": 'PRESS', "ctrl": True}, None),
("file.edit_directory_path", {"type": 'L', "value": 'PRESS', "ctrl": True}, None),
("file.filenum", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "repeat": True},
{"properties": [("increment", 1)]}),
("file.filenum", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "shift": True, "repeat": True},

View File

@ -83,6 +83,7 @@ void FILE_OT_rename(struct wmOperatorType *ot);
void FILE_OT_smoothscroll(struct wmOperatorType *ot);
void FILE_OT_filepath_drop(struct wmOperatorType *ot);
void FILE_OT_start_filter(struct wmOperatorType *ot);
void FILE_OT_edit_directory_path(struct wmOperatorType *ot);
void FILE_OT_view_selected(struct wmOperatorType *ot);
void file_directory_enter_handle(bContext *C, void *arg_unused, void *arg_but);

View File

@ -2949,6 +2949,46 @@ void FILE_OT_start_filter(struct wmOperatorType *ot)
/** \} */
/* -------------------------------------------------------------------- */
/** \name Edit Directory Path Operator
* \{ */
static int file_edit_directory_path_exec(bContext *C, wmOperator *UNUSED(op))
{
const ScrArea *area = CTX_wm_area(C);
const SpaceFile *sfile = CTX_wm_space_file(C);
const FileSelectParams *params = ED_fileselect_get_active_params(sfile);
ARegion *region_ctx = CTX_wm_region(C);
if (area) {
LISTBASE_FOREACH (ARegion *, region, &area->regionbase) {
CTX_wm_region_set(C, region);
if (UI_textbutton_activate_rna(C, region, params, "directory")) {
break;
}
}
}
CTX_wm_region_set(C, region_ctx);
return OPERATOR_FINISHED;
}
void FILE_OT_edit_directory_path(struct wmOperatorType *ot)
{
/* identifiers */
ot->name = "Edit Directory Path";
ot->description = "Start editing directory field";
ot->idname = "FILE_OT_edit_directory_path";
/* api callbacks */
ot->exec = file_edit_directory_path_exec;
ot->poll = ED_operator_file_active;
}
/** \} */
/* -------------------------------------------------------------------- */
/** \name Macro Operators
* \{ */

View File

@ -695,6 +695,7 @@ static void file_operatortypes(void)
WM_operatortype_append(FILE_OT_smoothscroll);
WM_operatortype_append(FILE_OT_filepath_drop);
WM_operatortype_append(FILE_OT_start_filter);
WM_operatortype_append(FILE_OT_edit_directory_path);
WM_operatortype_append(FILE_OT_view_selected);
}