2023-08-16 00:20:26 +10:00
|
|
|
/* SPDX-FileCopyrightText: 2008 Blender Authors
|
2023-05-31 16:19:06 +02:00
|
|
|
*
|
|
|
|
|
* SPDX-License-Identifier: GPL-2.0-or-later */
|
2009-08-18 12:58:51 +00:00
|
|
|
|
2019-02-18 08:08:12 +11:00
|
|
|
/** \file
|
|
|
|
|
* \ingroup spuserpref
|
2011-02-27 20:29:51 +00:00
|
|
|
*/
|
|
|
|
|
|
2023-07-22 11:27:25 +10:00
|
|
|
#include <cstring>
|
2009-08-18 12:58:51 +00:00
|
|
|
|
|
|
|
|
#include "MEM_guardedalloc.h"
|
|
|
|
|
|
2025-02-11 16:59:42 +01:00
|
|
|
#include "BLI_listbase.h"
|
2025-01-26 20:08:00 +01:00
|
|
|
#include "BLI_string.h"
|
2009-08-18 12:58:51 +00:00
|
|
|
|
2023-11-16 11:41:55 +01:00
|
|
|
#include "BKE_context.hh"
|
2023-09-25 17:48:21 -04:00
|
|
|
#include "BKE_screen.hh"
|
2009-08-18 12:58:51 +00:00
|
|
|
|
2023-08-04 23:11:22 +02:00
|
|
|
#include "ED_screen.hh"
|
2023-08-05 02:57:52 +02:00
|
|
|
#include "ED_space_api.hh"
|
2009-08-18 12:58:51 +00:00
|
|
|
|
2023-08-10 22:40:27 +02:00
|
|
|
#include "RNA_access.hh"
|
|
|
|
|
#include "RNA_enum_types.hh"
|
2019-12-19 13:21:41 +11:00
|
|
|
|
2023-08-04 23:11:22 +02:00
|
|
|
#include "WM_types.hh"
|
2009-08-18 12:58:51 +00:00
|
|
|
|
2023-08-05 02:57:52 +02:00
|
|
|
#include "UI_interface.hh"
|
2018-11-25 16:21:35 +01:00
|
|
|
|
2023-08-28 15:01:05 +02:00
|
|
|
#include "BLO_read_write.hh"
|
2022-09-28 11:52:22 +02:00
|
|
|
|
2009-08-18 12:58:51 +00:00
|
|
|
/* ******************** default callbacks for userpref space ***************** */
|
|
|
|
|
|
2023-07-12 18:02:56 +02:00
|
|
|
static SpaceLink *userpref_create(const ScrArea *area, const Scene * /*scene*/)
|
2009-08-18 12:58:51 +00:00
|
|
|
{
|
2020-03-06 16:56:42 +01:00
|
|
|
ARegion *region;
|
2009-08-18 12:58:51 +00:00
|
|
|
SpaceUserPref *spref;
|
2012-06-27 18:29:47 +00:00
|
|
|
|
2023-07-12 18:02:56 +02:00
|
|
|
spref = static_cast<SpaceUserPref *>(MEM_callocN(sizeof(SpaceUserPref), "inituserpref"));
|
2012-06-27 18:29:47 +00:00
|
|
|
spref->spacetype = SPACE_USERPREF;
|
|
|
|
|
|
2019-01-04 21:40:16 +01:00
|
|
|
/* header */
|
2024-11-15 02:00:11 +01:00
|
|
|
region = BKE_area_region_new();
|
2019-01-04 21:40:16 +01:00
|
|
|
|
2020-03-06 16:56:42 +01:00
|
|
|
BLI_addtail(&spref->regionbase, region);
|
|
|
|
|
region->regiontype = RGN_TYPE_HEADER;
|
2019-01-04 21:40:16 +01:00
|
|
|
/* Ignore user preference "USER_HEADER_BOTTOM" here (always show bottom for new types). */
|
2020-03-06 16:56:42 +01:00
|
|
|
region->alignment = RGN_ALIGN_BOTTOM;
|
2019-01-04 21:40:16 +01:00
|
|
|
|
2018-11-25 16:21:35 +01:00
|
|
|
/* navigation region */
|
2024-11-15 02:00:11 +01:00
|
|
|
region = BKE_area_region_new();
|
2018-11-25 16:21:35 +01:00
|
|
|
|
2020-03-06 16:56:42 +01:00
|
|
|
BLI_addtail(&spref->regionbase, region);
|
|
|
|
|
region->regiontype = RGN_TYPE_NAV_BAR;
|
|
|
|
|
region->alignment = RGN_ALIGN_LEFT;
|
2018-11-25 16:21:35 +01:00
|
|
|
|
2019-01-17 14:31:18 +01:00
|
|
|
/* Use smaller size when opened in area like properties editor. */
|
2023-03-17 04:19:05 +01:00
|
|
|
if (area->winx && area->winx < 3.0f * UI_NAVIGATION_REGION_WIDTH * UI_SCALE_FAC) {
|
2020-03-06 16:56:42 +01:00
|
|
|
region->sizex = UI_NARROW_NAVIGATION_REGION_WIDTH;
|
2019-01-17 14:31:18 +01:00
|
|
|
}
|
|
|
|
|
|
2019-01-04 21:40:16 +01:00
|
|
|
/* execution region */
|
2024-11-15 02:00:11 +01:00
|
|
|
region = BKE_area_region_new();
|
2012-06-27 18:29:47 +00:00
|
|
|
|
2020-03-06 16:56:42 +01:00
|
|
|
BLI_addtail(&spref->regionbase, region);
|
|
|
|
|
region->regiontype = RGN_TYPE_EXECUTE;
|
|
|
|
|
region->alignment = RGN_ALIGN_BOTTOM | RGN_SPLIT_PREV;
|
2023-07-28 14:30:59 +02:00
|
|
|
region->flag |= RGN_FLAG_DYNAMIC_SIZE | RGN_FLAG_NO_USER_RESIZE;
|
2012-06-27 18:29:47 +00:00
|
|
|
|
2015-11-28 17:14:45 +01:00
|
|
|
/* main region */
|
2024-11-15 02:00:11 +01:00
|
|
|
region = BKE_area_region_new();
|
2012-06-27 18:29:47 +00:00
|
|
|
|
2020-03-06 16:56:42 +01:00
|
|
|
BLI_addtail(&spref->regionbase, region);
|
|
|
|
|
region->regiontype = RGN_TYPE_WINDOW;
|
2012-06-27 18:29:47 +00:00
|
|
|
|
2009-08-18 12:58:51 +00:00
|
|
|
return (SpaceLink *)spref;
|
|
|
|
|
}
|
|
|
|
|
|
2023-06-09 11:39:27 +10:00
|
|
|
/* Doesn't free the space-link itself. */
|
2023-07-12 18:02:56 +02:00
|
|
|
static void userpref_free(SpaceLink * /*sl*/)
|
2018-06-04 09:31:30 +02:00
|
|
|
{
|
2012-09-30 06:12:47 +00:00
|
|
|
// SpaceUserPref *spref = (SpaceUserPref *)sl;
|
2009-08-18 12:58:51 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* spacetype; init callback */
|
2023-07-12 18:02:56 +02:00
|
|
|
static void userpref_init(wmWindowManager * /*wm*/, ScrArea * /*area*/) {}
|
2009-08-18 12:58:51 +00:00
|
|
|
|
|
|
|
|
static SpaceLink *userpref_duplicate(SpaceLink *sl)
|
|
|
|
|
{
|
2023-07-12 18:02:56 +02:00
|
|
|
SpaceUserPref *sprefn = static_cast<SpaceUserPref *>(MEM_dupallocN(sl));
|
2012-06-27 18:29:47 +00:00
|
|
|
|
2009-08-18 12:58:51 +00:00
|
|
|
/* clear or remove stuff from old */
|
2012-06-27 18:29:47 +00:00
|
|
|
|
2009-08-18 12:58:51 +00:00
|
|
|
return (SpaceLink *)sprefn;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* add handlers, stuff you only do once or on area/region changes */
|
2020-03-06 16:56:42 +01:00
|
|
|
static void userpref_main_region_init(wmWindowManager *wm, ARegion *region)
|
2009-08-18 12:58:51 +00:00
|
|
|
{
|
2022-01-14 10:47:50 +11:00
|
|
|
/* do not use here, the properties changed in user-preferences do a system-wide refresh,
|
2019-01-15 23:24:20 +11:00
|
|
|
* then scroller jumps back */
|
2022-01-14 10:47:50 +11:00
|
|
|
// region->v2d.flag &= ~V2D_IS_INIT;
|
2018-06-04 09:31:30 +02:00
|
|
|
|
2020-03-06 16:56:42 +01:00
|
|
|
region->v2d.scroll = V2D_SCROLL_RIGHT | V2D_SCROLL_VERTICAL_HIDE;
|
2012-12-26 13:05:39 +00:00
|
|
|
|
2020-03-06 16:56:42 +01:00
|
|
|
ED_region_panels_init(wm, region);
|
2009-08-18 12:58:51 +00:00
|
|
|
}
|
|
|
|
|
|
2020-03-06 16:56:42 +01:00
|
|
|
static void userpref_main_region_layout(const bContext *C, ARegion *region)
|
2009-08-18 12:58:51 +00:00
|
|
|
{
|
2019-12-19 13:21:41 +11:00
|
|
|
char id_lower[64];
|
2023-07-12 18:02:56 +02:00
|
|
|
const char *contexts[2] = {id_lower, nullptr};
|
2019-12-19 13:21:41 +11:00
|
|
|
|
|
|
|
|
/* Avoid duplicating identifiers, use existing RNA enum. */
|
|
|
|
|
{
|
|
|
|
|
const EnumPropertyItem *items = rna_enum_preference_section_items;
|
|
|
|
|
int i = RNA_enum_from_value(items, U.space_data.section_active);
|
|
|
|
|
/* File is from the future. */
|
|
|
|
|
if (i == -1) {
|
|
|
|
|
i = 0;
|
|
|
|
|
}
|
|
|
|
|
const char *id = items[i].identifier;
|
|
|
|
|
BLI_assert(strlen(id) < sizeof(id_lower));
|
|
|
|
|
STRNCPY(id_lower, id);
|
|
|
|
|
BLI_str_tolower_ascii(id_lower, strlen(id_lower));
|
|
|
|
|
}
|
|
|
|
|
|
2024-01-31 19:04:09 +01:00
|
|
|
ED_region_panels_layout_ex(
|
2024-11-21 19:34:53 +01:00
|
|
|
C, region, ®ion->runtime->type->paneltypes, WM_OP_INVOKE_REGION_WIN, contexts, nullptr);
|
2009-08-18 12:58:51 +00:00
|
|
|
}
|
|
|
|
|
|
2023-07-20 11:30:25 +10:00
|
|
|
static void userpref_operatortypes() {}
|
2009-08-18 12:58:51 +00:00
|
|
|
|
2023-07-12 18:02:56 +02:00
|
|
|
static void userpref_keymap(wmKeyConfig * /*keyconf*/) {}
|
2009-08-18 12:58:51 +00:00
|
|
|
|
|
|
|
|
/* add handlers, stuff you only do once or on area/region changes */
|
2023-07-12 18:02:56 +02:00
|
|
|
static void userpref_header_region_init(wmWindowManager * /*wm*/, ARegion *region)
|
2009-08-18 12:58:51 +00:00
|
|
|
{
|
2020-03-06 16:56:42 +01:00
|
|
|
ED_region_header_init(region);
|
2009-08-18 12:58:51 +00:00
|
|
|
}
|
|
|
|
|
|
2020-03-06 16:56:42 +01:00
|
|
|
static void userpref_header_region_draw(const bContext *C, ARegion *region)
|
2009-08-18 12:58:51 +00:00
|
|
|
{
|
2020-03-06 16:56:42 +01:00
|
|
|
ED_region_header(C, region);
|
2009-08-18 12:58:51 +00:00
|
|
|
}
|
|
|
|
|
|
2018-11-25 16:21:35 +01:00
|
|
|
/* add handlers, stuff you only do once or on area/region changes */
|
2020-03-06 16:56:42 +01:00
|
|
|
static void userpref_navigation_region_init(wmWindowManager *wm, ARegion *region)
|
2018-11-25 16:21:35 +01:00
|
|
|
{
|
2020-03-06 16:56:42 +01:00
|
|
|
region->v2d.scroll = V2D_SCROLL_RIGHT | V2D_SCROLL_VERTICAL_HIDE;
|
2018-11-25 16:21:35 +01:00
|
|
|
|
2020-03-06 16:56:42 +01:00
|
|
|
ED_region_panels_init(wm, region);
|
2018-11-25 16:21:35 +01:00
|
|
|
}
|
|
|
|
|
|
2020-03-06 16:56:42 +01:00
|
|
|
static void userpref_navigation_region_draw(const bContext *C, ARegion *region)
|
2018-11-25 16:21:35 +01:00
|
|
|
{
|
2020-03-06 16:56:42 +01:00
|
|
|
ED_region_panels(C, region);
|
2018-11-25 16:21:35 +01:00
|
|
|
}
|
|
|
|
|
|
UI: Region polling support
Introduces *ARegionType.poll()* as a way to dynamically add/remove a region. The region is still there internally, but is not accessible to the user.
Previously editors would to this manually, by either removing/adding regions altogether, or hiding them, unsetting their alignment (so no AZones are added I assume) and removing their event handlers. Polling makes this much simpler.
We plan to use this in #102879.
This patch refactors multiple editors to use region polling:
- File Browser
- Sequencer
- Clip Editor
- Preferences
Notes:
- Previously, editors would lazy-create some of the regions. Versioning is added here to ensure they are always there. Could be a separate patch.
- Some editors reuse a region in different display modes, and so additional work needs to be done to reinit regions they become available or the mode changes. Typically `V2D_IS_INIT` is unset for that, which isn't great. Could be improved, but not a new issue.
Behavior change:
- When the Preferences are opened as a regular editor, the "execution" region in the preferences that displays the *Save Preferences* button would still be there, but empty with a scrollbar.
This patch makes it disappear entirely.
## Implementation
- Introduces `ARegionType.poll()`
- Before a window is drawn, all contained regions have their poll checked, and the result is stored in a flag (`RGN_FLAG_POLL_FAILED` - runtime-only flag).
- If the result of the poll changes, the area is re-initialized and event handlers are added/removed.
- UI code checks the flag as needed.
Pull Request: https://projects.blender.org/blender/blender/pulls/105088
2023-04-05 15:30:32 +02:00
|
|
|
static bool userpref_execute_region_poll(const RegionPollParams *params)
|
|
|
|
|
{
|
|
|
|
|
const ARegion *region_header = BKE_area_find_region_type(params->area, RGN_TYPE_HEADER);
|
2024-11-21 19:34:53 +01:00
|
|
|
return !region_header->runtime->visible;
|
UI: Region polling support
Introduces *ARegionType.poll()* as a way to dynamically add/remove a region. The region is still there internally, but is not accessible to the user.
Previously editors would to this manually, by either removing/adding regions altogether, or hiding them, unsetting their alignment (so no AZones are added I assume) and removing their event handlers. Polling makes this much simpler.
We plan to use this in #102879.
This patch refactors multiple editors to use region polling:
- File Browser
- Sequencer
- Clip Editor
- Preferences
Notes:
- Previously, editors would lazy-create some of the regions. Versioning is added here to ensure they are always there. Could be a separate patch.
- Some editors reuse a region in different display modes, and so additional work needs to be done to reinit regions they become available or the mode changes. Typically `V2D_IS_INIT` is unset for that, which isn't great. Could be improved, but not a new issue.
Behavior change:
- When the Preferences are opened as a regular editor, the "execution" region in the preferences that displays the *Save Preferences* button would still be there, but empty with a scrollbar.
This patch makes it disappear entirely.
## Implementation
- Introduces `ARegionType.poll()`
- Before a window is drawn, all contained regions have their poll checked, and the result is stored in a flag (`RGN_FLAG_POLL_FAILED` - runtime-only flag).
- If the result of the poll changes, the area is re-initialized and event handlers are added/removed.
- UI code checks the flag as needed.
Pull Request: https://projects.blender.org/blender/blender/pulls/105088
2023-04-05 15:30:32 +02:00
|
|
|
}
|
|
|
|
|
|
2019-01-04 21:40:16 +01:00
|
|
|
/* add handlers, stuff you only do once or on area/region changes */
|
2020-03-06 16:56:42 +01:00
|
|
|
static void userpref_execute_region_init(wmWindowManager *wm, ARegion *region)
|
2019-01-04 21:40:16 +01:00
|
|
|
{
|
2020-03-06 16:56:42 +01:00
|
|
|
ED_region_panels_init(wm, region);
|
|
|
|
|
region->v2d.keepzoom |= V2D_LOCKZOOM_X | V2D_LOCKZOOM_Y;
|
2019-01-04 21:40:16 +01:00
|
|
|
}
|
|
|
|
|
|
2023-07-12 18:02:56 +02:00
|
|
|
static void userpref_main_region_listener(const wmRegionListenerParams * /*params*/) {}
|
2021-01-18 17:28:47 -06:00
|
|
|
|
2023-07-12 18:02:56 +02:00
|
|
|
static void userpref_header_listener(const wmRegionListenerParams * /*params*/) {}
|
2009-08-18 12:58:51 +00:00
|
|
|
|
2023-07-12 18:02:56 +02:00
|
|
|
static void userpref_navigation_region_listener(const wmRegionListenerParams * /*params*/) {}
|
2018-11-25 16:21:35 +01:00
|
|
|
|
2023-07-12 18:02:56 +02:00
|
|
|
static void userpref_execute_region_listener(const wmRegionListenerParams * /*params*/) {}
|
2019-01-04 21:40:16 +01:00
|
|
|
|
2023-04-27 14:42:21 +10:00
|
|
|
static void userpref_space_blend_write(BlendWriter *writer, SpaceLink *sl)
|
2022-09-28 11:52:22 +02:00
|
|
|
{
|
|
|
|
|
BLO_write_struct(writer, SpaceUserPref, sl);
|
|
|
|
|
}
|
|
|
|
|
|
2023-07-13 09:54:02 +10:00
|
|
|
void ED_spacetype_userpref()
|
2009-08-18 12:58:51 +00:00
|
|
|
{
|
2024-02-02 20:59:20 +01:00
|
|
|
std::unique_ptr<SpaceType> st = std::make_unique<SpaceType>();
|
2009-08-18 12:58:51 +00:00
|
|
|
ARegionType *art;
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2012-06-27 18:29:47 +00:00
|
|
|
st->spaceid = SPACE_USERPREF;
|
2022-09-10 16:51:15 +10:00
|
|
|
STRNCPY(st->name, "Userpref");
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2020-08-04 14:39:53 +02:00
|
|
|
st->create = userpref_create;
|
2012-06-27 18:29:47 +00:00
|
|
|
st->free = userpref_free;
|
|
|
|
|
st->init = userpref_init;
|
|
|
|
|
st->duplicate = userpref_duplicate;
|
|
|
|
|
st->operatortypes = userpref_operatortypes;
|
|
|
|
|
st->keymap = userpref_keymap;
|
2023-04-27 14:42:21 +10:00
|
|
|
st->blend_write = userpref_space_blend_write;
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2009-08-18 12:58:51 +00:00
|
|
|
/* regions: main window */
|
2023-07-12 18:02:56 +02:00
|
|
|
art = static_cast<ARegionType *>(MEM_callocN(sizeof(ARegionType), "spacetype userpref region"));
|
2009-08-18 12:58:51 +00:00
|
|
|
art->regionid = RGN_TYPE_WINDOW;
|
2015-11-28 17:14:45 +01:00
|
|
|
art->init = userpref_main_region_init;
|
2019-12-19 13:21:41 +11:00
|
|
|
art->layout = userpref_main_region_layout;
|
|
|
|
|
art->draw = ED_region_panels_draw;
|
2015-11-28 17:14:45 +01:00
|
|
|
art->listener = userpref_main_region_listener;
|
2012-06-27 18:29:47 +00:00
|
|
|
art->keymapflag = ED_KEYMAP_UI;
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2009-08-18 12:58:51 +00:00
|
|
|
BLI_addhead(&st->regiontypes, art);
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2009-08-18 12:58:51 +00:00
|
|
|
/* regions: header */
|
2023-07-12 18:02:56 +02:00
|
|
|
art = static_cast<ARegionType *>(MEM_callocN(sizeof(ARegionType), "spacetype userpref region"));
|
2009-08-18 12:58:51 +00:00
|
|
|
art->regionid = RGN_TYPE_HEADER;
|
2012-06-27 18:29:47 +00:00
|
|
|
art->prefsizey = HEADERY;
|
|
|
|
|
art->keymapflag = ED_KEYMAP_UI | ED_KEYMAP_VIEW2D | ED_KEYMAP_HEADER;
|
|
|
|
|
art->listener = userpref_header_listener;
|
2015-11-28 17:14:45 +01:00
|
|
|
art->init = userpref_header_region_init;
|
|
|
|
|
art->draw = userpref_header_region_draw;
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2009-08-18 12:58:51 +00:00
|
|
|
BLI_addhead(&st->regiontypes, art);
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2018-11-25 16:21:35 +01:00
|
|
|
/* regions: navigation window */
|
2023-07-12 18:02:56 +02:00
|
|
|
art = static_cast<ARegionType *>(MEM_callocN(sizeof(ARegionType), "spacetype userpref region"));
|
2018-11-25 16:21:35 +01:00
|
|
|
art->regionid = RGN_TYPE_NAV_BAR;
|
|
|
|
|
art->prefsizex = UI_NAVIGATION_REGION_WIDTH;
|
|
|
|
|
art->init = userpref_navigation_region_init;
|
|
|
|
|
art->draw = userpref_navigation_region_draw;
|
|
|
|
|
art->listener = userpref_navigation_region_listener;
|
2019-05-09 18:40:42 +10:00
|
|
|
art->keymapflag = ED_KEYMAP_UI | ED_KEYMAP_NAVBAR;
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2018-11-25 16:21:35 +01:00
|
|
|
BLI_addhead(&st->regiontypes, art);
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2019-01-04 21:40:16 +01:00
|
|
|
/* regions: execution window */
|
2023-07-12 18:02:56 +02:00
|
|
|
art = static_cast<ARegionType *>(MEM_callocN(sizeof(ARegionType), "spacetype userpref region"));
|
2019-01-04 21:40:16 +01:00
|
|
|
art->regionid = RGN_TYPE_EXECUTE;
|
2021-04-01 17:36:09 +11:00
|
|
|
art->prefsizey = HEADERY;
|
UI: Region polling support
Introduces *ARegionType.poll()* as a way to dynamically add/remove a region. The region is still there internally, but is not accessible to the user.
Previously editors would to this manually, by either removing/adding regions altogether, or hiding them, unsetting their alignment (so no AZones are added I assume) and removing their event handlers. Polling makes this much simpler.
We plan to use this in #102879.
This patch refactors multiple editors to use region polling:
- File Browser
- Sequencer
- Clip Editor
- Preferences
Notes:
- Previously, editors would lazy-create some of the regions. Versioning is added here to ensure they are always there. Could be a separate patch.
- Some editors reuse a region in different display modes, and so additional work needs to be done to reinit regions they become available or the mode changes. Typically `V2D_IS_INIT` is unset for that, which isn't great. Could be improved, but not a new issue.
Behavior change:
- When the Preferences are opened as a regular editor, the "execution" region in the preferences that displays the *Save Preferences* button would still be there, but empty with a scrollbar.
This patch makes it disappear entirely.
## Implementation
- Introduces `ARegionType.poll()`
- Before a window is drawn, all contained regions have their poll checked, and the result is stored in a flag (`RGN_FLAG_POLL_FAILED` - runtime-only flag).
- If the result of the poll changes, the area is re-initialized and event handlers are added/removed.
- UI code checks the flag as needed.
Pull Request: https://projects.blender.org/blender/blender/pulls/105088
2023-04-05 15:30:32 +02:00
|
|
|
art->poll = userpref_execute_region_poll;
|
2019-01-04 21:40:16 +01:00
|
|
|
art->init = userpref_execute_region_init;
|
|
|
|
|
art->layout = ED_region_panels_layout;
|
|
|
|
|
art->draw = ED_region_panels_draw;
|
|
|
|
|
art->listener = userpref_execute_region_listener;
|
|
|
|
|
art->keymapflag = ED_KEYMAP_UI;
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2019-01-04 21:40:16 +01:00
|
|
|
BLI_addhead(&st->regiontypes, art);
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2024-02-02 20:59:20 +01:00
|
|
|
BKE_spacetype_register(std::move(st));
|
2009-08-18 12:58:51 +00:00
|
|
|
}
|