Blender V4.5
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.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_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)) {
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
440 /* Truncate, otherwise these can be on ".5" and give fuzzy text. #77696. */
441 region->v2d.cur.ymin = trunc(region->v2d.cur.ymin);
442 region->v2d.cur.ymax = trunc(region->v2d.cur.ymax);
443
444 /* own keymaps */
445 keymap = WM_keymap_ensure(wm->defaultconf, "File Browser", SPACE_FILE, RGN_TYPE_WINDOW);
446 WM_event_add_keymap_handler_v2d_mask(&region->runtime->handlers, keymap);
447
448 keymap = WM_keymap_ensure(wm->defaultconf, "File Browser Main", SPACE_FILE, RGN_TYPE_WINDOW);
449 WM_event_add_keymap_handler_v2d_mask(&region->runtime->handlers, keymap);
450}
451
452static void file_main_region_listener(const wmRegionListenerParams *listener_params)
453{
454 ARegion *region = listener_params->region;
455 const wmNotifier *wmn = listener_params->notifier;
456
457 /* context changes */
458 switch (wmn->category) {
459 case NC_SPACE:
460 switch (wmn->data) {
462 ED_region_tag_redraw(region);
463 break;
465 ED_region_tag_redraw(region);
466 break;
467 }
468 break;
469 case NC_ID:
471 ED_region_tag_redraw(region);
472 }
473 break;
474 }
475}
476
478{
479 wmMsgBus *mbus = params->message_bus;
480 bScreen *screen = params->screen;
481 ScrArea *area = params->area;
482 ARegion *region = params->region;
483 SpaceFile *sfile = static_cast<SpaceFile *>(area->spacedata.first);
484
486 /* This is a bit odd that a region owns the subscriber for an area,
487 * keep for now since all subscribers for WM are regions.
488 * May be worth re-visiting later. */
489 wmMsgSubscribeValue msg_sub_value_area_tag_refresh{};
490 msg_sub_value_area_tag_refresh.owner = region;
491 msg_sub_value_area_tag_refresh.user_data = area;
492 msg_sub_value_area_tag_refresh.notify = ED_area_do_msg_notify_tag_refresh;
493
494 /* SpaceFile itself. */
495 {
496 PointerRNA ptr = RNA_pointer_create_discrete(&screen->id, &RNA_SpaceFileBrowser, sfile);
497
498 /* All properties for this space type. */
499 WM_msg_subscribe_rna(mbus, &ptr, nullptr, &msg_sub_value_area_tag_refresh, __func__);
500 }
501
502 /* FileSelectParams */
503 {
504 PointerRNA ptr = RNA_pointer_create_discrete(&screen->id, &RNA_FileSelectParams, file_params);
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 /* Experimental Asset Browser features option. */
511 {
513 nullptr, &RNA_PreferencesExperimental, &U.experimental);
514 PropertyRNA *prop = RNA_struct_find_property(&ptr, "use_extended_asset_browser");
515
516 /* All properties for this space type. */
517 WM_msg_subscribe_rna(mbus, &ptr, prop, &msg_sub_value_area_tag_refresh, __func__);
518 }
519}
520
522{
523 /* Needed, because filelist is not initialized on loading */
524 if (!sfile->files || filelist_needs_reading(sfile->files)) {
525 return true;
526 }
527
528 /* File reading tagged the space because main data changed that may require a filelist reset. */
531 {
532 return true;
533 }
534
535 return false;
536}
537
538static void file_main_region_draw(const bContext *C, ARegion *region)
539{
540 /* draw entirely, view changes should be handled here */
541 SpaceFile *sfile = CTX_wm_space_file(C);
543
544 View2D *v2d = &region->v2d;
545
547 file_refresh(C, nullptr);
548 }
549
550 /* clear and setup matrix */
552
553 /* Allow dynamically sliders to be set, saves notifiers etc. */
554
555 if (params->display == FILE_IMGDISPLAY) {
557 v2d->keepofs &= ~V2D_LOCKOFS_Y;
558 v2d->keepofs |= V2D_LOCKOFS_X;
559 }
560 else if (params->display == FILE_VERTICALDISPLAY) {
562 v2d->keepofs &= ~V2D_LOCKOFS_Y;
563 v2d->keepofs |= V2D_LOCKOFS_X;
564 }
565 else {
567 v2d->keepofs &= ~V2D_LOCKOFS_X;
568 v2d->keepofs |= V2D_LOCKOFS_Y;
569
570 /* XXX this happens on scaling down Screen (like from startup.blend) */
571 /* view2d has no type specific for file-window case, which doesn't scroll vertically. */
572 if (v2d->cur.ymax < 0) {
573 v2d->cur.ymin -= v2d->cur.ymax;
574 v2d->cur.ymax = 0;
575 }
576 }
577 /* v2d has initialized flag, so this call will only set the mask correct */
579
580 /* sets tile/border settings in sfile */
581 file_calc_previews(C, region);
582
583 /* set view */
585
586 /* on first read, find active file */
587 if (params->highlight_file == -1) {
588 const wmEvent *event = CTX_wm_window(C)->eventstate;
589 file_highlight_set(sfile, region, event->xy[0], event->xy[1]);
590 }
591
592 if (!file_draw_hint_if_invalid(C, sfile, region)) {
593 file_draw_list(C, region);
594 }
595
596 /* reset view matrix */
598
599 /* scrollers */
600 rcti view_rect;
601 ED_fileselect_layout_maskrect(sfile->layout, v2d, &view_rect);
602 UI_view2d_scrollers_draw(v2d, &view_rect);
603}
604
606{
637}
638
639/* NOTE: do not add .blend file reading on this level */
640static void file_keymap(wmKeyConfig *keyconf)
641{
642 /* keys for all regions */
643 WM_keymap_ensure(keyconf, "File Browser", SPACE_FILE, RGN_TYPE_WINDOW);
644
645 /* keys for main region */
646 WM_keymap_ensure(keyconf, "File Browser Main", SPACE_FILE, RGN_TYPE_WINDOW);
647
648 /* keys for button region (top) */
649 WM_keymap_ensure(keyconf, "File Browser Buttons", SPACE_FILE, RGN_TYPE_WINDOW);
650}
651
653{
654 const SpaceFile *sfile = (SpaceFile *)params->area->spacedata.first;
655 /* Always visible except when browsing assets. */
656 return sfile->browse_mode != FILE_BROWSE_MODE_ASSETS;
657}
658
660{
661 const SpaceFile *sfile = (SpaceFile *)params->area->spacedata.first;
662 return (sfile->browse_mode == FILE_BROWSE_MODE_ASSETS) || (sfile->op != nullptr);
663}
664
666{
667 const SpaceFile *sfile = (SpaceFile *)params->area->spacedata.first;
668 return sfile->op != nullptr;
669}
670
672{
673 wmKeyMap *keymap;
674
676 ED_region_panels_init(wm, region);
677
678 /* own keymaps */
679 keymap = WM_keymap_ensure(wm->defaultconf, "File Browser", SPACE_FILE, RGN_TYPE_WINDOW);
680 WM_event_add_keymap_handler_v2d_mask(&region->runtime->handlers, keymap);
681}
682
683static void file_tools_region_draw(const bContext *C, ARegion *region)
684{
685 ED_region_panels(C, region);
686}
687
688static void file_tools_region_listener(const wmRegionListenerParams *listener_params)
689{
690 const wmNotifier *wmn = listener_params->notifier;
691 ARegion *region = listener_params->region;
692
693 switch (wmn->category) {
694 case NC_SCENE:
695 if (ELEM(wmn->data, ND_MODE)) {
696 ED_region_tag_redraw(region);
697 }
698 break;
699 }
700}
701
703{
704 const wmNotifier *wmn = listener_params->notifier;
705 ARegion *region = listener_params->region;
706
707 switch (wmn->category) {
708 case NC_ID:
709 if (ELEM(wmn->action, NA_RENAME)) {
710 /* In case the filelist shows ID names. */
711 ED_region_tag_redraw(region);
712 }
713 break;
714 case NC_SCENE:
715 if (ELEM(wmn->data, ND_MODE)) {
716 ED_region_tag_redraw(region);
717 }
718 break;
719 }
720}
721
722/* add handlers, stuff you only do once or on area/region changes */
724{
725 wmKeyMap *keymap;
726
727 ED_region_header_init(region);
728
729 keymap = WM_keymap_ensure(wm->defaultconf, "File Browser", SPACE_FILE, RGN_TYPE_WINDOW);
730 WM_event_add_keymap_handler_v2d_mask(&region->runtime->handlers, keymap);
731}
732
733static void file_header_region_draw(const bContext *C, ARegion *region)
734{
735 ED_region_header(C, region);
736}
737
738/* add handlers, stuff you only do once or on area/region changes */
740{
741 wmKeyMap *keymap;
742
743 ED_region_panels_init(wm, region);
745
746 /* own keymap */
747 keymap = WM_keymap_ensure(wm->defaultconf, "File Browser", SPACE_FILE, RGN_TYPE_WINDOW);
748 WM_event_add_keymap_handler_v2d_mask(&region->runtime->handlers, keymap);
749
750 keymap = WM_keymap_ensure(wm->defaultconf, "File Browser Buttons", SPACE_FILE, RGN_TYPE_WINDOW);
751 WM_event_add_keymap_handler_v2d_mask(&region->runtime->handlers, keymap);
752}
753
754static void file_ui_region_draw(const bContext *C, ARegion *region)
755{
756 ED_region_panels(C, region);
757}
758
760{
761 wmKeyMap *keymap;
762
763 ED_region_panels_init(wm, region);
765
766 /* own keymap */
767 keymap = WM_keymap_ensure(wm->defaultconf, "File Browser", SPACE_FILE, RGN_TYPE_WINDOW);
768 WM_event_add_keymap_handler_v2d_mask(&region->runtime->handlers, keymap);
769}
770
771static void file_execution_region_draw(const bContext *C, ARegion *region)
772{
773 ED_region_panels(C, region);
774}
775
776static void file_ui_region_listener(const wmRegionListenerParams *listener_params)
777{
778 ARegion *region = listener_params->region;
779 const wmNotifier *wmn = listener_params->notifier;
780
781 /* context changes */
782 switch (wmn->category) {
783 case NC_SPACE:
784 switch (wmn->data) {
786 ED_region_tag_redraw(region);
787 break;
788 }
789 break;
790 }
791}
792
793static bool filepath_drop_poll(bContext *C, wmDrag *drag, const wmEvent * /*event*/)
794{
795 if (drag->type == WM_DRAG_PATH) {
796 SpaceFile *sfile = CTX_wm_space_file(C);
797 if (sfile) {
798 return true;
799 }
800 }
801 return false;
802}
803
804static void filepath_drop_copy(bContext * /*C*/, wmDrag *drag, wmDropBox *drop)
805{
806 RNA_string_set(drop->ptr, "filepath", WM_drag_get_single_path(drag));
807}
808
809/* region dropbox definition */
810static void file_dropboxes()
811{
813
815 lb, "FILE_OT_filepath_drop", filepath_drop_poll, filepath_drop_copy, nullptr, nullptr);
816}
817
819{
820 SpaceFile *sfile = static_cast<SpaceFile *>(area->spacedata.first);
821 return sfile->browse_mode;
822}
823
824static void file_space_subtype_set(ScrArea *area, int value)
825{
826 SpaceFile *sfile = static_cast<SpaceFile *>(area->spacedata.first);
827 /* Force re-init. */
828 LISTBASE_FOREACH (ARegion *, region, &area->regionbase) {
829 region->v2d.flag &= ~V2D_IS_INIT;
830 }
831 sfile->browse_mode = value;
832}
833
834static void file_space_subtype_item_extend(bContext * /*C*/, EnumPropertyItem **item, int *totitem)
835{
837}
838
840{
841 SpaceFile *sfile = static_cast<SpaceFile *>(area->spacedata.first);
844 return item.name;
845}
846
847static int file_space_icon_get(const ScrArea *area)
848{
849 SpaceFile *sfile = static_cast<SpaceFile *>(area->spacedata.first);
852 return item.icon;
853}
854
855static void file_id_remap(ScrArea *area,
856 SpaceLink *sl,
857 const blender::bke::id::IDRemapper & /*mappings*/)
858{
859 SpaceFile *sfile = (SpaceFile *)sl;
860
861 /* If the file shows main data (IDs), tag it for reset.
862 * Full reset of the file list if main data was changed, don't even attempt remap pointers.
863 * We could give file list types a id-remap callback, but it's probably not worth it.
864 * Refreshing local file lists is relatively cheap. */
866}
867
869{
870 SpaceFile *sfile = reinterpret_cast<SpaceFile *>(space_link);
871 const int data_flags = BKE_lib_query_foreachid_process_flags_get(data);
872 const bool is_readonly = (data_flags & IDWALK_READONLY) != 0;
873
874 /* TODO: investigate whether differences between this code and the one in #file_id_remap are
875 * meaningful and make sense or not. */
876 if (!is_readonly) {
877 sfile->op = nullptr;
879 }
880}
881
883{
884 SpaceFile *sfile = (SpaceFile *)sl;
885
886 /* this sort of info is probably irrelevant for reloading...
887 * plus, it isn't saved to files yet!
888 */
889 sfile->folders_prev = sfile->folders_next = nullptr;
891 sfile->files = nullptr;
892 sfile->layout = nullptr;
893 sfile->op = nullptr;
894 sfile->previews_timer = nullptr;
895 sfile->tags = 0;
896 sfile->runtime = nullptr;
897 BLO_read_struct(reader, FileSelectParams, &sfile->params);
899 if (sfile->params) {
900 sfile->params->rename_id = nullptr;
901 }
902 if (sfile->asset_params) {
903 sfile->asset_params->base_params.rename_id = nullptr;
904 /* Code (file-browser etc.) asserts that this setting is one of the currently known values.
905 * So fall back to #FILE_ASSET_IMPORT_FOLLOW_PREFS if it is not
906 * (e.g. because of forward-compatibility while reading a blend-file from the future). */
912 break;
913 default:
915 }
916 }
917}
918
920 ID * /*parent_id*/,
921 SpaceLink *sl)
922{
923 SpaceFile *sfile = reinterpret_cast<SpaceFile *>(sl);
924
926}
927
929{
930 SpaceFile *sfile = (SpaceFile *)sl;
931
932 BLO_write_struct(writer, SpaceFile, sl);
933 if (sfile->params) {
935 }
936 if (sfile->asset_params) {
938 }
939}
940
942{
943 std::unique_ptr<SpaceType> st = std::make_unique<SpaceType>();
944 ARegionType *art;
945
946 st->spaceid = SPACE_FILE;
947 STRNCPY(st->name, "File");
948
949 st->create = file_create;
950 st->free = file_free;
951 st->init = file_init;
952 st->exit = file_exit;
953 st->duplicate = file_duplicate;
954 st->refresh = file_refresh;
955 st->listener = file_listener;
956 st->operatortypes = file_operatortypes;
957 st->keymap = file_keymap;
958 st->dropboxes = file_dropboxes;
959 st->space_subtype_item_extend = file_space_subtype_item_extend;
960 st->space_subtype_get = file_space_subtype_get;
961 st->space_subtype_set = file_space_subtype_set;
962 st->space_name_get = file_space_name_get;
963 st->space_icon_get = file_space_icon_get;
964 st->context = file_context;
965 st->id_remap = file_id_remap;
966 st->foreach_id = file_foreach_id;
967 st->blend_read_data = file_space_blend_read_data;
968 st->blend_read_after_liblink = file_space_blend_read_after_liblink;
969 st->blend_write = file_space_blend_write;
970
971 /* regions: main window */
972 art = MEM_callocN<ARegionType>("spacetype file region");
979 BLI_addhead(&st->regiontypes, art);
980
981 /* regions: header */
982 art = MEM_callocN<ARegionType>("spacetype file region");
984 art->prefsizey = HEADERY;
988 // art->listener = file_header_region_listener;
989 BLI_addhead(&st->regiontypes, art);
990
991 /* regions: ui */
992 art = MEM_callocN<ARegionType>("spacetype file region");
993 art->regionid = RGN_TYPE_UI;
999 BLI_addhead(&st->regiontypes, art);
1000
1001 /* regions: execution */
1002 art = MEM_callocN<ARegionType>("spacetype file region");
1004 art->keymapflag = ED_KEYMAP_UI;
1009 BLI_addhead(&st->regiontypes, art);
1011
1012 /* regions: channels (directories) */
1013 art = MEM_callocN<ARegionType>("spacetype file region");
1014 art->regionid = RGN_TYPE_TOOLS;
1015 art->prefsizex = 240;
1016 art->prefsizey = 60;
1017 art->keymapflag = ED_KEYMAP_UI;
1021 BLI_addhead(&st->regiontypes, art);
1023
1024 /* regions: tool properties */
1025 art = MEM_callocN<ARegionType>("spacetype file operator region");
1027 art->prefsizex = 240;
1028 art->prefsizey = 60;
1029 art->keymapflag = ED_KEYMAP_UI;
1034 BLI_addhead(&st->regiontypes, art);
1037
1038 BKE_spacetype_register(std::move(st));
1039}
1040
1042{
1045}
1046
1048{
1049 fsmenu_free();
1050
1051 if (G.background == false) {
1053 }
1054}
1055
1057{
1058 const std::optional<std::string> cfgdir = BKE_appdir_folder_id(BLENDER_USER_CONFIG, nullptr);
1059
1060 fsmenu_free();
1061
1063
1064 if (cfgdir.has_value()) {
1065 char filepath[FILE_MAX];
1066 BLI_path_join(filepath, sizeof(filepath), cfgdir->c_str(), BLENDER_BOOKMARK_FILE);
1068 }
1069}
#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:717
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
LibraryForeachIDFlag BKE_lib_query_foreachid_process_flags_get(const LibraryForeachIDData *data)
Definition lib_query.cc:129
@ IDWALK_READONLY
void BKE_reports_free(ReportList *reports)
Definition report.cc:70
void BKE_reports_init(ReportList *reports, int flag)
Definition report.cc:55
void BKE_spacetype_register(std::unique_ptr< SpaceType > st)
Definition screen.cc:276
ARegion * BKE_area_region_new()
Definition screen.cc:381
ARegion * BKE_area_find_region_type(const ScrArea *area, int region_type)
Definition screen.cc:840
#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(...)
char * STRNCPY(char(&dst)[N], const char *src)
Definition BLI_string.h:688
#define ELEM(...)
#define BLO_write_struct(writer, struct_name, data_ptr)
#define BLO_read_struct(reader, struct_name, ptr_p)
#define HEADERY
@ RGN_FLAG_DYNAMIC_SIZE
@ RGN_FLAG_HIDDEN
@ RGN_FLAG_NO_USER_RESIZE
@ RGN_TYPE_EXECUTE
@ RGN_TYPE_UI
@ RGN_TYPE_WINDOW
@ RGN_TYPE_HEADER
@ RGN_TYPE_TOOLS
@ RGN_TYPE_TOOL_PROPS
@ RGN_ALIGN_BOTTOM
@ RGN_ALIGN_LEFT
@ RGN_ALIGN_TOP
@ RGN_ALIGN_RIGHT
@ 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_EXPERIMENTAL_TEST(userdef, member)
@ V2D_KEEPTOT_STRICT
@ V2D_SCROLL_VERTICAL_HIDE
@ V2D_SCROLL_RIGHT
@ V2D_SCROLL_BOTTOM
@ V2D_ALIGN_NO_NEG_X
@ V2D_ALIGN_NO_POS_Y
@ V2D_LOCKOFS_X
@ V2D_LOCKOFS_Y
@ V2D_LIMITZOOM
@ V2D_LOCKZOOM_X
@ V2D_KEEPASPECT
@ V2D_LOCKZOOM_Y
@ V2D_IS_INIT
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:382
ID * ED_fileselect_active_asset_get(const SpaceFile *sfile)
Definition filesel.cc:484
FileSelectParams * ED_fileselect_ensure_active_params(SpaceFile *sfile)
Definition filesel.cc:363
void ED_fileselect_exit(wmWindowManager *wm, SpaceFile *sfile)
Definition filesel.cc:1328
bool ED_fileselect_is_asset_browser(const SpaceFile *sfile)
Definition filesel.cc:470
FileAssetSelectParams * ED_fileselect_get_asset_params(const SpaceFile *sfile)
Definition filesel.cc:405
void ED_fileselect_layout_maskrect(const FileLayout *layout, const View2D *v2d, rcti *r_rect)
Definition filesel.cc:858
void ED_area_tag_redraw(ScrArea *area)
Definition area.cc:714
void ED_region_panels(const bContext *C, ARegion *region)
Definition area.cc:3462
void ED_region_header(const bContext *C, ARegion *region)
Definition area.cc:3750
void ED_region_header_init(ARegion *region)
Definition area.cc:3765
void ED_region_visibility_change_update(bContext *C, ScrArea *area, ARegion *region)
Definition area.cc:2355
void ED_area_tag_refresh(ScrArea *area)
Definition area.cc:743
@ ED_KEYMAP_UI
Definition ED_screen.hh:740
@ ED_KEYMAP_HEADER
Definition ED_screen.hh:746
@ ED_KEYMAP_VIEW2D
Definition ED_screen.hh:743
void ED_region_panels_init(wmWindowManager *wm, ARegion *region)
Definition area.cc:3469
void ED_area_do_msg_notify_tag_refresh(bContext *C, wmMsgSubscribeKey *msg_key, wmMsgSubscribeValue *msg_val)
Definition area.cc:407
void ED_region_tag_redraw(ARegion *region)
Definition area.cc:639
void IMB_thumb_makedirs()
Definition thumbs.cc:299
Read Guarded memory(de)allocation.
#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:1503
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:587
#define NC_ID
Definition WM_types.hh:392
#define ND_SPACE_CHANGED
Definition WM_types.hh:535
#define ND_SPACE_ASSET_PARAMS
Definition WM_types.hh:522
#define ND_MODE
Definition WM_types.hh:442
#define NC_SCENE
Definition WM_types.hh:375
#define NA_ADDED
Definition WM_types.hh:583
#define NA_EDITED
Definition WM_types.hh:581
#define ND_SPACE_FILE_PREVIEW
Definition WM_types.hh:537
#define NC_ASSET
Definition WM_types.hh:401
#define NA_REMOVED
Definition WM_types.hh:584
#define NA_RENAME
Definition WM_types.hh:585
@ WM_DRAG_PATH
Definition WM_types.hh:1205
#define NA_JOB_FINISHED
Definition WM_types.hh:589
#define ND_SPACE_FILE_PARAMS
Definition WM_types.hh:520
#define NC_SPACE
Definition WM_types.hh:389
#define NA_SELECTED
Definition WM_types.hh:586
#define ND_SPACE_FILE_LIST
Definition WM_types.hh:521
#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:575
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:2284
void FILE_OT_select_box(wmOperatorType *ot)
Definition file_ops.cc:533
void FILE_OT_directory_new(wmOperatorType *ot)
Definition file_ops.cc:2746
void FILE_OT_edit_directory_path(wmOperatorType *ot)
Definition file_ops.cc:3354
void FILE_OT_bookmark_add(wmOperatorType *ot)
Definition file_ops.cc:1166
void FILE_OT_select_bookmark(wmOperatorType *ot)
Definition file_ops.cc:1125
void folder_history_list_ensure_for_active_browse_mode(SpaceFile *sfile)
void FILE_OT_refresh(wmOperatorType *ot)
Definition file_ops.cc:2243
void FILE_OT_mouse_execute(wmOperatorType *ot)
Definition file_ops.cc:2203
void file_params_invoke_rename_postscroll(wmWindowManager *wm, wmWindow *win, SpaceFile *sfile)
Definition filesel.cc:1367
void FILE_OT_sort_column_ui_context(wmOperatorType *ot)
Definition file_ops.cc:1529
void FILE_OT_filepath_drop(wmOperatorType *ot)
Definition file_ops.cc:2600
void FILE_OT_previous(wmOperatorType *ot)
Definition file_ops.cc:2320
void file_execute_region_panels_register(ARegionType *art)
void FILE_OT_bookmark_delete(wmOperatorType *ot)
Definition file_ops.cc:1203
void FILE_OT_external_operation(wmOperatorType *ot)
Definition file_ops.cc:1874
void FILE_OT_select_walk(wmOperatorType *ot)
Definition file_ops.cc:937
void FILE_OT_filenum(wmOperatorType *ot)
Definition file_ops.cc:3124
void folder_history_list_free(SpaceFile *sfile)
void * onReloadFnData
void FILE_OT_delete(wmOperatorType *ot)
Definition file_ops.cc:3282
ListBase folder_history_list_duplicate(ListBase *listbase)
void fileselect_refresh_params(SpaceFile *sfile)
Definition filesel.cc:457
void FILE_OT_bookmark_cleanup(wmOperatorType *ot)
Definition file_ops.cc:1256
void FILE_OT_smoothscroll(wmOperatorType *ot)
Definition file_ops.cc:2553
void(*)(SpaceFile *space_data, onReloadFnData custom_data) onReloadFn
void FILE_OT_bookmark_move(wmOperatorType *ot)
Definition file_ops.cc:1344
void FILE_OT_select_all(wmOperatorType *ot)
Definition file_ops.cc:1028
void FILE_OT_reset_recent(wmOperatorType *ot)
Definition file_ops.cc:1393
int file_highlight_set(SpaceFile *sfile, ARegion *region, int mx, int my)
Definition file_ops.cc:1412
void FILE_OT_select(wmOperatorType *ot)
Definition file_ops.cc:651
void FILE_OT_start_filter(wmOperatorType *ot)
Definition file_ops.cc:3318
void file_tool_props_region_panels_register(ARegionType *art)
void FILE_OT_execute(wmOperatorType *ot)
Definition file_ops.cc:2145
void file_external_operations_menu_register()
Definition file_ops.cc:2035
void FILE_OT_rename(wmOperatorType *ot)
Definition file_ops.cc:3181
void file_tools_region_panels_register(ARegionType *art)
void FILE_OT_cancel(wmOperatorType *ot)
Definition file_ops.cc:1575
void file_params_renamefile_activate(SpaceFile *sfile, FileSelectParams *params)
Definition filesel.cc:1411
void FILE_OT_next(wmOperatorType *ot)
Definition file_ops.cc:2357
void FILE_OT_view_selected(wmOperatorType *ot)
Definition file_ops.cc:1084
void FILE_OT_highlight(wmOperatorType *ot)
Definition file_ops.cc:1476
void FILE_OT_hidedot(wmOperatorType *ot)
Definition file_ops.cc:3046
void filelist_freelib(FileList *filelist)
Definition filelist.cc:2002
void filelist_cache_previews_set(FileList *filelist, const bool use_previews)
Definition filelist.cc:2626
bool filelist_needs_force_reset(const FileList *filelist)
Definition filelist.cc:2100
void filelist_clear_from_reset_tag(FileList *filelist)
Definition filelist.cc:1958
bool filelist_pending(const FileList *filelist)
Definition filelist.cc:2128
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:1011
void filelist_set_asset_catalog_filter_options(FileList *filelist, eFileSel_Params_AssetCatalogVisibility catalog_visibility, const ::bUUID *catalog_id)
Definition filelist.cc:1074
void filelist_free(FileList *filelist)
Definition filelist.cc:1972
void filelist_setlibrary(FileList *filelist, const AssetLibraryReference *asset_library_ref)
Definition filelist.cc:1114
void filelist_free_icons()
Definition filelist.cc:1139
void filelist_setdir(FileList *filelist, char dirpath[FILE_MAX_LIBEXTRA])
Definition filelist.cc:2075
void filelist_setrecursion(FileList *filelist, const int recursion_level)
Definition filelist.cc:2092
void filelist_setsorting(FileList *filelist, const short sort, bool invert_sort)
Definition filelist.cc:685
bool filelist_cache_previews_update(FileList *filelist)
Definition filelist.cc:2651
void filelist_settype(FileList *filelist, short type)
Definition filelist.cc:1828
FileList * filelist_new(short type)
Definition filelist.cc:1815
void filelist_readjob_stop(FileList *filelist, wmWindowManager *wm)
Definition filelist.cc:4327
int filelist_needs_reading(const FileList *filelist)
Definition filelist.cc:2878
void filelist_filter(FileList *filelist)
Definition filelist.cc:955
void filelist_tag_force_reset_mainfiles(FileList *filelist)
Definition filelist.cc:2110
bool filelist_needs_reset_on_main_changes(const FileList *filelist)
Definition filelist.cc:2133
void filelist_sort(FileList *filelist)
Definition filelist.cc:649
void filelist_setindexer(FileList *filelist, const FileIndexerType *indexer)
Definition filelist.cc:1066
bool filelist_needs_filtering(FileList *filelist)
Definition filelist.cc:950
void filelist_readjob_start(FileList *filelist, const int space_notifier, const bContext *C)
Definition filelist.cc:4317
int fsmenu_get_active_indices(FSMenu *fsmenu, enum FSMenuCategory category, const char *dir)
Definition fsmenu.cc:582
void fsmenu_read_bookmarks(FSMenu *fsmenu, const char *filepath)
Definition fsmenu.cc:444
void fsmenu_free()
Definition fsmenu.cc:539
void fsmenu_read_system(struct FSMenu *fsmenu, int read_bookmarks)
#define trunc
#define MEM_SAFE_FREE(v)
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:188
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:627
AssetLibraryReference asset_library_ref
FileSelectParams base_params
Definition DNA_ID.h:404
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:1327
PointerRNA * ptr
Definition WM_types.hh:1415
unsigned int data
Definition WM_types.hh:355
unsigned int action
Definition WM_types.hh:355
unsigned int category
Definition WM_types.hh:355
void * reference
Definition WM_types.hh:357
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:4226
wmKeyMap * WM_keymap_ensure(wmKeyConfig *keyconf, const char *idname, int spaceid, int regionid)
Definition wm_keymap.cc:893
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)