Blender V4.3
space_file.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2008 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
9#include <cstdio>
10#include <cstring>
11
12#include "MEM_guardedalloc.h"
13
14#include "BLI_blenlib.h"
15#include "BLI_utildefines.h"
16
17#include "BKE_appdir.hh"
18#include "BKE_context.hh"
19#include "BKE_global.hh"
20#include "BKE_lib_query.hh"
21#include "BKE_main.hh"
22#include "BKE_report.hh"
23#include "BKE_screen.hh"
24
25#include "RNA_access.hh"
26#include "RNA_define.hh"
27#include "RNA_enum_types.hh"
28
29#include "WM_api.hh"
30#include "WM_message.hh"
31#include "WM_types.hh"
32
33#include "ED_asset.hh"
34#include "ED_asset_indexer.hh"
35#include "ED_fileselect.hh"
36#include "ED_screen.hh"
37#include "ED_space_api.hh"
38
39#include "IMB_thumbs.hh"
40
41#include "UI_resources.hh"
42#include "UI_view2d.hh"
43
44#include "BLO_read_write.hh"
45
46#include "file_indexer.hh"
47#include "file_intern.hh" /* own include */
48#include "filelist.hh"
49#include "fsmenu.h"
50
51/* ******************** default callbacks for file space ***************** */
52
53static SpaceLink *file_create(const ScrArea * /*area*/, const Scene * /*scene*/)
54{
55 ARegion *region;
56 SpaceFile *sfile;
57
58 sfile = static_cast<SpaceFile *>(MEM_callocN(sizeof(SpaceFile), "initfile"));
59 sfile->spacetype = SPACE_FILE;
60
61 /* header */
62 region = static_cast<ARegion *>(MEM_callocN(sizeof(ARegion), "header for file"));
63 BLI_addtail(&sfile->regionbase, region);
64 region->regiontype = RGN_TYPE_HEADER;
65 /* Ignore user preference "USER_HEADER_BOTTOM" here (always show top for new types). */
66 region->alignment = RGN_ALIGN_TOP;
67
68 /* Tools region */
69 region = static_cast<ARegion *>(MEM_callocN(sizeof(ARegion), "tools region for file"));
70 BLI_addtail(&sfile->regionbase, region);
71 region->regiontype = RGN_TYPE_TOOLS;
72 region->alignment = RGN_ALIGN_LEFT;
73
74 /* ui list region */
75 region = static_cast<ARegion *>(MEM_callocN(sizeof(ARegion), "ui region for file"));
76 BLI_addtail(&sfile->regionbase, region);
77 region->regiontype = RGN_TYPE_UI;
78 region->alignment = RGN_ALIGN_TOP;
80
81 /* execute region */
82 region = static_cast<ARegion *>(MEM_callocN(sizeof(ARegion), "execute region for file"));
83 BLI_addtail(&sfile->regionbase, region);
84 region->regiontype = RGN_TYPE_EXECUTE;
85 region->alignment = RGN_ALIGN_BOTTOM;
87
88 /* tools props region */
89 region = static_cast<ARegion *>(MEM_callocN(sizeof(ARegion), "tool props for file"));
90 BLI_addtail(&sfile->regionbase, region);
91 region->regiontype = RGN_TYPE_TOOL_PROPS;
92 region->alignment = RGN_ALIGN_RIGHT;
93 region->flag = RGN_FLAG_HIDDEN;
94
95 /* main region */
96 region = static_cast<ARegion *>(MEM_callocN(sizeof(ARegion), "main region for file"));
97 BLI_addtail(&sfile->regionbase, region);
98 region->regiontype = RGN_TYPE_WINDOW;
99 region->v2d.scroll = (V2D_SCROLL_RIGHT | V2D_SCROLL_BOTTOM);
100 region->v2d.align = (V2D_ALIGN_NO_NEG_X | V2D_ALIGN_NO_POS_Y);
101 region->v2d.keepzoom = (V2D_LOCKZOOM_X | V2D_LOCKZOOM_Y | V2D_LIMITZOOM | V2D_KEEPASPECT);
102 region->v2d.keeptot = V2D_KEEPTOT_STRICT;
103 region->v2d.minzoom = region->v2d.maxzoom = 1.0f;
104
105 return (SpaceLink *)sfile;
106}
107
108/* Doesn't free the space-link itself. */
109static void file_free(SpaceLink *sl)
110{
111 SpaceFile *sfile = (SpaceFile *)sl;
112
113 BLI_assert(sfile->previews_timer == nullptr);
114
115 if (sfile->files) {
116 /* XXX would need to do thumbnails_stop here, but no context available */
117 filelist_freelib(sfile->files);
118 filelist_free(sfile->files);
119 MEM_freeN(sfile->files);
120 sfile->files = nullptr;
121 }
122
124
125 MEM_SAFE_FREE(sfile->params);
127 if (sfile->runtime != nullptr) {
129 }
130 MEM_SAFE_FREE(sfile->runtime);
131
132 MEM_SAFE_FREE(sfile->layout);
133}
134
135/* spacetype; init callback, area size changes, screen set, etc */
136static void file_init(wmWindowManager * /*wm*/, ScrArea *area)
137{
138 SpaceFile *sfile = (SpaceFile *)area->spacedata.first;
139
140 if (sfile->layout) {
141 sfile->layout->dirty = true;
142 }
143
144 if (sfile->runtime == nullptr) {
145 sfile->runtime = static_cast<SpaceFile_Runtime *>(
146 MEM_callocN(sizeof(*sfile->runtime), __func__));
148 }
149 /* Validate the params right after file read. */
151}
152
153static void file_exit(wmWindowManager *wm, ScrArea *area)
154{
155 SpaceFile *sfile = (SpaceFile *)area->spacedata.first;
156
157 if (sfile->previews_timer) {
159 sfile->previews_timer = nullptr;
160 }
161
162 ED_fileselect_exit(wm, sfile);
163}
164
166{
167 SpaceFile *sfileo = (SpaceFile *)sl;
168 SpaceFile *sfilen = static_cast<SpaceFile *>(MEM_dupallocN(sl));
169
170 /* clear or remove stuff from old */
171 sfilen->op = nullptr; /* file window doesn't own operators */
172 sfilen->runtime = nullptr;
173
174 sfilen->previews_timer = nullptr;
175 sfilen->smoothscroll_timer = nullptr;
176
177 FileSelectParams *active_params_old = ED_fileselect_get_active_params(sfileo);
178 if (active_params_old) {
179 sfilen->files = filelist_new(active_params_old->type);
180 filelist_setdir(sfilen->files, active_params_old->dir);
181 }
182
183 if (sfileo->params) {
184 sfilen->params = static_cast<FileSelectParams *>(MEM_dupallocN(sfileo->params));
185 }
186 if (sfileo->asset_params) {
187 sfilen->asset_params = static_cast<FileAssetSelectParams *>(
188 MEM_dupallocN(sfileo->asset_params));
189 }
190
192
193 if (sfileo->layout) {
194 sfilen->layout = static_cast<FileLayout *>(MEM_dupallocN(sfileo->layout));
195 }
196 return (SpaceLink *)sfilen;
197}
198
199static void file_refresh(const bContext *C, ScrArea *area)
200{
201 using namespace blender::ed;
203 wmWindow *win = CTX_wm_window(C);
204 SpaceFile *sfile = CTX_wm_space_file(C);
207 FSMenu *fsmenu = ED_fsmenu_get();
208
211
212 if (sfile->runtime != nullptr) {
213 sfile->runtime->is_blendfile_status_set = false;
214 }
215
216 if (sfile->files && (sfile->tags & FILE_TAG_REBUILD_MAIN_FILES) &&
218 {
220 }
221 sfile->tags &= ~FILE_TAG_REBUILD_MAIN_FILES;
222
223 if (!sfile->files) {
224 sfile->files = filelist_new(params->type);
225 params->highlight_file = -1; /* added this so it opens nicer (ton) */
226 }
227
229 /* Ask the asset code for appropriate ID filter flags for the supported assets, and mask others
230 * out. */
231 params->filter_id &= asset::types_supported_as_filter_flags();
232 }
233
234 filelist_settype(sfile->files, params->type);
235 filelist_setdir(sfile->files, params->dir);
236 filelist_setrecursion(sfile->files, params->recursion_level);
238 filelist_setlibrary(sfile->files, asset_params ? &asset_params->asset_library_ref : nullptr);
240 sfile->files,
241 (params->flag & FILE_FILTER) != 0,
242 (params->flag & FILE_HIDE_DOT) != 0,
243 true, /* Just always hide parent, prefer to not add an extra user option for this. */
244 params->filter,
245 params->filter_id,
246 (params->flag & FILE_ASSETS_ONLY) != 0,
247 params->filter_glob,
248 params->filter_search);
249 if (asset_params) {
251 sfile->files,
253 &asset_params->catalog_id);
254 }
255
257 const bool use_asset_indexer = !USER_EXPERIMENTAL_TEST(&U, no_asset_indexing);
259 sfile->files, use_asset_indexer ? &asset::index::file_indexer_asset : &file_indexer_noop);
260 }
261
262 /* Update the active indices of bookmarks & co. */
268
269 if (filelist_needs_force_reset(sfile->files)) {
270 filelist_readjob_stop(sfile->files, wm);
272 }
273
274 if (filelist_needs_reading(sfile->files)) {
275 if (!filelist_pending(sfile->files)) {
277 }
278 }
279
280 filelist_sort(sfile->files);
281 filelist_filter(sfile->files);
282
283 if (params->display == FILE_IMGDISPLAY) {
285 }
286 else {
287 filelist_cache_previews_set(sfile->files, false);
288 if (sfile->previews_timer) {
290 sfile->previews_timer = nullptr;
291 }
292 }
293
294 if (params->rename_flag != 0) {
296 }
297
298 if (sfile->layout) {
299 sfile->layout->dirty = true;
300 }
301
302 if (area) {
304 const short region_flag_old = region_props->flag;
305 if (!(region_props->v2d.flag & V2D_IS_INIT)) {
307 /* Hide by default in asset browser. */
308 region_props->flag |= RGN_FLAG_HIDDEN;
309 }
310 else {
311 if (params->flag & FILE_HIDE_TOOL_PROPS) {
312 region_props->flag |= RGN_FLAG_HIDDEN;
313 }
314 else {
315 region_props->flag &= ~RGN_FLAG_HIDDEN;
316 }
317 }
318 }
319 if (region_flag_old != region_props->flag) {
320 ED_region_visibility_change_update((bContext *)C, area, region_props);
321 }
322 }
323
324 ED_area_tag_redraw(area);
325}
326
329 onReloadFnData custom_data)
330{
331 sfile->runtime->on_reload = callback;
332 sfile->runtime->on_reload_custom_data = custom_data;
333}
334
336{
337 if (sfile->runtime->on_reload == nullptr) {
338 return;
339 }
340
341 sfile->runtime->on_reload(sfile, sfile->runtime->on_reload_custom_data);
342
343 sfile->runtime->on_reload = nullptr;
344 sfile->runtime->on_reload_custom_data = nullptr;
345}
346
354
355static void file_listener(const wmSpaceTypeListenerParams *listener_params)
356{
357 ScrArea *area = listener_params->area;
358 const wmNotifier *wmn = listener_params->notifier;
359 SpaceFile *sfile = (SpaceFile *)area->spacedata.first;
360
361 /* context changes */
362 switch (wmn->category) {
363 case NC_SPACE:
364 switch (wmn->data) {
367 break;
370 break;
372 if (sfile->files && filelist_cache_previews_update(sfile->files)) {
374 }
375 break;
377 if (sfile->browse_mode == FILE_BROWSE_MODE_ASSETS) {
379 }
380 break;
381 case ND_SPACE_CHANGED:
382 /* If the space was just turned into a file/asset browser, the file-list may need to be
383 * updated to reflect latest changes in main data. */
385 break;
386 }
387 switch (wmn->action) {
388 case NA_JOB_FINISHED:
390 break;
391 }
392 break;
393 case NC_ID: {
394 switch (wmn->action) {
395 case NA_RENAME: {
396 const ID *active_file_id = ED_fileselect_active_asset_get(sfile);
397 /* If a renamed ID is active in the file browser, update scrolling to keep it in view. */
398 if (active_file_id && (wmn->reference == active_file_id)) {
400 params->rename_id = active_file_id;
402 static_cast<wmWindowManager *>(G_MAIN->wm.first), listener_params->window, sfile);
403 }
404
405 /* Force list to update sorting (with a full reset for now). */
407 break;
408 }
409 }
410 break;
411 }
412 case NC_ASSET: {
413 switch (wmn->action) {
414 case NA_SELECTED:
415 case NA_ACTIVATED:
417 break;
418 case NA_ADDED:
419 case NA_REMOVED:
420 case NA_EDITED:
422 break;
423 }
424 break;
425 }
426 }
427}
428
429/* add handlers, stuff you only do once or on area/region changes */
431{
432 wmKeyMap *keymap;
433
434 UI_view2d_region_reinit(&region->v2d, V2D_COMMONVIEW_LIST, region->winx, region->winy);
435
436 /* Truncate, otherwise these can be on ".5" and give fuzzy text. #77696. */
437 region->v2d.cur.ymin = trunc(region->v2d.cur.ymin);
438 region->v2d.cur.ymax = trunc(region->v2d.cur.ymax);
439
440 /* own keymaps */
441 keymap = WM_keymap_ensure(wm->defaultconf, "File Browser", SPACE_FILE, RGN_TYPE_WINDOW);
442 WM_event_add_keymap_handler_v2d_mask(&region->handlers, keymap);
443
444 keymap = WM_keymap_ensure(wm->defaultconf, "File Browser Main", SPACE_FILE, RGN_TYPE_WINDOW);
445 WM_event_add_keymap_handler_v2d_mask(&region->handlers, keymap);
446}
447
448static void file_main_region_listener(const wmRegionListenerParams *listener_params)
449{
450 ARegion *region = listener_params->region;
451 const wmNotifier *wmn = listener_params->notifier;
452
453 /* context changes */
454 switch (wmn->category) {
455 case NC_SPACE:
456 switch (wmn->data) {
458 ED_region_tag_redraw(region);
459 break;
461 ED_region_tag_redraw(region);
462 break;
463 }
464 break;
465 case NC_ID:
467 ED_region_tag_redraw(region);
468 }
469 break;
470 }
471}
472
474{
475 wmMsgBus *mbus = params->message_bus;
476 bScreen *screen = params->screen;
477 ScrArea *area = params->area;
478 ARegion *region = params->region;
479 SpaceFile *sfile = static_cast<SpaceFile *>(area->spacedata.first);
480
482 /* This is a bit odd that a region owns the subscriber for an area,
483 * keep for now since all subscribers for WM are regions.
484 * May be worth re-visiting later. */
485 wmMsgSubscribeValue msg_sub_value_area_tag_refresh{};
486 msg_sub_value_area_tag_refresh.owner = region;
487 msg_sub_value_area_tag_refresh.user_data = area;
488 msg_sub_value_area_tag_refresh.notify = ED_area_do_msg_notify_tag_refresh;
489
490 /* SpaceFile itself. */
491 {
492 PointerRNA ptr = RNA_pointer_create(&screen->id, &RNA_SpaceFileBrowser, sfile);
493
494 /* All properties for this space type. */
495 WM_msg_subscribe_rna(mbus, &ptr, nullptr, &msg_sub_value_area_tag_refresh, __func__);
496 }
497
498 /* FileSelectParams */
499 {
500 PointerRNA ptr = RNA_pointer_create(&screen->id, &RNA_FileSelectParams, file_params);
501
502 /* All properties for this space type. */
503 WM_msg_subscribe_rna(mbus, &ptr, nullptr, &msg_sub_value_area_tag_refresh, __func__);
504 }
505
506 /* Experimental Asset Browser features option. */
507 {
508 PointerRNA ptr = RNA_pointer_create(nullptr, &RNA_PreferencesExperimental, &U.experimental);
509 PropertyRNA *prop = RNA_struct_find_property(&ptr, "use_extended_asset_browser");
510
511 /* All properties for this space type. */
512 WM_msg_subscribe_rna(mbus, &ptr, prop, &msg_sub_value_area_tag_refresh, __func__);
513 }
514}
515
517{
518 /* Needed, because filelist is not initialized on loading */
519 if (!sfile->files || filelist_needs_reading(sfile->files)) {
520 return true;
521 }
522
523 /* File reading tagged the space because main data changed that may require a filelist reset. */
526 {
527 return true;
528 }
529
530 return false;
531}
532
533static void file_main_region_draw(const bContext *C, ARegion *region)
534{
535 /* draw entirely, view changes should be handled here */
536 SpaceFile *sfile = CTX_wm_space_file(C);
538
539 View2D *v2d = &region->v2d;
540
542 file_refresh(C, nullptr);
543 }
544
545 /* clear and setup matrix */
547
548 /* Allow dynamically sliders to be set, saves notifiers etc. */
549
550 if (params->display == FILE_IMGDISPLAY) {
552 v2d->keepofs &= ~V2D_LOCKOFS_Y;
553 v2d->keepofs |= V2D_LOCKOFS_X;
554 }
555 else if (params->display == FILE_VERTICALDISPLAY) {
557 v2d->keepofs &= ~V2D_LOCKOFS_Y;
558 v2d->keepofs |= V2D_LOCKOFS_X;
559 }
560 else {
562 v2d->keepofs &= ~V2D_LOCKOFS_X;
563 v2d->keepofs |= V2D_LOCKOFS_Y;
564
565 /* XXX this happens on scaling down Screen (like from startup.blend) */
566 /* view2d has no type specific for file-window case, which doesn't scroll vertically. */
567 if (v2d->cur.ymax < 0) {
568 v2d->cur.ymin -= v2d->cur.ymax;
569 v2d->cur.ymax = 0;
570 }
571 }
572 /* v2d has initialized flag, so this call will only set the mask correct */
573 UI_view2d_region_reinit(v2d, V2D_COMMONVIEW_LIST, region->winx, region->winy);
574
575 /* sets tile/border settings in sfile */
576 file_calc_previews(C, region);
577
578 /* set view */
580
581 /* on first read, find active file */
582 if (params->highlight_file == -1) {
583 const wmEvent *event = CTX_wm_window(C)->eventstate;
584 file_highlight_set(sfile, region, event->xy[0], event->xy[1]);
585 }
586
587 if (!file_draw_hint_if_invalid(C, sfile, region)) {
588 file_draw_list(C, region);
589 }
590
591 /* reset view matrix */
593
594 /* scrollers */
595 rcti view_rect;
596 ED_fileselect_layout_maskrect(sfile->layout, v2d, &view_rect);
597 UI_view2d_scrollers_draw(v2d, &view_rect);
598}
599
601{
632}
633
634/* NOTE: do not add .blend file reading on this level */
635static void file_keymap(wmKeyConfig *keyconf)
636{
637 /* keys for all regions */
638 WM_keymap_ensure(keyconf, "File Browser", SPACE_FILE, RGN_TYPE_WINDOW);
639
640 /* keys for main region */
641 WM_keymap_ensure(keyconf, "File Browser Main", SPACE_FILE, RGN_TYPE_WINDOW);
642
643 /* keys for button region (top) */
644 WM_keymap_ensure(keyconf, "File Browser Buttons", SPACE_FILE, RGN_TYPE_WINDOW);
645}
646
648{
649 const SpaceFile *sfile = (SpaceFile *)params->area->spacedata.first;
650 /* Always visible except when browsing assets. */
651 return sfile->browse_mode != FILE_BROWSE_MODE_ASSETS;
652}
653
655{
656 const SpaceFile *sfile = (SpaceFile *)params->area->spacedata.first;
657 return (sfile->browse_mode == FILE_BROWSE_MODE_ASSETS) || (sfile->op != nullptr);
658}
659
661{
662 const SpaceFile *sfile = (SpaceFile *)params->area->spacedata.first;
663 return sfile->op != nullptr;
664}
665
667{
668 wmKeyMap *keymap;
669
670 region->v2d.scroll = V2D_SCROLL_RIGHT | V2D_SCROLL_VERTICAL_HIDE;
671 ED_region_panels_init(wm, region);
672
673 /* own keymaps */
674 keymap = WM_keymap_ensure(wm->defaultconf, "File Browser", SPACE_FILE, RGN_TYPE_WINDOW);
675 WM_event_add_keymap_handler_v2d_mask(&region->handlers, keymap);
676}
677
678static void file_tools_region_draw(const bContext *C, ARegion *region)
679{
680 ED_region_panels(C, region);
681}
682
683static void file_tools_region_listener(const wmRegionListenerParams *listener_params)
684{
685 const wmNotifier *wmn = listener_params->notifier;
686 ARegion *region = listener_params->region;
687
688 switch (wmn->category) {
689 case NC_SCENE:
690 if (ELEM(wmn->data, ND_MODE)) {
691 ED_region_tag_redraw(region);
692 }
693 break;
694 }
695}
696
698{
699 const wmNotifier *wmn = listener_params->notifier;
700 ARegion *region = listener_params->region;
701
702 switch (wmn->category) {
703 case NC_ID:
704 if (ELEM(wmn->action, NA_RENAME)) {
705 /* In case the filelist shows ID names. */
706 ED_region_tag_redraw(region);
707 }
708 break;
709 case NC_SCENE:
710 if (ELEM(wmn->data, ND_MODE)) {
711 ED_region_tag_redraw(region);
712 }
713 break;
714 }
715}
716
717/* add handlers, stuff you only do once or on area/region changes */
719{
720 wmKeyMap *keymap;
721
722 ED_region_header_init(region);
723
724 keymap = WM_keymap_ensure(wm->defaultconf, "File Browser", SPACE_FILE, RGN_TYPE_WINDOW);
725 WM_event_add_keymap_handler_v2d_mask(&region->handlers, keymap);
726}
727
728static void file_header_region_draw(const bContext *C, ARegion *region)
729{
730 ED_region_header(C, region);
731}
732
733/* add handlers, stuff you only do once or on area/region changes */
735{
736 wmKeyMap *keymap;
737
738 ED_region_panels_init(wm, region);
739 region->v2d.keepzoom |= V2D_LOCKZOOM_X | V2D_LOCKZOOM_Y;
740
741 /* own keymap */
742 keymap = WM_keymap_ensure(wm->defaultconf, "File Browser", SPACE_FILE, RGN_TYPE_WINDOW);
743 WM_event_add_keymap_handler_v2d_mask(&region->handlers, keymap);
744
745 keymap = WM_keymap_ensure(wm->defaultconf, "File Browser Buttons", SPACE_FILE, RGN_TYPE_WINDOW);
746 WM_event_add_keymap_handler_v2d_mask(&region->handlers, keymap);
747}
748
749static void file_ui_region_draw(const bContext *C, ARegion *region)
750{
751 ED_region_panels(C, region);
752}
753
755{
756 wmKeyMap *keymap;
757
758 ED_region_panels_init(wm, region);
759 region->v2d.keepzoom |= V2D_LOCKZOOM_X | V2D_LOCKZOOM_Y;
760
761 /* own keymap */
762 keymap = WM_keymap_ensure(wm->defaultconf, "File Browser", SPACE_FILE, RGN_TYPE_WINDOW);
763 WM_event_add_keymap_handler_v2d_mask(&region->handlers, keymap);
764}
765
766static void file_execution_region_draw(const bContext *C, ARegion *region)
767{
768 ED_region_panels(C, region);
769}
770
771static void file_ui_region_listener(const wmRegionListenerParams *listener_params)
772{
773 ARegion *region = listener_params->region;
774 const wmNotifier *wmn = listener_params->notifier;
775
776 /* context changes */
777 switch (wmn->category) {
778 case NC_SPACE:
779 switch (wmn->data) {
781 ED_region_tag_redraw(region);
782 break;
783 }
784 break;
785 }
786}
787
788static bool filepath_drop_poll(bContext *C, wmDrag *drag, const wmEvent * /*event*/)
789{
790 if (drag->type == WM_DRAG_PATH) {
791 SpaceFile *sfile = CTX_wm_space_file(C);
792 if (sfile) {
793 return true;
794 }
795 }
796 return false;
797}
798
799static void filepath_drop_copy(bContext * /*C*/, wmDrag *drag, wmDropBox *drop)
800{
801 RNA_string_set(drop->ptr, "filepath", WM_drag_get_single_path(drag));
802}
803
804/* region dropbox definition */
805static void file_dropboxes()
806{
808
810 lb, "FILE_OT_filepath_drop", filepath_drop_poll, filepath_drop_copy, nullptr, nullptr);
811}
812
814{
815 SpaceFile *sfile = static_cast<SpaceFile *>(area->spacedata.first);
816 return sfile->browse_mode;
817}
818
819static void file_space_subtype_set(ScrArea *area, int value)
820{
821 SpaceFile *sfile = static_cast<SpaceFile *>(area->spacedata.first);
822 /* Force re-init. */
823 LISTBASE_FOREACH (ARegion *, region, &area->regionbase) {
824 region->v2d.flag &= ~V2D_IS_INIT;
825 }
826 sfile->browse_mode = value;
827}
828
829static void file_space_subtype_item_extend(bContext * /*C*/, EnumPropertyItem **item, int *totitem)
830{
832}
833
835{
836 SpaceFile *sfile = static_cast<SpaceFile *>(area->spacedata.first);
839 return item.name;
840}
841
842static int file_space_icon_get(const ScrArea *area)
843{
844 SpaceFile *sfile = static_cast<SpaceFile *>(area->spacedata.first);
847 return item.icon;
848}
849
850static void file_id_remap(ScrArea *area,
851 SpaceLink *sl,
852 const blender::bke::id::IDRemapper & /*mappings*/)
853{
854 SpaceFile *sfile = (SpaceFile *)sl;
855
856 /* If the file shows main data (IDs), tag it for reset.
857 * Full reset of the file list if main data was changed, don't even attempt remap pointers.
858 * We could give file list types a id-remap callback, but it's probably not worth it.
859 * Refreshing local file lists is relatively cheap. */
861}
862
863static void file_foreach_id(SpaceLink *space_link, LibraryForeachIDData *data)
864{
865 SpaceFile *sfile = reinterpret_cast<SpaceFile *>(space_link);
866 const int data_flags = BKE_lib_query_foreachid_process_flags_get(data);
867 const bool is_readonly = (data_flags & IDWALK_READONLY) != 0;
868
869 /* TODO: investigate whether differences between this code and the one in #file_id_remap are
870 * meaningful and make sense or not. */
871 if (!is_readonly) {
872 sfile->op = nullptr;
874 }
875}
876
878{
879 SpaceFile *sfile = (SpaceFile *)sl;
880
881 /* this sort of info is probably irrelevant for reloading...
882 * plus, it isn't saved to files yet!
883 */
884 sfile->folders_prev = sfile->folders_next = nullptr;
886 sfile->files = nullptr;
887 sfile->layout = nullptr;
888 sfile->op = nullptr;
889 sfile->previews_timer = nullptr;
890 sfile->tags = 0;
891 sfile->runtime = nullptr;
892 BLO_read_struct(reader, FileSelectParams, &sfile->params);
894 if (sfile->params) {
895 sfile->params->rename_id = nullptr;
896 }
897 if (sfile->asset_params) {
898 sfile->asset_params->base_params.rename_id = nullptr;
899 }
900}
901
903 ID * /*parent_id*/,
904 SpaceLink *sl)
905{
906 SpaceFile *sfile = reinterpret_cast<SpaceFile *>(sl);
907
909}
910
912{
913 SpaceFile *sfile = (SpaceFile *)sl;
914
915 BLO_write_struct(writer, SpaceFile, sl);
916 if (sfile->params) {
918 }
919 if (sfile->asset_params) {
921 }
922}
923
925{
926 std::unique_ptr<SpaceType> st = std::make_unique<SpaceType>();
927 ARegionType *art;
928
929 st->spaceid = SPACE_FILE;
930 STRNCPY(st->name, "File");
931
932 st->create = file_create;
933 st->free = file_free;
934 st->init = file_init;
935 st->exit = file_exit;
936 st->duplicate = file_duplicate;
937 st->refresh = file_refresh;
938 st->listener = file_listener;
939 st->operatortypes = file_operatortypes;
940 st->keymap = file_keymap;
941 st->dropboxes = file_dropboxes;
942 st->space_subtype_item_extend = file_space_subtype_item_extend;
943 st->space_subtype_get = file_space_subtype_get;
944 st->space_subtype_set = file_space_subtype_set;
945 st->space_name_get = file_space_name_get;
946 st->space_icon_get = file_space_icon_get;
947 st->context = file_context;
948 st->id_remap = file_id_remap;
949 st->foreach_id = file_foreach_id;
950 st->blend_read_data = file_space_blend_read_data;
951 st->blend_read_after_liblink = file_space_blend_read_after_liblink;
952 st->blend_write = file_space_blend_write;
953
954 /* regions: main window */
955 art = static_cast<ARegionType *>(MEM_callocN(sizeof(ARegionType), "spacetype file region"));
962 BLI_addhead(&st->regiontypes, art);
963
964 /* regions: header */
965 art = static_cast<ARegionType *>(MEM_callocN(sizeof(ARegionType), "spacetype file region"));
967 art->prefsizey = HEADERY;
971 // art->listener = file_header_region_listener;
972 BLI_addhead(&st->regiontypes, art);
973
974 /* regions: ui */
975 art = static_cast<ARegionType *>(MEM_callocN(sizeof(ARegionType), "spacetype file region"));
976 art->regionid = RGN_TYPE_UI;
982 BLI_addhead(&st->regiontypes, art);
983
984 /* regions: execution */
985 art = static_cast<ARegionType *>(MEM_callocN(sizeof(ARegionType), "spacetype file region"));
992 BLI_addhead(&st->regiontypes, art);
994
995 /* regions: channels (directories) */
996 art = static_cast<ARegionType *>(MEM_callocN(sizeof(ARegionType), "spacetype file region"));
998 art->prefsizex = 240;
999 art->prefsizey = 60;
1000 art->keymapflag = ED_KEYMAP_UI;
1004 BLI_addhead(&st->regiontypes, art);
1006
1007 /* regions: tool properties */
1008 art = static_cast<ARegionType *>(
1009 MEM_callocN(sizeof(ARegionType), "spacetype file operator region"));
1011 art->prefsizex = 240;
1012 art->prefsizey = 60;
1013 art->keymapflag = ED_KEYMAP_UI;
1018 BLI_addhead(&st->regiontypes, art);
1021
1022 BKE_spacetype_register(std::move(st));
1023}
1024
1026{
1029}
1030
1032{
1033 fsmenu_free();
1034
1035 if (G.background == false) {
1037 }
1038}
1039
1041{
1042 const std::optional<std::string> cfgdir = BKE_appdir_folder_id(BLENDER_USER_CONFIG, nullptr);
1043
1044 fsmenu_free();
1045
1047
1048 if (cfgdir.has_value()) {
1049 char filepath[FILE_MAX];
1050 BLI_path_join(filepath, sizeof(filepath), cfgdir->c_str(), BLENDER_BOOKMARK_FILE);
1052 }
1053}
#define BLENDER_BOOKMARK_FILE
@ BLENDER_USER_CONFIG
std::optional< std::string > BKE_appdir_folder_id(int folder_id, const char *subfolder) ATTR_WARN_UNUSED_RESULT
Definition appdir.cc:704
SpaceFile * CTX_wm_space_file(const bContext *C)
wmWindow * CTX_wm_window(const bContext *C)
wmWindowManager * CTX_wm_manager(const bContext *C)
#define G_MAIN
int BKE_lib_query_foreachid_process_flags_get(const LibraryForeachIDData *data)
Definition lib_query.cc:120
@ IDWALK_READONLY
void BKE_reports_free(ReportList *reports)
Definition report.cc:69
void BKE_reports_init(ReportList *reports, int flag)
Definition report.cc:54
void BKE_spacetype_register(std::unique_ptr< SpaceType > st)
Definition screen.cc:268
ARegion * BKE_area_find_region_type(const ScrArea *area, int region_type)
Definition screen.cc:815
#define BLI_assert(a)
Definition BLI_assert.h:50
void BLI_addhead(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
Definition listbase.cc:90
#define LISTBASE_FOREACH(type, var, list)
BLI_INLINE void BLI_listbase_clear(struct ListBase *lb)
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
Definition listbase.cc:110
#define FILE_MAX
#define BLI_path_join(...)
#define STRNCPY(dst, src)
Definition BLI_string.h:593
#define ELEM(...)
#define BLO_write_struct(writer, struct_name, data_ptr)
#define BLO_read_struct(reader, struct_name, ptr_p)
#define HEADERY
@ RGN_ALIGN_BOTTOM
@ RGN_ALIGN_LEFT
@ RGN_ALIGN_TOP
@ RGN_ALIGN_RIGHT
@ RGN_TYPE_EXECUTE
@ RGN_TYPE_UI
@ RGN_TYPE_WINDOW
@ RGN_TYPE_HEADER
@ RGN_TYPE_TOOLS
@ RGN_TYPE_TOOL_PROPS
@ RGN_FLAG_DYNAMIC_SIZE
@ RGN_FLAG_HIDDEN
@ RGN_FLAG_NO_USER_RESIZE
@ SPACE_FILE
@ SPACE_EMPTY
@ FILE_TAG_REBUILD_MAIN_FILES
eFileSel_Params_AssetCatalogVisibility
@ FILE_BROWSE_MODE_ASSETS
@ FILE_VERTICALDISPLAY
@ FILE_IMGDISPLAY
@ FILE_HIDE_TOOL_PROPS
@ FILE_FILTER
@ FILE_SORT_INVERT
@ FILE_ASSETS_ONLY
@ FILE_HIDE_DOT
#define USER_EXPERIMENTAL_TEST(userdef, member)
@ V2D_ALIGN_NO_NEG_X
@ V2D_ALIGN_NO_POS_Y
@ V2D_IS_INIT
@ V2D_LOCKOFS_X
@ V2D_LOCKOFS_Y
@ V2D_SCROLL_VERTICAL_HIDE
@ V2D_SCROLL_RIGHT
@ V2D_SCROLL_BOTTOM
@ V2D_KEEPTOT_STRICT
@ V2D_LIMITZOOM
@ V2D_LOCKZOOM_X
@ V2D_KEEPASPECT
@ V2D_LOCKZOOM_Y
FSMenu * ED_fsmenu_get()
Definition fsmenu.cc:45
@ FS_CATEGORY_RECENT
@ FS_CATEGORY_BOOKMARKS
@ FS_CATEGORY_SYSTEM_BOOKMARKS
@ FS_CATEGORY_SYSTEM
FileSelectParams * ED_fileselect_get_active_params(const SpaceFile *sfile)
Definition filesel.cc:380
ID * ED_fileselect_active_asset_get(const SpaceFile *sfile)
Definition filesel.cc:481
FileSelectParams * ED_fileselect_ensure_active_params(SpaceFile *sfile)
Definition filesel.cc:361
void ED_fileselect_exit(wmWindowManager *wm, SpaceFile *sfile)
Definition filesel.cc:1303
bool ED_fileselect_is_asset_browser(const SpaceFile *sfile)
Definition filesel.cc:467
FileAssetSelectParams * ED_fileselect_get_asset_params(const SpaceFile *sfile)
Definition filesel.cc:403
void ED_fileselect_layout_maskrect(const FileLayout *layout, const View2D *v2d, rcti *r_rect)
Definition filesel.cc:851
void ED_area_tag_redraw(ScrArea *area)
Definition area.cc:708
void ED_region_panels(const bContext *C, ARegion *region)
Definition area.cc:3336
void ED_region_header(const bContext *C, ARegion *region)
Definition area.cc:3646
void ED_region_header_init(ARegion *region)
Definition area.cc:3661
void ED_region_visibility_change_update(bContext *C, ScrArea *area, ARegion *region)
Definition area.cc:2254
void ED_area_tag_refresh(ScrArea *area)
Definition area.cc:737
void ED_region_panels_init(wmWindowManager *wm, ARegion *region)
Definition area.cc:3343
void ED_area_do_msg_notify_tag_refresh(bContext *C, wmMsgSubscribeKey *msg_key, wmMsgSubscribeValue *msg_val)
Definition area.cc:404
void ED_region_tag_redraw(ARegion *region)
Definition area.cc:634
@ ED_KEYMAP_UI
Definition ED_screen.hh:725
@ ED_KEYMAP_HEADER
Definition ED_screen.hh:731
@ ED_KEYMAP_VIEW2D
Definition ED_screen.hh:728
void IMB_thumb_makedirs()
Definition thumbs.cc:298
Read Guarded memory(de)allocation.
#define MEM_SAFE_FREE(v)
@ TH_BACK
void UI_ThemeClearColor(int colorid)
void UI_view2d_scrollers_draw(View2D *v2d, const rcti *mask_custom)
Definition view2d.cc:1605
void UI_view2d_view_restore(const bContext *C)
Definition view2d.cc:1158
void UI_view2d_region_reinit(View2D *v2d, short type, int winx, int winy)
Definition view2d.cc:212
void UI_view2d_view_ortho(const View2D *v2d)
Definition view2d.cc:1091
@ V2D_COMMONVIEW_LIST
Definition UI_view2d.hh:35
#define NA_ACTIVATED
Definition WM_types.hh:556
#define NC_ID
Definition WM_types.hh:362
#define ND_SPACE_CHANGED
Definition WM_types.hh:504
#define ND_SPACE_ASSET_PARAMS
Definition WM_types.hh:491
#define ND_MODE
Definition WM_types.hh:412
#define NC_SCENE
Definition WM_types.hh:345
#define NA_ADDED
Definition WM_types.hh:552
#define NA_EDITED
Definition WM_types.hh:550
#define ND_SPACE_FILE_PREVIEW
Definition WM_types.hh:506
#define NC_ASSET
Definition WM_types.hh:371
#define NA_REMOVED
Definition WM_types.hh:553
#define NA_RENAME
Definition WM_types.hh:554
@ WM_DRAG_PATH
Definition WM_types.hh:1160
#define NA_JOB_FINISHED
Definition WM_types.hh:558
#define ND_SPACE_FILE_PARAMS
Definition WM_types.hh:489
#define NC_SPACE
Definition WM_types.hh:359
#define NA_SELECTED
Definition WM_types.hh:555
#define ND_SPACE_FILE_LIST
Definition WM_types.hh:490
unsigned int U
Definition btGjkEpa3.h:78
DEGForeachIDComponentCallback callback
int file_context(const bContext *C, const char *member, bContextDataResult *result)
void file_calc_previews(const bContext *C, ARegion *region)
Definition file_draw.cc:503
bool file_draw_hint_if_invalid(const bContext *C, const SpaceFile *sfile, ARegion *region)
void file_draw_list(const bContext *C, ARegion *region)
const FileIndexerType file_indexer_noop
void FILE_OT_parent(wmOperatorType *ot)
Definition file_ops.cc:2262
void(* onReloadFn)(SpaceFile *space_data, onReloadFnData custom_data)
void FILE_OT_select_box(wmOperatorType *ot)
Definition file_ops.cc:530
void FILE_OT_directory_new(wmOperatorType *ot)
Definition file_ops.cc:2720
void FILE_OT_edit_directory_path(wmOperatorType *ot)
Definition file_ops.cc:3291
void FILE_OT_bookmark_add(wmOperatorType *ot)
Definition file_ops.cc:1156
void FILE_OT_select_bookmark(wmOperatorType *ot)
Definition file_ops.cc:1115
void folder_history_list_ensure_for_active_browse_mode(SpaceFile *sfile)
void FILE_OT_refresh(wmOperatorType *ot)
Definition file_ops.cc:2221
void FILE_OT_mouse_execute(wmOperatorType *ot)
Definition file_ops.cc:2181
void file_params_invoke_rename_postscroll(wmWindowManager *wm, wmWindow *win, SpaceFile *sfile)
Definition filesel.cc:1343
void FILE_OT_sort_column_ui_context(wmOperatorType *ot)
Definition file_ops.cc:1517
void FILE_OT_filepath_drop(wmOperatorType *ot)
Definition file_ops.cc:2576
void FILE_OT_previous(wmOperatorType *ot)
Definition file_ops.cc:2298
void file_execute_region_panels_register(ARegionType *art)
void FILE_OT_bookmark_delete(wmOperatorType *ot)
Definition file_ops.cc:1193
void FILE_OT_external_operation(wmOperatorType *ot)
Definition file_ops.cc:1861
void FILE_OT_select_walk(wmOperatorType *ot)
Definition file_ops.cc:931
void FILE_OT_filenum(wmOperatorType *ot)
Definition file_ops.cc:3061
void folder_history_list_free(SpaceFile *sfile)
void FILE_OT_delete(wmOperatorType *ot)
Definition file_ops.cc:3219
ListBase folder_history_list_duplicate(ListBase *listbase)
void fileselect_refresh_params(SpaceFile *sfile)
Definition filesel.cc:454
void FILE_OT_bookmark_cleanup(wmOperatorType *ot)
Definition file_ops.cc:1246
void FILE_OT_smoothscroll(wmOperatorType *ot)
Definition file_ops.cc:2529
void FILE_OT_bookmark_move(wmOperatorType *ot)
Definition file_ops.cc:1334
void FILE_OT_select_all(wmOperatorType *ot)
Definition file_ops.cc:1021
void FILE_OT_reset_recent(wmOperatorType *ot)
Definition file_ops.cc:1383
int file_highlight_set(SpaceFile *sfile, ARegion *region, int mx, int my)
Definition file_ops.cc:1402
void FILE_OT_select(wmOperatorType *ot)
Definition file_ops.cc:648
void * onReloadFnData
void FILE_OT_start_filter(wmOperatorType *ot)
Definition file_ops.cc:3255
void file_tool_props_region_panels_register(ARegionType *art)
void FILE_OT_execute(wmOperatorType *ot)
Definition file_ops.cc:2126
void file_external_operations_menu_register()
Definition file_ops.cc:2028
void FILE_OT_rename(wmOperatorType *ot)
Definition file_ops.cc:3118
void file_tools_region_panels_register(ARegionType *art)
void FILE_OT_cancel(wmOperatorType *ot)
Definition file_ops.cc:1563
void file_params_renamefile_activate(SpaceFile *sfile, FileSelectParams *params)
Definition filesel.cc:1387
void FILE_OT_next(wmOperatorType *ot)
Definition file_ops.cc:2335
void FILE_OT_view_selected(wmOperatorType *ot)
Definition file_ops.cc:1074
void FILE_OT_highlight(wmOperatorType *ot)
Definition file_ops.cc:1464
void FILE_OT_hidedot(wmOperatorType *ot)
Definition file_ops.cc:2981
void filelist_freelib(FileList *filelist)
Definition filelist.cc:2012
void filelist_cache_previews_set(FileList *filelist, const bool use_previews)
Definition filelist.cc:2641
bool filelist_needs_force_reset(const FileList *filelist)
Definition filelist.cc:2115
void filelist_clear_from_reset_tag(FileList *filelist)
Definition filelist.cc:1970
bool filelist_pending(const FileList *filelist)
Definition filelist.cc:2138
void filelist_setfilter_options(FileList *filelist, const bool do_filter, const bool hide_dot, const bool hide_parent, const uint64_t filter, const uint64_t filter_id, const bool filter_assets_only, const char *filter_glob, const char *filter_search)
Definition filelist.cc:1008
void filelist_set_asset_catalog_filter_options(FileList *filelist, eFileSel_Params_AssetCatalogVisibility catalog_visibility, const ::bUUID *catalog_id)
Definition filelist.cc:1071
void filelist_free(FileList *filelist)
Definition filelist.cc:1984
void filelist_setlibrary(FileList *filelist, const AssetLibraryReference *asset_library_ref)
Definition filelist.cc:1111
void filelist_free_icons()
Definition filelist.cc:1136
void filelist_setdir(FileList *filelist, char dirpath[FILE_MAX_LIBEXTRA])
Definition filelist.cc:2085
void filelist_setrecursion(FileList *filelist, const int recursion_level)
Definition filelist.cc:2102
void filelist_setsorting(FileList *filelist, const short sort, bool invert_sort)
Definition filelist.cc:687
bool filelist_cache_previews_update(FileList *filelist)
Definition filelist.cc:2671
void filelist_settype(FileList *filelist, short type)
Definition filelist.cc:1846
FileList * filelist_new(short type)
Definition filelist.cc:1833
void filelist_readjob_stop(FileList *filelist, wmWindowManager *wm)
Definition filelist.cc:4327
int filelist_needs_reading(const FileList *filelist)
Definition filelist.cc:2898
void filelist_filter(FileList *filelist)
Definition filelist.cc:952
void filelist_tag_force_reset_mainfiles(FileList *filelist)
Definition filelist.cc:2125
bool filelist_needs_reset_on_main_changes(const FileList *filelist)
Definition filelist.cc:2143
void filelist_sort(FileList *filelist)
Definition filelist.cc:651
void filelist_setindexer(FileList *filelist, const FileIndexerType *indexer)
Definition filelist.cc:1063
void filelist_readjob_start(FileList *filelist, const int space_notifier, const bContext *C)
Definition filelist.cc:4265
int fsmenu_get_active_indices(FSMenu *fsmenu, enum FSMenuCategory category, const char *dir)
Definition fsmenu.cc:580
void fsmenu_read_bookmarks(FSMenu *fsmenu, const char *filepath)
Definition fsmenu.cc:442
void fsmenu_free()
Definition fsmenu.cc:537
void fsmenu_read_system(struct FSMenu *fsmenu, int read_bookmarks)
uiWidgetBaseParameters params[MAX_WIDGET_BASE_BATCH]
void MEM_freeN(void *vmemh)
Definition mallocn.cc:105
void *(* MEM_callocN)(size_t len, const char *str)
Definition mallocn.cc:42
void *(* MEM_dupallocN)(const void *vmemh)
Definition mallocn.cc:39
#define G(x, y, z)
void RNA_string_set(PointerRNA *ptr, const char *name, const char *value)
PropertyRNA * RNA_struct_find_property(PointerRNA *ptr, const char *identifier)
int RNA_enum_from_value(const EnumPropertyItem *item, const int value)
PointerRNA RNA_pointer_create(ID *id, StructRNA *type, void *data)
void RNA_enum_items_add(EnumPropertyItem **items, int *totitem, const EnumPropertyItem *item)
const EnumPropertyItem rna_enum_space_file_browse_mode_items[]
Definition rna_space.cc:213
static void file_ui_region_init(wmWindowManager *wm, ARegion *region)
static void file_exit(wmWindowManager *wm, ScrArea *area)
static int file_space_subtype_get(ScrArea *area)
static void file_main_region_init(wmWindowManager *wm, ARegion *region)
static bool filepath_drop_poll(bContext *C, wmDrag *drag, const wmEvent *)
static void file_execution_region_draw(const bContext *C, ARegion *region)
static void file_header_region_draw(const bContext *C, ARegion *region)
static void file_tool_props_region_listener(const wmRegionListenerParams *listener_params)
static void file_tools_region_init(wmWindowManager *wm, ARegion *region)
static void file_main_region_draw(const bContext *C, ARegion *region)
static void filepath_drop_copy(bContext *, wmDrag *drag, wmDropBox *drop)
void ED_spacetype_file()
static void file_ui_region_listener(const wmRegionListenerParams *listener_params)
static void file_space_blend_read_data(BlendDataReader *reader, SpaceLink *sl)
static void file_operatortypes()
void file_on_reload_callback_register(SpaceFile *sfile, onReloadFn callback, onReloadFnData custom_data)
static bool file_ui_region_poll(const RegionPollParams *params)
static void file_space_subtype_set(ScrArea *area, int value)
static void file_execution_region_init(wmWindowManager *wm, ARegion *region)
static void file_id_remap(ScrArea *area, SpaceLink *sl, const blender::bke::id::IDRemapper &)
static int file_space_icon_get(const ScrArea *area)
static void file_free(SpaceLink *sl)
static void file_on_reload_callback_call(SpaceFile *sfile)
static blender::StringRefNull file_space_name_get(const ScrArea *area)
static void file_refresh(const bContext *C, ScrArea *area)
static void file_tools_region_draw(const bContext *C, ARegion *region)
static bool file_tool_props_region_poll(const RegionPollParams *params)
static void file_foreach_id(SpaceLink *space_link, LibraryForeachIDData *data)
void ED_file_init()
static SpaceLink * file_create(const ScrArea *, const Scene *)
Definition space_file.cc:53
static void file_listener(const wmSpaceTypeListenerParams *listener_params)
static void file_main_region_listener(const wmRegionListenerParams *listener_params)
bool file_main_region_needs_refresh_before_draw(SpaceFile *sfile)
static void file_dropboxes()
void ED_file_read_bookmarks()
static void file_tools_region_listener(const wmRegionListenerParams *listener_params)
static void file_reset_filelist_showing_main_data(ScrArea *area, SpaceFile *sfile)
static void file_space_blend_read_after_liblink(BlendLibReader *, ID *, SpaceLink *sl)
static void file_space_subtype_item_extend(bContext *, EnumPropertyItem **item, int *totitem)
static void file_keymap(wmKeyConfig *keyconf)
static void file_main_region_message_subscribe(const wmRegionMessageSubscribeParams *params)
static void file_ui_region_draw(const bContext *C, ARegion *region)
static void file_init(wmWindowManager *, ScrArea *area)
static SpaceLink * file_duplicate(SpaceLink *sl)
void ED_file_exit()
static bool file_execution_region_poll(const RegionPollParams *params)
static void file_space_blend_write(BlendWriter *writer, SpaceLink *sl)
static void file_header_region_init(wmWindowManager *wm, ARegion *region)
bool(* poll)(const RegionPollParams *params)
void(* message_subscribe)(const wmRegionMessageSubscribeParams *params)
void(* listener)(const wmRegionListenerParams *params)
void(* draw)(const bContext *C, ARegion *region)
void(* init)(wmWindowManager *wm, ARegion *region)
const char * name
Definition RNA_types.hh:510
AssetLibraryReference asset_library_ref
FileSelectParams base_params
Definition DNA_ID.h:413
ReportList is_blendfile_readable_reports
onReloadFnData on_reload_custom_data
onReloadFn on_reload
struct wmTimer * smoothscroll_timer
struct FileLayout * layout
ListBase regionbase
struct wmOperator * op
ListBase * folders_prev
short system_bookmarknr
struct FileList * files
FileSelectParams * params
struct wmTimer * previews_timer
FileAssetSelectParams * asset_params
ListBase * folders_next
ListBase folder_histories
SpaceFile_Runtime * runtime
short keepofs
float ymax
float ymin
eWM_DragDataType type
Definition WM_types.hh:1282
PointerRNA * ptr
Definition WM_types.hh:1368
unsigned int data
Definition WM_types.hh:325
unsigned int action
Definition WM_types.hh:325
unsigned int category
Definition WM_types.hh:325
void * reference
Definition WM_types.hh:327
const wmNotifier * notifier
const wmNotifier * notifier
Definition BKE_screen.hh:71
struct wmKeyConfig * defaultconf
struct wmEvent * eventstate
wmDropBox * WM_dropbox_add(ListBase *lb, const char *idname, bool(*poll)(bContext *C, wmDrag *drag, const wmEvent *event), void(*copy)(bContext *C, wmDrag *drag, wmDropBox *drop), void(*cancel)(Main *bmain, wmDrag *drag, wmDropBox *drop), WMDropboxTooltipFunc tooltip)
const char * WM_drag_get_single_path(const wmDrag *drag)
ListBase * WM_dropboxmap_find(const char *idname, int spaceid, int regionid)
wmEventHandler_Keymap * WM_event_add_keymap_handler_v2d_mask(ListBase *handlers, wmKeyMap *keymap)
PointerRNA * ptr
Definition wm_files.cc:4126
wmKeyMap * WM_keymap_ensure(wmKeyConfig *keyconf, const char *idname, int spaceid, int regionid)
Definition wm_keymap.cc:897
void WM_msg_subscribe_rna(wmMsgBus *mbus, PointerRNA *ptr, const PropertyRNA *prop, const wmMsgSubscribeValue *msg_val_params, const char *id_repr)
void WM_operatortype_append(void(*opfunc)(wmOperatorType *))
void WM_event_timer_remove_notifier(wmWindowManager *wm, wmWindow *win, wmTimer *timer)