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:
parent
650d2f863d
commit
209bf7780e
|
@ -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},
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
* \{ */
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue