UI Code Quality: Use "params" struct for area and region callbacks

These functions with many arguments can be unwieldy. Aside from the obvious issues
with rewriting the list of arguments and the opportunities for error and frustration
that presents, the long list of arguments make these systems hard to change. So when
an argument should be added, someone might skip that and add some hack instead.

So, as proposed in T73586#1037210, this patch instead uses a "params" struct for
each of these callbacks.

- Use param argument for `ARegionType.listener`
    - Remove unused window field in region listener
- Use param argument for `SpaceType.listener`
- Use params struct for `ARegionType.message_subscribe`

Differential Revision: https://developer.blender.org/D9750
This commit is contained in:
Hans Goudey 2021-01-18 17:28:47 -06:00
parent 4b4aec2884
commit 09c7c63890
26 changed files with 375 additions and 475 deletions

View File

@ -67,6 +67,13 @@ struct wmWindowManager;
#define BKE_ST_MAXNAME 64
typedef struct wmSpaceTypeListenerParams {
struct wmWindow *window;
struct ScrArea *area;
struct wmNotifier *notifier;
const struct Scene *scene;
} wmSpaceTypeListenerParams;
typedef struct SpaceType {
struct SpaceType *next, *prev;
@ -85,10 +92,7 @@ typedef struct SpaceType {
/* exit is called when the area is hidden or removed */
void (*exit)(struct wmWindowManager *wm, struct ScrArea *area);
/* Listeners can react to bContext changes */
void (*listener)(struct wmWindow *win,
struct ScrArea *area,
struct wmNotifier *wmn,
struct Scene *scene);
void (*listener)(wmSpaceTypeListenerParams *params);
/* called when the mouse moves out of the area */
void (*deactivate)(struct ScrArea *area);
@ -134,6 +138,23 @@ typedef struct SpaceType {
/* region types are also defined using spacetypes_init, via a callback */
typedef struct wmRegionListenerParams {
struct ScrArea *area; /* Can be NULL when the region is not part of an area. */
struct ARegion *region;
struct wmNotifier *notifier;
const struct Scene *scene;
} wmRegionListenerParams;
typedef struct wmRegionMessageSubscribeParams {
const struct bContext *context;
struct wmMsgBus *message_bus;
struct WorkSpace *workspace;
struct Scene *scene;
struct bScreen *screen;
struct ScrArea *area;
struct ARegion *region;
} wmRegionMessageSubscribeParams;
typedef struct ARegionType {
struct ARegionType *next, *prev;
@ -158,19 +179,9 @@ typedef struct ARegionType {
/* snap the size of the region (can be NULL for no snapping). */
int (*snap_size)(const struct ARegion *region, int size, int axis);
/* contextual changes should be handled here */
void (*listener)(struct wmWindow *win,
struct ScrArea *area,
struct ARegion *region,
struct wmNotifier *wmn,
const struct Scene *scene);
void (*listener)(wmRegionListenerParams *params);
/* Optional callback to generate subscriptions. */
void (*message_subscribe)(const struct bContext *C,
struct WorkSpace *workspace,
struct Scene *scene,
struct bScreen *screen,
struct ScrArea *area,
struct ARegion *region,
struct wmMsgBus *mbus);
void (*message_subscribe)(wmRegionMessageSubscribeParams *params);
void (*free)(struct ARegion *);

View File

@ -57,15 +57,14 @@ struct wmMsgSubscribeKey;
struct wmMsgSubscribeValue;
struct wmNotifier;
struct wmOperatorType;
struct wmRegionListenerParams;
struct wmRegionMessageSubscribeParams;
struct wmSpaceTypeListenerParams;
struct wmWindow;
struct wmWindowManager;
/* regions */
void ED_region_do_listen(struct wmWindow *win,
struct ScrArea *area,
struct ARegion *region,
struct wmNotifier *note,
const Scene *scene);
void ED_region_do_listen(struct wmRegionListenerParams *params);
void ED_region_do_layout(struct bContext *C, struct ARegion *region);
void ED_region_do_draw(struct bContext *C, struct ARegion *region);
void ED_region_exit(struct bContext *C, struct ARegion *region);
@ -144,29 +143,11 @@ void ED_area_do_msg_notify_tag_refresh(struct bContext *C,
struct wmMsgSubscribeKey *msg_key,
struct wmMsgSubscribeValue *msg_val);
void ED_area_do_mgs_subscribe_for_tool_header(const struct bContext *C,
struct WorkSpace *workspace,
struct Scene *scene,
struct bScreen *screen,
struct ScrArea *area,
struct ARegion *region,
struct wmMsgBus *mbus);
void ED_area_do_mgs_subscribe_for_tool_ui(const struct bContext *C,
struct WorkSpace *workspace,
struct Scene *scene,
struct bScreen *screen,
struct ScrArea *area,
struct ARegion *region,
struct wmMsgBus *mbus);
void ED_area_do_mgs_subscribe_for_tool_header(struct wmRegionMessageSubscribeParams *params);
void ED_area_do_mgs_subscribe_for_tool_ui(struct wmRegionMessageSubscribeParams *params);
/* message bus */
void ED_region_message_subscribe(struct bContext *C,
struct WorkSpace *workspace,
struct Scene *scene,
struct bScreen *screen,
struct ScrArea *area,
struct ARegion *region,
struct wmMsgBus *mbus);
void ED_region_message_subscribe(struct wmRegionMessageSubscribeParams *params);
/* spaces */
void ED_spacetypes_keymap(struct wmKeyConfig *keyconf);
@ -178,7 +159,7 @@ void ED_area_exit(struct bContext *C, struct ScrArea *area);
int ED_screen_area_active(const struct bContext *C);
void ED_screen_global_areas_refresh(struct wmWindow *win);
void ED_screen_global_areas_sync(struct wmWindow *win);
void ED_area_do_listen(struct wmWindow *win, ScrArea *area, struct wmNotifier *note, Scene *scene);
void ED_area_do_listen(struct wmSpaceTypeListenerParams *params);
void ED_area_tag_redraw(ScrArea *area);
void ED_area_tag_redraw_no_rebuild(ScrArea *area);
void ED_area_tag_redraw_regiontype(ScrArea *area, int type);
@ -427,13 +408,8 @@ void ED_region_cache_draw_cached_segments(struct ARegion *region,
const int efra);
/* area_utils.c */
void ED_region_generic_tools_region_message_subscribe(const struct bContext *C,
struct WorkSpace *workspace,
struct Scene *scene,
struct bScreen *screen,
struct ScrArea *area,
struct ARegion *region,
struct wmMsgBus *mbus);
void ED_region_generic_tools_region_message_subscribe(
struct wmRegionMessageSubscribeParams *params);
int ED_region_generic_tools_region_snap_size(const struct ARegion *region, int size, int axis);
/* area_query.c */

View File

@ -413,12 +413,11 @@ static void ui_block_region_draw(const bContext *C, ARegion *region)
/**
* Use to refresh centered popups on screen resizing (for splash).
*/
static void ui_block_region_popup_window_listener(wmWindow *UNUSED(win),
ScrArea *UNUSED(area),
ARegion *region,
wmNotifier *wmn,
const Scene *UNUSED(scene))
static void ui_block_region_popup_window_listener(wmRegionListenerParams *params)
{
ARegion *region = params->region;
wmNotifier *wmn = params->notifier;
switch (wmn->category) {
case NC_WINDOW: {
switch (wmn->action) {

View File

@ -141,13 +141,15 @@ void ED_region_pixelspace(ARegion *region)
}
/* only exported for WM */
void ED_region_do_listen(
wmWindow *win, ScrArea *area, ARegion *region, wmNotifier *note, const Scene *scene)
void ED_region_do_listen(wmRegionListenerParams *params)
{
ARegion *region = params->region;
wmNotifier *notifier = params->notifier;
/* generic notes first */
switch (note->category) {
switch (notifier->category) {
case NC_WM:
if (note->data == ND_FILEREAD) {
if (notifier->data == ND_FILEREAD) {
ED_region_tag_redraw(region);
}
break;
@ -157,16 +159,16 @@ void ED_region_do_listen(
}
if (region->type && region->type->listener) {
region->type->listener(win, area, region, note, scene);
region->type->listener(params);
}
}
/* only exported for WM */
void ED_area_do_listen(wmWindow *win, ScrArea *area, wmNotifier *note, Scene *scene)
void ED_area_do_listen(wmSpaceTypeListenerParams *params)
{
/* no generic notes? */
if (area->type && area->type->listener) {
area->type->listener(win, area, note, scene);
if (params->area->type && params->area->type->listener) {
params->area->type->listener(params);
}
}
@ -418,16 +420,13 @@ void ED_area_do_msg_notify_tag_refresh(
ED_area_tag_refresh(area);
}
void ED_area_do_mgs_subscribe_for_tool_header(
/* Follow ARegionType.message_subscribe */
const struct bContext *UNUSED(C),
struct WorkSpace *workspace,
struct Scene *UNUSED(scene),
struct bScreen *UNUSED(screen),
struct ScrArea *UNUSED(area),
struct ARegion *region,
struct wmMsgBus *mbus)
/* Follow ARegionType.message_subscribe */
void ED_area_do_mgs_subscribe_for_tool_header(wmRegionMessageSubscribeParams *params)
{
struct wmMsgBus *mbus = params->message_bus;
WorkSpace *workspace = params->workspace;
ARegion *region = params->region;
BLI_assert(region->regiontype == RGN_TYPE_TOOL_HEADER);
wmMsgSubscribeValue msg_sub_value_region_tag_redraw = {
.owner = region,
@ -438,16 +437,12 @@ void ED_area_do_mgs_subscribe_for_tool_header(
mbus, &workspace->id, workspace, WorkSpace, tools, &msg_sub_value_region_tag_redraw);
}
void ED_area_do_mgs_subscribe_for_tool_ui(
/* Follow ARegionType.message_subscribe */
const struct bContext *UNUSED(C),
struct WorkSpace *workspace,
struct Scene *UNUSED(scene),
struct bScreen *UNUSED(screen),
struct ScrArea *UNUSED(area),
struct ARegion *region,
struct wmMsgBus *mbus)
void ED_area_do_mgs_subscribe_for_tool_ui(wmRegionMessageSubscribeParams *params)
{
struct wmMsgBus *mbus = params->message_bus;
WorkSpace *workspace = params->workspace;
ARegion *region = params->region;
BLI_assert(region->regiontype == RGN_TYPE_UI);
const char *panel_category_tool = "Tool";
const char *category = UI_panel_category_active_get(region, false);
@ -634,7 +629,16 @@ void ED_region_do_draw(bContext *C, ARegion *region)
WM_msg_subscribe_rna(mbus, &ptr, NULL, &msg_sub_value_region_tag_redraw, __func__);
}
ED_region_message_subscribe(C, workspace, scene, screen, area, region, mbus);
wmRegionMessageSubscribeParams message_subscribe_params = {
.context = C,
.message_bus = mbus,
.workspace = workspace,
.scene = scene,
.screen = screen,
.area = area,
.region = region,
};
ED_region_message_subscribe(&message_subscribe_params);
}
}
@ -4027,14 +4031,12 @@ void ED_region_cache_draw_cached_segments(
/**
* Generate subscriptions for this region.
*/
void ED_region_message_subscribe(bContext *C,
struct WorkSpace *workspace,
struct Scene *scene,
struct bScreen *screen,
struct ScrArea *area,
struct ARegion *region,
struct wmMsgBus *mbus)
void ED_region_message_subscribe(wmRegionMessageSubscribeParams *params)
{
ARegion *region = params->region;
const bContext *C = params->context;
struct wmMsgBus *mbus = params->message_bus;
if (region->gizmo_map != NULL) {
WM_gizmomap_message_subscribe(C, region->gizmo_map, region, mbus);
}
@ -4044,7 +4046,7 @@ void ED_region_message_subscribe(bContext *C,
}
if (region->type->message_subscribe != NULL) {
region->type->message_subscribe(C, workspace, scene, screen, area, region, mbus);
region->type->message_subscribe(params);
}
}

View File

@ -22,6 +22,8 @@
#include "DNA_userdef_types.h"
#include "BKE_screen.h"
#include "BLI_blenlib.h"
#include "BLI_utildefines.h"
@ -42,14 +44,11 @@
/**
* Callback for #ARegionType.message_subscribe
*/
void ED_region_generic_tools_region_message_subscribe(const struct bContext *UNUSED(C),
struct WorkSpace *UNUSED(workspace),
struct Scene *UNUSED(scene),
struct bScreen *UNUSED(screen),
struct ScrArea *UNUSED(area),
struct ARegion *region,
struct wmMsgBus *mbus)
void ED_region_generic_tools_region_message_subscribe(wmRegionMessageSubscribeParams *params)
{
struct wmMsgBus *mbus = params->message_bus;
ARegion *region = params->region;
wmMsgSubscribeValue msg_sub_value_region_tag_redraw = {
.owner = region,
.user_data = region,

View File

@ -305,12 +305,11 @@ static void action_header_region_draw(const bContext *C, ARegion *region)
ED_region_header(C, region);
}
static void action_channel_region_listener(wmWindow *UNUSED(win),
ScrArea *UNUSED(area),
ARegion *region,
wmNotifier *wmn,
const Scene *UNUSED(scene))
static void action_channel_region_listener(wmRegionListenerParams *params)
{
ARegion *region = params->region;
wmNotifier *wmn = params->notifier;
/* context changes */
switch (wmn->category) {
case NC_ANIMATION:
@ -356,14 +355,13 @@ static void action_channel_region_listener(wmWindow *UNUSED(win),
}
}
static void saction_channel_region_message_subscribe(const struct bContext *UNUSED(C),
struct WorkSpace *UNUSED(workspace),
struct Scene *UNUSED(scene),
struct bScreen *screen,
struct ScrArea *area,
struct ARegion *region,
struct wmMsgBus *mbus)
static void saction_channel_region_message_subscribe(wmRegionMessageSubscribeParams *params)
{
struct wmMsgBus *mbus = params->message_bus;
bScreen *screen = params->screen;
ScrArea *area = params->area;
ARegion *region = params->region;
PointerRNA ptr;
RNA_pointer_create(&screen->id, &RNA_SpaceDopeSheetEditor, area->spacedata.first, &ptr);
@ -401,12 +399,11 @@ static void saction_channel_region_message_subscribe(const struct bContext *UNUS
}
}
static void action_main_region_listener(wmWindow *UNUSED(win),
ScrArea *UNUSED(area),
ARegion *region,
wmNotifier *wmn,
const Scene *UNUSED(scene))
static void action_main_region_listener(wmRegionListenerParams *params)
{
ARegion *region = params->region;
wmNotifier *wmn = params->notifier;
/* context changes */
switch (wmn->category) {
case NC_ANIMATION:
@ -460,14 +457,14 @@ static void action_main_region_listener(wmWindow *UNUSED(win),
}
}
static void saction_main_region_message_subscribe(const struct bContext *C,
struct WorkSpace *workspace,
struct Scene *scene,
struct bScreen *screen,
struct ScrArea *area,
struct ARegion *region,
struct wmMsgBus *mbus)
static void saction_main_region_message_subscribe(wmRegionMessageSubscribeParams *params)
{
struct wmMsgBus *mbus = params->message_bus;
Scene *scene = params->scene;
bScreen *screen = params->screen;
ScrArea *area = params->area;
ARegion *region = params->region;
PointerRNA ptr;
RNA_pointer_create(&screen->id, &RNA_SpaceDopeSheetEditor, area->spacedata.first, &ptr);
@ -502,15 +499,14 @@ static void saction_main_region_message_subscribe(const struct bContext *C,
}
/* Now run the general "channels region" one - since channels and main should be in sync */
saction_channel_region_message_subscribe(C, workspace, scene, screen, area, region, mbus);
saction_channel_region_message_subscribe(params);
}
/* editor level listener */
static void action_listener(wmWindow *UNUSED(win),
ScrArea *area,
wmNotifier *wmn,
Scene *UNUSED(scene))
static void action_listener(wmSpaceTypeListenerParams *params)
{
ScrArea *area = params->area;
wmNotifier *wmn = params->notifier;
SpaceAction *saction = (SpaceAction *)area->spacedata.first;
/* context changes */
@ -660,12 +656,11 @@ static void action_listener(wmWindow *UNUSED(win),
}
}
static void action_header_region_listener(wmWindow *UNUSED(win),
ScrArea *area,
ARegion *region,
wmNotifier *wmn,
const Scene *UNUSED(scene))
static void action_header_region_listener(wmRegionListenerParams *params)
{
ScrArea *area = params->area;
ARegion *region = params->region;
wmNotifier *wmn = params->notifier;
SpaceAction *saction = (SpaceAction *)area->spacedata.first;
/* context changes */
@ -737,12 +732,11 @@ static void action_buttons_area_draw(const bContext *C, ARegion *region)
ED_region_panels(C, region);
}
static void action_region_listener(wmWindow *UNUSED(win),
ScrArea *UNUSED(area),
ARegion *region,
wmNotifier *wmn,
const Scene *UNUSED(scene))
static void action_region_listener(wmRegionListenerParams *params)
{
ARegion *region = params->region;
wmNotifier *wmn = params->notifier;
/* context changes */
switch (wmn->category) {
case NC_ANIMATION:

View File

@ -514,12 +514,11 @@ static void buttons_main_region_layout(const bContext *C, ARegion *region)
sbuts->mainbo = sbuts->mainb;
}
static void buttons_main_region_listener(wmWindow *UNUSED(win),
ScrArea *UNUSED(area),
ARegion *region,
wmNotifier *wmn,
const Scene *UNUSED(scene))
static void buttons_main_region_listener(wmRegionListenerParams *params)
{
ARegion *region = params->region;
wmNotifier *wmn = params->notifier;
/* context changes */
switch (wmn->category) {
case NC_SCREEN:
@ -567,15 +566,13 @@ static void buttons_header_region_draw(const bContext *C, ARegion *region)
ED_region_header(C, region);
}
static void buttons_header_region_message_subscribe(const bContext *UNUSED(C),
WorkSpace *UNUSED(workspace),
Scene *UNUSED(scene),
bScreen *UNUSED(screen),
ScrArea *area,
ARegion *region,
struct wmMsgBus *mbus)
static void buttons_header_region_message_subscribe(wmRegionMessageSubscribeParams *params)
{
struct wmMsgBus *mbus = params->message_bus;
ScrArea *area = params->area;
ARegion *region = params->region;
SpaceProperties *sbuts = area->spacedata.first;
wmMsgSubscribeValue msg_sub_value_region_tag_redraw = {
.owner = region,
.user_data = region,
@ -621,14 +618,11 @@ static void buttons_navigation_bar_region_draw(const bContext *C, ARegion *regio
ED_region_panels_draw(C, region);
}
static void buttons_navigation_bar_region_message_subscribe(const bContext *UNUSED(C),
WorkSpace *UNUSED(workspace),
Scene *UNUSED(scene),
bScreen *UNUSED(screen),
ScrArea *UNUSED(area),
ARegion *region,
struct wmMsgBus *mbus)
static void buttons_navigation_bar_region_message_subscribe(wmRegionMessageSubscribeParams *params)
{
struct wmMsgBus *mbus = params->message_bus;
ARegion *region = params->region;
wmMsgSubscribeValue msg_sub_value_region_tag_redraw = {
.owner = region,
.user_data = region,
@ -657,11 +651,10 @@ static void buttons_area_redraw(ScrArea *area, short buttons)
* \{ */
/* reused! */
static void buttons_area_listener(wmWindow *UNUSED(win),
ScrArea *area,
wmNotifier *wmn,
Scene *UNUSED(scene))
static void buttons_area_listener(wmSpaceTypeListenerParams *params)
{
ScrArea *area = params->area;
wmNotifier *wmn = params->notifier;
SpaceProperties *sbuts = area->spacedata.first;
/* context changes */

View File

@ -229,7 +229,7 @@ static void clip_scopes_check_gpencil_change(ScrArea *area)
}
}
static void clip_area_sync_frame_from_scene(ScrArea *area, Scene *scene)
static void clip_area_sync_frame_from_scene(ScrArea *area, const Scene *scene)
{
SpaceClip *space_clip = (SpaceClip *)area->spacedata.first;
BKE_movieclip_user_set_frame(&space_clip->user, scene->r.cfra);
@ -334,8 +334,12 @@ static SpaceLink *clip_duplicate(SpaceLink *sl)
return (SpaceLink *)scn;
}
static void clip_listener(wmWindow *UNUSED(win), ScrArea *area, wmNotifier *wmn, Scene *scene)
static void clip_listener(wmSpaceTypeListenerParams *params)
{
ScrArea *area = params->area;
wmNotifier *wmn = params->notifier;
const Scene *scene = params->scene;
/* context changes */
switch (wmn->category) {
case NC_SCENE:
@ -1004,12 +1008,11 @@ static void clip_main_region_draw(const bContext *C, ARegion *region)
WM_gizmomap_draw(region->gizmo_map, C, WM_GIZMOMAP_DRAWSTEP_2D);
}
static void clip_main_region_listener(wmWindow *UNUSED(win),
ScrArea *UNUSED(area),
ARegion *region,
wmNotifier *wmn,
const Scene *UNUSED(scene))
static void clip_main_region_listener(wmRegionListenerParams *params)
{
ARegion *region = params->region;
wmNotifier *wmn = params->notifier;
/* context changes */
switch (wmn->category) {
case NC_GPENCIL:
@ -1140,11 +1143,7 @@ static void clip_preview_region_draw(const bContext *C, ARegion *region)
}
}
static void clip_preview_region_listener(wmWindow *UNUSED(win),
ScrArea *UNUSED(area),
ARegion *UNUSED(region),
wmNotifier *UNUSED(wmn),
const Scene *UNUSED(scene))
static void clip_preview_region_listener(wmRegionListenerParams *UNUSED(params))
{
}
@ -1185,11 +1184,7 @@ static void clip_channels_region_draw(const bContext *C, ARegion *region)
UI_view2d_view_restore(C);
}
static void clip_channels_region_listener(wmWindow *UNUSED(win),
ScrArea *UNUSED(area),
ARegion *UNUSED(region),
wmNotifier *UNUSED(wmn),
const Scene *UNUSED(scene))
static void clip_channels_region_listener(wmRegionListenerParams *UNUSED(params))
{
}
@ -1206,12 +1201,11 @@ static void clip_header_region_draw(const bContext *C, ARegion *region)
ED_region_header(C, region);
}
static void clip_header_region_listener(wmWindow *UNUSED(win),
ScrArea *UNUSED(area),
ARegion *region,
wmNotifier *wmn,
const Scene *UNUSED(scene))
static void clip_header_region_listener(wmRegionListenerParams *params)
{
ARegion *region = params->region;
wmNotifier *wmn = params->notifier;
/* context changes */
switch (wmn->category) {
case NC_SCENE:
@ -1249,12 +1243,11 @@ static void clip_tools_region_draw(const bContext *C, ARegion *region)
/****************** tool properties region ******************/
static void clip_props_region_listener(wmWindow *UNUSED(win),
ScrArea *UNUSED(area),
ARegion *region,
wmNotifier *wmn,
const Scene *UNUSED(scene))
static void clip_props_region_listener(wmRegionListenerParams *params)
{
ARegion *region = params->region;
wmNotifier *wmn = params->notifier;
/* context changes */
switch (wmn->category) {
case NC_WM:
@ -1302,12 +1295,11 @@ static void clip_properties_region_draw(const bContext *C, ARegion *region)
ED_region_panels(C, region);
}
static void clip_properties_region_listener(wmWindow *UNUSED(win),
ScrArea *UNUSED(area),
ARegion *region,
wmNotifier *wmn,
const Scene *UNUSED(scene))
static void clip_properties_region_listener(wmRegionListenerParams *params)
{
ARegion *region = params->region;
wmNotifier *wmn = params->notifier;
/* context changes */
switch (wmn->category) {
case NC_GPENCIL:

View File

@ -273,13 +273,11 @@ static void console_header_region_draw(const bContext *C, ARegion *region)
ED_region_header(C, region);
}
static void console_main_region_listener(wmWindow *UNUSED(win),
ScrArea *area,
ARegion *region,
wmNotifier *wmn,
const Scene *UNUSED(scene))
static void console_main_region_listener(wmRegionListenerParams *params)
{
// SpaceInfo *sinfo = area->spacedata.first;
ScrArea *area = params->area;
ARegion *region = params->region;
wmNotifier *wmn = params->notifier;
/* context changes */
switch (wmn->category) {

View File

@ -392,11 +392,10 @@ static void file_refresh(const bContext *C, ScrArea *area)
ED_area_tag_redraw(area);
}
static void file_listener(wmWindow *UNUSED(win),
ScrArea *area,
wmNotifier *wmn,
Scene *UNUSED(scene))
static void file_listener(wmSpaceTypeListenerParams *params)
{
ScrArea *area = params->area;
wmNotifier *wmn = params->notifier;
SpaceFile *sfile = (SpaceFile *)area->spacedata.first;
/* context changes */
@ -447,12 +446,11 @@ static void file_main_region_init(wmWindowManager *wm, ARegion *region)
WM_event_add_keymap_handler_v2d_mask(&region->handlers, keymap);
}
static void file_main_region_listener(wmWindow *UNUSED(win),
ScrArea *UNUSED(area),
ARegion *region,
wmNotifier *wmn,
const Scene *UNUSED(scene))
static void file_main_region_listener(wmRegionListenerParams *params)
{
ARegion *region = params->region;
wmNotifier *wmn = params->notifier;
/* context changes */
switch (wmn->category) {
case NC_SPACE:
@ -468,16 +466,15 @@ static void file_main_region_listener(wmWindow *UNUSED(win),
}
}
static void file_main_region_message_subscribe(const struct bContext *UNUSED(C),
struct WorkSpace *UNUSED(workspace),
struct Scene *UNUSED(scene),
struct bScreen *screen,
struct ScrArea *area,
struct ARegion *region,
struct wmMsgBus *mbus)
static void file_main_region_message_subscribe(wmRegionMessageSubscribeParams *params)
{
struct wmMsgBus *mbus = params->message_bus;
bScreen *screen = params->screen;
ScrArea *area = params->area;
ARegion *region = params->region;
SpaceFile *sfile = area->spacedata.first;
FileSelectParams *params = ED_fileselect_ensure_active_params(sfile);
FileSelectParams *file_params = ED_fileselect_ensure_active_params(sfile);
/* This is a bit odd that a region owns the subscriber for an area,
* keep for now since all subscribers for WM are regions.
* May be worth re-visiting later. */
@ -499,7 +496,7 @@ static void file_main_region_message_subscribe(const struct bContext *UNUSED(C),
/* FileSelectParams */
{
PointerRNA ptr;
RNA_pointer_create(&screen->id, &RNA_FileSelectParams, params, &ptr);
RNA_pointer_create(&screen->id, &RNA_FileSelectParams, file_params, &ptr);
/* All properties for this space type. */
WM_msg_subscribe_rna(mbus, &ptr, NULL, &msg_sub_value_area_tag_refresh, __func__);
@ -649,18 +646,8 @@ static void file_tools_region_draw(const bContext *C, ARegion *region)
ED_region_panels(C, region);
}
static void file_tools_region_listener(wmWindow *UNUSED(win),
ScrArea *UNUSED(area),
ARegion *UNUSED(region),
wmNotifier *UNUSED(wmn),
const Scene *UNUSED(scene))
static void file_tools_region_listener(wmRegionListenerParams *UNUSED(params))
{
#if 0
/* context changes */
switch (wmn->category) {
/* pass */
}
#endif
}
/* add handlers, stuff you only do once or on area/region changes */
@ -717,12 +704,11 @@ static void file_execution_region_draw(const bContext *C, ARegion *region)
ED_region_panels(C, region);
}
static void file_ui_region_listener(wmWindow *UNUSED(win),
ScrArea *UNUSED(area),
ARegion *region,
wmNotifier *wmn,
const Scene *UNUSED(scene))
static void file_ui_region_listener(wmRegionListenerParams *params)
{
ARegion *region = params->region;
wmNotifier *wmn = params->notifier;
/* context changes */
switch (wmn->category) {
case NC_SPACE:

View File

@ -403,12 +403,11 @@ static void graph_buttons_region_draw(const bContext *C, ARegion *region)
ED_region_panels(C, region);
}
static void graph_region_listener(wmWindow *UNUSED(win),
ScrArea *UNUSED(area),
ARegion *region,
wmNotifier *wmn,
const Scene *UNUSED(scene))
static void graph_region_listener(wmRegionListenerParams *params)
{
ARegion *region = params->region;
wmNotifier *wmn = params->notifier;
/* context changes */
switch (wmn->category) {
case NC_ANIMATION:
@ -470,14 +469,14 @@ static void graph_region_listener(wmWindow *UNUSED(win),
}
}
static void graph_region_message_subscribe(const struct bContext *UNUSED(C),
struct WorkSpace *UNUSED(workspace),
struct Scene *scene,
struct bScreen *screen,
struct ScrArea *area,
struct ARegion *region,
struct wmMsgBus *mbus)
static void graph_region_message_subscribe(wmRegionMessageSubscribeParams *params)
{
struct wmMsgBus *mbus = params->message_bus;
Scene *scene = params->scene;
bScreen *screen = params->screen;
ScrArea *area = params->area;
ARegion *region = params->region;
PointerRNA ptr;
RNA_pointer_create(&screen->id, &RNA_SpaceGraphEditor, area->spacedata.first, &ptr);
@ -546,11 +545,10 @@ static void graph_region_message_subscribe(const struct bContext *UNUSED(C),
}
/* editor level listener */
static void graph_listener(wmWindow *UNUSED(win),
ScrArea *area,
wmNotifier *wmn,
Scene *UNUSED(scene))
static void graph_listener(wmSpaceTypeListenerParams *params)
{
ScrArea *area = params->area;
wmNotifier *wmn = params->notifier;
SpaceGraph *sipo = (SpaceGraph *)area->spacedata.first;
/* context changes */

View File

@ -320,8 +320,11 @@ static void image_refresh(const bContext *C, ScrArea *area)
}
}
static void image_listener(wmWindow *win, ScrArea *area, wmNotifier *wmn, Scene *UNUSED(scene))
static void image_listener(wmSpaceTypeListenerParams *params)
{
wmWindow *win = params->window;
ScrArea *area = params->area;
wmNotifier *wmn = params->notifier;
SpaceImage *sima = (SpaceImage *)area->spacedata.first;
/* context changes */
@ -723,12 +726,12 @@ static void image_main_region_draw(const bContext *C, ARegion *region)
draw_image_cache(C, region);
}
static void image_main_region_listener(wmWindow *UNUSED(win),
ScrArea *area,
ARegion *region,
wmNotifier *wmn,
const Scene *UNUSED(scene))
static void image_main_region_listener(wmRegionListenerParams *params)
{
ScrArea *area = params->area;
ARegion *region = params->region;
wmNotifier *wmn = params->notifier;
/* context changes */
switch (wmn->category) {
case NC_GEOM:
@ -838,12 +841,11 @@ static void image_buttons_region_draw(const bContext *C, ARegion *region)
ED_region_panels_draw(C, region);
}
static void image_buttons_region_listener(wmWindow *UNUSED(win),
ScrArea *UNUSED(area),
ARegion *region,
wmNotifier *wmn,
const Scene *UNUSED(scene))
static void image_buttons_region_listener(wmRegionListenerParams *params)
{
ARegion *region = params->region;
wmNotifier *wmn = params->notifier;
/* context changes */
switch (wmn->category) {
case NC_TEXTURE:
@ -901,12 +903,11 @@ static void image_tools_region_draw(const bContext *C, ARegion *region)
ED_region_panels(C, region);
}
static void image_tools_region_listener(wmWindow *UNUSED(win),
ScrArea *UNUSED(area),
ARegion *region,
wmNotifier *wmn,
const Scene *UNUSED(scene))
static void image_tools_region_listener(wmRegionListenerParams *params)
{
ARegion *region = params->region;
wmNotifier *wmn = params->notifier;
/* context changes */
switch (wmn->category) {
case NC_GPENCIL:
@ -958,12 +959,11 @@ static void image_header_region_draw(const bContext *C, ARegion *region)
ED_region_header(C, region);
}
static void image_header_region_listener(wmWindow *UNUSED(win),
ScrArea *UNUSED(area),
ARegion *region,
wmNotifier *wmn,
const Scene *UNUSED(scene))
static void image_header_region_listener(wmRegionListenerParams *params)
{
ARegion *region = params->region;
wmNotifier *wmn = params->notifier;
/* context changes */
switch (wmn->category) {
case NC_SCENE:

View File

@ -204,13 +204,10 @@ static void info_header_region_draw(const bContext *C, ARegion *region)
ED_region_header(C, region);
}
static void info_main_region_listener(wmWindow *UNUSED(win),
ScrArea *UNUSED(area),
ARegion *region,
wmNotifier *wmn,
const Scene *UNUSED(scene))
static void info_main_region_listener(wmRegionListenerParams *params)
{
// SpaceInfo *sinfo = area->spacedata.first;
ARegion *region = params->region;
wmNotifier *wmn = params->notifier;
/* context changes */
switch (wmn->category) {
@ -223,12 +220,11 @@ static void info_main_region_listener(wmWindow *UNUSED(win),
}
}
static void info_header_listener(wmWindow *UNUSED(win),
ScrArea *UNUSED(area),
ARegion *region,
wmNotifier *wmn,
const Scene *UNUSED(scene))
static void info_header_listener(wmRegionListenerParams *params)
{
ARegion *region = params->region;
wmNotifier *wmn = params->notifier;
/* context changes */
switch (wmn->category) {
case NC_SCREEN:
@ -259,14 +255,11 @@ static void info_header_listener(wmWindow *UNUSED(win),
}
}
static void info_header_region_message_subscribe(const bContext *UNUSED(C),
WorkSpace *UNUSED(workspace),
Scene *UNUSED(scene),
bScreen *UNUSED(screen),
ScrArea *UNUSED(area),
ARegion *region,
struct wmMsgBus *mbus)
static void info_header_region_message_subscribe(wmRegionMessageSubscribeParams *params)
{
struct wmMsgBus *mbus = params->message_bus;
ARegion *region = params->region;
wmMsgSubscribeValue msg_sub_value_region_tag_redraw = {
.owner = region,
.user_data = region,

View File

@ -324,12 +324,11 @@ static void nla_buttons_region_draw(const bContext *C, ARegion *region)
ED_region_panels(C, region);
}
static void nla_region_listener(wmWindow *UNUSED(win),
ScrArea *UNUSED(area),
ARegion *region,
wmNotifier *wmn,
const Scene *UNUSED(scene))
static void nla_region_listener(wmRegionListenerParams *params)
{
ARegion *region = params->region;
wmNotifier *wmn = params->notifier;
/* context changes */
switch (wmn->category) {
case NC_ANIMATION:
@ -364,12 +363,11 @@ static void nla_region_listener(wmWindow *UNUSED(win),
}
}
static void nla_main_region_listener(wmWindow *UNUSED(win),
ScrArea *UNUSED(area),
ARegion *region,
wmNotifier *wmn,
const Scene *UNUSED(scene))
static void nla_main_region_listener(wmRegionListenerParams *params)
{
ARegion *region = params->region;
wmNotifier *wmn = params->notifier;
/* context changes */
switch (wmn->category) {
case NC_ANIMATION:
@ -423,14 +421,14 @@ static void nla_main_region_listener(wmWindow *UNUSED(win),
}
}
static void nla_main_region_message_subscribe(const struct bContext *UNUSED(C),
struct WorkSpace *UNUSED(workspace),
struct Scene *scene,
struct bScreen *screen,
struct ScrArea *area,
struct ARegion *region,
struct wmMsgBus *mbus)
static void nla_main_region_message_subscribe(wmRegionMessageSubscribeParams *params)
{
struct wmMsgBus *mbus = params->message_bus;
Scene *scene = params->scene;
bScreen *screen = params->screen;
ScrArea *area = params->area;
ARegion *region = params->region;
PointerRNA ptr;
RNA_pointer_create(&screen->id, &RNA_SpaceNLA, area->spacedata.first, &ptr);
@ -465,12 +463,11 @@ static void nla_main_region_message_subscribe(const struct bContext *UNUSED(C),
}
}
static void nla_channel_region_listener(wmWindow *UNUSED(win),
ScrArea *UNUSED(area),
ARegion *region,
wmNotifier *wmn,
const Scene *UNUSED(scene))
static void nla_channel_region_listener(wmRegionListenerParams *params)
{
ARegion *region = params->region;
wmNotifier *wmn = params->notifier;
/* context changes */
switch (wmn->category) {
case NC_ANIMATION:
@ -508,14 +505,13 @@ static void nla_channel_region_listener(wmWindow *UNUSED(win),
}
}
static void nla_channel_region_message_subscribe(const struct bContext *UNUSED(C),
struct WorkSpace *UNUSED(workspace),
struct Scene *UNUSED(scene),
struct bScreen *screen,
struct ScrArea *area,
struct ARegion *region,
struct wmMsgBus *mbus)
static void nla_channel_region_message_subscribe(wmRegionMessageSubscribeParams *params)
{
struct wmMsgBus *mbus = params->message_bus;
bScreen *screen = params->screen;
ScrArea *area = params->area;
ARegion *region = params->region;
PointerRNA ptr;
RNA_pointer_create(&screen->id, &RNA_SpaceNLA, area->spacedata.first, &ptr);
@ -543,11 +539,11 @@ static void nla_channel_region_message_subscribe(const struct bContext *UNUSED(C
}
/* editor level listener */
static void nla_listener(wmWindow *UNUSED(win),
ScrArea *area,
wmNotifier *wmn,
Scene *UNUSED(scene))
static void nla_listener(wmSpaceTypeListenerParams *params)
{
ScrArea *area = params->area;
wmNotifier *wmn = params->notifier;
/* context changes */
switch (wmn->category) {
case NC_ANIMATION:

View File

@ -328,11 +328,11 @@ static void node_init(struct wmWindowManager *UNUSED(wm), ScrArea *UNUSED(area))
{
}
static void node_area_listener(wmWindow *UNUSED(win),
ScrArea *area,
wmNotifier *wmn,
Scene *UNUSED(scene))
static void node_area_listener(wmSpaceTypeListenerParams *params)
{
ScrArea *area = params->area;
wmNotifier *wmn = params->notifier;
/* note, ED_area_tag_refresh will re-execute compositor */
SpaceNode *snode = area->spacedata.first;
/* shaderfrom is only used for new shading nodes, otherwise all shaders are from objects */
@ -703,12 +703,10 @@ static void node_header_region_draw(const bContext *C, ARegion *region)
}
/* used for header + main region */
static void node_region_listener(wmWindow *UNUSED(win),
ScrArea *UNUSED(area),
ARegion *region,
wmNotifier *wmn,
const Scene *UNUSED(scene))
static void node_region_listener(wmRegionListenerParams *params)
{
ARegion *region = params->region;
wmNotifier *wmn = params->notifier;
wmGizmoMap *gzmap = region->gizmo_map;
/* context changes */

View File

@ -102,12 +102,11 @@ static void outliner_main_region_free(ARegion *UNUSED(region))
{
}
static void outliner_main_region_listener(wmWindow *UNUSED(win),
ScrArea *area,
ARegion *region,
wmNotifier *wmn,
const Scene *UNUSED(scene))
static void outliner_main_region_listener(wmRegionListenerParams *params)
{
ScrArea *area = params->area;
ARegion *region = params->region;
wmNotifier *wmn = params->notifier;
SpaceOutliner *space_outliner = area->spacedata.first;
/* context changes */
@ -264,15 +263,13 @@ static void outliner_main_region_listener(wmWindow *UNUSED(win),
}
}
static void outliner_main_region_message_subscribe(const struct bContext *UNUSED(C),
struct WorkSpace *UNUSED(workspace),
struct Scene *UNUSED(scene),
struct bScreen *UNUSED(screen),
struct ScrArea *area,
struct ARegion *region,
struct wmMsgBus *mbus)
static void outliner_main_region_message_subscribe(wmRegionMessageSubscribeParams *params)
{
struct wmMsgBus *mbus = params->message_bus;
ScrArea *area = params->area;
ARegion *region = params->region;
SpaceOutliner *space_outliner = area->spacedata.first;
wmMsgSubscribeValue msg_sub_value_region_tag_redraw = {
.owner = region,
.user_data = region,
@ -301,12 +298,11 @@ static void outliner_header_region_free(ARegion *UNUSED(region))
{
}
static void outliner_header_region_listener(wmWindow *UNUSED(win),
ScrArea *UNUSED(area),
ARegion *region,
wmNotifier *wmn,
const Scene *UNUSED(scene))
static void outliner_header_region_listener(wmRegionListenerParams *params)
{
ARegion *region = params->region;
wmNotifier *wmn = params->notifier;
/* context changes */
switch (wmn->category) {
case NC_SCENE:

View File

@ -156,13 +156,8 @@ static void script_header_region_draw(const bContext *C, ARegion *region)
ED_region_header(C, region);
}
static void script_main_region_listener(wmWindow *UNUSED(win),
ScrArea *UNUSED(area),
ARegion *UNUSED(region),
wmNotifier *UNUSED(wmn),
const Scene *UNUSED(scene))
static void script_main_region_listener(wmRegionListenerParams *UNUSED(params))
{
/* context changes */
/* XXX - Todo, need the ScriptSpace accessible to get the python script to run. */
#if 0
BPY_run_script_space_listener()

View File

@ -334,11 +334,11 @@ static SpaceLink *sequencer_duplicate(SpaceLink *sl)
return (SpaceLink *)sseqn;
}
static void sequencer_listener(wmWindow *UNUSED(win),
ScrArea *area,
wmNotifier *wmn,
Scene *UNUSED(scene))
static void sequencer_listener(wmSpaceTypeListenerParams *params)
{
ScrArea *area = params->area;
wmNotifier *wmn = params->notifier;
/* Context changes. */
switch (wmn->category) {
case NC_SCENE:
@ -534,12 +534,11 @@ static void sequencer_main_region_draw_overlay(const bContext *C, ARegion *regio
draw_timeline_seq_display(C, region);
}
static void sequencer_main_region_listener(wmWindow *UNUSED(win),
ScrArea *UNUSED(area),
ARegion *region,
wmNotifier *wmn,
const Scene *UNUSED(scene))
static void sequencer_main_region_listener(wmRegionListenerParams *params)
{
ARegion *region = params->region;
wmNotifier *wmn = params->notifier;
/* Context changes. */
switch (wmn->category) {
case NC_SCENE:
@ -579,14 +578,12 @@ static void sequencer_main_region_listener(wmWindow *UNUSED(win),
}
}
static void sequencer_main_region_message_subscribe(const struct bContext *UNUSED(C),
struct WorkSpace *UNUSED(workspace),
struct Scene *scene,
struct bScreen *UNUSED(screen),
struct ScrArea *UNUSED(area),
struct ARegion *region,
struct wmMsgBus *mbus)
static void sequencer_main_region_message_subscribe(wmRegionMessageSubscribeParams *params)
{
struct wmMsgBus *mbus = params->message_bus;
Scene *scene = params->scene;
ARegion *region = params->region;
wmMsgSubscribeValue msg_sub_value_region_tag_redraw = {
.owner = region,
.user_data = region,
@ -746,12 +743,11 @@ static void sequencer_preview_region_draw(const bContext *C, ARegion *region)
}
}
static void sequencer_preview_region_listener(wmWindow *UNUSED(win),
ScrArea *UNUSED(area),
ARegion *region,
wmNotifier *wmn,
const Scene *UNUSED(scene))
static void sequencer_preview_region_listener(wmRegionListenerParams *params)
{
ARegion *region = params->region;
wmNotifier *wmn = params->notifier;
/* Context changes. */
switch (wmn->category) {
case NC_GPENCIL:
@ -816,12 +812,11 @@ static void sequencer_buttons_region_draw(const bContext *C, ARegion *region)
ED_region_panels(C, region);
}
static void sequencer_buttons_region_listener(wmWindow *UNUSED(win),
ScrArea *UNUSED(area),
ARegion *region,
wmNotifier *wmn,
const Scene *UNUSED(scene))
static void sequencer_buttons_region_listener(wmRegionListenerParams *params)
{
ARegion *region = params->region;
wmNotifier *wmn = params->notifier;
/* Context changes. */
switch (wmn->category) {
case NC_GPENCIL:

View File

@ -95,12 +95,11 @@ static void statusbar_keymap(struct wmKeyConfig *UNUSED(keyconf))
{
}
static void statusbar_header_region_listener(wmWindow *UNUSED(win),
ScrArea *UNUSED(area),
ARegion *region,
wmNotifier *wmn,
const Scene *UNUSED(scene))
static void statusbar_header_region_listener(wmRegionListenerParams *params)
{
ARegion *region = params->region;
wmNotifier *wmn = params->notifier;
/* context changes */
switch (wmn->category) {
case NC_SCREEN:
@ -131,14 +130,11 @@ static void statusbar_header_region_listener(wmWindow *UNUSED(win),
}
}
static void statusbar_header_region_message_subscribe(const bContext *UNUSED(C),
WorkSpace *UNUSED(workspace),
Scene *UNUSED(scene),
bScreen *UNUSED(screen),
ScrArea *UNUSED(area),
ARegion *region,
struct wmMsgBus *mbus)
static void statusbar_header_region_message_subscribe(wmRegionMessageSubscribeParams *params)
{
struct wmMsgBus *mbus = params->message_bus;
ARegion *region = params->region;
wmMsgSubscribeValue msg_sub_value_region_tag_redraw = {
.owner = region,
.user_data = region,

View File

@ -122,11 +122,10 @@ static SpaceLink *text_duplicate(SpaceLink *sl)
return (SpaceLink *)stextn;
}
static void text_listener(wmWindow *UNUSED(win),
ScrArea *area,
wmNotifier *wmn,
Scene *UNUSED(scene))
static void text_listener(wmSpaceTypeListenerParams *params)
{
ScrArea *area = params->area;
wmNotifier *wmn = params->notifier;
SpaceText *st = area->spacedata.first;
/* context changes */

View File

@ -129,12 +129,11 @@ static void topbar_header_region_init(wmWindowManager *UNUSED(wm), ARegion *regi
ED_region_header_init(region);
}
static void topbar_main_region_listener(wmWindow *UNUSED(win),
ScrArea *UNUSED(area),
ARegion *region,
wmNotifier *wmn,
const Scene *UNUSED(scene))
static void topbar_main_region_listener(wmRegionListenerParams *params)
{
ARegion *region = params->region;
wmNotifier *wmn = params->notifier;
/* context changes */
switch (wmn->category) {
case NC_WM:
@ -160,12 +159,11 @@ static void topbar_main_region_listener(wmWindow *UNUSED(win),
}
}
static void topbar_header_listener(wmWindow *UNUSED(win),
ScrArea *UNUSED(area),
ARegion *region,
wmNotifier *wmn,
const Scene *UNUSED(scene))
static void topbar_header_listener(wmRegionListenerParams *params)
{
ARegion *region = params->region;
wmNotifier *wmn = params->notifier;
/* context changes */
switch (wmn->category) {
case NC_WM:
@ -191,14 +189,12 @@ static void topbar_header_listener(wmWindow *UNUSED(win),
}
}
static void topbar_header_region_message_subscribe(const struct bContext *UNUSED(C),
struct WorkSpace *workspace,
struct Scene *UNUSED(scene),
struct bScreen *UNUSED(screen),
struct ScrArea *UNUSED(area),
struct ARegion *region,
struct wmMsgBus *mbus)
static void topbar_header_region_message_subscribe(wmRegionMessageSubscribeParams *params)
{
struct wmMsgBus *mbus = params->message_bus;
WorkSpace *workspace = params->workspace;
ARegion *region = params->region;
wmMsgSubscribeValue msg_sub_value_region_tag_redraw = {
.owner = region,
.user_data = region,

View File

@ -183,46 +183,20 @@ static void userpref_execute_region_init(wmWindowManager *wm, ARegion *region)
region->v2d.keepzoom |= V2D_LOCKZOOM_X | V2D_LOCKZOOM_Y;
}
static void userpref_main_region_listener(wmWindow *UNUSED(win),
ScrArea *UNUSED(area),
ARegion *UNUSED(region),
wmNotifier *UNUSED(wmn),
const Scene *UNUSED(scene))
static void userpref_main_region_listener(wmRegionListenerParams *UNUSED(params))
{
/* context changes */
}
static void userpref_header_listener(wmWindow *UNUSED(win),
ScrArea *UNUSED(area),
ARegion *UNUSED(region),
wmNotifier *UNUSED(wmn),
const Scene *UNUSED(scene))
static void userpref_header_listener(wmRegionListenerParams *UNUSED(params))
{
/* context changes */
#if 0
switch (wmn->category) {
default:
break;
}
#endif
}
static void userpref_navigation_region_listener(wmWindow *UNUSED(win),
ScrArea *UNUSED(area),
ARegion *UNUSED(region),
wmNotifier *UNUSED(wmn),
const Scene *UNUSED(scene))
static void userpref_navigation_region_listener(wmRegionListenerParams *UNUSED(params))
{
/* context changes */
}
static void userpref_execute_region_listener(wmWindow *UNUSED(win),
ScrArea *UNUSED(area),
ARegion *UNUSED(region),
wmNotifier *UNUSED(wmn),
const Scene *UNUSED(scene))
static void userpref_execute_region_listener(wmRegionListenerParams *UNUSED(params))
{
/* context changes */
}
/* only called once, from space/spacetypes.c */

View File

@ -783,9 +783,12 @@ static void *view3d_main_region_duplicate(void *poin)
return NULL;
}
static void view3d_main_region_listener(
wmWindow *UNUSED(win), ScrArea *area, ARegion *region, wmNotifier *wmn, const Scene *scene)
static void view3d_main_region_listener(wmRegionListenerParams *params)
{
ScrArea *area = params->area;
ARegion *region = params->region;
wmNotifier *wmn = params->notifier;
const Scene *scene = params->scene;
View3D *v3d = area->spacedata.first;
RegionView3D *rv3d = region->regiondata;
wmGizmoMap *gzmap = region->gizmo_map;
@ -1041,14 +1044,13 @@ static void view3d_main_region_listener(
}
}
static void view3d_main_region_message_subscribe(const struct bContext *C,
struct WorkSpace *UNUSED(workspace),
struct Scene *UNUSED(scene),
struct bScreen *UNUSED(screen),
struct ScrArea *area,
struct ARegion *region,
struct wmMsgBus *mbus)
static void view3d_main_region_message_subscribe(wmRegionMessageSubscribeParams *params)
{
struct wmMsgBus *mbus = params->message_bus;
const bContext *C = params->context;
ScrArea *area = params->area;
ARegion *region = params->region;
/* Developer note: there are many properties that impact 3D view drawing,
* so instead of subscribing to individual properties, just subscribe to types
* accepting some redundant redraws.
@ -1163,12 +1165,11 @@ static void view3d_header_region_draw(const bContext *C, ARegion *region)
ED_region_header(C, region);
}
static void view3d_header_region_listener(wmWindow *UNUSED(win),
ScrArea *UNUSED(area),
ARegion *region,
wmNotifier *wmn,
const Scene *UNUSED(scene))
static void view3d_header_region_listener(wmRegionListenerParams *params)
{
ARegion *region = params->region;
wmNotifier *wmn = params->notifier;
/* context changes */
switch (wmn->category) {
case NC_SCENE:
@ -1233,14 +1234,11 @@ static void view3d_header_region_listener(wmWindow *UNUSED(win),
#endif
}
static void view3d_header_region_message_subscribe(const struct bContext *UNUSED(C),
struct WorkSpace *UNUSED(workspace),
struct Scene *UNUSED(scene),
struct bScreen *UNUSED(screen),
struct ScrArea *UNUSED(area),
struct ARegion *region,
struct wmMsgBus *mbus)
static void view3d_header_region_message_subscribe(wmRegionMessageSubscribeParams *params)
{
struct wmMsgBus *mbus = params->message_bus;
ARegion *region = params->region;
wmMsgParams_RNA msg_key_params = {{0}};
/* Only subscribe to types. */
@ -1378,12 +1376,11 @@ static void view3d_buttons_region_layout(const bContext *C, ARegion *region)
ED_view3d_buttons_region_layout_ex(C, region, NULL);
}
static void view3d_buttons_region_listener(wmWindow *UNUSED(win),
ScrArea *UNUSED(area),
ARegion *region,
wmNotifier *wmn,
const Scene *UNUSED(scene))
static void view3d_buttons_region_listener(wmRegionListenerParams *params)
{
ARegion *region = params->region;
wmNotifier *wmn = params->notifier;
/* context changes */
switch (wmn->category) {
case NC_ANIMATION:
@ -1502,11 +1499,10 @@ static void view3d_tools_region_draw(const bContext *C, ARegion *region)
}
/* area (not region) level listener */
static void space_view3d_listener(wmWindow *UNUSED(win),
ScrArea *area,
struct wmNotifier *wmn,
Scene *UNUSED(scene))
static void space_view3d_listener(wmSpaceTypeListenerParams *params)
{
ScrArea *area = params->area;
wmNotifier *wmn = params->notifier;
View3D *v3d = area->spacedata.first;
/* context changes */

View File

@ -301,7 +301,7 @@ void WM_gizmomap_draw(struct wmGizmoMap *gzmap,
void WM_gizmomap_add_handlers(struct ARegion *region, struct wmGizmoMap *gzmap);
bool WM_gizmomap_select_all(struct bContext *C, struct wmGizmoMap *gzmap, const int action);
bool WM_gizmomap_cursor_set(const struct wmGizmoMap *gzmap, struct wmWindow *win);
void WM_gizmomap_message_subscribe(struct bContext *C,
void WM_gizmomap_message_subscribe(const struct bContext *C,
struct wmGizmoMap *gzmap,
struct ARegion *region,
struct wmMsgBus *mbus);

View File

@ -1156,7 +1156,7 @@ ListBase *wm_gizmomap_groups_get(wmGizmoMap *gzmap)
return &gzmap->groups;
}
void WM_gizmomap_message_subscribe(bContext *C,
void WM_gizmomap_message_subscribe(const bContext *C,
wmGizmoMap *gzmap,
ARegion *region,
struct wmMsgBus *mbus)

View File

@ -543,13 +543,31 @@ void wm_event_do_notifiers(bContext *C)
ED_screen_do_listen(C, note);
LISTBASE_FOREACH (ARegion *, region, &screen->regionbase) {
ED_region_do_listen(win, NULL, region, note, scene);
wmRegionListenerParams region_params = {
.area = NULL,
.region = region,
.scene = scene,
.notifier = note,
};
ED_region_do_listen(&region_params);
}
ED_screen_areas_iter (win, screen, area) {
ED_area_do_listen(win, area, note, scene);
wmSpaceTypeListenerParams area_params = {
.window = win,
.area = area,
.notifier = note,
.scene = scene,
};
ED_area_do_listen(&area_params);
LISTBASE_FOREACH (ARegion *, region, &area->regionbase) {
ED_region_do_listen(win, area, region, note, scene);
wmRegionListenerParams region_params = {
.area = area,
.region = region,
.scene = scene,
.notifier = note,
};
ED_region_do_listen(&region_params);
}
}
}