Blender V5.0
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
8
9#include <cstring>
10
11#include "MEM_guardedalloc.h"
12
13#include "BLI_listbase.h"
14#include "BLI_path_utils.hh"
15#include "BLI_string_utf8.h"
16#include "BLI_utildefines.h"
17
18#include "BKE_appdir.hh"
19#include "BKE_context.hh"
20#include "BKE_global.hh"
21#include "BKE_lib_query.hh"
22#include "BKE_main.hh"
23#include "BKE_report.hh"
24#include "BKE_screen.hh"
25
26#include "RNA_access.hh"
27#include "RNA_define.hh"
28#include "RNA_enum_types.hh"
29
30#include "WM_api.hh"
31#include "WM_message.hh"
32#include "WM_types.hh"
33
34#include "ED_asset.hh"
35#include "ED_asset_indexer.hh"
36#include "ED_fileselect.hh"
37#include "ED_screen.hh"
38#include "ED_space_api.hh"
39
40#include "IMB_thumbs.hh"
41
42#include "UI_resources.hh"
43#include "UI_view2d.hh"
44
45#include "BLO_read_write.hh"
46
47#include "file_indexer.hh"
48#include "file_intern.hh" /* own include */
49#include "filelist.hh"
50#include "fsmenu.h"
51
52/* ******************** default callbacks for file space ***************** */
53
54static SpaceLink *file_create(const ScrArea * /*area*/, const Scene * /*scene*/)
55{
56 ARegion *region;
57 SpaceFile *sfile;
58
59 sfile = MEM_callocN<SpaceFile>("initfile");
60 sfile->spacetype = SPACE_FILE;
61
62 /* header */
63 region = BKE_area_region_new();
64 BLI_addtail(&sfile->regionbase, region);
66 /* Ignore user preference "USER_HEADER_BOTTOM" here (always show top for new types). */
67 region->alignment = RGN_ALIGN_TOP;
68
69 /* Tools region */
70 region = BKE_area_region_new();
71 BLI_addtail(&sfile->regionbase, region);
72 region->regiontype = RGN_TYPE_TOOLS;
73 region->alignment = RGN_ALIGN_LEFT;
74
75 /* ui list region */
76 region = BKE_area_region_new();
77 BLI_addtail(&sfile->regionbase, region);
78 region->regiontype = RGN_TYPE_UI;
79 region->alignment = RGN_ALIGN_TOP;
81
82 /* execute region */
83 region = BKE_area_region_new();
84 BLI_addtail(&sfile->regionbase, region);
88
89 /* tools props region */
90 region = BKE_area_region_new();
91 BLI_addtail(&sfile->regionbase, region);
93 region->alignment = RGN_ALIGN_RIGHT;
94 region->flag = RGN_FLAG_HIDDEN;
95
96 /* main region */
97 region = BKE_area_region_new();
98 BLI_addtail(&sfile->regionbase, region);
104 region->v2d.minzoom = region->v2d.maxzoom = 1.0f;
105
106 return (SpaceLink *)sfile;
107}
108
109/* Doesn't free the space-link itself. */
110static void file_free(SpaceLink *sl)
111{
112 SpaceFile *sfile = (SpaceFile *)sl;
113
114 BLI_assert(sfile->previews_timer == nullptr);
115
116 if (sfile->files) {
117 /* XXX would need to do thumbnails_stop here, but no context available */
118 filelist_freelib(sfile->files);
119 filelist_free(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 }
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. */
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_DEVELOPER_TOOL_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)) {
272 }
273
274 if (filelist_needs_reading(sfile->files)) {
275 if (!filelist_pending(sfile->files)) {
277 }
278 }
279
280 filelist_sort(sfile->files);
281
282 if (filelist_needs_filtering(sfile->files)) {
283 filelist_filter(sfile->files);
284 params->active_file = -1;
285 }
286
287 if (params->display == FILE_IMGDISPLAY) {
289 }
290 else {
291 filelist_cache_previews_set(sfile->files, false);
292 if (sfile->previews_timer) {
294 sfile->previews_timer = nullptr;
295 }
296 }
297
298 if (params->rename_flag != 0) {
300 }
301
302 if (sfile->layout) {
303 sfile->layout->dirty = true;
304 }
305
306 if (area) {
308 const short region_flag_old = region_props->flag;
309 if (!(region_props->v2d.flag & V2D_IS_INIT)) {
311 /* Hide by default in asset browser. */
312 region_props->flag |= RGN_FLAG_HIDDEN;
313 }
314 else {
315 if (params->flag & FILE_HIDE_TOOL_PROPS) {
316 region_props->flag |= RGN_FLAG_HIDDEN;
317 }
318 else {
319 region_props->flag &= ~RGN_FLAG_HIDDEN;
320 }
321 }
322 }
323 if (region_flag_old != region_props->flag) {
324 ED_region_visibility_change_update((bContext *)C, area, region_props);
325 }
326 }
327
328 ED_area_tag_redraw(area);
329}
330
332 onReloadFn callback,
333 onReloadFnData custom_data)
334{
335 sfile->runtime->on_reload = callback;
336 sfile->runtime->on_reload_custom_data = custom_data;
337}
338
340{
341 if (sfile->runtime->on_reload == nullptr) {
342 return;
343 }
344
345 sfile->runtime->on_reload(sfile, sfile->runtime->on_reload_custom_data);
346
347 sfile->runtime->on_reload = nullptr;
348 sfile->runtime->on_reload_custom_data = nullptr;
349}
350
358
359static void file_listener(const wmSpaceTypeListenerParams *listener_params)
360{
361 ScrArea *area = listener_params->area;
362 const wmNotifier *wmn = listener_params->notifier;
363 SpaceFile *sfile = (SpaceFile *)area->spacedata.first;
364
365 /* context changes */
366 switch (wmn->category) {
367 case NC_SPACE:
368 switch (wmn->data) {
371 break;
374 break;
376 if (sfile->files && filelist_cache_previews_update(sfile->files)) {
378 }
379 break;
381 if (sfile->browse_mode == FILE_BROWSE_MODE_ASSETS) {
383 }
384 break;
385 case ND_SPACE_CHANGED:
386 /* If the space was just turned into a file/asset browser, the file-list may need to be
387 * updated to reflect latest changes in main data. */
389 break;
390 }
391 switch (wmn->action) {
392 case NA_JOB_FINISHED:
394 break;
395 }
396 break;
397 case NC_ID: {
398 switch (wmn->action) {
399 case NA_RENAME: {
400 const ID *active_file_id = ED_fileselect_active_asset_get(sfile);
401 /* If a renamed ID is active in the file browser, update scrolling to keep it in view. */
402 if (active_file_id && (wmn->reference == active_file_id)) {
404 params->rename_id = active_file_id;
406 static_cast<wmWindowManager *>(G_MAIN->wm.first), listener_params->window, sfile);
407 }
408
409 /* Force list to update sorting (with a full reset for now). */
411 break;
412 }
413 }
414 break;
415 }
416 case NC_ASSET: {
417 switch (wmn->action) {
418 case NA_SELECTED:
419 case NA_ACTIVATED:
421 break;
422 case NA_ADDED:
423 case NA_REMOVED:
424 case NA_EDITED:
426 break;
427 }
428 break;
429 }
430 }
431}
432
433/* add handlers, stuff you only do once or on area/region changes */
435{
436 wmKeyMap *keymap;
437
438 UI_view2d_region_reinit(&region->v2d, V2D_COMMONVIEW_LIST, region->winx, region->winy);
439
441
442 /* Truncate, otherwise these can be on ".5" and give fuzzy text. #77696. */
443 region->v2d.cur.ymin = trunc(region->v2d.cur.ymin);
444 region->v2d.cur.ymax = trunc(region->v2d.cur.ymax);
445
446 /* own keymaps */
447 keymap = WM_keymap_ensure(wm->runtime->defaultconf, "File Browser", SPACE_FILE, RGN_TYPE_WINDOW);
448 WM_event_add_keymap_handler_v2d_mask(&region->runtime->handlers, keymap);
449
450 keymap = WM_keymap_ensure(
451 wm->runtime->defaultconf, "File Browser Main", SPACE_FILE, RGN_TYPE_WINDOW);
452 WM_event_add_keymap_handler_v2d_mask(&region->runtime->handlers, keymap);
453
454 keymap = WM_keymap_ensure(
455 wm->runtime->defaultconf, "Asset Browser Main", SPACE_FILE, RGN_TYPE_WINDOW);
456 WM_event_add_keymap_handler_v2d_mask(&region->runtime->handlers, keymap);
457 keymap->poll = [](bContext *C) { return ED_operator_asset_browsing_active(C); };
458}
459
460static void file_main_region_listener(const wmRegionListenerParams *listener_params)
461{
462 ARegion *region = listener_params->region;
463 const wmNotifier *wmn = listener_params->notifier;
464
465 /* context changes */
466 switch (wmn->category) {
467 case NC_SPACE:
468 switch (wmn->data) {
470 ED_region_tag_redraw(region);
471 break;
473 ED_region_tag_redraw(region);
474 break;
475 }
476 break;
477 case NC_ID:
479 ED_region_tag_redraw(region);
480 }
481 break;
482 }
483}
484
486{
487 wmMsgBus *mbus = params->message_bus;
488 bScreen *screen = params->screen;
489 ScrArea *area = params->area;
490 ARegion *region = params->region;
491 SpaceFile *sfile = static_cast<SpaceFile *>(area->spacedata.first);
492
494 /* This is a bit odd that a region owns the subscriber for an area,
495 * keep for now since all subscribers for WM are regions.
496 * May be worth re-visiting later. */
497 wmMsgSubscribeValue msg_sub_value_area_tag_refresh{};
498 msg_sub_value_area_tag_refresh.owner = region;
499 msg_sub_value_area_tag_refresh.user_data = area;
500 msg_sub_value_area_tag_refresh.notify = ED_area_do_msg_notify_tag_refresh;
501
502 /* SpaceFile itself. */
503 {
504 PointerRNA ptr = RNA_pointer_create_discrete(&screen->id, &RNA_SpaceFileBrowser, sfile);
505
506 /* All properties for this space type. */
507 WM_msg_subscribe_rna(mbus, &ptr, nullptr, &msg_sub_value_area_tag_refresh, __func__);
508 }
509
510 /* FileSelectParams */
511 {
512 PointerRNA ptr = RNA_pointer_create_discrete(&screen->id, &RNA_FileSelectParams, file_params);
513
514 /* All properties for this space type. */
515 WM_msg_subscribe_rna(mbus, &ptr, nullptr, &msg_sub_value_area_tag_refresh, __func__);
516 }
517
518 /* Experimental Asset Browser features option. */
519 {
521 nullptr, &RNA_PreferencesExperimental, &U.experimental);
522 PropertyRNA *prop = RNA_struct_find_property(&ptr, "use_extended_asset_browser");
523
524 /* All properties for this space type. */
525 WM_msg_subscribe_rna(mbus, &ptr, prop, &msg_sub_value_area_tag_refresh, __func__);
526 }
527}
528
530{
531 /* Needed, because filelist is not initialized on loading */
532 if (!sfile->files || filelist_needs_reading(sfile->files)) {
533 return true;
534 }
535
536 /* File reading tagged the space because main data changed that may require a filelist reset. */
539 {
540 return true;
541 }
542
543 return false;
544}
545
546static void file_main_region_draw(const bContext *C, ARegion *region)
547{
548 /* draw entirely, view changes should be handled here */
549 SpaceFile *sfile = CTX_wm_space_file(C);
551
552 View2D *v2d = &region->v2d;
553
555 file_refresh(C, nullptr);
556 }
557
558 /* clear and setup matrix */
560
561 /* Allow dynamically sliders to be set, saves notifiers etc. */
562
563 if (params->display == FILE_IMGDISPLAY) {
565 v2d->keepofs &= ~V2D_LOCKOFS_Y;
566 v2d->keepofs |= V2D_LOCKOFS_X;
567 }
568 else if (params->display == FILE_VERTICALDISPLAY) {
570 v2d->keepofs &= ~V2D_LOCKOFS_Y;
571 v2d->keepofs |= V2D_LOCKOFS_X;
572 }
573 else {
575 v2d->keepofs &= ~V2D_LOCKOFS_X;
576 v2d->keepofs |= V2D_LOCKOFS_Y;
577
578 /* XXX this happens on scaling down Screen (like from startup.blend) */
579 /* view2d has no type specific for file-window case, which doesn't scroll vertically. */
580 if (v2d->cur.ymax < 0) {
581 v2d->cur.ymin -= v2d->cur.ymax;
582 v2d->cur.ymax = 0;
583 }
584 }
585 /* v2d has initialized flag, so this call will only set the mask correct */
587
588 /* sets tile/border settings in sfile */
589 file_calc_previews(C, region);
590
591 /* set view */
593
594 /* on first read, find active file */
595 if (params->highlight_file == -1) {
596 const wmEvent *event = CTX_wm_window(C)->eventstate;
597 file_highlight_set(sfile, region, event->xy[0], event->xy[1]);
598 }
599
600 if (!file_draw_hint_if_invalid(C, sfile, region)) {
601 file_draw_list(C, region);
602 }
603
604 /* reset view matrix */
606
607 /* scrollers */
608 rcti view_rect;
609 ED_fileselect_layout_maskrect(sfile->layout, v2d, &view_rect);
610 UI_view2d_scrollers_draw(v2d, &view_rect);
611
613}
614
616{
647}
648
649/* NOTE: do not add .blend file reading on this level */
650static void file_keymap(wmKeyConfig *keyconf)
651{
652 /* keys for all regions */
653 WM_keymap_ensure(keyconf, "File Browser", SPACE_FILE, RGN_TYPE_WINDOW);
654
655 /* keys for main region */
656 WM_keymap_ensure(keyconf, "File Browser Main", SPACE_FILE, RGN_TYPE_WINDOW);
657
658 /* keys for button region (top) */
659 WM_keymap_ensure(keyconf, "File Browser Buttons", SPACE_FILE, RGN_TYPE_WINDOW);
660}
661
663{
664 const SpaceFile *sfile = (SpaceFile *)params->area->spacedata.first;
665 /* Always visible except when browsing assets. */
666 return sfile->browse_mode != FILE_BROWSE_MODE_ASSETS;
667}
668
670{
671 const SpaceFile *sfile = (SpaceFile *)params->area->spacedata.first;
672 return (sfile->browse_mode == FILE_BROWSE_MODE_ASSETS) || (sfile->op != nullptr);
673}
674
676{
677 const SpaceFile *sfile = (SpaceFile *)params->area->spacedata.first;
678 return sfile->op != nullptr;
679}
680
682{
683 wmKeyMap *keymap;
684
686 ED_region_panels_init(wm, region);
687
688 /* own keymaps */
689 keymap = WM_keymap_ensure(wm->runtime->defaultconf, "File Browser", SPACE_FILE, RGN_TYPE_WINDOW);
690 WM_event_add_keymap_handler_v2d_mask(&region->runtime->handlers, keymap);
691}
692
693static void file_tools_region_draw(const bContext *C, ARegion *region)
694{
695 ED_region_panels(C, region);
696}
697
698static void file_tools_region_listener(const wmRegionListenerParams *listener_params)
699{
700 const wmNotifier *wmn = listener_params->notifier;
701 ARegion *region = listener_params->region;
702
703 switch (wmn->category) {
704 case NC_SCENE:
705 if (ELEM(wmn->data, ND_MODE)) {
706 ED_region_tag_redraw(region);
707 }
708 break;
709 }
710}
711
713{
714 const wmNotifier *wmn = listener_params->notifier;
715 ARegion *region = listener_params->region;
716
717 switch (wmn->category) {
718 case NC_ID:
719 if (ELEM(wmn->action, NA_RENAME)) {
720 /* In case the filelist shows ID names. */
721 ED_region_tag_redraw(region);
722 }
723 break;
724 case NC_SCENE:
725 if (ELEM(wmn->data, ND_MODE)) {
726 ED_region_tag_redraw(region);
727 }
728 break;
729 }
730}
731
732/* add handlers, stuff you only do once or on area/region changes */
734{
735 wmKeyMap *keymap;
736
737 ED_region_header_init(region);
738
739 keymap = WM_keymap_ensure(wm->runtime->defaultconf, "File Browser", SPACE_FILE, RGN_TYPE_WINDOW);
740 WM_event_add_keymap_handler_v2d_mask(&region->runtime->handlers, keymap);
741}
742
743static void file_header_region_draw(const bContext *C, ARegion *region)
744{
745 ED_region_header(C, region);
746}
747
748/* add handlers, stuff you only do once or on area/region changes */
750{
751 wmKeyMap *keymap;
752
753 ED_region_panels_init(wm, region);
755
756 /* own keymap */
757 keymap = WM_keymap_ensure(wm->runtime->defaultconf, "File Browser", SPACE_FILE, RGN_TYPE_WINDOW);
758 WM_event_add_keymap_handler_v2d_mask(&region->runtime->handlers, keymap);
759
760 keymap = WM_keymap_ensure(
761 wm->runtime->defaultconf, "File Browser Buttons", SPACE_FILE, RGN_TYPE_WINDOW);
762 WM_event_add_keymap_handler_v2d_mask(&region->runtime->handlers, keymap);
763}
764
765static void file_ui_region_draw(const bContext *C, ARegion *region)
766{
767 ED_region_panels(C, region);
768}
769
771{
772 wmKeyMap *keymap;
773
774 ED_region_panels_init(wm, region);
776
777 /* own keymap */
778 keymap = WM_keymap_ensure(wm->runtime->defaultconf, "File Browser", SPACE_FILE, RGN_TYPE_WINDOW);
779 WM_event_add_keymap_handler_v2d_mask(&region->runtime->handlers, keymap);
780}
781
782static void file_execution_region_draw(const bContext *C, ARegion *region)
783{
784 ED_region_panels(C, region);
785}
786
787static void file_ui_region_listener(const wmRegionListenerParams *listener_params)
788{
789 ARegion *region = listener_params->region;
790 const wmNotifier *wmn = listener_params->notifier;
791
792 /* context changes */
793 switch (wmn->category) {
794 case NC_SPACE:
795 switch (wmn->data) {
797 ED_region_tag_redraw(region);
798 break;
799 }
800 break;
801 }
802}
803
804static bool filepath_drop_poll(bContext *C, wmDrag *drag, const wmEvent * /*event*/)
805{
806 if (drag->type == WM_DRAG_PATH) {
807 SpaceFile *sfile = CTX_wm_space_file(C);
808 if (sfile) {
809 return true;
810 }
811 }
812 return false;
813}
814
815static void filepath_drop_copy(bContext * /*C*/, wmDrag *drag, wmDropBox *drop)
816{
817 RNA_string_set(drop->ptr, "filepath", WM_drag_get_single_path(drag));
818}
819
820/* region dropbox definition */
821static void file_dropboxes()
822{
824
826 lb, "FILE_OT_filepath_drop", filepath_drop_poll, filepath_drop_copy, nullptr, nullptr);
827}
828
830{
831 SpaceFile *sfile = static_cast<SpaceFile *>(area->spacedata.first);
832 return sfile->browse_mode;
833}
834
835static void file_space_subtype_set(ScrArea *area, int value)
836{
837 SpaceFile *sfile = static_cast<SpaceFile *>(area->spacedata.first);
838 /* Force re-init. */
839 LISTBASE_FOREACH (ARegion *, region, &area->regionbase) {
840 region->v2d.flag &= ~V2D_IS_INIT;
841 }
842 sfile->browse_mode = value;
843}
844
845static void file_space_subtype_item_extend(bContext * /*C*/, EnumPropertyItem **item, int *totitem)
846{
848}
849
851{
852 SpaceFile *sfile = static_cast<SpaceFile *>(area->spacedata.first);
855 return item.name;
856}
857
858static int file_space_icon_get(const ScrArea *area)
859{
860 SpaceFile *sfile = static_cast<SpaceFile *>(area->spacedata.first);
863 return item.icon;
864}
865
866static void file_id_remap(ScrArea *area,
867 SpaceLink *sl,
868 const blender::bke::id::IDRemapper & /*mappings*/)
869{
870 SpaceFile *sfile = (SpaceFile *)sl;
871
872 /* If the file shows main data (IDs), tag it for reset.
873 * Full reset of the file list if main data was changed, don't even attempt remap pointers.
874 * We could give file list types a id-remap callback, but it's probably not worth it.
875 * Refreshing local file lists is relatively cheap. */
877}
878
880{
881 SpaceFile *sfile = reinterpret_cast<SpaceFile *>(space_link);
882 const int data_flags = BKE_lib_query_foreachid_process_flags_get(data);
883 const bool is_readonly = (data_flags & IDWALK_READONLY) != 0;
884
885 /* TODO: investigate whether differences between this code and the one in #file_id_remap are
886 * meaningful and make sense or not. */
887 if (!is_readonly) {
888 sfile->op = nullptr;
890 }
891}
892
894{
895 SpaceFile *sfile = (SpaceFile *)sl;
896
897 /* this sort of info is probably irrelevant for reloading...
898 * plus, it isn't saved to files yet!
899 */
900 sfile->folders_prev = sfile->folders_next = nullptr;
902 sfile->files = nullptr;
903 sfile->layout = nullptr;
904 sfile->op = nullptr;
905 sfile->previews_timer = nullptr;
906 sfile->tags = 0;
907 sfile->runtime = nullptr;
908 BLO_read_struct(reader, FileSelectParams, &sfile->params);
910 if (sfile->params) {
911 sfile->params->rename_id = nullptr;
912 }
913 if (sfile->asset_params) {
914 sfile->asset_params->base_params.rename_id = nullptr;
915 /* Code (file-browser etc.) asserts that this setting is one of the currently known values.
916 * So fall back to #FILE_ASSET_IMPORT_FOLLOW_PREFS if it is not
917 * (e.g. because of forward-compatibility while reading a blend-file from the future). */
923 break;
924 default:
926 }
927 }
928}
929
931 ID * /*parent_id*/,
932 SpaceLink *sl)
933{
934 SpaceFile *sfile = reinterpret_cast<SpaceFile *>(sl);
935
937}
938
940{
941 SpaceFile *sfile = (SpaceFile *)sl;
942
943 BLO_write_struct(writer, SpaceFile, sl);
944 if (sfile->params) {
946 }
947 if (sfile->asset_params) {
949 }
950}
951
953{
954 std::unique_ptr<SpaceType> st = std::make_unique<SpaceType>();
955 ARegionType *art;
956
957 st->spaceid = SPACE_FILE;
958 STRNCPY_UTF8(st->name, "File");
959
960 st->create = file_create;
961 st->free = file_free;
962 st->init = file_init;
963 st->exit = file_exit;
964 st->duplicate = file_duplicate;
965 st->refresh = file_refresh;
966 st->listener = file_listener;
967 st->operatortypes = file_operatortypes;
968 st->keymap = file_keymap;
969 st->dropboxes = file_dropboxes;
970 st->space_subtype_item_extend = file_space_subtype_item_extend;
971 st->space_subtype_get = file_space_subtype_get;
972 st->space_subtype_set = file_space_subtype_set;
973 st->space_name_get = file_space_name_get;
974 st->space_icon_get = file_space_icon_get;
975 st->context = file_context;
976 st->id_remap = file_id_remap;
977 st->foreach_id = file_foreach_id;
978 st->blend_read_data = file_space_blend_read_data;
979 st->blend_read_after_liblink = file_space_blend_read_after_liblink;
980 st->blend_write = file_space_blend_write;
981
982 /* regions: main window */
983 art = MEM_callocN<ARegionType>("spacetype file region");
990 BLI_addhead(&st->regiontypes, art);
991
992 /* regions: header */
993 art = MEM_callocN<ARegionType>("spacetype file region");
995 art->prefsizey = HEADERY;
999 // art->listener = file_header_region_listener;
1000 BLI_addhead(&st->regiontypes, art);
1001
1002 /* regions: ui */
1003 art = MEM_callocN<ARegionType>("spacetype file region");
1004 art->regionid = RGN_TYPE_UI;
1005 art->keymapflag = ED_KEYMAP_UI;
1010 BLI_addhead(&st->regiontypes, art);
1011
1012 /* regions: execution */
1013 art = MEM_callocN<ARegionType>("spacetype file region");
1015 art->keymapflag = ED_KEYMAP_UI;
1020 BLI_addhead(&st->regiontypes, art);
1022
1023 /* regions: channels (directories) */
1024 art = MEM_callocN<ARegionType>("spacetype file region");
1025 art->regionid = RGN_TYPE_TOOLS;
1026 art->prefsizex = 240;
1027 art->prefsizey = 60;
1028 art->keymapflag = ED_KEYMAP_UI;
1032 BLI_addhead(&st->regiontypes, art);
1034
1035 /* regions: tool properties */
1036 art = MEM_callocN<ARegionType>("spacetype file operator region");
1038 art->prefsizex = 240;
1039 art->prefsizey = 60;
1040 art->keymapflag = ED_KEYMAP_UI;
1045 BLI_addhead(&st->regiontypes, art);
1048
1049 BKE_spacetype_register(std::move(st));
1050}
1051
1053{
1056}
1057
1059{
1060 fsmenu_free();
1061
1062 if (G.background == false) {
1064 }
1065}
1066
1068{
1069 const std::optional<std::string> cfgdir = BKE_appdir_folder_id(BLENDER_USER_CONFIG, nullptr);
1070
1071 fsmenu_free();
1072
1074
1075 if (cfgdir.has_value()) {
1076 char filepath[FILE_MAX];
1077 BLI_path_join(filepath, sizeof(filepath), cfgdir->c_str(), BLENDER_BOOKMARK_FILE);
1079 }
1080}
#define BLENDER_BOOKMARK_FILE
std::optional< std::string > BKE_appdir_folder_id(int folder_id, const char *subfolder) ATTR_WARN_UNUSED_RESULT
Definition appdir.cc:721
@ BLENDER_USER_CONFIG
SpaceFile * CTX_wm_space_file(const bContext *C)
ScrArea * CTX_wm_area(const bContext *C)
wmWindow * CTX_wm_window(const bContext *C)
wmWindowManager * CTX_wm_manager(const bContext *C)
#define G_MAIN
LibraryForeachIDFlag BKE_lib_query_foreachid_process_flags_get(const LibraryForeachIDData *data)
Definition lib_query.cc:129
@ IDWALK_READONLY
@ RPT_STORE
Definition BKE_report.hh:56
void BKE_reports_free(ReportList *reports)
Definition report.cc:97
void BKE_reports_init(ReportList *reports, int flag)
Definition report.cc:82
void BKE_spacetype_register(std::unique_ptr< SpaceType > st)
Definition screen.cc:282
ARegion * BKE_area_region_new()
Definition screen.cc:387
ARegion * BKE_area_find_region_type(const ScrArea *area, int region_type)
Definition screen.cc:846
#define BLI_assert(a)
Definition BLI_assert.h:46
#define LISTBASE_FOREACH(type, var, list)
BLI_INLINE void BLI_listbase_clear(ListBase *lb)
void BLI_addtail(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
Definition listbase.cc:111
void BLI_addhead(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
Definition listbase.cc:91
#define FILE_MAX
#define BLI_path_join(...)
#define STRNCPY_UTF8(dst, src)
#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
@ RGN_FLAG_INDICATE_OVERFLOW
@ SPACE_FILE
@ SPACE_EMPTY
eFileAssetImportMethod
@ FILE_ASSET_IMPORT_APPEND_REUSE
@ FILE_ASSET_IMPORT_APPEND
@ FILE_ASSET_IMPORT_LINK
@ FILE_ASSET_IMPORT_FOLLOW_PREFS
@ 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_DEVELOPER_TOOL_TEST(userdef, member)
@ V2D_LOCKOFS_X
@ V2D_LOCKOFS_Y
@ V2D_IS_INIT
@ V2D_KEEPTOT_STRICT
@ V2D_LIMITZOOM
@ V2D_LOCKZOOM_X
@ V2D_KEEPASPECT
@ V2D_LOCKZOOM_Y
@ V2D_SCROLL_VERTICAL_HIDE
@ V2D_SCROLL_RIGHT
@ V2D_SCROLL_BOTTOM
@ V2D_ALIGN_NO_NEG_X
@ V2D_ALIGN_NO_POS_Y
FSMenu * ED_fsmenu_get()
Definition fsmenu.cc:46
@ 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:379
ID * ED_fileselect_active_asset_get(const SpaceFile *sfile)
Definition filesel.cc:481
FileSelectParams * ED_fileselect_ensure_active_params(SpaceFile *sfile)
Definition filesel.cc:360
void ED_fileselect_exit(wmWindowManager *wm, SpaceFile *sfile)
Definition filesel.cc:1321
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:402
void ED_fileselect_layout_maskrect(const FileLayout *layout, const View2D *v2d, rcti *r_rect)
Definition filesel.cc:850
void ED_area_tag_redraw(ScrArea *area)
Definition area.cc:693
void ED_region_panels(const bContext *C, ARegion *region)
Definition area.cc:3609
void ED_region_header(const bContext *C, ARegion *region)
Definition area.cc:3935
void ED_region_header_init(ARegion *region)
Definition area.cc:3950
bool ED_operator_asset_browsing_active(bContext *C)
void ED_region_visibility_change_update(bContext *C, ScrArea *area, ARegion *region)
Definition area.cc:2351
void ED_area_tag_refresh(ScrArea *area)
Definition area.cc:722
void ED_region_panels_init(wmWindowManager *wm, ARegion *region)
Definition area.cc:3616
void ED_area_do_msg_notify_tag_refresh(bContext *C, wmMsgSubscribeKey *msg_key, wmMsgSubscribeValue *msg_val)
Definition area.cc:384
void ED_region_tag_redraw(ARegion *region)
Definition area.cc:618
@ ED_KEYMAP_UI
Definition ED_screen.hh:758
@ ED_KEYMAP_HEADER
Definition ED_screen.hh:764
@ ED_KEYMAP_VIEW2D
Definition ED_screen.hh:761
void ED_region_draw_overflow_indication(const ScrArea *area, ARegion *region, rcti *mask=nullptr)
Definition area.cc:3417
void IMB_thumb_makedirs()
Definition thumbs.cc:300
Read Guarded memory(de)allocation.
#define MEM_SAFE_FREE(v)
#define C
Definition RandGen.cpp:29
@ TH_BACK
void UI_ThemeClearColor(int colorid)
void UI_view2d_scrollers_draw(View2D *v2d, const rcti *mask_custom)
Definition view2d.cc:1504
void UI_view2d_view_restore(const bContext *C)
Definition view2d.cc:1162
void UI_view2d_region_reinit(View2D *v2d, short type, int winx, int winy)
Definition view2d.cc:221
void UI_view2d_view_ortho(const View2D *v2d)
Definition view2d.cc:1095
@ V2D_COMMONVIEW_LIST
Definition UI_view2d.hh:35
#define NA_ACTIVATED
Definition WM_types.hh:590
#define NC_ID
Definition WM_types.hh:395
#define ND_SPACE_CHANGED
Definition WM_types.hh:538
#define ND_SPACE_ASSET_PARAMS
Definition WM_types.hh:525
@ WM_DRAG_PATH
Definition WM_types.hh:1208
#define ND_MODE
Definition WM_types.hh:445
#define NC_SCENE
Definition WM_types.hh:378
#define NA_ADDED
Definition WM_types.hh:586
#define NA_EDITED
Definition WM_types.hh:584
#define ND_SPACE_FILE_PREVIEW
Definition WM_types.hh:540
#define NC_ASSET
Definition WM_types.hh:404
#define NA_REMOVED
Definition WM_types.hh:587
#define NA_RENAME
Definition WM_types.hh:588
#define NA_JOB_FINISHED
Definition WM_types.hh:592
#define ND_SPACE_FILE_PARAMS
Definition WM_types.hh:523
#define NC_SPACE
Definition WM_types.hh:392
#define NA_SELECTED
Definition WM_types.hh:589
#define ND_SPACE_FILE_LIST
Definition WM_types.hh:524
#define U
BMesh const char void * data
int file_context(const bContext *C, const char *member, bContextDataResult *result)
void file_calc_previews(const bContext *C, ARegion *region)
Definition file_draw.cc:605
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:2316
void FILE_OT_select_box(wmOperatorType *ot)
Definition file_ops.cc:536
void FILE_OT_directory_new(wmOperatorType *ot)
Definition file_ops.cc:2779
void FILE_OT_edit_directory_path(wmOperatorType *ot)
Definition file_ops.cc:3387
void FILE_OT_bookmark_add(wmOperatorType *ot)
Definition file_ops.cc:1169
void FILE_OT_select_bookmark(wmOperatorType *ot)
Definition file_ops.cc:1128
void folder_history_list_ensure_for_active_browse_mode(SpaceFile *sfile)
void FILE_OT_refresh(wmOperatorType *ot)
Definition file_ops.cc:2275
void FILE_OT_mouse_execute(wmOperatorType *ot)
Definition file_ops.cc:2238
void file_params_invoke_rename_postscroll(wmWindowManager *wm, wmWindow *win, SpaceFile *sfile)
Definition filesel.cc:1347
void FILE_OT_sort_column_ui_context(wmOperatorType *ot)
Definition file_ops.cc:1531
void FILE_OT_filepath_drop(wmOperatorType *ot)
Definition file_ops.cc:2633
void FILE_OT_previous(wmOperatorType *ot)
Definition file_ops.cc:2352
void file_execute_region_panels_register(ARegionType *art)
void FILE_OT_bookmark_delete(wmOperatorType *ot)
Definition file_ops.cc:1206
void FILE_OT_external_operation(wmOperatorType *ot)
Definition file_ops.cc:1917
void FILE_OT_select_walk(wmOperatorType *ot)
Definition file_ops.cc:940
void FILE_OT_filenum(wmOperatorType *ot)
Definition file_ops.cc:3157
void folder_history_list_free(SpaceFile *sfile)
void * onReloadFnData
void FILE_OT_delete(wmOperatorType *ot)
Definition file_ops.cc:3315
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:1258
void FILE_OT_smoothscroll(wmOperatorType *ot)
Definition file_ops.cc:2586
void(*)(SpaceFile *space_data, onReloadFnData custom_data) onReloadFn
void FILE_OT_bookmark_move(wmOperatorType *ot)
Definition file_ops.cc:1346
void FILE_OT_select_all(wmOperatorType *ot)
Definition file_ops.cc:1031
void FILE_OT_reset_recent(wmOperatorType *ot)
Definition file_ops.cc:1395
int file_highlight_set(SpaceFile *sfile, ARegion *region, int mx, int my)
Definition file_ops.cc:1414
void FILE_OT_select(wmOperatorType *ot)
Definition file_ops.cc:654
void FILE_OT_start_filter(wmOperatorType *ot)
Definition file_ops.cc:3351
void file_tool_props_region_panels_register(ARegionType *art)
void FILE_OT_execute(wmOperatorType *ot)
Definition file_ops.cc:2180
void file_external_operations_menu_register()
Definition file_ops.cc:2070
void FILE_OT_rename(wmOperatorType *ot)
Definition file_ops.cc:3214
void file_tools_region_panels_register(ARegionType *art)
void FILE_OT_cancel(wmOperatorType *ot)
Definition file_ops.cc:1577
void file_params_renamefile_activate(SpaceFile *sfile, FileSelectParams *params)
Definition filesel.cc:1391
void FILE_OT_next(wmOperatorType *ot)
Definition file_ops.cc:2389
void FILE_OT_view_selected(wmOperatorType *ot)
Definition file_ops.cc:1087
void FILE_OT_highlight(wmOperatorType *ot)
Definition file_ops.cc:1478
void FILE_OT_hidedot(wmOperatorType *ot)
Definition file_ops.cc:3079
void filelist_set_asset_catalog_filter_options(FileList *filelist, eFileSel_Params_AssetCatalogVisibility catalog_visibility, const bUUID *catalog_id)
void filelist_freelib(FileList *filelist)
Definition filelist.cc:1032
void filelist_readjob_start(FileList *filelist, int space_notifier, const bContext *C)
Definition filelist.cc:3346
bool filelist_needs_force_reset(const FileList *filelist)
Definition filelist.cc:1130
void filelist_setrecursion(FileList *filelist, int recursion_level)
Definition filelist.cc:1122
void filelist_clear_from_reset_tag(FileList *filelist)
Definition filelist.cc:988
bool filelist_pending(const FileList *filelist)
Definition filelist.cc:1158
void filelist_setdir(FileList *filelist, char dirpath[1282])
void filelist_free(FileList *filelist)
Definition filelist.cc:1002
void filelist_setlibrary(FileList *filelist, const AssetLibraryReference *asset_library_ref)
Definition filelist.cc:166
void filelist_setfilter_options(FileList *filelist, bool do_filter, bool hide_dot, bool hide_parent, uint64_t filter, uint64_t filter_id, bool filter_assets_only, const char *filter_glob, const char *filter_search)
void filelist_free_icons()
Definition filelist.cc:191
bool filelist_cache_previews_update(FileList *filelist)
Definition filelist.cc:1681
void filelist_settype(FileList *filelist, short type)
Definition filelist.cc:858
FileList * filelist_new(short type)
Definition filelist.cc:845
void filelist_readjob_stop(FileList *filelist, wmWindowManager *wm)
Definition filelist.cc:3356
int filelist_needs_reading(const FileList *filelist)
Definition filelist.cc:1904
void filelist_setsorting(FileList *filelist, short sort, bool invert_sort)
void filelist_filter(FileList *filelist)
void filelist_tag_force_reset_mainfiles(FileList *filelist)
Definition filelist.cc:1140
bool filelist_needs_reset_on_main_changes(const FileList *filelist)
Definition filelist.cc:1163
void filelist_sort(FileList *filelist)
void filelist_setindexer(FileList *filelist, const FileIndexerType *indexer)
Definition filelist.cc:118
bool filelist_needs_filtering(FileList *filelist)
void filelist_cache_previews_set(FileList *filelist, bool use_previews)
Definition filelist.cc:1656
int fsmenu_get_active_indices(FSMenu *fsmenu, enum FSMenuCategory category, const char *dir)
Definition fsmenu.cc:516
void fsmenu_read_bookmarks(FSMenu *fsmenu, const char *filepath)
Definition fsmenu.cc:421
void fsmenu_free()
Definition fsmenu.cc:511
void fsmenu_read_system(struct FSMenu *fsmenu, int read_bookmarks)
#define trunc
uiWidgetBaseParameters params[MAX_WIDGET_BASE_BATCH]
void * MEM_callocN(size_t len, const char *str)
Definition mallocn.cc:118
void * MEM_dupallocN(const void *vmemh)
Definition mallocn.cc:143
#define G(x, y, z)
const FileIndexerType file_indexer_asset
int64_t types_supported_as_filter_flags()
Definition asset_type.cc:41
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_discrete(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:197
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:54
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)
ARegionRuntimeHandle * runtime
const char * name
Definition RNA_types.hh:661
AssetLibraryReference asset_library_ref
FileSelectParams base_params
Definition DNA_ID.h:414
void * first
ListBase spacedata
ListBase regionbase
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
float minzoom
short keeptot
short keepzoom
short keepofs
float maxzoom
float ymax
float ymin
eWM_DragDataType type
Definition WM_types.hh:1331
PointerRNA * ptr
Definition WM_types.hh:1420
bool(* poll)(struct bContext *)
unsigned int data
Definition WM_types.hh:358
unsigned int action
Definition WM_types.hh:358
unsigned int category
Definition WM_types.hh:358
void * reference
Definition WM_types.hh:360
const wmNotifier * notifier
const wmNotifier * notifier
Definition BKE_screen.hh:77
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:4238
wmKeyMap * WM_keymap_ensure(wmKeyConfig *keyconf, const char *idname, int spaceid, int regionid)
Definition wm_keymap.cc:895
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)