Blender  V2.93
space_file.c
Go to the documentation of this file.
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * The Original Code is Copyright (C) 2008 Blender Foundation.
17  * All rights reserved.
18  */
19 
24 #include <stdio.h>
25 #include <string.h>
26 
27 #include "MEM_guardedalloc.h"
28 
29 #include "BLI_blenlib.h"
30 #include "BLI_utildefines.h"
31 
32 #include "BKE_appdir.h"
33 #include "BKE_context.h"
34 #include "BKE_global.h"
35 #include "BKE_screen.h"
36 
37 #include "RNA_access.h"
38 #include "RNA_define.h"
39 #include "RNA_enum_types.h"
40 
41 #include "WM_api.h"
42 #include "WM_message.h"
43 #include "WM_types.h"
44 
45 #include "ED_fileselect.h"
46 #include "ED_screen.h"
47 #include "ED_space_api.h"
48 
49 #include "IMB_imbuf_types.h"
50 #include "IMB_thumbs.h"
51 
52 #include "UI_resources.h"
53 #include "UI_view2d.h"
54 
55 #include "GPU_framebuffer.h"
56 #include "file_intern.h" /* own include */
57 #include "filelist.h"
58 #include "fsmenu.h"
59 
61 {
62  ARegion *region;
63 
64  if ((region = BKE_area_find_region_type(area, RGN_TYPE_UI)) != NULL) {
65  return region;
66  }
67 
68  region = MEM_callocN(sizeof(ARegion), "execute region for file");
69  BLI_insertlinkafter(&area->regionbase, region_prev, region);
70  region->regiontype = RGN_TYPE_UI;
71  region->alignment = RGN_ALIGN_TOP;
72  region->flag = RGN_FLAG_DYNAMIC_SIZE;
73 
74  return region;
75 }
76 
78 {
79  ARegion *region;
80 
82  return region;
83  }
84 
85  region = MEM_callocN(sizeof(ARegion), "execute region for file");
86  BLI_insertlinkafter(&area->regionbase, region_prev, region);
87  region->regiontype = RGN_TYPE_EXECUTE;
88  region->alignment = RGN_ALIGN_BOTTOM;
89  region->flag = RGN_FLAG_DYNAMIC_SIZE;
90 
91  return region;
92 }
93 
95 {
96  ARegion *region;
97 
99  return region;
100  }
101 
102  /* add subdiv level; after execute region */
103  region = MEM_callocN(sizeof(ARegion), "tool props for file");
104  BLI_insertlinkafter(&area->regionbase, region_prev, region);
106  region->alignment = RGN_ALIGN_RIGHT;
107  region->flag = RGN_FLAG_HIDDEN;
108 
109  return region;
110 }
111 
112 /* ******************** default callbacks for file space ***************** */
113 
115 {
116  ARegion *region;
117  SpaceFile *sfile;
118 
119  sfile = MEM_callocN(sizeof(SpaceFile), "initfile");
120  sfile->spacetype = SPACE_FILE;
121 
122  /* header */
123  region = MEM_callocN(sizeof(ARegion), "header for file");
124  BLI_addtail(&sfile->regionbase, region);
125  region->regiontype = RGN_TYPE_HEADER;
126  /* Ignore user preference "USER_HEADER_BOTTOM" here (always show top for new types). */
127  region->alignment = RGN_ALIGN_TOP;
128 
129  /* Tools region */
130  region = MEM_callocN(sizeof(ARegion), "tools region for file");
131  BLI_addtail(&sfile->regionbase, region);
132  region->regiontype = RGN_TYPE_TOOLS;
133  region->alignment = RGN_ALIGN_LEFT;
134 
135  /* ui list region */
136  region = MEM_callocN(sizeof(ARegion), "ui region for file");
137  BLI_addtail(&sfile->regionbase, region);
138  region->regiontype = RGN_TYPE_UI;
139  region->alignment = RGN_ALIGN_TOP;
140  region->flag |= RGN_FLAG_DYNAMIC_SIZE;
141 
142  /* Tool props and execute region are added as needed, see file_refresh(). */
143 
144  /* main region */
145  region = MEM_callocN(sizeof(ARegion), "main region for file");
146  BLI_addtail(&sfile->regionbase, region);
147  region->regiontype = RGN_TYPE_WINDOW;
151  region->v2d.keeptot = V2D_KEEPTOT_STRICT;
152  region->v2d.minzoom = region->v2d.maxzoom = 1.0f;
153 
154  return (SpaceLink *)sfile;
155 }
156 
157 /* not spacelink itself */
158 static void file_free(SpaceLink *sl)
159 {
160  SpaceFile *sfile = (SpaceFile *)sl;
161 
162  BLI_assert(sfile->previews_timer == NULL);
163 
164  if (sfile->files) {
165  /* XXX would need to do thumbnails_stop here, but no context available */
166  filelist_freelib(sfile->files);
167  filelist_free(sfile->files);
168  MEM_freeN(sfile->files);
169  sfile->files = NULL;
170  }
171 
173 
174  MEM_SAFE_FREE(sfile->params);
175  MEM_SAFE_FREE(sfile->asset_params);
176  MEM_SAFE_FREE(sfile->runtime);
177 
178  if (sfile->layout) {
179  MEM_freeN(sfile->layout);
180  sfile->layout = NULL;
181  }
182 }
183 
184 /* spacetype; init callback, area size changes, screen set, etc */
186 {
187  SpaceFile *sfile = (SpaceFile *)area->spacedata.first;
188 
189  if (sfile->layout) {
190  sfile->layout->dirty = true;
191  }
192 
193  if (sfile->runtime == NULL) {
194  sfile->runtime = MEM_callocN(sizeof(*sfile->runtime), __func__);
195  }
196  /* Validate the params right after file read. */
198 }
199 
201 {
202  SpaceFile *sfile = (SpaceFile *)area->spacedata.first;
203 
204  if (sfile->previews_timer) {
206  sfile->previews_timer = NULL;
207  }
208 
209  ED_fileselect_exit(wm, NULL, sfile);
210 }
211 
213 {
214  SpaceFile *sfileo = (SpaceFile *)sl;
215  SpaceFile *sfilen = MEM_dupallocN(sl);
216 
217  /* clear or remove stuff from old */
218  sfilen->op = NULL; /* file window doesn't own operators */
219  sfilen->runtime = NULL;
220 
221  sfilen->previews_timer = NULL;
222  sfilen->smoothscroll_timer = NULL;
223 
224  FileSelectParams *active_params_old = ED_fileselect_get_active_params(sfileo);
225  if (active_params_old) {
226  sfilen->files = filelist_new(active_params_old->type);
227  filelist_setdir(sfilen->files, active_params_old->dir);
228  }
229 
230  if (sfileo->params) {
231  sfilen->params = MEM_dupallocN(sfileo->params);
232  }
233  if (sfileo->asset_params) {
234  sfilen->asset_params = MEM_dupallocN(sfileo->asset_params);
235  }
236 
238 
239  if (sfileo->layout) {
240  sfilen->layout = MEM_dupallocN(sfileo->layout);
241  }
242  return (SpaceLink *)sfilen;
243 }
244 
246  wmWindowManager *wm,
247  wmWindow *win,
248  ScrArea *area,
249  SpaceFile *sfile,
251 {
253  bool needs_init = false; /* To avoid multiple ED_area_init() calls. */
254 
255  BLI_assert(region_tools);
256 
257  if (sfile->browse_mode == FILE_BROWSE_MODE_ASSETS) {
258  file_tool_props_region_ensure(area, region_tools);
259 
261  if (region_execute) {
262  ED_region_remove(C, area, region_execute);
263  needs_init = true;
264  }
266  if (region_ui) {
267  ED_region_remove(C, area, region_ui);
268  needs_init = true;
269  }
270  }
271  /* If there's an file-operation, ensure we have the option and execute region */
272  else if (sfile->op && !BKE_area_find_region_type(area, RGN_TYPE_TOOL_PROPS)) {
273  ARegion *region_ui = file_ui_region_ensure(area, region_tools);
274  ARegion *region_execute = file_execute_region_ensure(area, region_ui);
275  ARegion *region_props = file_tool_props_region_ensure(area, region_execute);
276 
277  if (params->flag & FILE_HIDE_TOOL_PROPS) {
278  region_props->flag |= RGN_FLAG_HIDDEN;
279  }
280  else {
281  region_props->flag &= ~RGN_FLAG_HIDDEN;
282  }
283 
284  needs_init = true;
285  }
286  /* If there's _no_ file-operation, ensure we _don't_ have the option and execute region */
287  else if (!sfile->op) {
290  ARegion *region_ui = file_ui_region_ensure(area, region_tools);
291  UNUSED_VARS(region_ui);
292 
293  if (region_execute) {
294  ED_region_remove(C, area, region_execute);
295  needs_init = true;
296  }
297  if (region_props) {
298  ED_region_remove(C, area, region_props);
299  needs_init = true;
300  }
301  }
302 
303  if (needs_init) {
304  ED_area_init(wm, win, area);
305  }
306 }
307 
312 {
315 }
316 
317 static void file_refresh(const bContext *C, ScrArea *area)
318 {
320  wmWindow *win = CTX_wm_window(C);
321  SpaceFile *sfile = CTX_wm_space_file(C);
324  struct FSMenu *fsmenu = ED_fsmenu_get();
325 
328 
329  if (sfile->files && (sfile->tags & FILE_TAG_REBUILD_MAIN_FILES) &&
332  }
334 
335  if (!sfile->files) {
336  sfile->files = filelist_new(params->type);
337  params->highlight_file = -1; /* added this so it opens nicer (ton) */
338  }
339  filelist_settype(sfile->files, params->type);
340  filelist_setdir(sfile->files, params->dir);
341  filelist_setrecursion(sfile->files, params->recursion_level);
342  filelist_setsorting(sfile->files, params->sort, params->flag & FILE_SORT_INVERT);
343  filelist_setlibrary(sfile->files, asset_params ? &asset_params->asset_library : NULL);
345  sfile->files,
346  (params->flag & FILE_FILTER) != 0,
347  (params->flag & FILE_HIDE_DOT) != 0,
348  true, /* Just always hide parent, prefer to not add an extra user option for this. */
349  params->filter,
350  params->filter_id,
351  (params->flag & FILE_ASSETS_ONLY) != 0,
352  params->filter_glob,
353  params->filter_search);
354 
355  /* Update the active indices of bookmarks & co. */
358  fsmenu, FS_CATEGORY_SYSTEM_BOOKMARKS, params->dir);
361 
362  if (filelist_needs_force_reset(sfile->files)) {
364  filelist_clear(sfile->files);
365  }
366 
367  if (filelist_needs_reading(sfile->files)) {
368  if (!filelist_pending(sfile->files)) {
369  filelist_readjob_start(sfile->files, C);
370  }
371  }
372 
373  filelist_sort(sfile->files);
374  filelist_filter(sfile->files);
375 
376  if (params->display == FILE_IMGDISPLAY) {
377  filelist_cache_previews_set(sfile->files, true);
378  }
379  else {
380  filelist_cache_previews_set(sfile->files, false);
381  if (sfile->previews_timer) {
383  sfile->previews_timer = NULL;
384  }
385  }
386 
387  if (params->rename_flag != 0) {
389  }
390 
391  if (sfile->layout) {
392  sfile->layout->dirty = true;
393  }
394 
395  /* Might be called with NULL area, see file_main_region_draw() below. */
396  if (area) {
397  file_ensure_valid_region_state((bContext *)C, wm, win, area, sfile, params);
398  }
399 
401 }
402 
405  onReloadFnData custom_data)
406 {
407  sfile->runtime->on_reload = callback;
408  sfile->runtime->on_reload_custom_data = custom_data;
409 }
410 
412 {
413  if (sfile->runtime->on_reload == NULL) {
414  return;
415  }
416 
417  sfile->runtime->on_reload(sfile, sfile->runtime->on_reload_custom_data);
418 
419  sfile->runtime->on_reload = NULL;
421 }
422 
424 {
425  if (sfile->files && filelist_needs_reset_on_main_changes(sfile->files)) {
426  /* Full refresh of the file list if local asset data was changed. Refreshing this view
427  * is cheap and users expect this to be updated immediately. */
428  file_tag_reset_list(area, sfile);
429  }
430 }
431 
433 {
434  ScrArea *area = params->area;
435  wmNotifier *wmn = params->notifier;
436  SpaceFile *sfile = (SpaceFile *)area->spacedata.first;
437 
438  /* context changes */
439  switch (wmn->category) {
440  case NC_SPACE:
441  switch (wmn->data) {
442  case ND_SPACE_FILE_LIST:
444  break;
447  break;
449  if (sfile->files && filelist_cache_previews_update(sfile->files)) {
451  }
452  break;
454  if (sfile->browse_mode == FILE_BROWSE_MODE_ASSETS) {
456  }
457  break;
458  case ND_SPACE_CHANGED:
459  /* If the space was just turned into a file/asset browser, the file-list may need to be
460  * updated to reflect latest changes in main data. */
462  break;
463  }
464  switch (wmn->action) {
465  case NA_JOB_FINISHED:
467  break;
468  }
469  break;
470  case NC_ASSET: {
471  switch (wmn->action) {
472  case NA_SELECTED:
473  case NA_ACTIVATED:
475  break;
476  case NA_ADDED:
477  case NA_REMOVED:
478  case NA_EDITED:
480  break;
481  }
482  break;
483  }
484  }
485 }
486 
487 /* add handlers, stuff you only do once or on area/region changes */
489 {
490  wmKeyMap *keymap;
491 
492  UI_view2d_region_reinit(&region->v2d, V2D_COMMONVIEW_LIST, region->winx, region->winy);
493 
494  /* own keymaps */
495  keymap = WM_keymap_ensure(wm->defaultconf, "File Browser", SPACE_FILE, 0);
497 
498  keymap = WM_keymap_ensure(wm->defaultconf, "File Browser Main", SPACE_FILE, 0);
500 }
501 
503 {
504  ARegion *region = params->region;
505  wmNotifier *wmn = params->notifier;
506 
507  /* context changes */
508  switch (wmn->category) {
509  case NC_SPACE:
510  switch (wmn->data) {
511  case ND_SPACE_FILE_LIST:
512  ED_region_tag_redraw(region);
513  break;
515  ED_region_tag_redraw(region);
516  break;
517  }
518  break;
519  case NC_ID:
521  ED_region_tag_redraw(region);
522  }
523  break;
524  }
525 }
526 
528 {
529  struct wmMsgBus *mbus = params->message_bus;
530  bScreen *screen = params->screen;
531  ScrArea *area = params->area;
532  ARegion *region = params->region;
533  SpaceFile *sfile = area->spacedata.first;
534 
536  /* This is a bit odd that a region owns the subscriber for an area,
537  * keep for now since all subscribers for WM are regions.
538  * May be worth re-visiting later. */
539  wmMsgSubscribeValue msg_sub_value_area_tag_refresh = {
540  .owner = region,
541  .user_data = area,
543  };
544 
545  /* SpaceFile itself. */
546  {
547  PointerRNA ptr;
548  RNA_pointer_create(&screen->id, &RNA_SpaceFileBrowser, sfile, &ptr);
549 
550  /* All properties for this space type. */
551  WM_msg_subscribe_rna(mbus, &ptr, NULL, &msg_sub_value_area_tag_refresh, __func__);
552  }
553 
554  /* FileSelectParams */
555  {
556  PointerRNA ptr;
557  RNA_pointer_create(&screen->id, &RNA_FileSelectParams, file_params, &ptr);
558 
559  /* All properties for this space type. */
560  WM_msg_subscribe_rna(mbus, &ptr, NULL, &msg_sub_value_area_tag_refresh, __func__);
561  }
562 }
563 
565 {
566  /* Needed, because filelist is not initialized on loading */
567  if (!sfile->files || filelist_needs_reading(sfile->files)) {
568  return true;
569  }
570 
571  /* File reading tagged the space because main data changed that may require a filelist reset. */
573  (sfile->tags & FILE_TAG_REBUILD_MAIN_FILES)) {
574  return true;
575  }
576 
577  return false;
578 }
579 
580 static void file_main_region_draw(const bContext *C, ARegion *region)
581 {
582  /* draw entirely, view changes should be handled here */
583  SpaceFile *sfile = CTX_wm_space_file(C);
585 
586  View2D *v2d = &region->v2d;
587 
589  file_refresh(C, NULL);
590  }
591 
592  /* clear and setup matrix */
594 
595  /* Allow dynamically sliders to be set, saves notifiers etc. */
596 
597  if (params->display == FILE_IMGDISPLAY) {
598  v2d->scroll = V2D_SCROLL_RIGHT;
599  v2d->keepofs &= ~V2D_LOCKOFS_Y;
600  v2d->keepofs |= V2D_LOCKOFS_X;
601  }
602  else if (params->display == FILE_VERTICALDISPLAY) {
603  v2d->scroll = V2D_SCROLL_RIGHT;
604  v2d->keepofs &= ~V2D_LOCKOFS_Y;
605  v2d->keepofs |= V2D_LOCKOFS_X;
606  }
607  else {
608  v2d->scroll = V2D_SCROLL_BOTTOM;
609  v2d->keepofs &= ~V2D_LOCKOFS_X;
610  v2d->keepofs |= V2D_LOCKOFS_Y;
611 
612  /* XXX this happens on scaling down Screen (like from startup.blend) */
613  /* view2d has no type specific for file-window case, which doesn't scroll vertically. */
614  if (v2d->cur.ymax < 0) {
615  v2d->cur.ymin -= v2d->cur.ymax;
616  v2d->cur.ymax = 0;
617  }
618  }
619  /* v2d has initialized flag, so this call will only set the mask correct */
620  UI_view2d_region_reinit(v2d, V2D_COMMONVIEW_LIST, region->winx, region->winy);
621 
622  /* sets tile/border settings in sfile */
623  file_calc_previews(C, region);
624 
625  /* set view */
627 
628  /* on first read, find active file */
629  if (params->highlight_file == -1) {
630  wmEvent *event = CTX_wm_window(C)->eventstate;
631  file_highlight_set(sfile, region, event->x, event->y);
632  }
633 
634  if (!file_draw_hint_if_invalid(sfile, region)) {
635  file_draw_list(C, region);
636  }
637 
638  /* reset view matrix */
640 
641  /* scrollers */
642  rcti view_rect;
643  ED_fileselect_layout_maskrect(sfile->layout, v2d, &view_rect);
644  UI_view2d_scrollers_draw(v2d, &view_rect);
645 }
646 
647 static void file_operatortypes(void)
648 {
676 }
677 
678 /* NOTE: do not add .blend file reading on this level */
679 static void file_keymap(struct wmKeyConfig *keyconf)
680 {
681  /* keys for all regions */
682  WM_keymap_ensure(keyconf, "File Browser", SPACE_FILE, 0);
683 
684  /* keys for main region */
685  WM_keymap_ensure(keyconf, "File Browser Main", SPACE_FILE, 0);
686 
687  /* keys for button region (top) */
688  WM_keymap_ensure(keyconf, "File Browser Buttons", SPACE_FILE, 0);
689 }
690 
692 {
693  wmKeyMap *keymap;
694 
696  ED_region_panels_init(wm, region);
697 
698  /* own keymaps */
699  keymap = WM_keymap_ensure(wm->defaultconf, "File Browser", SPACE_FILE, 0);
701 }
702 
703 static void file_tools_region_draw(const bContext *C, ARegion *region)
704 {
705  ED_region_panels(C, region);
706 }
707 
709 {
710 }
711 
713 {
714  const wmNotifier *wmn = params->notifier;
715  ARegion *region = 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  }
725 }
726 
727 /* add handlers, stuff you only do once or on area/region changes */
729 {
730  wmKeyMap *keymap;
731 
732  ED_region_header_init(region);
733 
734  keymap = WM_keymap_ensure(wm->defaultconf, "File Browser", SPACE_FILE, 0);
736 }
737 
738 static void file_header_region_draw(const bContext *C, ARegion *region)
739 {
740  ED_region_header(C, region);
741 }
742 
743 /* add handlers, stuff you only do once or on area/region changes */
744 static void file_ui_region_init(wmWindowManager *wm, ARegion *region)
745 {
746  wmKeyMap *keymap;
747 
748  ED_region_panels_init(wm, region);
750 
751  /* own keymap */
752  keymap = WM_keymap_ensure(wm->defaultconf, "File Browser", SPACE_FILE, 0);
754 
755  keymap = WM_keymap_ensure(wm->defaultconf, "File Browser Buttons", SPACE_FILE, 0);
757 }
758 
759 static void file_ui_region_draw(const bContext *C, ARegion *region)
760 {
761  ED_region_panels(C, region);
762 }
763 
765 {
766  wmKeyMap *keymap;
767 
768  ED_region_panels_init(wm, region);
770 
771  /* own keymap */
772  keymap = WM_keymap_ensure(wm->defaultconf, "File Browser", SPACE_FILE, 0);
774 }
775 
776 static void file_execution_region_draw(const bContext *C, ARegion *region)
777 {
778  ED_region_panels(C, region);
779 }
780 
782 {
783  ARegion *region = params->region;
784  wmNotifier *wmn = params->notifier;
785 
786  /* context changes */
787  switch (wmn->category) {
788  case NC_SPACE:
789  switch (wmn->data) {
790  case ND_SPACE_FILE_LIST:
791  ED_region_tag_redraw(region);
792  break;
793  }
794  break;
795  }
796 }
797 
799  wmDrag *drag,
800  const wmEvent *UNUSED(event),
801  const char **UNUSED(r_tooltip))
802 {
803  if (drag->type == WM_DRAG_PATH) {
804  SpaceFile *sfile = CTX_wm_space_file(C);
805  if (sfile) {
806  return true;
807  }
808  }
809  return false;
810 }
811 
812 static void filepath_drop_copy(wmDrag *drag, wmDropBox *drop)
813 {
814  RNA_string_set(drop->ptr, "filepath", drag->path);
815 }
816 
817 /* region dropbox definition */
818 static void file_dropboxes(void)
819 {
821 
822  WM_dropbox_add(lb, "FILE_OT_filepath_drop", filepath_drop_poll, filepath_drop_copy, NULL);
823 }
824 
826 {
827  SpaceFile *sfile = area->spacedata.first;
828  return sfile->browse_mode;
829 }
830 
831 static void file_space_subtype_set(ScrArea *area, int value)
832 {
833  SpaceFile *sfile = area->spacedata.first;
834  sfile->browse_mode = value;
835 }
836 
838  EnumPropertyItem **item,
839  int *totitem)
840 {
841  if (U.experimental.use_asset_browser) {
843  }
844  else {
847  }
848 }
849 
850 static const char *file_context_dir[] = {"active_file", "id", NULL};
851 
852 static int /*eContextResult*/ file_context(const bContext *C,
853  const char *member,
855 {
856  bScreen *screen = CTX_wm_screen(C);
857  SpaceFile *sfile = CTX_wm_space_file(C);
859 
861 
862  if (CTX_data_dir(member)) {
864  return CTX_RESULT_OK;
865  }
866 
867  /* The following member checks return file-list data, check if that needs refreshing first. */
869  return CTX_RESULT_NO_DATA;
870  }
871 
872  if (CTX_data_equals(member, "active_file")) {
873  FileDirEntry *file = filelist_file(sfile->files, params->active_file);
874  if (file == NULL) {
875  return CTX_RESULT_NO_DATA;
876  }
877 
879  return CTX_RESULT_OK;
880  }
881  if (CTX_data_equals(member, "id")) {
882  const FileDirEntry *file = filelist_file(sfile->files, params->active_file);
883  if (file == NULL) {
884  return CTX_RESULT_NO_DATA;
885  }
886 
888  if (id == NULL) {
889  return CTX_RESULT_NO_DATA;
890  }
891 
893  return CTX_RESULT_OK;
894  }
895 
897 }
898 
899 static void file_id_remap(ScrArea *area, SpaceLink *sl, ID *UNUSED(old_id), ID *UNUSED(new_id))
900 {
901  SpaceFile *sfile = (SpaceFile *)sl;
902 
903  /* If the file shows main data (IDs), tag it for reset.
904  * Full reset of the file list if main data was changed, don't even attempt remap pointers.
905  * We could give file list types a id-remap callback, but it's probably not worth it.
906  * Refreshing local file lists is relatively cheap. */
908 }
909 
910 /* only called once, from space/spacetypes.c */
912 {
913  SpaceType *st = MEM_callocN(sizeof(SpaceType), "spacetype file");
914  ARegionType *art;
915 
916  st->spaceid = SPACE_FILE;
917  strncpy(st->name, "File", BKE_ST_MAXNAME);
918 
919  st->create = file_create;
920  st->free = file_free;
921  st->init = file_init;
922  st->exit = file_exit;
924  st->refresh = file_refresh;
925  st->listener = file_listener;
927  st->keymap = file_keymap;
932  st->context = file_context;
933  st->id_remap = file_id_remap;
934 
935  /* regions: main window */
936  art = MEM_callocN(sizeof(ARegionType), "spacetype file region");
937  art->regionid = RGN_TYPE_WINDOW;
943  BLI_addhead(&st->regiontypes, art);
944 
945  /* regions: header */
946  art = MEM_callocN(sizeof(ARegionType), "spacetype file region");
947  art->regionid = RGN_TYPE_HEADER;
948  art->prefsizey = HEADERY;
952  // art->listener = file_header_region_listener;
953  BLI_addhead(&st->regiontypes, art);
954 
955  /* regions: ui */
956  art = MEM_callocN(sizeof(ARegionType), "spacetype file region");
957  art->regionid = RGN_TYPE_UI;
958  art->keymapflag = ED_KEYMAP_UI;
960  art->init = file_ui_region_init;
961  art->draw = file_ui_region_draw;
962  BLI_addhead(&st->regiontypes, art);
963 
964  /* regions: execution */
965  art = MEM_callocN(sizeof(ARegionType), "spacetype file region");
966  art->regionid = RGN_TYPE_EXECUTE;
967  art->keymapflag = ED_KEYMAP_UI;
971  BLI_addhead(&st->regiontypes, art);
973 
974  /* regions: channels (directories) */
975  art = MEM_callocN(sizeof(ARegionType), "spacetype file region");
976  art->regionid = RGN_TYPE_TOOLS;
977  art->prefsizex = 240;
978  art->prefsizey = 60;
979  art->keymapflag = ED_KEYMAP_UI;
983  BLI_addhead(&st->regiontypes, art);
984 
985  /* regions: tool properties */
986  art = MEM_callocN(sizeof(ARegionType), "spacetype file operator region");
988  art->prefsizex = 240;
989  art->prefsizey = 60;
990  art->keymapflag = ED_KEYMAP_UI;
994  BLI_addhead(&st->regiontypes, art);
996 
998 }
999 
1000 void ED_file_init(void)
1001 {
1003 
1004  if (G.background == false) {
1006  }
1007 
1009 }
1010 
1011 void ED_file_exit(void)
1012 {
1013  fsmenu_free();
1014 
1015  if (G.background == false) {
1017  }
1018 }
1019 
1021 {
1022  const char *const cfgdir = BKE_appdir_folder_id(BLENDER_USER_CONFIG, NULL);
1023 
1024  fsmenu_free();
1025 
1027 
1028  if (cfgdir) {
1029  char name[FILE_MAX];
1030  BLI_join_dirfile(name, sizeof(name), cfgdir, BLENDER_BOOKMARK_FILE);
1032  }
1033 }
@ BLENDER_USER_CONFIG
Definition: BKE_appdir.h:81
#define BLENDER_BOOKMARK_FILE
Definition: BKE_appdir.h:102
const char * BKE_appdir_folder_id(const int folder_id, const char *subfolder)
Definition: appdir.c:674
struct ScrArea * CTX_wm_area(const bContext *C)
Definition: context.c:714
struct Scene * CTX_data_scene(const bContext *C)
Definition: context.c:1034
void CTX_data_dir_set(bContextDataResult *result, const char **dir)
Definition: context.c:672
bool CTX_data_equals(const char *member, const char *str)
Definition: context.c:623
void CTX_data_pointer_set(bContextDataResult *result, struct ID *id, StructRNA *type, void *data)
Definition: context.c:638
void CTX_data_id_pointer_set(bContextDataResult *result, struct ID *id)
Definition: context.c:633
bool CTX_data_dir(const char *member)
Definition: context.c:628
struct wmWindowManager * CTX_wm_manager(const bContext *C)
Definition: context.c:689
@ CTX_RESULT_MEMBER_NOT_FOUND
Definition: BKE_context.h:86
@ CTX_RESULT_OK
Definition: BKE_context.h:83
@ CTX_RESULT_NO_DATA
Definition: BKE_context.h:90
struct bScreen * CTX_wm_screen(const bContext *C)
Definition: context.c:709
struct SpaceFile * CTX_wm_space_file(const bContext *C)
Definition: context.c:818
struct wmWindow * CTX_wm_window(const bContext *C)
Definition: context.c:699
struct ARegion * BKE_area_find_region_type(const struct ScrArea *area, int type)
#define BKE_ST_MAXNAME
Definition: BKE_screen.h:68
void BKE_spacetype_register(struct SpaceType *st)
Definition: screen.c:420
#define BLI_assert(a)
Definition: BLI_assert.h:58
void BLI_addhead(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
Definition: listbase.c:87
void BLI_insertlinkafter(struct ListBase *listbase, void *vprevlink, void *vnewlink) ATTR_NONNULL(1)
Definition: listbase.c:352
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
Definition: listbase.c:110
#define FILE_MAX
void BLI_join_dirfile(char *__restrict dst, const size_t maxlen, const char *__restrict dir, const char *__restrict file) ATTR_NONNULL()
Definition: path_util.c:1737
#define UNUSED_VARS(...)
#define UNUSED(x)
#define ELEM(...)
#define HEADERY
@ RGN_ALIGN_BOTTOM
@ RGN_ALIGN_LEFT
@ RGN_ALIGN_TOP
@ RGN_ALIGN_RIGHT
@ RGN_FLAG_DYNAMIC_SIZE
@ RGN_FLAG_HIDDEN
@ RGN_TYPE_EXECUTE
@ RGN_TYPE_UI
@ RGN_TYPE_WINDOW
@ RGN_TYPE_HEADER
@ RGN_TYPE_TOOLS
@ RGN_TYPE_TOOL_PROPS
@ SPACE_FILE
@ SPACE_EMPTY
@ FILE_TAG_REBUILD_MAIN_FILES
@ FILE_BROWSE_MODE_ASSETS
@ FILE_BROWSE_MODE_FILES
@ FILE_VERTICALDISPLAY
@ FILE_IMGDISPLAY
@ FILE_HIDE_TOOL_PROPS
@ FILE_FILTER
@ FILE_SORT_INVERT
@ FILE_ASSETS_ONLY
@ FILE_HIDE_DOT
@ V2D_KEEPTOT_STRICT
@ V2D_SCROLL_VERTICAL_HIDE
@ V2D_SCROLL_RIGHT
@ V2D_SCROLL_BOTTOM
@ V2D_ALIGN_NO_NEG_X
@ V2D_ALIGN_NO_POS_Y
@ V2D_LIMITZOOM
@ V2D_LOCKZOOM_X
@ V2D_KEEPASPECT
@ V2D_LOCKZOOM_Y
@ V2D_LOCKOFS_X
@ V2D_LOCKOFS_Y
void ED_fileselect_layout_maskrect(const FileLayout *layout, const struct View2D *v2d, struct rcti *r_rect)
struct FileAssetSelectParams * ED_fileselect_get_asset_params(const struct SpaceFile *sfile)
@ FS_CATEGORY_RECENT
@ FS_CATEGORY_BOOKMARKS
@ FS_CATEGORY_SYSTEM_BOOKMARKS
@ FS_CATEGORY_SYSTEM
struct FSMenu * ED_fsmenu_get(void)
Definition: fsmenu.c:78
struct FileSelectParams * ED_fileselect_ensure_active_params(struct SpaceFile *sfile)
Definition: filesel.c:365
struct FileSelectParams * ED_fileselect_get_active_params(const struct SpaceFile *sfile)
void ED_fileselect_exit(struct wmWindowManager *wm, struct Scene *owner_scene, struct SpaceFile *sfile)
Definition: filesel.c:1199
void ED_area_tag_redraw(ScrArea *area)
Definition: area.c:745
void ED_region_header(const struct bContext *C, struct ARegion *region)
void ED_area_do_msg_notify_tag_refresh(struct bContext *C, struct wmMsgSubscribeKey *msg_key, struct wmMsgSubscribeValue *msg_val)
void ED_region_remove(struct bContext *C, struct ScrArea *area, struct ARegion *region)
Definition: screen_edit.c:563
void ED_region_panels(const struct bContext *C, struct ARegion *region)
bool ED_area_is_global(const ScrArea *area)
Definition: area.c:3393
void ED_region_panels_init(struct wmWindowManager *wm, struct ARegion *region)
Definition: area.c:3090
void ED_region_tag_redraw(struct ARegion *region)
Definition: area.c:667
void ED_region_header_init(struct ARegion *region)
Definition: area.c:3358
void ED_area_tag_refresh(ScrArea *area)
Definition: area.c:774
void ED_area_init(struct wmWindowManager *wm, struct wmWindow *win, struct ScrArea *area)
Definition: area.c:1906
@ ED_KEYMAP_UI
Definition: ED_screen.h:440
@ ED_KEYMAP_HEADER
Definition: ED_screen.h:446
@ ED_KEYMAP_VIEW2D
Definition: ED_screen.h:443
Contains defines and structs used throughout the imbuf module.
void IMB_thumb_makedirs(void)
Definition: thumbs.c:305
Read Guarded memory(de)allocation.
#define MEM_SAFE_FREE(v)
StructRNA RNA_FileSelectEntry
StructRNA RNA_SpaceFileBrowser
StructRNA RNA_FileSelectParams
#define C
Definition: RandGen.cpp:39
@ TH_BACK
Definition: UI_resources.h:55
void UI_ThemeClearColor(int colorid)
Definition: resources.c:1478
void UI_view2d_region_reinit(struct View2D *v2d, short type, int winx, int winy)
Definition: view2d.c:240
void UI_view2d_view_restore(const struct bContext *C)
void UI_view2d_view_ortho(const struct View2D *v2d)
void UI_view2d_scrollers_draw(struct View2D *v2d, const struct rcti *mask_custom)
@ V2D_COMMONVIEW_LIST
Definition: UI_view2d.h:53
#define NA_ACTIVATED
Definition: WM_types.h:468
#define NC_ID
Definition: WM_types.h:296
#define ND_SPACE_CHANGED
Definition: WM_types.h:432
#define WM_DRAG_PATH
Definition: WM_types.h:876
#define ND_SPACE_ASSET_PARAMS
Definition: WM_types.h:420
#define NA_ADDED
Definition: WM_types.h:464
#define NA_EDITED
Definition: WM_types.h:462
#define ND_SPACE_FILE_PREVIEW
Definition: WM_types.h:434
#define NC_ASSET
Definition: WM_types.h:305
#define NA_REMOVED
Definition: WM_types.h:465
#define NA_RENAME
Definition: WM_types.h:466
#define NA_JOB_FINISHED
Definition: WM_types.h:470
#define ND_SPACE_FILE_PARAMS
Definition: WM_types.h:418
#define NC_SPACE
Definition: WM_types.h:293
#define NA_SELECTED
Definition: WM_types.h:467
#define ND_SPACE_FILE_LIST
Definition: WM_types.h:419
unsigned int U
Definition: btGjkEpa3.h:78
FILE * file
Scene scene
DEGForeachIDComponentCallback callback
bool file_draw_hint_if_invalid(const SpaceFile *sfile, const ARegion *region)
Definition: file_draw.c:1060
void file_calc_previews(const bContext *C, ARegion *region)
Definition: file_draw.c:293
void file_draw_list(const bContext *C, ARegion *region)
Definition: file_draw.c:793
void FILE_OT_bookmark_move(struct wmOperatorType *ot)
Definition: file_ops.c:1290
void FILE_OT_filenum(struct wmOperatorType *ot)
Definition: file_ops.c:2671
void(* onReloadFn)(struct SpaceFile *space_data, onReloadFnData custom_data)
Definition: file_intern.h:117
void FILE_OT_rename(struct wmOperatorType *ot)
Definition: file_ops.c:2741
void FILE_OT_bookmark_delete(struct wmOperatorType *ot)
Definition: file_ops.c:1141
void FILE_OT_sort_column_ui_context(struct wmOperatorType *ot)
Definition: file_ops.c:1469
void FILE_OT_cancel(struct wmOperatorType *ot)
Definition: file_ops.c:1514
void FILE_OT_highlight(struct wmOperatorType *ot)
Definition: file_ops.c:1418
void FILE_OT_select(struct wmOperatorType *ot)
Definition: file_ops.c:600
void FILE_OT_directory_new(struct wmOperatorType *ot)
Definition: file_ops.c:2346
void FILE_OT_view_selected(struct wmOperatorType *ot)
Definition: file_ops.c:999
void file_params_renamefile_activate(struct SpaceFile *sfile, struct FileSelectParams *params)
Definition: filesel.c:1237
void FILE_OT_parent(struct wmOperatorType *ot)
Definition: file_ops.c:1910
void FILE_OT_bookmark_add(struct wmOperatorType *ot)
Definition: file_ops.c:1089
void FILE_OT_hidedot(struct wmOperatorType *ot)
Definition: file_ops.c:2592
void FILE_OT_refresh(struct wmOperatorType *ot)
Definition: file_ops.c:1870
void FILE_OT_reset_recent(wmOperatorType *ot)
Definition: file_ops.c:1345
void FILE_OT_select_all(struct wmOperatorType *ot)
Definition: file_ops.c:947
void fileselect_refresh_params(struct SpaceFile *sfile)
Definition: filesel.c:444
void file_tool_props_region_panels_register(struct ARegionType *art)
Definition: file_panels.c:98
void FILE_OT_delete(struct wmOperatorType *ot)
Definition: file_ops.c:2851
void FILE_OT_execute(struct wmOperatorType *ot)
Definition: file_ops.c:1818
void * onReloadFnData
Definition: file_intern.h:116
void FILE_OT_select_bookmark(struct wmOperatorType *ot)
Definition: file_ops.c:1041
void FILE_OT_start_filter(struct wmOperatorType *ot)
Definition: file_ops.c:2892
int file_highlight_set(struct SpaceFile *sfile, struct ARegion *region, int mx, int my)
Definition: file_ops.c:1363
void FILE_OT_select_box(struct wmOperatorType *ot)
Definition: file_ops.c:514
void FILE_OT_select_walk(struct wmOperatorType *ot)
Definition: file_ops.c:858
void file_execute_region_panels_register(struct ARegionType *art)
Definition: file_panels.c:212
void FILE_OT_next(struct wmOperatorType *ot)
Definition: file_ops.c:1981
void FILE_OT_filepath_drop(struct wmOperatorType *ot)
Definition: file_ops.c:2220
void FILE_OT_smoothscroll(struct wmOperatorType *ot)
Definition: file_ops.c:2173
void FILE_OT_bookmark_cleanup(struct wmOperatorType *ot)
Definition: file_ops.c:1201
void FILE_OT_previous(struct wmOperatorType *ot)
Definition: file_ops.c:1945
void filelist_tag_force_reset(FileList *filelist)
Definition: filelist.c:1905
void filelist_free(struct FileList *filelist)
Definition: filelist.c:1796
void filelist_readjob_stop(wmWindowManager *wm, Scene *owner_scene)
Definition: filelist.c:3500
void filelist_cache_previews_set(FileList *filelist, const bool use_previews)
Definition: filelist.c:2384
void filelist_setsorting(struct FileList *filelist, const short sort, bool invert_sort)
Definition: filelist.c:728
void folder_history_list_ensure_for_active_browse_mode(SpaceFile *sfile)
Definition: filelist.c:213
void filelist_sort(struct FileList *filelist)
Definition: filelist.c:695
void filelist_freelib(struct FileList *filelist)
Definition: filelist.c:1819
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.c:988
void folder_history_list_free(SpaceFile *sfile)
Definition: filelist.c:240
void filelist_setdir(struct FileList *filelist, char *r_dir)
Definition: filelist.c:1876
FileList * filelist_new(short type)
Definition: filelist.c:1721
ListBase folder_history_list_duplicate(ListBase *listbase)
Definition: filelist.c:247
ID * filelist_file_get_id(const FileDirEntry *file)
Definition: filelist.c:2071
void filelist_readjob_start(FileList *filelist, const bContext *C)
Definition: filelist.c:3445
void filelist_setrecursion(struct FileList *filelist, const int recursion_level)
Definition: filelist.c:1892
bool filelist_cache_previews_update(FileList *filelist)
Definition: filelist.c:2408
void filelist_settype(FileList *filelist, short type)
Definition: filelist.c:1735
void filelist_clear(struct FileList *filelist)
Definition: filelist.c:1791
void filelist_init_icons(void)
Definition: filelist.c:1094
FileDirEntry * filelist_file(struct FileList *filelist, int index)
Definition: filelist.c:2041
bool filelist_pending(struct FileList *filelist)
Definition: filelist.c:1915
void filelist_filter(FileList *filelist)
Definition: filelist.c:937
void filelist_setlibrary(FileList *filelist, const FileSelectAssetLibraryUID *asset_library)
Definition: filelist.c:1068
bool filelist_needs_reset_on_main_changes(const FileList *filelist)
Definition: filelist.c:1920
bool filelist_needs_force_reset(FileList *filelist)
Definition: filelist.c:1900
int filelist_needs_reading(struct FileList *filelist)
Definition: filelist.c:2603
void filelist_free_icons(void)
Definition: filelist.c:1128
int fsmenu_get_active_indices(struct FSMenu *fsmenu, enum FSMenuCategory category, const char *dir)
Definition: fsmenu.c:1111
void fsmenu_free(void)
Definition: fsmenu.c:1068
void fsmenu_read_system(struct FSMenu *fsmenu, int read_bookmarks)
Definition: fsmenu.c:641
void fsmenu_read_bookmarks(struct FSMenu *fsmenu, const char *filename)
Definition: fsmenu.c:569
uiWidgetBaseParameters params[MAX_WIDGET_BASE_BATCH]
void(* MEM_freeN)(void *vmemh)
Definition: mallocn.c:41
void *(* MEM_dupallocN)(const void *vmemh)
Definition: mallocn.c:42
void *(* MEM_callocN)(size_t len, const char *str)
Definition: mallocn.c:45
static void area(int d1, int d2, int e1, int e2, float weights[2])
void RNA_pointer_create(ID *id, StructRNA *type, void *data, PointerRNA *r_ptr)
Definition: rna_access.c:146
void RNA_string_set(PointerRNA *ptr, const char *name, const char *value)
Definition: rna_access.c:6550
void RNA_enum_items_add(EnumPropertyItem **items, int *totitem, const EnumPropertyItem *item)
Definition: rna_define.c:4448
void RNA_enum_items_add_value(EnumPropertyItem **items, int *totitem, const EnumPropertyItem *item, int value)
Definition: rna_define.c:4455
const EnumPropertyItem rna_enum_space_file_browse_mode_items[]
Definition: rna_space.c:184
void ED_file_exit(void)
Definition: space_file.c:1011
static SpaceLink * file_create(const ScrArea *UNUSED(area), const Scene *UNUSED(scene))
Definition: space_file.c:114
static void file_ui_region_init(wmWindowManager *wm, ARegion *region)
Definition: space_file.c:744
static void file_exit(wmWindowManager *wm, ScrArea *area)
Definition: space_file.c:200
static int file_space_subtype_get(ScrArea *area)
Definition: space_file.c:825
static void file_main_region_init(wmWindowManager *wm, ARegion *region)
Definition: space_file.c:488
static void file_execution_region_draw(const bContext *C, ARegion *region)
Definition: space_file.c:776
void ED_file_read_bookmarks(void)
Definition: space_file.c:1020
static const char * file_context_dir[]
Definition: space_file.c:850
static void file_header_region_draw(const bContext *C, ARegion *region)
Definition: space_file.c:738
static void file_tools_region_init(wmWindowManager *wm, ARegion *region)
Definition: space_file.c:691
static void file_main_region_draw(const bContext *C, ARegion *region)
Definition: space_file.c:580
static void file_ui_region_listener(const wmRegionListenerParams *params)
Definition: space_file.c:781
static ARegion * file_ui_region_ensure(ScrArea *area, ARegion *region_prev)
Definition: space_file.c:60
static SpaceLink * file_duplicate(SpaceLink *sl)
Definition: space_file.c:212
static void file_main_region_listener(const wmRegionListenerParams *params)
Definition: space_file.c:502
static void filepath_drop_copy(wmDrag *drag, wmDropBox *drop)
Definition: space_file.c:812
void ED_spacetype_file(void)
Definition: space_file.c:911
void file_on_reload_callback_register(SpaceFile *sfile, onReloadFn callback, onReloadFnData custom_data)
Definition: space_file.c:403
static void file_space_subtype_set(ScrArea *area, int value)
Definition: space_file.c:831
static void file_execution_region_init(wmWindowManager *wm, ARegion *region)
Definition: space_file.c:764
static void file_listener(const wmSpaceTypeListenerParams *params)
Definition: space_file.c:432
static bool file_main_region_needs_refresh_before_draw(SpaceFile *sfile)
Definition: space_file.c:564
static ARegion * file_execute_region_ensure(ScrArea *area, ARegion *region_prev)
Definition: space_file.c:77
static void file_tool_props_region_listener(const wmRegionListenerParams *params)
Definition: space_file.c:712
static void file_free(SpaceLink *sl)
Definition: space_file.c:158
static void file_on_reload_callback_call(SpaceFile *sfile)
Definition: space_file.c:411
static void file_operatortypes(void)
Definition: space_file.c:647
static void file_refresh(const bContext *C, ScrArea *area)
Definition: space_file.c:317
void ED_file_init(void)
Definition: space_file.c:1000
static void file_tools_region_draw(const bContext *C, ARegion *region)
Definition: space_file.c:703
static ARegion * file_tool_props_region_ensure(ScrArea *area, ARegion *region_prev)
Definition: space_file.c:94
static void file_space_subtype_item_extend(bContext *UNUSED(C), EnumPropertyItem **item, int *totitem)
Definition: space_file.c:837
static void file_keymap(struct wmKeyConfig *keyconf)
Definition: space_file.c:679
static int file_context(const bContext *C, const char *member, bContextDataResult *result)
Definition: space_file.c:852
static void file_id_remap(ScrArea *area, SpaceLink *sl, ID *UNUSED(old_id), ID *UNUSED(new_id))
Definition: space_file.c:899
static void file_init(wmWindowManager *UNUSED(wm), ScrArea *area)
Definition: space_file.c:185
static void file_reset_filelist_showing_main_data(ScrArea *area, SpaceFile *sfile)
Definition: space_file.c:423
static void file_main_region_message_subscribe(const wmRegionMessageSubscribeParams *params)
Definition: space_file.c:527
static void file_ui_region_draw(const bContext *C, ARegion *region)
Definition: space_file.c:759
static void file_tools_region_listener(const wmRegionListenerParams *UNUSED(params))
Definition: space_file.c:708
static void file_tag_reset_list(ScrArea *area, SpaceFile *sfile)
Definition: space_file.c:311
static void file_header_region_init(wmWindowManager *wm, ARegion *region)
Definition: space_file.c:728
static void file_ensure_valid_region_state(bContext *C, wmWindowManager *wm, wmWindow *win, ScrArea *area, SpaceFile *sfile, FileSelectParams *params)
Definition: space_file.c:245
static bool filepath_drop_poll(bContext *C, wmDrag *drag, const wmEvent *UNUSED(event), const char **UNUSED(r_tooltip))
Definition: space_file.c:798
static void file_dropboxes(void)
Definition: space_file.c:818
void(* draw)(const struct bContext *C, struct ARegion *region)
Definition: BKE_screen.h:169
void(* message_subscribe)(const wmRegionMessageSubscribeParams *params)
Definition: BKE_screen.h:185
void(* listener)(const wmRegionListenerParams *params)
Definition: BKE_screen.h:183
int keymapflag
Definition: BKE_screen.h:226
void(* init)(struct wmWindowManager *wm, struct ARegion *region)
Definition: BKE_screen.h:165
ListBase handlers
short alignment
short regiontype
Definition: fsmenu.c:68
FileSelectAssetLibraryUID asset_library
Definition: DNA_ID.h:273
onReloadFnData on_reload_custom_data
Definition: file_intern.h:122
onReloadFn on_reload
Definition: file_intern.h:121
struct wmTimer * smoothscroll_timer
short bookmarknr
struct FileLayout * layout
ListBase regionbase
struct wmOperator * op
short system_bookmarknr
struct FileList * files
FileSelectParams * params
struct wmTimer * previews_timer
FileAssetSelectParams * asset_params
ListBase folder_histories
SpaceFile_Runtime * runtime
struct SpaceLink *(* duplicate)(struct SpaceLink *sl)
Definition: BKE_screen.h:104
ListBase regiontypes
Definition: BKE_screen.h:130
void(* exit)(struct wmWindowManager *wm, struct ScrArea *area)
Definition: BKE_screen.h:93
void(* keymap)(struct wmKeyConfig *keyconf)
Definition: BKE_screen.h:109
void(* operatortypes)(void)
Definition: BKE_screen.h:107
void(* free)(struct SpaceLink *sl)
Definition: BKE_screen.h:88
void(* space_subtype_item_extend)(struct bContext *C, EnumPropertyItem **item, int *totitem)
Definition: BKE_screen.h:127
struct SpaceLink *(* create)(const struct ScrArea *area, const struct Scene *scene)
Definition: BKE_screen.h:86
void(* refresh)(const struct bContext *C, struct ScrArea *area)
Definition: BKE_screen.h:101
void(* listener)(const wmSpaceTypeListenerParams *params)
Definition: BKE_screen.h:95
void(* init)(struct wmWindowManager *wm, struct ScrArea *area)
Definition: BKE_screen.h:91
int spaceid
Definition: BKE_screen.h:81
bContextDataCallback context
Definition: BKE_screen.h:117
void(* space_subtype_set)(struct ScrArea *area, int value)
Definition: BKE_screen.h:126
void(* id_remap)(struct ScrArea *area, struct SpaceLink *sl, struct ID *old_id, struct ID *new_id)
Definition: BKE_screen.h:120
char name[BKE_ST_MAXNAME]
Definition: BKE_screen.h:80
void(* dropboxes)(void)
Definition: BKE_screen.h:111
int(* space_subtype_get)(struct ScrArea *area)
Definition: BKE_screen.h:125
float minzoom
short align
short keeptot
short keepzoom
short keepofs
short scroll
float maxzoom
float ymax
Definition: DNA_vec_types.h:86
float ymin
Definition: DNA_vec_types.h:86
char path[1024]
Definition: WM_types.h:909
int type
Definition: WM_types.h:907
struct PointerRNA * ptr
Definition: WM_types.h:953
unsigned int data
Definition: WM_types.h:260
unsigned int action
Definition: WM_types.h:260
unsigned int category
Definition: WM_types.h:260
struct wmKeyConfig * defaultconf
struct wmEvent * eventstate
#define G(x, y, z)
wmDropBox * WM_dropbox_add(ListBase *lb, const char *idname, bool(*poll)(bContext *, wmDrag *, const wmEvent *, const char **), void(*copy)(wmDrag *, wmDropBox *), void(*cancel)(struct Main *, wmDrag *, wmDropBox *))
Definition: wm_dragdrop.c:96
ListBase * WM_dropboxmap_find(const char *idname, int spaceid, int regionid)
Definition: wm_dragdrop.c:77
wmEventHandler_Keymap * WM_event_add_keymap_handler_v2d_mask(ListBase *handlers, wmKeyMap *keymap)
PointerRNA * ptr
Definition: wm_files.c:3157
wmKeyMap * WM_keymap_ensure(wmKeyConfig *keyconf, const char *idname, int spaceid, int regionid)
Definition: wm_keymap.c:852
void WM_msg_subscribe_rna(struct 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_remove_timer_notifier(wmWindowManager *wm, wmWindow *win, wmTimer *timer)
Definition: wm_window.c:1703