diff options
author | Julian Eisel <julian@blender.org> | 2020-03-06 18:22:28 +0300 |
---|---|---|
committer | Julian Eisel <julian@blender.org> | 2020-03-06 18:27:13 +0300 |
commit | d5572eacc5958db38ac4a4a32eddb3a2cd24bf68 (patch) | |
tree | 5252d8f509dae02bf9c137a1710c073d5bbac592 | |
parent | b242cc67928a6858a835c088e4d3ea8822c83168 (diff) |
Cleanup: Reduce context usage in UI functions
Part of https://developer.blender.org/T74429.
There's a chance that this causes some issues becaue in some cases we
change from getting the window from context to getting it from somewhere
else.
41 files changed, 272 insertions, 270 deletions
diff --git a/source/blender/editors/gizmo_library/gizmo_types/arrow3d_gizmo.c b/source/blender/editors/gizmo_library/gizmo_types/arrow3d_gizmo.c index a2b654dfa68..99ac683747f 100644 --- a/source/blender/editors/gizmo_library/gizmo_types/arrow3d_gizmo.c +++ b/source/blender/editors/gizmo_library/gizmo_types/arrow3d_gizmo.c @@ -354,7 +354,7 @@ static int gizmo_arrow_modal(bContext *C, /* tag the region for redraw */ ED_region_tag_redraw_editor_overlays(ar); - WM_event_add_mousemove(C); + WM_event_add_mousemove(CTX_wm_window(C)); return OPERATOR_RUNNING_MODAL; } diff --git a/source/blender/editors/gizmo_library/gizmo_types/cage2d_gizmo.c b/source/blender/editors/gizmo_library/gizmo_types/cage2d_gizmo.c index 5ff76d886c2..6f6f131136c 100644 --- a/source/blender/editors/gizmo_library/gizmo_types/cage2d_gizmo.c +++ b/source/blender/editors/gizmo_library/gizmo_types/cage2d_gizmo.c @@ -1087,7 +1087,7 @@ static int gizmo_cage2d_modal(bContext *C, /* tag the region for redraw */ ED_region_tag_redraw_editor_overlays(CTX_wm_region(C)); - WM_event_add_mousemove(C); + WM_event_add_mousemove(CTX_wm_window(C)); return OPERATOR_RUNNING_MODAL; } diff --git a/source/blender/editors/gizmo_library/gizmo_types/cage3d_gizmo.c b/source/blender/editors/gizmo_library/gizmo_types/cage3d_gizmo.c index 393568e8382..6f424252b91 100644 --- a/source/blender/editors/gizmo_library/gizmo_types/cage3d_gizmo.c +++ b/source/blender/editors/gizmo_library/gizmo_types/cage3d_gizmo.c @@ -586,7 +586,7 @@ static int gizmo_cage3d_modal(bContext *C, /* tag the region for redraw */ ED_region_tag_redraw_editor_overlays(CTX_wm_region(C)); - WM_event_add_mousemove(C); + WM_event_add_mousemove(CTX_wm_window(C)); return OPERATOR_RUNNING_MODAL; } diff --git a/source/blender/editors/include/ED_image.h b/source/blender/editors/include/ED_image.h index e97630cfb99..6cf633b477c 100644 --- a/source/blender/editors/include/ED_image.h +++ b/source/blender/editors/include/ED_image.h @@ -122,8 +122,8 @@ void ED_image_draw_info(struct Scene *scene, bool ED_space_image_show_cache(struct SpaceImage *sima); -bool ED_image_should_save_modified(const struct bContext *C); -int ED_image_save_all_modified_info(const struct bContext *C, struct ReportList *reports); +bool ED_image_should_save_modified(const struct Main *bmain); +int ED_image_save_all_modified_info(const struct Main *bmain, struct ReportList *reports); bool ED_image_save_all_modified(const struct bContext *C, struct ReportList *reports); /* image_sequence.c */ diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h index 554a166b2ce..e83582b19d0 100644 --- a/source/blender/editors/include/UI_interface.h +++ b/source/blender/editors/include/UI_interface.h @@ -632,7 +632,7 @@ void uiPupBlockOperator(struct bContext *C, void UI_popup_block_close(struct bContext *C, struct wmWindow *win, uiBlock *block); -bool UI_popup_block_name_exists(struct bContext *C, const char *name); +bool UI_popup_block_name_exists(const struct bScreen *screen, const char *name); /* Blocks * diff --git a/source/blender/editors/interface/interface_eyedropper_datablock.c b/source/blender/editors/interface/interface_eyedropper_datablock.c index fd5a46e7716..0220f3f5afd 100644 --- a/source/blender/editors/interface/interface_eyedropper_datablock.c +++ b/source/blender/editors/interface/interface_eyedropper_datablock.c @@ -125,7 +125,9 @@ static int datadropper_init(bContext *C, wmOperator *op) static void datadropper_exit(bContext *C, wmOperator *op) { - WM_cursor_modal_restore(CTX_wm_window(C)); + wmWindow *win = CTX_wm_window(C); + + WM_cursor_modal_restore(win); if (op->customdata) { DataDropper *ddr = (DataDropper *)op->customdata; @@ -139,7 +141,7 @@ static void datadropper_exit(bContext *C, wmOperator *op) op->customdata = NULL; } - WM_event_add_mousemove(C); + WM_event_add_mousemove(win); } /* *** datadropper id helper functions *** */ diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c index e96e4bfd72a..cf736d65596 100644 --- a/source/blender/editors/interface/interface_handlers.c +++ b/source/blender/editors/interface/interface_handlers.c @@ -1552,7 +1552,7 @@ static int ui_handler_region_drag_toggle(bContext *C, const wmEvent *event, void false); ui_handler_region_drag_toggle_remove(C, drag_info); - WM_event_add_mousemove(C); + WM_event_add_mousemove(win); return WM_UI_HANDLER_BREAK; } else { @@ -1843,7 +1843,7 @@ static bool ui_but_drag_init(bContext *C, const wmEvent *event) { /* prevent other WM gestures to start while we try to drag */ - WM_gestures_remove(C); + WM_gestures_remove(CTX_wm_window(C)); /* Clamp the maximum to half the UI unit size so a high user preference * doesn't require the user to drag more then half the default button height. */ @@ -3280,7 +3280,7 @@ wmIMEData *ui_but_ime_data_get(uiBut *but) static void ui_textedit_begin(bContext *C, uiBut *but, uiHandleButtonData *data) { - wmWindow *win = CTX_wm_window(C); + wmWindow *win = data->window; int len; const bool is_num_but = ELEM(but->type, UI_BTYPE_NUM, UI_BTYPE_NUM_SLIDER); bool no_zero_strip = false; @@ -3370,7 +3370,7 @@ static void ui_textedit_begin(bContext *C, uiBut *but, uiHandleButtonData *data) static void ui_textedit_end(bContext *C, uiBut *but, uiHandleButtonData *data) { - wmWindow *win = CTX_wm_window(C); + wmWindow *win = data->window; if (but) { if (UI_but_is_utf8(but)) { @@ -3945,7 +3945,7 @@ static void ui_but_extra_operator_icon_apply(bContext *C, uiBut *but, uiButExtra /* Force recreation of extra operator icons (pseudo update). */ ui_but_extra_operator_icons_free(but); - WM_event_add_mousemove(C); + WM_event_add_mousemove(CTX_wm_window(C)); } /** \} */ @@ -4020,8 +4020,7 @@ static void ui_block_open_begin(bContext *C, uiBut *but, uiHandleButtonData *dat #ifdef USE_ALLSELECT { - wmWindow *win = CTX_wm_window(C); - if (IS_ALLSELECT_EVENT(win->eventstate)) { + if (IS_ALLSELECT_EVENT(data->window->eventstate)) { data->select_others.is_enabled = true; } } @@ -5570,7 +5569,7 @@ static int ui_do_but_BLOCK(bContext *C, uiBut *but, uiHandleButtonData *data, co * The active state of the button could be maintained some other way * and remove this mousemove event. */ - WM_event_add_mousemove(C); + WM_event_add_mousemove(data->window); return WM_UI_HANDLER_BREAK; } @@ -8039,11 +8038,12 @@ static void button_activate_init(bContext *C, ARegion *ar, uiBut *but, uiButtonA static void button_activate_exit( bContext *C, uiBut *but, uiHandleButtonData *data, const bool mousemove, const bool onfree) { + wmWindow *win = data->window; uiBlock *block = but->block; uiBut *bt; if (but->type == UI_BTYPE_GRIP) { - WM_cursor_modal_restore(data->window); + WM_cursor_modal_restore(win); } /* ensure we are in the exit state */ @@ -8160,7 +8160,7 @@ static void button_activate_exit( * still over a button. We cannot just check for this ourselves because * at this point the mouse may be over a button in another region */ if (mousemove) { - WM_event_add_mousemove(C); + WM_event_add_mousemove(CTX_wm_window(C)); } } @@ -8818,7 +8818,7 @@ static int ui_handle_button_event(bContext *C, const wmEvent *event, uiBut *but) button_activate_init(C, ar, post_but, post_type); } else { - /* XXX issue is because WM_event_add_mousemove(C) is a bad hack and not reliable, + /* XXX issue is because WM_event_add_mousemove(wm) is a bad hack and not reliable, * if that gets coded better this bypass can go away too. * * This is needed to make sure if a button was active, @@ -9592,7 +9592,7 @@ static int ui_handle_menu_event(bContext *C, but->active->cancel = true; button_activate_exit(C, but, but->active, false, false); } - WM_event_add_mousemove(C); + WM_event_add_mousemove(but->active->window); } } break; @@ -10776,7 +10776,7 @@ static int ui_popup_handler(bContext *C, const wmEvent *event, void *userdata) temp.cancel_func(C, temp.popup_arg); } - WM_event_add_mousemove(C); + WM_event_add_mousemove(win); } else { /* re-enable tooltips */ diff --git a/source/blender/editors/interface/interface_ops.c b/source/blender/editors/interface/interface_ops.c index 9fa8431beea..9de2824e3a3 100644 --- a/source/blender/editors/interface/interface_ops.c +++ b/source/blender/editors/interface/interface_ops.c @@ -1649,7 +1649,7 @@ static int ui_button_press_invoke(bContext *C, wmOperator *op, const wmEvent *ev but->optype = but_optype; - WM_event_add_mousemove(C); + WM_event_add_mousemove(CTX_wm_window(C)); return OPERATOR_FINISHED; } diff --git a/source/blender/editors/interface/interface_region_menu_pie.c b/source/blender/editors/interface/interface_region_menu_pie.c index 330a9d48ff4..f75f4c054a3 100644 --- a/source/blender/editors/interface/interface_region_menu_pie.c +++ b/source/blender/editors/interface/interface_region_menu_pie.c @@ -213,7 +213,7 @@ void UI_pie_menu_end(bContext *C, uiPieMenu *pie) menu->towardstime = PIL_check_seconds_timer(); UI_popup_handlers_add(C, &window->modalhandlers, menu, WM_HANDLER_ACCEPT_DBL_CLICK); - WM_event_add_mousemove(C); + WM_event_add_mousemove(window); MEM_freeN(pie); } diff --git a/source/blender/editors/interface/interface_region_menu_popup.c b/source/blender/editors/interface/interface_region_menu_popup.c index 560c6146afe..2b6125fc193 100644 --- a/source/blender/editors/interface/interface_region_menu_popup.c +++ b/source/blender/editors/interface/interface_region_menu_popup.c @@ -357,7 +357,7 @@ uiPopupBlockHandle *ui_popup_menu_create( handle->popup = true; UI_popup_handlers_add(C, &window->modalhandlers, handle, 0); - WM_event_add_mousemove(C); + WM_event_add_mousemove(window); } MEM_freeN(pup); @@ -467,7 +467,7 @@ void UI_popup_menu_end(bContext *C, uiPopupMenu *pup) menu->popup = true; UI_popup_handlers_add(C, &window->modalhandlers, menu, 0); - WM_event_add_mousemove(C); + WM_event_add_mousemove(window); MEM_freeN(pup); } @@ -599,7 +599,7 @@ void UI_popup_block_invoke_ex(bContext *C, UI_popup_handlers_add(C, &window->modalhandlers, handle, 0); UI_block_active_only_flagged_buttons(C, handle->region, handle->region->uiblocks.first); - WM_event_add_mousemove(C); + WM_event_add_mousemove(window); } void UI_popup_block_invoke(bContext *C, @@ -633,7 +633,7 @@ void UI_popup_block_ex(bContext *C, UI_popup_handlers_add(C, &window->modalhandlers, handle, 0); UI_block_active_only_flagged_buttons(C, handle->region, handle->region->uiblocks.first); - WM_event_add_mousemove(C); + WM_event_add_mousemove(window); } #if 0 /* UNUSED */ @@ -676,14 +676,10 @@ void UI_popup_block_close(bContext *C, wmWindow *win, uiBlock *block) } } -bool UI_popup_block_name_exists(bContext *C, const char *name) +bool UI_popup_block_name_exists(const bScreen *screen, const char *name) { - bScreen *sc = CTX_wm_screen(C); - uiBlock *block; - ARegion *ar; - - for (ar = sc->regionbase.first; ar; ar = ar->next) { - for (block = ar->uiblocks.first; block; block = block->next) { + for (const ARegion *ar = screen->regionbase.first; ar; ar = ar->next) { + for (const uiBlock *block = ar->uiblocks.first; block; block = block->next) { if (STREQ(block->name, name)) { return true; } diff --git a/source/blender/editors/interface/interface_region_popover.c b/source/blender/editors/interface/interface_region_popover.c index f412519d655..5e88d48a787 100644 --- a/source/blender/editors/interface/interface_region_popover.c +++ b/source/blender/editors/interface/interface_region_popover.c @@ -284,7 +284,7 @@ uiPopupBlockHandle *ui_popover_panel_create( * add a modal handler and pass on events. */ if (!but) { UI_popup_handlers_add(C, &window->modalhandlers, handle, 0); - WM_event_add_mousemove(C); + WM_event_add_mousemove(window); handle->popup = true; } @@ -403,7 +403,7 @@ void UI_popover_end(bContext *C, uiPopover *pup, wmKeyMap *keymap) /* Add handlers. */ UI_popup_handlers_add(C, &window->modalhandlers, handle, 0); - WM_event_add_mousemove(C); + WM_event_add_mousemove(window); handle->popup = true; /* Re-add so it gets priority. */ diff --git a/source/blender/editors/interface/interface_region_popup.c b/source/blender/editors/interface/interface_region_popup.c index 462f4871764..b509f5e352b 100644 --- a/source/blender/editors/interface/interface_region_popup.c +++ b/source/blender/editors/interface/interface_region_popup.c @@ -706,15 +706,6 @@ uiBlock *ui_popup_block_refresh(bContext *C, } } else { - /* Add an offset to draw the popover arrow. */ - if ((block->flag & UI_BLOCK_POPOVER) && ELEM(block->direction, UI_DIR_UP, UI_DIR_DOWN)) { - /* Keep sync with 'ui_draw_popover_back_impl'. */ - const float unit_size = U.widget_unit / block->aspect; - const float unit_half = unit_size * (block->direction == UI_DIR_DOWN ? 0.5 : -0.5); - - UI_block_translate(block, 0, -unit_half); - } - /* clip block with window boundary */ ui_popup_block_clip(window, block); diff --git a/source/blender/editors/interface/view2d_ops.c b/source/blender/editors/interface/view2d_ops.c index 527c23e4588..10d327cb2ba 100644 --- a/source/blender/editors/interface/view2d_ops.c +++ b/source/blender/editors/interface/view2d_ops.c @@ -188,7 +188,7 @@ static void view_pan_apply_ex(bContext *C, v2dViewPanData *vpd, float dx, float ED_region_tag_redraw_no_rebuild(vpd->ar); /* request updates to be done... */ - WM_event_add_mousemove(C); + WM_event_add_mousemove(CTX_wm_window(C)); UI_view2d_sync(vpd->sc, vpd->sa, v2d, V2D_LOCK_COPY); } @@ -1592,6 +1592,7 @@ void UI_view2d_smooth_view(bContext *C, ARegion *ar, const rctf *cur, const int /* only meant for timer usage */ static int view2d_smoothview_invoke(bContext *C, wmOperator *UNUSED(op), const wmEvent *event) { + wmWindow *win = CTX_wm_window(C); ARegion *ar = CTX_wm_region(C); View2D *v2d = &ar->v2d; struct SmoothView2DStore *sms = v2d->sms; @@ -1616,11 +1617,11 @@ static int view2d_smoothview_invoke(bContext *C, wmOperator *UNUSED(op), const w MEM_freeN(v2d->sms); v2d->sms = NULL; - WM_event_remove_timer(CTX_wm_manager(C), CTX_wm_window(C), v2d->smooth_timer); + WM_event_remove_timer(CTX_wm_manager(C), win, v2d->smooth_timer); v2d->smooth_timer = NULL; /* Event handling won't know if a UI item has been moved under the pointer. */ - WM_event_add_mousemove(C); + WM_event_add_mousemove(win); } else { /* ease in/out */ diff --git a/source/blender/editors/mesh/editmesh_polybuild.c b/source/blender/editors/mesh/editmesh_polybuild.c index 08d513e43ac..c9438f43e04 100644 --- a/source/blender/editors/mesh/editmesh_polybuild.c +++ b/source/blender/editors/mesh/editmesh_polybuild.c @@ -162,7 +162,7 @@ static int edbm_polybuild_transform_at_cursor_invoke(bContext *C, } } BM_select_history_store(bm, ele_act); - WM_event_add_mousemove(C); + WM_event_add_mousemove(vc.win); return OPERATOR_FINISHED; } @@ -244,7 +244,7 @@ static int edbm_polybuild_delete_at_cursor_invoke(bContext *C, ED_object_base_activate(C, basact); } } - WM_event_add_mousemove(C); + WM_event_add_mousemove(vc.win); return OPERATOR_FINISHED; } else { @@ -411,7 +411,7 @@ static int edbm_polybuild_face_at_cursor_invoke(bContext *C, wmOperator *op, con } } - WM_event_add_mousemove(C); + WM_event_add_mousemove(vc.win); return OPERATOR_FINISHED; } @@ -495,7 +495,7 @@ static int edbm_polybuild_split_at_cursor_invoke(bContext *C, EDBM_mesh_normals_update(em); EDBM_update_generic(vc.obedit->data, true, true); - WM_event_add_mousemove(C); + WM_event_add_mousemove(vc.win); if (vc.view_layer->basact != basact) { ED_object_base_activate(C, basact); @@ -592,7 +592,7 @@ static int edbm_polybuild_dissolve_at_cursor_invoke(bContext *C, ED_object_base_activate(C, basact); } - WM_event_add_mousemove(C); + WM_event_add_mousemove(vc.win); return OPERATOR_FINISHED; } diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c index 26240482e6d..c6e7b9d382a 100644 --- a/source/blender/editors/screen/area.c +++ b/source/blender/editors/screen/area.c @@ -1971,6 +1971,7 @@ void ED_area_data_swap(ScrArea *sa_dst, ScrArea *sa_src) void ED_area_swapspace(bContext *C, ScrArea *sa1, ScrArea *sa2) { ScrArea *tmp = MEM_callocN(sizeof(ScrArea), "addscrarea"); + wmWindow *win = CTX_wm_window(C); ED_area_exit(C, sa1); ED_area_exit(C, sa2); @@ -1978,14 +1979,14 @@ void ED_area_swapspace(bContext *C, ScrArea *sa1, ScrArea *sa2) ED_area_data_copy(tmp, sa1, false); ED_area_data_copy(sa1, sa2, true); ED_area_data_copy(sa2, tmp, true); - ED_area_initialize(CTX_wm_manager(C), CTX_wm_window(C), sa1); - ED_area_initialize(CTX_wm_manager(C), CTX_wm_window(C), sa2); + ED_area_initialize(CTX_wm_manager(C), win, sa1); + ED_area_initialize(CTX_wm_manager(C), win, sa2); BKE_screen_area_free(tmp); MEM_freeN(tmp); /* tell WM to refresh, cursor types etc */ - WM_event_add_mousemove(C); + WM_event_add_mousemove(win); ED_area_tag_redraw(sa1); ED_area_tag_refresh(sa1); @@ -2119,7 +2120,7 @@ void ED_area_newspace(bContext *C, ScrArea *sa, int type, const bool skip_ar_exi ED_area_initialize(CTX_wm_manager(C), win, sa); /* tell WM to refresh, cursor types etc */ - WM_event_add_mousemove(C); + WM_event_add_mousemove(win); /* send space change notifier */ WM_event_add_notifier(C, NC_SPACE | ND_SPACE_CHANGED, sa); diff --git a/source/blender/editors/screen/screen_edit.c b/source/blender/editors/screen/screen_edit.c index c94c6ca9acb..6c86b05e1c7 100644 --- a/source/blender/editors/screen/screen_edit.c +++ b/source/blender/editors/screen/screen_edit.c @@ -1013,7 +1013,7 @@ void screen_change_update(bContext *C, wmWindow *win, bScreen *sc) WM_event_add_notifier(C, NC_SCREEN | ND_LAYOUTSET, layout); /* makes button hilites work */ - WM_event_add_mousemove(C); + WM_event_add_mousemove(win); } /** diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c index 35d84d5d75e..26529e4afcb 100644 --- a/source/blender/editors/screen/screen_ops.c +++ b/source/blender/editors/screen/screen_ops.c @@ -4042,7 +4042,7 @@ static int region_flip_exec(bContext *C, wmOperator *UNUSED(op)) } ED_area_tag_redraw(CTX_wm_area(C)); - WM_event_add_mousemove(C); + WM_event_add_mousemove(CTX_wm_window(C)); WM_event_add_notifier(C, NC_SCREEN | NA_EDITED, NULL); return OPERATOR_FINISHED; diff --git a/source/blender/editors/screen/workspace_edit.c b/source/blender/editors/screen/workspace_edit.c index 7f3131a705e..e61b42bf99f 100644 --- a/source/blender/editors/screen/workspace_edit.c +++ b/source/blender/editors/screen/workspace_edit.c @@ -334,7 +334,7 @@ static int workspace_append_activate_exec(bContext *C, wmOperator *op) RNA_string_get(op->ptr, "filepath", filepath); WorkSpace *appended_workspace = (WorkSpace *)WM_file_append_datablock( - C, filepath, ID_WS, idname); + bmain, CTX_data_scene(C), CTX_data_view_layer(C), CTX_wm_view3d(C), filepath, ID_WS, idname); if (appended_workspace) { /* Set defaults. */ diff --git a/source/blender/editors/space_file/file_ops.c b/source/blender/editors/space_file/file_ops.c index ec89ea1be7e..e065c146962 100644 --- a/source/blender/editors/space_file/file_ops.c +++ b/source/blender/editors/space_file/file_ops.c @@ -536,7 +536,7 @@ static int file_select_invoke(bContext *C, wmOperator *op, const wmEvent *event) WM_event_add_notifier(C, NC_SPACE | ND_SPACE_FILE_PARAMS, NULL); } - WM_event_add_mousemove(C); /* for directory changes */ + WM_event_add_mousemove(CTX_wm_window(C)); /* for directory changes */ WM_event_add_notifier(C, NC_SPACE | ND_SPACE_FILE_PARAMS, NULL); return OPERATOR_FINISHED; @@ -578,7 +578,8 @@ void FILE_OT_select(wmOperatorType *ot) /** * \returns true if selection has changed */ -static bool file_walk_select_selection_set(bContext *C, +static bool file_walk_select_selection_set(wmWindow *win, + ARegion *ar, SpaceFile *sfile, const int direction, const int numfiles, @@ -656,7 +657,7 @@ static bool file_walk_select_selection_set(bContext *C, /* highlight file under mouse pos */ params->highlight_file = -1; - WM_event_add_mousemove(C); + WM_event_add_mousemove(win); } /* do the actual selection */ @@ -686,7 +687,7 @@ static bool file_walk_select_selection_set(bContext *C, fileselect_file_set(sfile, params->active_file); /* ensure newly selected file is inside viewbounds */ - file_ensure_inside_viewbounds(CTX_wm_region(C), sfile, params->active_file); + file_ensure_inside_viewbounds(ar, sfile, params->active_file); /* selection changed */ return true; @@ -702,6 +703,8 @@ static bool file_walk_select_do(bContext *C, const bool extend, const bool fill) { + wmWindow *win = CTX_wm_window(C); + ARegion *ar = CTX_wm_region(C); struct FileList *files = sfile->files; const int numfiles = filelist_files_ensure(files); const bool has_selection = file_is_any_selected(files); @@ -717,7 +720,6 @@ static bool file_walk_select_do(bContext *C, } if (has_selection) { - ARegion *ar = CTX_wm_region(C); FileLayout *layout = ED_fileselect_get_layout(sfile, ar); const int idx_shift = (layout->flag & FILE_LAYOUT_HOR) ? layout->rows : layout->flow_columns; @@ -763,7 +765,8 @@ static bool file_walk_select_do(bContext *C, } } - return file_walk_select_selection_set(C, + return file_walk_select_selection_set(win, + ar, sfile, direction, numfiles, @@ -867,7 +870,7 @@ static int file_select_all_exec(bContext *C, wmOperator *op) } file_draw_check(C); - WM_event_add_mousemove(C); + WM_event_add_mousemove(CTX_wm_window(C)); ED_area_tag_redraw(sa); return OPERATOR_FINISHED; diff --git a/source/blender/editors/space_image/image_ops.c b/source/blender/editors/space_image/image_ops.c index 3126c695a3a..86cb27465c7 100644 --- a/source/blender/editors/space_image/image_ops.c +++ b/source/blender/editors/space_image/image_ops.c @@ -2315,12 +2315,12 @@ static bool image_has_valid_path(Image *ima) return strchr(ima->name, '\\') || strchr(ima->name, '/'); } -bool ED_image_should_save_modified(const bContext *C) +bool ED_image_should_save_modified(const Main *bmain) { ReportList reports; BKE_reports_init(&reports, RPT_STORE); - uint modified_images_count = ED_image_save_all_modified_info(C, &reports); + uint modified_images_count = ED_image_save_all_modified_info(bmain, &reports); bool should_save = modified_images_count || !BLI_listbase_is_empty(&reports.list); BKE_reports_clear(&reports); @@ -2328,9 +2328,8 @@ bool ED_image_should_save_modified(const bContext *C) return should_save; } -int ED_image_save_all_modified_info(const bContext *C, ReportList *reports) +int ED_image_save_all_modified_info(const Main *bmain, ReportList *reports) { - Main *bmain = CTX_data_main(C); GSet *unique_paths = BLI_gset_str_new(__func__); int num_saveable_images = 0; @@ -2387,9 +2386,10 @@ int ED_image_save_all_modified_info(const bContext *C, ReportList *reports) bool ED_image_save_all_modified(const bContext *C, ReportList *reports) { - ED_image_save_all_modified_info(C, reports); - Main *bmain = CTX_data_main(C); + + ED_image_save_all_modified_info(bmain, reports); + bool ok = true; for (Image *ima = bmain->images.first; ima; ima = ima->id.next) { @@ -2417,7 +2417,7 @@ bool ED_image_save_all_modified(const bContext *C, ReportList *reports) static bool image_save_all_modified_poll(bContext *C) { - int num_files = ED_image_save_all_modified_info(C, NULL); + int num_files = ED_image_save_all_modified_info(CTX_data_main(C), NULL); return num_files > 0; } diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index 8b4012d6547..4658198e4e1 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -381,7 +381,7 @@ static void view3d_smoothview_apply(bContext *C, View3D *v3d, ARegion *ar, bool } /* Event handling won't know if a UI item has been moved under the pointer. */ - WM_event_add_mousemove(C); + WM_event_add_mousemove(CTX_wm_window(C)); } if (sync_boxview && (rv3d->viewlock & RV3D_BOXVIEW)) { diff --git a/source/blender/editors/undo/ed_undo.c b/source/blender/editors/undo/ed_undo.c index 9a9f5885021..5b5d1338637 100644 --- a/source/blender/editors/undo/ed_undo.c +++ b/source/blender/editors/undo/ed_undo.c @@ -389,7 +389,7 @@ static int ed_undo_exec(bContext *C, wmOperator *op) int ret = ed_undo_step_direction(C, 1, op->reports); if (ret & OPERATOR_FINISHED) { /* Keep button under the cursor active. */ - WM_event_add_mousemove(C); + WM_event_add_mousemove(CTX_wm_window(C)); } ED_outliner_select_sync_from_all_tag(C); @@ -418,7 +418,7 @@ static int ed_redo_exec(bContext *C, wmOperator *op) int ret = ed_undo_step_direction(C, -1, op->reports); if (ret & OPERATOR_FINISHED) { /* Keep button under the cursor active. */ - WM_event_add_mousemove(C); + WM_event_add_mousemove(CTX_wm_window(C)); } ED_outliner_select_sync_from_all_tag(C); @@ -432,7 +432,7 @@ static int ed_undo_redo_exec(bContext *C, wmOperator *UNUSED(op)) ret = ret ? OPERATOR_FINISHED : OPERATOR_CANCELLED; if (ret & OPERATOR_FINISHED) { /* Keep button under the cursor active. */ - WM_event_add_mousemove(C); + WM_event_add_mousemove(CTX_wm_window(C)); } return ret; } diff --git a/source/blender/makesrna/intern/rna_wm_api.c b/source/blender/makesrna/intern/rna_wm_api.c index 98e2f0c993d..db7a7d6852b 100644 --- a/source/blender/makesrna/intern/rna_wm_api.c +++ b/source/blender/makesrna/intern/rna_wm_api.c @@ -83,9 +83,14 @@ static wmKeyMap *rna_keymap_active(wmKeyMap *km, bContext *C) return WM_keymap_active(wm, km); } +static void rna_keymap_restore_to_default(wmKeyMap *km, bContext *C) +{ + WM_keymap_restore_to_default(km, CTX_wm_manager(C)); +} + static void rna_keymap_restore_item_to_default(wmKeyMap *km, bContext *C, wmKeyMapItem *kmi) { - WM_keymap_item_restore_to_default(C, km, kmi); + WM_keymap_item_restore_to_default(CTX_wm_manager(C), km, kmi); } static void rna_Operator_report(wmOperator *op, int type, const char *msg) @@ -1050,7 +1055,7 @@ void RNA_api_keymap(StructRNA *srna) parm = RNA_def_pointer(func, "keymap", "KeyMap", "Key Map", "Active key map"); RNA_def_function_return(func, parm); - func = RNA_def_function(srna, "restore_to_default", "WM_keymap_restore_to_default"); + func = RNA_def_function(srna, "restore_to_default", "rna_keymap_restore_to_default"); RNA_def_function_flag(func, FUNC_USE_CONTEXT); func = RNA_def_function(srna, "restore_item_to_default", "rna_keymap_restore_item_to_default"); diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h index 1c86e4da291..2cb91f6cadf 100644 --- a/source/blender/windowmanager/WM_api.h +++ b/source/blender/windowmanager/WM_api.h @@ -51,6 +51,7 @@ struct MenuType; struct PointerRNA; struct PropertyRNA; struct ScrArea; +struct View3D; struct ViewLayer; struct bContext; struct rcti; @@ -176,7 +177,10 @@ void WM_autosave_init(struct wmWindowManager *wm); void WM_recover_last_session(struct bContext *C, struct ReportList *reports); void WM_file_tag_modified(void); -struct ID *WM_file_append_datablock(struct bContext *C, +struct ID *WM_file_append_datablock(struct Main *bmain, + struct Scene *scene, + struct ViewLayer *view_layer, + struct View3D *v3d, const char *filepath, const short id_code, const char *id_name); @@ -293,13 +297,17 @@ struct wmEventHandler_Dropbox *WM_event_add_dropbox_handler(ListBase *handlers, ListBase *dropboxes); /* mouse */ -void WM_event_add_mousemove(const struct bContext *C); +void WM_event_add_mousemove(wmWindow *win); #ifdef WITH_INPUT_NDOF /* 3D mouse */ void WM_ndof_deadzone_set(float deadzone); #endif /* notifiers */ +void WM_event_add_notifier_ex(struct wmWindowManager *wm, + const struct wmWindow *win, + unsigned int type, + void *reference); void WM_event_add_notifier(const struct bContext *C, unsigned int type, void *reference); void WM_main_add_notifier(unsigned int type, void *reference); void WM_main_remove_notifier_reference(const void *reference); @@ -619,9 +627,12 @@ int WM_gesture_straightline_modal(struct bContext *C, void WM_gesture_straightline_cancel(struct bContext *C, struct wmOperator *op); /* Gesture manager API */ -struct wmGesture *WM_gesture_new(struct bContext *C, const struct wmEvent *event, int type); -void WM_gesture_end(struct bContext *C, struct wmGesture *gesture); -void WM_gestures_remove(struct bContext *C); +struct wmGesture *WM_gesture_new(struct wmWindow *window, + const struct ARegion *ar, + const struct wmEvent *event, + int type); +void WM_gesture_end(struct wmWindow *win, struct wmGesture *gesture); +void WM_gestures_remove(struct wmWindow *win); void WM_gestures_free_all(struct wmWindow *win); bool WM_gesture_is_modal_first(const struct wmGesture *gesture); diff --git a/source/blender/windowmanager/WM_keymap.h b/source/blender/windowmanager/WM_keymap.h index 16c072afccf..1d8e6bb8772 100644 --- a/source/blender/windowmanager/WM_keymap.h +++ b/source/blender/windowmanager/WM_keymap.h @@ -74,11 +74,11 @@ wmKeyMap *WM_keymap_ensure(struct wmKeyConfig *keyconf, const char *idname, int spaceid, int regionid); -wmKeyMap *WM_keymap_find_all(const struct bContext *C, +wmKeyMap *WM_keymap_find_all(struct wmWindowManager *wm, const char *idname, int spaceid, int regionid); -wmKeyMap *WM_keymap_find_all_spaceid_or_empty(const struct bContext *C, +wmKeyMap *WM_keymap_find_all_spaceid_or_empty(struct wmWindowManager *wm, const char *idname, int spaceid, int regionid); @@ -148,9 +148,9 @@ void WM_modalkeymap_assign(struct wmKeyMap *km, const char *opname); /* Keymap Editor */ -void WM_keymap_restore_to_default(struct wmKeyMap *keymap, struct bContext *C); +void WM_keymap_restore_to_default(struct wmKeyMap *keymap, struct wmWindowManager *wm); void WM_keymap_item_properties_reset(struct wmKeyMapItem *kmi, struct IDProperty *properties); -void WM_keymap_item_restore_to_default(struct bContext *C, +void WM_keymap_item_restore_to_default(wmWindowManager *wm, struct wmKeyMap *keymap, struct wmKeyMapItem *kmi); int WM_keymap_item_map_type_get(const struct wmKeyMapItem *kmi); diff --git a/source/blender/windowmanager/WM_types.h b/source/blender/windowmanager/WM_types.h index 2038871844f..8c278319fd5 100644 --- a/source/blender/windowmanager/WM_types.h +++ b/source/blender/windowmanager/WM_types.h @@ -256,8 +256,7 @@ typedef enum eOperatorPropTags { typedef struct wmNotifier { struct wmNotifier *next, *prev; - struct wmWindowManager *wm; - struct wmWindow *window; + const struct wmWindow *window; unsigned int category, data, subtype, action; diff --git a/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c b/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c index 98669afdd08..1bf60c212c8 100644 --- a/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c +++ b/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c @@ -950,7 +950,7 @@ bool WM_gizmomap_select_all(bContext *C, wmGizmoMap *gzmap, const int action) } if (changed) { - WM_event_add_mousemove(C); + WM_event_add_mousemove(CTX_wm_window(C)); } return changed; @@ -1136,7 +1136,7 @@ void wm_gizmomap_modal_set( } } ED_region_tag_redraw_editor_overlays(CTX_wm_region(C)); - WM_event_add_mousemove(C); + WM_event_add_mousemove(win); } gzmap->gzmap_context.event_xy[0] = INT_MAX; diff --git a/source/blender/windowmanager/intern/wm.c b/source/blender/windowmanager/intern/wm.c index 3d8532fd40c..c0a653e5e2f 100644 --- a/source/blender/windowmanager/intern/wm.c +++ b/source/blender/windowmanager/intern/wm.c @@ -332,7 +332,7 @@ void wm_add_default(Main *bmain, bContext *C) WorkSpaceLayout *layout = BKE_workspace_layout_find_global(bmain, screen, &workspace); CTX_wm_manager_set(C, wm); - win = wm_window_new(C, NULL); + win = wm_window_new(bmain, wm, NULL); win->scene = CTX_data_scene(C); STRNCPY(win->view_layer_name, CTX_data_view_layer(C)->name); BKE_workspace_active_set(win->workspace_hook, workspace); diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index c1bfa904fad..6247cc5d5ea 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -190,11 +190,9 @@ void wm_event_init_from_window(wmWindow *win, wmEvent *event) /** \name Notifiers & Listeners * \{ */ -static bool wm_test_duplicate_notifier(wmWindowManager *wm, unsigned int type, void *reference) +static bool wm_test_duplicate_notifier(const wmWindowManager *wm, uint type, void *reference) { - wmNotifier *note; - - for (note = wm->queue.first; note; note = note->next) { + for (wmNotifier *note = wm->queue.first; note; note = note->next) { if ((note->category | note->data | note->subtype | note->action) == type && note->reference == reference) { return 1; @@ -204,10 +202,8 @@ static bool wm_test_duplicate_notifier(wmWindowManager *wm, unsigned int type, v return 0; } -/* XXX: in future, which notifiers to send to other windows? */ -void WM_event_add_notifier(const bContext *C, unsigned int type, void *reference) +void WM_event_add_notifier_ex(wmWindowManager *wm, const wmWindow *win, uint type, void *reference) { - wmWindowManager *wm = CTX_wm_manager(C); wmNotifier *note; if (wm_test_duplicate_notifier(wm, type, reference)) { @@ -216,10 +212,9 @@ void WM_event_add_notifier(const bContext *C, unsigned int type, void *reference note = MEM_callocN(sizeof(wmNotifier), "notifier"); - note->wm = wm; - BLI_addtail(¬e->wm->queue, note); + BLI_addtail(&wm->queue, note); - note->window = CTX_wm_window(C); + note->window = win; note->category = type & NOTE_CATEGORY; note->data = type & NOTE_DATA; @@ -229,6 +224,12 @@ void WM_event_add_notifier(const bContext *C, unsigned int type, void *reference note->reference = reference; } +/* XXX: in future, which notifiers to send to other windows? */ +void WM_event_add_notifier(const bContext *C, uint type, void *reference) +{ + WM_event_add_notifier_ex(CTX_wm_manager(C), CTX_wm_window(C), type, reference); +} + void WM_main_add_notifier(unsigned int type, void *reference) { Main *bmain = G_MAIN; @@ -241,8 +242,7 @@ void WM_main_add_notifier(unsigned int type, void *reference) note = MEM_callocN(sizeof(wmNotifier), "notifier"); - note->wm = wm; - BLI_addtail(¬e->wm->queue, note); + BLI_addtail(&wm->queue, note); note->category = type & NOTE_CATEGORY; note->data = type & NOTE_DATA; @@ -3856,11 +3856,9 @@ static void WM_event_remove_handler(ListBase *handlers, wmEventHandler *handler) } #endif -void WM_event_add_mousemove(const bContext *C) +void WM_event_add_mousemove(wmWindow *win) { - wmWindow *window = CTX_wm_window(C); - - window->addmousemove = 1; + win->addmousemove = 1; } /** \} */ diff --git a/source/blender/windowmanager/intern/wm_files.c b/source/blender/windowmanager/intern/wm_files.c index a12d325f6d5..160fbe95b25 100644 --- a/source/blender/windowmanager/intern/wm_files.c +++ b/source/blender/windowmanager/intern/wm_files.c @@ -1499,7 +1499,7 @@ void WM_autosave_init(wmWindowManager *wm) } } -void wm_autosave_timer(const bContext *C, wmWindowManager *wm, wmTimer *UNUSED(wt)) +void wm_autosave_timer(Main *bmain, wmWindowManager *wm, wmTimer *UNUSED(wt)) { char filepath[FILE_MAX]; @@ -1532,7 +1532,6 @@ void wm_autosave_timer(const bContext *C, wmWindowManager *wm, wmTimer *UNUSED(w } else { /* save as regular blend file */ - Main *bmain = CTX_data_main(C); int fileflags = G.fileflags & ~(G_FILE_COMPRESS | G_FILE_HISTORY); ED_editors_flush_edits(bmain); @@ -2009,7 +2008,8 @@ static void wm_free_operator_properties_callback(void *user_data) static int wm_homefile_read_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event)) { - if (U.uiflag & USER_SAVE_PROMPT && wm_file_or_image_is_modified(C)) { + if (U.uiflag & USER_SAVE_PROMPT && + wm_file_or_image_is_modified(CTX_data_main(C), CTX_wm_manager(C))) { wmGenericCallback *callback = MEM_callocN(sizeof(*callback), __func__); callback->exec = wm_homefile_read_after_dialog_callback; callback->user_data = IDP_CopyProperty(op->properties); @@ -2172,7 +2172,8 @@ static int wm_open_mainfile__discard_changes(bContext *C, wmOperator *op) set_next_operator_state(op, OPEN_MAINFILE_STATE_OPEN); } - if (U.uiflag & USER_SAVE_PROMPT && wm_file_or_image_is_modified(C)) { + if (U.uiflag & USER_SAVE_PROMPT && + wm_file_or_image_is_modified(CTX_data_main(C), CTX_wm_manager(C))) { wmGenericCallback *callback = MEM_callocN(sizeof(*callback), __func__); callback->exec = wm_open_mainfile_after_dialog_callback; callback->user_data = IDP_CopyProperty(op->properties); @@ -2986,15 +2987,16 @@ static void wm_block_file_close_discard(bContext *C, void *arg_block, void *arg_ static void wm_block_file_close_save(bContext *C, void *arg_block, void *arg_data) { + const Main *bmain = CTX_data_main(C); wmGenericCallback *callback = WM_generic_callback_steal((wmGenericCallback *)arg_data); bool execute_callback = true; wmWindow *win = CTX_wm_window(C); UI_popup_block_close(C, win, arg_block); - int modified_images_count = ED_image_save_all_modified_info(C, NULL); + int modified_images_count = ED_image_save_all_modified_info(CTX_data_main(C), NULL); if (modified_images_count > 0 && save_images_when_file_is_closed) { - if (ED_image_should_save_modified(C)) { + if (ED_image_should_save_modified(bmain)) { ReportList *reports = CTX_wm_reports(C); ED_image_save_all_modified(C, reports); WM_report_banner_show(); @@ -3004,7 +3006,6 @@ static void wm_block_file_close_save(bContext *C, void *arg_block, void *arg_dat } } - Main *bmain = CTX_data_main(C); bool file_has_been_saved_before = BKE_main_blendfile_path(bmain)[0] != '\0'; if (file_has_been_saved_before) { @@ -3098,7 +3099,7 @@ static uiBlock *block_create__close_file_dialog(struct bContext *C, struct ARegi /* Image Saving */ ReportList reports; BKE_reports_init(&reports, RPT_STORE); - uint modified_images_count = ED_image_save_all_modified_info(C, &reports); + uint modified_images_count = ED_image_save_all_modified_info(bmain, &reports); LISTBASE_FOREACH (Report *, report, &reports.list) { uiItemL_ex(layout, report->message, ICON_CANCEL, false, true); @@ -3189,7 +3190,7 @@ static void free_post_file_close_action(void *arg) void wm_close_file_dialog(bContext *C, wmGenericCallback *post_action) { - if (!UI_popup_block_name_exists(C, close_file_dialog_name)) { + if (!UI_popup_block_name_exists(CTX_wm_screen(C), close_file_dialog_name)) { UI_popup_block_invoke( C, block_create__close_file_dialog, post_action, free_post_file_close_action); } @@ -3198,10 +3199,9 @@ void wm_close_file_dialog(bContext *C, wmGenericCallback *post_action) } } -bool wm_file_or_image_is_modified(const bContext *C) +bool wm_file_or_image_is_modified(const Main *bmain, const wmWindowManager *wm) { - wmWindowManager *wm = CTX_wm_manager(C); - return !wm->file_saved || ED_image_should_save_modified(C); + return !wm->file_saved || ED_image_should_save_modified(bmain); } /** \} */ diff --git a/source/blender/windowmanager/intern/wm_files_link.c b/source/blender/windowmanager/intern/wm_files_link.c index c6d4c13c411..73c7a6209ee 100644 --- a/source/blender/windowmanager/intern/wm_files_link.c +++ b/source/blender/windowmanager/intern/wm_files_link.c @@ -623,13 +623,14 @@ void WM_OT_append(wmOperatorType *ot) * * \{ */ -ID *WM_file_append_datablock(bContext *C, +ID *WM_file_append_datablock(Main *bmain, + Scene *scene, + ViewLayer *view_layer, + View3D *v3d, const char *filepath, const short id_code, const char *id_name) { - Main *bmain = CTX_data_main(C); - /* Tag everything so we can make local only the new datablock. */ BKE_main_id_tag_all(bmain, LIB_TAG_PRE_EXISTING, true); @@ -641,9 +642,6 @@ ID *WM_file_append_datablock(bContext *C, BLI_BITMAP_ENABLE(item->libraries, 0); /* Link datablock. */ - Scene *scene = CTX_data_scene(C); - ViewLayer *view_layer = CTX_data_view_layer(C); - View3D *v3d = CTX_wm_view3d(C); wm_link_do(lapp_data, NULL, bmain, scene, view_layer, v3d); /* Get linked datablock and free working data. */ diff --git a/source/blender/windowmanager/intern/wm_gesture.c b/source/blender/windowmanager/intern/wm_gesture.c index 5943e947b41..bd9a6464332 100644 --- a/source/blender/windowmanager/intern/wm_gesture.c +++ b/source/blender/windowmanager/intern/wm_gesture.c @@ -51,11 +51,9 @@ #include "BIF_glutil.h" /* context checked on having screen, window and area */ -wmGesture *WM_gesture_new(bContext *C, const wmEvent *event, int type) +wmGesture *WM_gesture_new(wmWindow *window, const ARegion *ar, const wmEvent *event, int type) { wmGesture *gesture = MEM_callocN(sizeof(wmGesture), "new gesture"); - wmWindow *window = CTX_wm_window(C); - ARegion *ar = CTX_wm_region(C); BLI_addtail(&window->gesture, gesture); @@ -97,7 +95,7 @@ wmGesture *WM_gesture_new(bContext *C, const wmEvent *event, int type) return gesture; } -static void wm_gesture_end_with_window(wmWindow *win, wmGesture *gesture) +void WM_gesture_end(wmWindow *win, wmGesture *gesture) { if (win->tweak == gesture) { win->tweak = NULL; @@ -108,24 +106,17 @@ static void wm_gesture_end_with_window(wmWindow *win, wmGesture *gesture) MEM_freeN(gesture); } -void WM_gesture_end(bContext *C, wmGesture *gesture) -{ - wm_gesture_end_with_window(CTX_wm_window(C), gesture); -} - void WM_gestures_free_all(wmWindow *win) { while (win->gesture.first) { - wm_gesture_end_with_window(win, win->gesture.first); + WM_gesture_end(win, win->gesture.first); } } -void WM_gestures_remove(bContext *C) +void WM_gestures_remove(wmWindow *win) { - wmWindow *win = CTX_wm_window(C); - while (win->gesture.first) { - WM_gesture_end(C, win->gesture.first); + WM_gesture_end(win, win->gesture.first); } } @@ -531,9 +522,9 @@ void wm_gesture_draw(wmWindow *win) } } -void wm_gesture_tag_redraw(bContext *C) +void wm_gesture_tag_redraw(wmWindow *win) { - bScreen *screen = CTX_wm_screen(C); + bScreen *screen = WM_window_get_active_screen(win); if (screen) { screen->do_draw_gesture = true; diff --git a/source/blender/windowmanager/intern/wm_gesture_ops.c b/source/blender/windowmanager/intern/wm_gesture_ops.c index a5f32b4ff1f..c78f0d7376d 100644 --- a/source/blender/windowmanager/intern/wm_gesture_ops.c +++ b/source/blender/windowmanager/intern/wm_gesture_ops.c @@ -61,15 +61,16 @@ static void gesture_modal_end(bContext *C, wmOperator *op) { + wmWindow *win = CTX_wm_window(C); wmGesture *gesture = op->customdata; - WM_gesture_end(C, gesture); /* frees gesture itself, and unregisters from window */ + WM_gesture_end(win, gesture); /* frees gesture itself, and unregisters from window */ op->customdata = NULL; ED_area_tag_redraw(CTX_wm_area(C)); if (RNA_struct_find_property(op->ptr, "cursor")) { - WM_cursor_modal_restore(CTX_wm_window(C)); + WM_cursor_modal_restore(win); } } @@ -173,12 +174,15 @@ static bool gesture_box_apply(bContext *C, wmOperator *op) int WM_gesture_box_invoke(bContext *C, wmOperator *op, const wmEvent *event) { + wmWindow *win = CTX_wm_window(C); + const ARegion *ar = CTX_wm_region(C); const bool wait_for_input = !ISTWEAK(event->type) && RNA_boolean_get(op->ptr, "wait_for_input"); + if (wait_for_input) { - op->customdata = WM_gesture_new(C, event, WM_GESTURE_CROSS_RECT); + op->customdata = WM_gesture_new(win, ar, event, WM_GESTURE_CROSS_RECT); } else { - op->customdata = WM_gesture_new(C, event, WM_GESTURE_RECT); + op->customdata = WM_gesture_new(win, ar, event, WM_GESTURE_RECT); } { @@ -189,13 +193,14 @@ int WM_gesture_box_invoke(bContext *C, wmOperator *op, const wmEvent *event) /* add modal handler */ WM_event_add_modal_handler(C, op); - wm_gesture_tag_redraw(C); + wm_gesture_tag_redraw(win); return OPERATOR_RUNNING_MODAL; } int WM_gesture_box_modal(bContext *C, wmOperator *op, const wmEvent *event) { + wmWindow *win = CTX_wm_window(C); wmGesture *gesture = op->customdata; rcti *rect = gesture->customdata; @@ -210,14 +215,14 @@ int WM_gesture_box_modal(bContext *C, wmOperator *op, const wmEvent *event) } gesture_box_apply_rect(op); - wm_gesture_tag_redraw(C); + wm_gesture_tag_redraw(win); } else if (event->type == EVT_MODAL_MAP) { switch (event->val) { case GESTURE_MODAL_BEGIN: if (gesture->type == WM_GESTURE_CROSS_RECT && gesture->is_active == false) { gesture->is_active = true; - wm_gesture_tag_redraw(C); + wm_gesture_tag_redraw(win); } break; case GESTURE_MODAL_SELECT: @@ -276,9 +281,10 @@ static void gesture_circle_apply(bContext *C, wmOperator *op); int WM_gesture_circle_invoke(bContext *C, wmOperator *op, const wmEvent *event) { + wmWindow *win = CTX_wm_window(C); const bool wait_for_input = !ISTWEAK(event->type) && RNA_boolean_get(op->ptr, "wait_for_input"); - op->customdata = WM_gesture_new(C, event, WM_GESTURE_CIRCLE); + op->customdata = WM_gesture_new(win, CTX_wm_region(C), event, WM_GESTURE_CIRCLE); wmGesture *gesture = op->customdata; rcti *rect = gesture->customdata; @@ -297,7 +303,7 @@ int WM_gesture_circle_invoke(bContext *C, wmOperator *op, const wmEvent *event) /* add modal handler */ WM_event_add_modal_handler(C, op); - wm_gesture_tag_redraw(C); + wm_gesture_tag_redraw(win); return OPERATOR_RUNNING_MODAL; } @@ -332,6 +338,7 @@ static void gesture_circle_apply(bContext *C, wmOperator *op) int WM_gesture_circle_modal(bContext *C, wmOperator *op, const wmEvent *event) { + wmWindow *win = CTX_wm_window(C); wmGesture *gesture = op->customdata; rcti *rect = gesture->customdata; @@ -340,7 +347,7 @@ int WM_gesture_circle_modal(bContext *C, wmOperator *op, const wmEvent *event) rect->xmin = event->x - gesture->winrct.xmin; rect->ymin = event->y - gesture->winrct.ymin; - wm_gesture_tag_redraw(C); + wm_gesture_tag_redraw(win); if (gesture->is_active) { gesture_circle_apply(C, op); @@ -392,7 +399,7 @@ int WM_gesture_circle_modal(bContext *C, wmOperator *op, const wmEvent *event) /* apply first click */ gesture->is_active = true; gesture_circle_apply(C, op); - wm_gesture_tag_redraw(C); + wm_gesture_tag_redraw(win); } break; } @@ -407,7 +414,7 @@ int WM_gesture_circle_modal(bContext *C, wmOperator *op, const wmEvent *event) } if (is_circle_size) { - wm_gesture_tag_redraw(C); + wm_gesture_tag_redraw(win); /* So next use remembers last seen size, even if we didn't apply it. */ RNA_int_set(op->ptr, "radius", rect->xmax); @@ -527,7 +534,7 @@ static void gesture_tweak_modal(bContext *C, const wmEvent *event) if (gesture_end) { /* Frees gesture itself, and unregisters from window. */ - WM_gesture_end(C, gesture); + WM_gesture_end(window, gesture); /* This isn't very nice but needed to redraw gizmos which are hidden while tweaking, * See #WM_GIZMOGROUPTYPE_DELAY_REFRESH_FOR_TWEAK for details. */ @@ -546,10 +553,12 @@ void wm_tweakevent_test(bContext *C, const wmEvent *event, int action) wmWindow *win = CTX_wm_window(C); if (win->tweak == NULL) { - if (CTX_wm_region(C)) { + const ARegion *ar = CTX_wm_region(C); + + if (ar) { if (event->val == KM_PRESS) { if (ELEM(event->type, LEFTMOUSE, MIDDLEMOUSE, RIGHTMOUSE)) { - win->tweak = WM_gesture_new(C, event, WM_GESTURE_TWEAK); + win->tweak = WM_gesture_new(win, ar, event, WM_GESTURE_TWEAK); } } } @@ -557,7 +566,7 @@ void wm_tweakevent_test(bContext *C, const wmEvent *event, int action) else { /* no tweaks if event was handled */ if ((action & WM_HANDLER_BREAK)) { - WM_gesture_end(C, win->tweak); + WM_gesture_end(win, win->tweak); } else { gesture_tweak_modal(C, event); @@ -573,17 +582,18 @@ void wm_tweakevent_test(bContext *C, const wmEvent *event, int action) int WM_gesture_lasso_invoke(bContext *C, wmOperator *op, const wmEvent *event) { + wmWindow *win = CTX_wm_window(C); PropertyRNA *prop; - op->customdata = WM_gesture_new(C, event, WM_GESTURE_LASSO); + op->customdata = WM_gesture_new(win, CTX_wm_region(C), event, WM_GESTURE_LASSO); /* add modal handler */ WM_event_add_modal_handler(C, op); - wm_gesture_tag_redraw(C); + wm_gesture_tag_redraw(win); if ((prop = RNA_struct_find_property(op->ptr, "cursor"))) { - WM_cursor_modal_set(CTX_wm_window(C), RNA_property_int_get(op->ptr, prop)); + WM_cursor_modal_set(win, RNA_property_int_get(op->ptr, prop)); } return OPERATOR_RUNNING_MODAL; @@ -591,17 +601,18 @@ int WM_gesture_lasso_invoke(bContext *C, wmOperator *op, const wmEvent *event) int WM_gesture_lines_invoke(bContext *C, wmOperator *op, const wmEvent *event) { + wmWindow *win = CTX_wm_window(C); PropertyRNA *prop; - op->customdata = WM_gesture_new(C, event, WM_GESTURE_LINES); + op->customdata = WM_gesture_new(win, CTX_wm_region(C), event, WM_GESTURE_LINES); /* add modal handler */ WM_event_add_modal_handler(C, op); - wm_gesture_tag_redraw(C); + wm_gesture_tag_redraw(win); if ((prop = RNA_struct_find_property(op->ptr, "cursor"))) { - WM_cursor_modal_set(CTX_wm_window(C), RNA_property_int_get(op->ptr, prop)); + WM_cursor_modal_set(win, RNA_property_int_get(op->ptr, prop)); } return OPERATOR_RUNNING_MODAL; @@ -641,7 +652,7 @@ int WM_gesture_lasso_modal(bContext *C, wmOperator *op, const wmEvent *event) case MOUSEMOVE: case INBETWEEN_MOUSEMOVE: - wm_gesture_tag_redraw(C); + wm_gesture_tag_redraw(CTX_wm_window(C)); if (gesture->points == gesture->points_alloc) { gesture->points_alloc *= 2; @@ -806,9 +817,10 @@ static bool gesture_straightline_apply(bContext *C, wmOperator *op) int WM_gesture_straightline_invoke(bContext *C, wmOperator *op, const wmEvent *event) { + wmWindow *win = CTX_wm_window(C); PropertyRNA *prop; - op->customdata = WM_gesture_new(C, event, WM_GESTURE_STRAIGHTLINE); + op->customdata = WM_gesture_new(win, CTX_wm_region(C), event, WM_GESTURE_STRAIGHTLINE); if (ISTWEAK(event->type)) { wmGesture *gesture = op->customdata; @@ -818,10 +830,10 @@ int WM_gesture_straightline_invoke(bContext *C, wmOperator *op, const wmEvent *e /* add modal handler */ WM_event_add_modal_handler(C, op); - wm_gesture_tag_redraw(C); + wm_gesture_tag_redraw(win); if ((prop = RNA_struct_find_property(op->ptr, "cursor"))) { - WM_cursor_modal_set(CTX_wm_window(C), RNA_property_int_get(op->ptr, prop)); + WM_cursor_modal_set(win, RNA_property_int_get(op->ptr, prop)); } return OPERATOR_RUNNING_MODAL; @@ -830,6 +842,7 @@ int WM_gesture_straightline_invoke(bContext *C, wmOperator *op, const wmEvent *e int WM_gesture_straightline_modal(bContext *C, wmOperator *op, const wmEvent *event) { wmGesture *gesture = op->customdata; + wmWindow *win = CTX_wm_window(C); rcti *rect = gesture->customdata; if (event->type == MOUSEMOVE) { @@ -843,14 +856,14 @@ int WM_gesture_straightline_modal(bContext *C, wmOperator *op, const wmEvent *ev gesture_straightline_apply(C, op); } - wm_gesture_tag_redraw(C); + wm_gesture_tag_redraw(win); } else if (event->type == EVT_MODAL_MAP) { switch (event->val) { case GESTURE_MODAL_BEGIN: if (gesture->is_active == false) { gesture->is_active = true; - wm_gesture_tag_redraw(C); + wm_gesture_tag_redraw(win); } break; case GESTURE_MODAL_SELECT: diff --git a/source/blender/windowmanager/intern/wm_init_exit.c b/source/blender/windowmanager/intern/wm_init_exit.c index b775b16c6df..7a05ef4b849 100644 --- a/source/blender/windowmanager/intern/wm_init_exit.c +++ b/source/blender/windowmanager/intern/wm_init_exit.c @@ -150,11 +150,9 @@ static void wm_init_reports(bContext *C) BKE_reports_init(reports, RPT_STORE); } -static void wm_free_reports(bContext *C) +static void wm_free_reports(wmWindowManager *wm) { - ReportList *reports = CTX_wm_reports(C); - - BKE_reports_clear(reports); + BKE_reports_clear(&wm->reports); } static bool wm_start_with_console = false; @@ -470,7 +468,7 @@ void wm_exit_schedule_delayed(const bContext *C) /* Use modal UI handler for now. * Could add separate WM handlers or so, but probably not worth it. */ WM_event_add_ui_handler(C, &win->modalhandlers, wm_exit_handler, NULL, NULL, 0); - WM_event_add_mousemove(C); /* ensure handler actually gets called */ + WM_event_add_mousemove(win); /* ensure handler actually gets called */ } /** @@ -558,9 +556,9 @@ void WM_exit_ex(bContext *C, const bool do_python) ED_preview_free_dbase(); /* frees a Main dbase, before BKE_blender_free! */ - if (C && wm) { + if (wm) { /* Before BKE_blender_free! - since the ListBases get freed there. */ - wm_free_reports(C); + wm_free_reports(wm); } BKE_sequencer_free_clipboard(); /* sequencer.c */ diff --git a/source/blender/windowmanager/intern/wm_jobs.c b/source/blender/windowmanager/intern/wm_jobs.c index a417d80a9a9..1cc9c82ec60 100644 --- a/source/blender/windowmanager/intern/wm_jobs.c +++ b/source/blender/windowmanager/intern/wm_jobs.c @@ -624,7 +624,7 @@ void wm_jobs_timer_ended(wmWindowManager *wm, wmTimer *wt) } /* hardcoded to event TIMERJOBS */ -void wm_jobs_timer(const bContext *C, wmWindowManager *wm, wmTimer *wt) +void wm_jobs_timer(wmWindowManager *wm, wmTimer *wt) { wmJob *wm_job, *wm_jobnext; @@ -645,11 +645,11 @@ void wm_jobs_timer(const bContext *C, wmWindowManager *wm, wmTimer *wt) wm_job->update(wm_job->run_customdata); } if (wm_job->note) { - WM_event_add_notifier(C, wm_job->note, NULL); + WM_event_add_notifier_ex(wm, wm_job->win, wm_job->note, NULL); } if (wm_job->flag & WM_JOB_PROGRESS) { - WM_event_add_notifier(C, NC_WM | ND_JOB, NULL); + WM_event_add_notifier_ex(wm, wm_job->win, NC_WM | ND_JOB, NULL); } wm_job->do_update = false; } @@ -680,10 +680,10 @@ void wm_jobs_timer(const bContext *C, wmWindowManager *wm, wmTimer *wt) WM_job_main_thread_lock_acquire(wm_job); if (wm_job->endnote) { - WM_event_add_notifier(C, wm_job->endnote, NULL); + WM_event_add_notifier_ex(wm, wm_job->win, wm_job->endnote, NULL); } - WM_event_add_notifier(C, NC_WM | ND_JOB, NULL); + WM_event_add_notifier_ex(wm, wm_job->win, NC_WM | ND_JOB, NULL); /* new job added for wm_job? */ if (wm_job->customdata) { diff --git a/source/blender/windowmanager/intern/wm_keymap.c b/source/blender/windowmanager/intern/wm_keymap.c index bbe685b56cb..9d587ff9e9b 100644 --- a/source/blender/windowmanager/intern/wm_keymap.c +++ b/source/blender/windowmanager/intern/wm_keymap.c @@ -889,20 +889,16 @@ wmKeyMap *WM_keymap_ensure(wmKeyConfig *keyconf, const char *idname, int spaceid return km; } -wmKeyMap *WM_keymap_find_all(const bContext *C, const char *idname, int spaceid, int regionid) +wmKeyMap *WM_keymap_find_all(wmWindowManager *wm, const char *idname, int spaceid, int regionid) { - wmWindowManager *wm = CTX_wm_manager(C); - return WM_keymap_list_find(&wm->userconf->keymaps, idname, spaceid, regionid); } -wmKeyMap *WM_keymap_find_all_spaceid_or_empty(const bContext *C, +wmKeyMap *WM_keymap_find_all_spaceid_or_empty(wmWindowManager *wm, const char *idname, int spaceid, int regionid) { - wmWindowManager *wm = CTX_wm_manager(C); - return WM_keymap_list_find_spaceid_or_empty(&wm->userconf->keymaps, idname, spaceid, regionid); } @@ -1965,9 +1961,8 @@ wmKeyMap *WM_keymap_active(wmWindowManager *wm, wmKeyMap *keymap) * In the keymap editor the user key configuration is edited. * \{ */ -void WM_keymap_item_restore_to_default(bContext *C, wmKeyMap *keymap, wmKeyMapItem *kmi) +void WM_keymap_item_restore_to_default(wmWindowManager *wm, wmKeyMap *keymap, wmKeyMapItem *kmi) { - wmWindowManager *wm = CTX_wm_manager(C); wmKeyMap *defaultmap, *addonmap; wmKeyMapItem *orig; @@ -2026,13 +2021,10 @@ void WM_keymap_item_restore_to_default(bContext *C, wmKeyMap *keymap, wmKeyMapIt } } -void WM_keymap_restore_to_default(wmKeyMap *keymap, bContext *C) +void WM_keymap_restore_to_default(wmKeyMap *keymap, wmWindowManager *wm) { - wmWindowManager *wm = CTX_wm_manager(C); - wmKeyMap *usermap; - /* remove keymap from U.user_keymaps and update */ - usermap = WM_keymap_list_find( + wmKeyMap *usermap = WM_keymap_list_find( &U.user_keymaps, keymap->idname, keymap->spaceid, keymap->regionid); if (usermap) { diff --git a/source/blender/windowmanager/intern/wm_keymap_utils.c b/source/blender/windowmanager/intern/wm_keymap_utils.c index 5e6b55a508e..6e494280820 100644 --- a/source/blender/windowmanager/intern/wm_keymap_utils.c +++ b/source/blender/windowmanager/intern/wm_keymap_utils.c @@ -194,7 +194,7 @@ wmKeyMap *WM_keymap_guess_from_context(const bContext *C) return NULL; } - wmKeyMap *km = WM_keymap_find_all(C, km_id, 0, 0); + wmKeyMap *km = WM_keymap_find_all(CTX_wm_manager(C), km_id, 0, 0); BLI_assert(km); return km; } @@ -218,6 +218,7 @@ wmKeyMap *WM_keymap_guess_opname(const bContext *C, const char *opname) */ wmKeyMap *km = NULL; + wmWindowManager *wm = CTX_wm_manager(C); SpaceLink *sl = CTX_wm_space_data(C); /* Window */ @@ -227,113 +228,113 @@ wmKeyMap *WM_keymap_guess_opname(const bContext *C, const char *opname) } if (km == NULL) { - km = WM_keymap_find_all(C, "Window", 0, 0); + km = WM_keymap_find_all(wm, "Window", 0, 0); } } /* Screen & Render */ else if (STRPREFIX(opname, "SCREEN_OT") || STRPREFIX(opname, "RENDER_OT") || STRPREFIX(opname, "SOUND_OT") || STRPREFIX(opname, "SCENE_OT")) { - km = WM_keymap_find_all(C, "Screen", 0, 0); + km = WM_keymap_find_all(wm, "Screen", 0, 0); } /* Grease Pencil */ else if (STRPREFIX(opname, "GPENCIL_OT")) { - km = WM_keymap_find_all(C, "Grease Pencil", 0, 0); + km = WM_keymap_find_all(wm, "Grease Pencil", 0, 0); } /* Markers */ else if (STRPREFIX(opname, "MARKER_OT")) { - km = WM_keymap_find_all(C, "Markers", 0, 0); + km = WM_keymap_find_all(wm, "Markers", 0, 0); } /* Import/Export*/ else if (STRPREFIX(opname, "IMPORT_") || STRPREFIX(opname, "EXPORT_")) { - km = WM_keymap_find_all(C, "Window", 0, 0); + km = WM_keymap_find_all(wm, "Window", 0, 0); } /* 3D View */ else if (STRPREFIX(opname, "VIEW3D_OT")) { - km = WM_keymap_find_all(C, "3D View", sl->spacetype, 0); + km = WM_keymap_find_all(wm, "3D View", sl->spacetype, 0); } else if (STRPREFIX(opname, "OBJECT_OT")) { /* exception, this needs to work outside object mode too */ if (STRPREFIX(opname, "OBJECT_OT_mode_set")) { - km = WM_keymap_find_all(C, "Object Non-modal", 0, 0); + km = WM_keymap_find_all(wm, "Object Non-modal", 0, 0); } else { - km = WM_keymap_find_all(C, "Object Mode", 0, 0); + km = WM_keymap_find_all(wm, "Object Mode", 0, 0); } } /* Object mode related */ else if (STRPREFIX(opname, "GROUP_OT") || STRPREFIX(opname, "MATERIAL_OT") || STRPREFIX(opname, "PTCACHE_OT") || STRPREFIX(opname, "RIGIDBODY_OT")) { - km = WM_keymap_find_all(C, "Object Mode", 0, 0); + km = WM_keymap_find_all(wm, "Object Mode", 0, 0); } /* Editing Modes */ else if (STRPREFIX(opname, "MESH_OT")) { - km = WM_keymap_find_all(C, "Mesh", 0, 0); + km = WM_keymap_find_all(wm, "Mesh", 0, 0); /* some mesh operators are active in object mode too, like add-prim */ if (km && !WM_keymap_poll((bContext *)C, km)) { - km = WM_keymap_find_all(C, "Object Mode", 0, 0); + km = WM_keymap_find_all(wm, "Object Mode", 0, 0); } } else if (STRPREFIX(opname, "CURVE_OT") || STRPREFIX(opname, "SURFACE_OT")) { - km = WM_keymap_find_all(C, "Curve", 0, 0); + km = WM_keymap_find_all(wm, "Curve", 0, 0); /* some curve operators are active in object mode too, like add-prim */ if (km && !WM_keymap_poll((bContext *)C, km)) { - km = WM_keymap_find_all(C, "Object Mode", 0, 0); + km = WM_keymap_find_all(wm, "Object Mode", 0, 0); } } else if (STRPREFIX(opname, "ARMATURE_OT") || STRPREFIX(opname, "SKETCH_OT")) { - km = WM_keymap_find_all(C, "Armature", 0, 0); + km = WM_keymap_find_all(wm, "Armature", 0, 0); } else if (STRPREFIX(opname, "POSE_OT") || STRPREFIX(opname, "POSELIB_OT")) { - km = WM_keymap_find_all(C, "Pose", 0, 0); + km = WM_keymap_find_all(wm, "Pose", 0, 0); } else if (STRPREFIX(opname, "SCULPT_OT")) { switch (CTX_data_mode_enum(C)) { case CTX_MODE_SCULPT: - km = WM_keymap_find_all(C, "Sculpt", 0, 0); + km = WM_keymap_find_all(wm, "Sculpt", 0, 0); break; default: break; } } else if (STRPREFIX(opname, "MBALL_OT")) { - km = WM_keymap_find_all(C, "Metaball", 0, 0); + km = WM_keymap_find_all(wm, "Metaball", 0, 0); /* some mball operators are active in object mode too, like add-prim */ if (km && !WM_keymap_poll((bContext *)C, km)) { - km = WM_keymap_find_all(C, "Object Mode", 0, 0); + km = WM_keymap_find_all(wm, "Object Mode", 0, 0); } } else if (STRPREFIX(opname, "LATTICE_OT")) { - km = WM_keymap_find_all(C, "Lattice", 0, 0); + km = WM_keymap_find_all(wm, "Lattice", 0, 0); } else if (STRPREFIX(opname, "PARTICLE_OT")) { - km = WM_keymap_find_all(C, "Particle", 0, 0); + km = WM_keymap_find_all(wm, "Particle", 0, 0); } else if (STRPREFIX(opname, "FONT_OT")) { - km = WM_keymap_find_all(C, "Font", 0, 0); + km = WM_keymap_find_all(wm, "Font", 0, 0); } /* Paint Face Mask */ else if (STRPREFIX(opname, "PAINT_OT_face_select")) { - km = WM_keymap_find_all(C, "Paint Face Mask (Weight, Vertex, Texture)", 0, 0); + km = WM_keymap_find_all(wm, "Paint Face Mask (Weight, Vertex, Texture)", 0, 0); } else if (STRPREFIX(opname, "PAINT_OT")) { /* check for relevant mode */ switch (CTX_data_mode_enum(C)) { case CTX_MODE_PAINT_WEIGHT: - km = WM_keymap_find_all(C, "Weight Paint", 0, 0); + km = WM_keymap_find_all(wm, "Weight Paint", 0, 0); break; case CTX_MODE_PAINT_VERTEX: - km = WM_keymap_find_all(C, "Vertex Paint", 0, 0); + km = WM_keymap_find_all(wm, "Vertex Paint", 0, 0); break; case CTX_MODE_PAINT_TEXTURE: - km = WM_keymap_find_all(C, "Image Paint", 0, 0); + km = WM_keymap_find_all(wm, "Image Paint", 0, 0); break; case CTX_MODE_SCULPT: - km = WM_keymap_find_all(C, "Sculpt", 0, 0); + km = WM_keymap_find_all(wm, "Sculpt", 0, 0); break; default: break; @@ -341,109 +342,109 @@ wmKeyMap *WM_keymap_guess_opname(const bContext *C, const char *opname) } /* Image Editor */ else if (STRPREFIX(opname, "IMAGE_OT")) { - km = WM_keymap_find_all(C, "Image", sl->spacetype, 0); + km = WM_keymap_find_all(wm, "Image", sl->spacetype, 0); } /* Clip Editor */ else if (STRPREFIX(opname, "CLIP_OT")) { - km = WM_keymap_find_all(C, "Clip", sl->spacetype, 0); + km = WM_keymap_find_all(wm, "Clip", sl->spacetype, 0); } else if (STRPREFIX(opname, "MASK_OT")) { - km = WM_keymap_find_all(C, "Mask Editing", 0, 0); + km = WM_keymap_find_all(wm, "Mask Editing", 0, 0); } /* UV Editor */ else if (STRPREFIX(opname, "UV_OT")) { /* Hack to allow using UV unwrapping ops from 3DView/editmode. * Mesh keymap is probably not ideal, but best place I could find to put those. */ if (sl->spacetype == SPACE_VIEW3D) { - km = WM_keymap_find_all(C, "Mesh", 0, 0); + km = WM_keymap_find_all(wm, "Mesh", 0, 0); if (km && !WM_keymap_poll((bContext *)C, km)) { km = NULL; } } if (!km) { - km = WM_keymap_find_all(C, "UV Editor", 0, 0); + km = WM_keymap_find_all(wm, "UV Editor", 0, 0); } } /* Node Editor */ else if (STRPREFIX(opname, "NODE_OT")) { - km = WM_keymap_find_all(C, "Node Editor", sl->spacetype, 0); + km = WM_keymap_find_all(wm, "Node Editor", sl->spacetype, 0); } /* Animation Editor Channels */ else if (STRPREFIX(opname, "ANIM_OT_channels")) { - km = WM_keymap_find_all(C, "Animation Channels", 0, 0); + km = WM_keymap_find_all(wm, "Animation Channels", 0, 0); } /* Animation Generic - after channels */ else if (STRPREFIX(opname, "ANIM_OT")) { - km = WM_keymap_find_all(C, "Animation", 0, 0); + km = WM_keymap_find_all(wm, "Animation", 0, 0); } /* Graph Editor */ else if (STRPREFIX(opname, "GRAPH_OT")) { - km = WM_keymap_find_all(C, "Graph Editor", sl->spacetype, 0); + km = WM_keymap_find_all(wm, "Graph Editor", sl->spacetype, 0); } /* Dopesheet Editor */ else if (STRPREFIX(opname, "ACTION_OT")) { - km = WM_keymap_find_all(C, "Dopesheet", sl->spacetype, 0); + km = WM_keymap_find_all(wm, "Dopesheet", sl->spacetype, 0); } /* NLA Editor */ else if (STRPREFIX(opname, "NLA_OT")) { - km = WM_keymap_find_all(C, "NLA Editor", sl->spacetype, 0); + km = WM_keymap_find_all(wm, "NLA Editor", sl->spacetype, 0); } /* Script */ else if (STRPREFIX(opname, "SCRIPT_OT")) { - km = WM_keymap_find_all(C, "Script", sl->spacetype, 0); + km = WM_keymap_find_all(wm, "Script", sl->spacetype, 0); } /* Text */ else if (STRPREFIX(opname, "TEXT_OT")) { - km = WM_keymap_find_all(C, "Text", sl->spacetype, 0); + km = WM_keymap_find_all(wm, "Text", sl->spacetype, 0); } /* Sequencer */ else if (STRPREFIX(opname, "SEQUENCER_OT")) { - km = WM_keymap_find_all(C, "Sequencer", sl->spacetype, 0); + km = WM_keymap_find_all(wm, "Sequencer", sl->spacetype, 0); } /* Console */ else if (STRPREFIX(opname, "CONSOLE_OT")) { - km = WM_keymap_find_all(C, "Console", sl->spacetype, 0); + km = WM_keymap_find_all(wm, "Console", sl->spacetype, 0); } /* Console */ else if (STRPREFIX(opname, "INFO_OT")) { - km = WM_keymap_find_all(C, "Info", sl->spacetype, 0); + km = WM_keymap_find_all(wm, "Info", sl->spacetype, 0); } /* File browser */ else if (STRPREFIX(opname, "FILE_OT")) { - km = WM_keymap_find_all(C, "File Browser", sl->spacetype, 0); + km = WM_keymap_find_all(wm, "File Browser", sl->spacetype, 0); } /* Logic Editor */ else if (STRPREFIX(opname, "LOGIC_OT")) { - km = WM_keymap_find_all(C, "Logic Editor", sl->spacetype, 0); + km = WM_keymap_find_all(wm, "Logic Editor", sl->spacetype, 0); } /* Outliner */ else if (STRPREFIX(opname, "OUTLINER_OT")) { - km = WM_keymap_find_all(C, "Outliner", sl->spacetype, 0); + km = WM_keymap_find_all(wm, "Outliner", sl->spacetype, 0); } /* Transform */ else if (STRPREFIX(opname, "TRANSFORM_OT")) { /* check for relevant editor */ switch (sl->spacetype) { case SPACE_VIEW3D: - km = WM_keymap_find_all(C, "3D View", sl->spacetype, 0); + km = WM_keymap_find_all(wm, "3D View", sl->spacetype, 0); break; case SPACE_GRAPH: - km = WM_keymap_find_all(C, "Graph Editor", sl->spacetype, 0); + km = WM_keymap_find_all(wm, "Graph Editor", sl->spacetype, 0); break; case SPACE_ACTION: - km = WM_keymap_find_all(C, "Dopesheet", sl->spacetype, 0); + km = WM_keymap_find_all(wm, "Dopesheet", sl->spacetype, 0); break; case SPACE_NLA: - km = WM_keymap_find_all(C, "NLA Editor", sl->spacetype, 0); + km = WM_keymap_find_all(wm, "NLA Editor", sl->spacetype, 0); break; case SPACE_IMAGE: - km = WM_keymap_find_all(C, "UV Editor", 0, 0); + km = WM_keymap_find_all(wm, "UV Editor", 0, 0); break; case SPACE_NODE: - km = WM_keymap_find_all(C, "Node Editor", sl->spacetype, 0); + km = WM_keymap_find_all(wm, "Node Editor", sl->spacetype, 0); break; case SPACE_SEQ: - km = WM_keymap_find_all(C, "Sequencer", sl->spacetype, 0); + km = WM_keymap_find_all(wm, "Sequencer", sl->spacetype, 0); break; } } diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c index 148195df372..57612964295 100644 --- a/source/blender/windowmanager/intern/wm_window.c +++ b/source/blender/windowmanager/intern/wm_window.c @@ -283,10 +283,8 @@ static int find_free_winid(wmWindowManager *wm) } /* don't change context itself */ -wmWindow *wm_window_new(bContext *C, wmWindow *parent) +wmWindow *wm_window_new(const Main *bmain, wmWindowManager *wm, wmWindow *parent) { - Main *bmain = CTX_data_main(C); - wmWindowManager *wm = CTX_wm_manager(C); wmWindow *win = MEM_callocN(sizeof(wmWindow), "window"); BLI_addtail(&wm->windows, win); @@ -300,14 +298,14 @@ wmWindow *wm_window_new(bContext *C, wmWindow *parent) } /* part of wm_window.c api */ -wmWindow *wm_window_copy(bContext *C, +wmWindow *wm_window_copy(Main *bmain, + wmWindowManager *wm, wmWindow *win_src, const bool duplicate_layout, const bool child) { - Main *bmain = CTX_data_main(C); wmWindow *win_parent = (child) ? win_src : win_src->parent; - wmWindow *win_dst = wm_window_new(C, win_parent); + wmWindow *win_dst = wm_window_new(bmain, wm, win_parent); WorkSpace *workspace = WM_window_get_active_workspace(win_src); WorkSpaceLayout *layout_old = WM_window_get_active_layout(win_src); WorkSpaceLayout *layout_new; @@ -339,15 +337,16 @@ wmWindow *wm_window_copy_test(bContext *C, const bool duplicate_layout, const bool child) { + Main *bmain = CTX_data_main(C); wmWindowManager *wm = CTX_wm_manager(C); wmWindow *win_dst; - win_dst = wm_window_copy(C, win_src, duplicate_layout, child); + win_dst = wm_window_copy(bmain, wm, win_src, duplicate_layout, child); WM_check(C); if (win_dst->ghostwin) { - WM_event_add_notifier(C, NC_WINDOW | NA_ADDED, NULL); + WM_event_add_notifier_ex(wm, CTX_wm_window(C), NC_WINDOW | NA_ADDED, NULL); return win_dst; } else { @@ -394,7 +393,7 @@ void wm_quit_with_optional_confirmation_prompt(bContext *C, wmWindow *win) CTX_wm_window_set(C, win); if (U.uiflag & USER_SAVE_PROMPT) { - if (wm_file_or_image_is_modified(C) && !G.background) { + if (wm_file_or_image_is_modified(CTX_data_main(C), CTX_wm_manager(C)) && !G.background) { wm_window_raise(win); wm_confirm_quit(C); } @@ -809,8 +808,9 @@ void wm_window_ghostwindows_remove_invalid(bContext *C, wmWindowManager *wm) */ wmWindow *WM_window_open(bContext *C, const rcti *rect) { + wmWindowManager *wm = CTX_wm_manager(C); wmWindow *win_prev = CTX_wm_window(C); - wmWindow *win = wm_window_new(C, win_prev); + wmWindow *win = wm_window_new(CTX_data_main(C), wm, win_prev); win->posx = rect->xmin; win->posy = rect->ymin; @@ -823,7 +823,7 @@ wmWindow *WM_window_open(bContext *C, const rcti *rect) return win; } else { - wm_window_close(C, CTX_wm_manager(C), win); + wm_window_close(C, wm, win); CTX_wm_window_set(C, win_prev); return NULL; } @@ -881,7 +881,7 @@ wmWindow *WM_window_open_temp(bContext *C, /* add new window? */ if (win == NULL) { - win = wm_window_new(C, win_prev); + win = wm_window_new(bmain, wm, win_prev); win->posx = rect.xmin; win->posy = rect.ymin; @@ -1573,6 +1573,7 @@ static int ghost_event_proc(GHOST_EventHandle evt, GHOST_TUserDataPtr C_void_ptr */ static int wm_window_timer(const bContext *C) { + Main *bmain = CTX_data_main(C); wmWindowManager *wm = CTX_wm_manager(C); wmTimer *wt, *wtnext; wmWindow *win; @@ -1591,10 +1592,10 @@ static int wm_window_timer(const bContext *C) wt->ntime = wt->stime + wt->timestep * ceil(wt->duration / wt->timestep); if (wt->event_type == TIMERJOBS) { - wm_jobs_timer(C, wm, wt); + wm_jobs_timer(wm, wt); } else if (wt->event_type == TIMERAUTOSAVE) { - wm_autosave_timer(C, wm, wt); + wm_autosave_timer(bmain, wm, wt); } else if (wt->event_type == TIMERNOTIFIER) { WM_main_add_notifier(POINTER_AS_UINT(wt->customdata), NULL); diff --git a/source/blender/windowmanager/wm.h b/source/blender/windowmanager/wm.h index 00d9a8a2fab..1de8ec997a8 100644 --- a/source/blender/windowmanager/wm.h +++ b/source/blender/windowmanager/wm.h @@ -62,17 +62,17 @@ void wm_operatortypes_register(void); /* wm_gesture.c */ void wm_gesture_draw(struct wmWindow *win); int wm_gesture_evaluate(wmGesture *gesture, const struct wmEvent *event); -void wm_gesture_tag_redraw(bContext *C); +void wm_gesture_tag_redraw(struct wmWindow *win); /* wm_gesture_ops.c */ void wm_tweakevent_test(bContext *C, const wmEvent *event, int action); /* wm_jobs.c */ -void wm_jobs_timer(const bContext *C, wmWindowManager *wm, wmTimer *wt); +void wm_jobs_timer(wmWindowManager *wm, wmTimer *wt); void wm_jobs_timer_ended(wmWindowManager *wm, wmTimer *wt); /* wm_files.c */ -void wm_autosave_timer(const bContext *C, wmWindowManager *wm, wmTimer *wt); +void wm_autosave_timer(struct Main *bmain, wmWindowManager *wm, wmTimer *wt); void wm_autosave_timer_ended(wmWindowManager *wm); void wm_autosave_delete(void); void wm_autosave_read(bContext *C, struct ReportList *reports); diff --git a/source/blender/windowmanager/wm_files.h b/source/blender/windowmanager/wm_files.h index 0aa4357a8f4..e081742b904 100644 --- a/source/blender/windowmanager/wm_files.h +++ b/source/blender/windowmanager/wm_files.h @@ -42,7 +42,7 @@ void wm_homefile_read(struct bContext *C, void wm_file_read_report(bContext *C, struct Main *bmain); void wm_close_file_dialog(bContext *C, struct wmGenericCallback *post_action); -bool wm_file_or_image_is_modified(const struct bContext *C); +bool wm_file_or_image_is_modified(const Main *bmain, const wmWindowManager *wm); void WM_OT_save_homefile(struct wmOperatorType *ot); void WM_OT_userpref_autoexec_path_add(struct wmOperatorType *ot); diff --git a/source/blender/windowmanager/wm_window.h b/source/blender/windowmanager/wm_window.h index b0329f7415e..ce9d79b8e59 100644 --- a/source/blender/windowmanager/wm_window.h +++ b/source/blender/windowmanager/wm_window.h @@ -33,8 +33,9 @@ void wm_ghost_exit(void); void wm_get_screensize(int *r_width, int *r_height); void wm_get_desktopsize(int *r_width, int *r_height); -wmWindow *wm_window_new(bContext *C, wmWindow *parent); -wmWindow *wm_window_copy(bContext *C, +wmWindow *wm_window_new(const struct Main *bmain, wmWindowManager *wm, wmWindow *parent); +wmWindow *wm_window_copy(struct Main *bmain, + wmWindowManager *wm, wmWindow *win_src, const bool duplicate_layout, const bool child); |