Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2008-12-18 05:56:48 +0300
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2008-12-18 05:56:48 +0300
commitecc4e55b6666bdb20ed8e2e8e9a7fc2fbeff3731 (patch)
tree35b5a56c8b43fdf6d61a01302b2e458f6245bfe8 /source/blender
parent241dbe6e85a916cc55b5e749596aaf0ef3dffd90 (diff)
2.5
Context API This adds the context API as described here. The main practical change now is that C is not longer directly accessible but has to be accessed through accessor functions. This basically adds the implementation of the API and adaption of existing code with some minor changes. The next task of course is to actually use this design to cleanup of bad level calls and global access, in blenkernel, blenloader. http://wiki.blender.org/index.php/BlenderDev/Blender2.5/Context Error, Warning and Debug Info Reporting This adds the error reporting API as described here. It should help clean up error() calls in non-ui code, but eventually can become used for gathering messages for a console window, and throwing exceptions in python scripts when an error happens executing something. http://wiki.blender.org/index.php/BlenderDev/Blender2.5/Reports
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/blenkernel/BKE_context.h154
-rw-r--r--source/blender/blenkernel/BKE_global.h21
-rw-r--r--source/blender/blenkernel/BKE_report.h83
-rw-r--r--source/blender/blenkernel/BKE_screen.h19
-rw-r--r--source/blender/blenkernel/SConscript2
-rw-r--r--source/blender/blenkernel/intern/Makefile1
-rw-r--r--source/blender/blenkernel/intern/blender.c22
-rw-r--r--source/blender/blenkernel/intern/context.c361
-rw-r--r--source/blender/blenkernel/intern/library.c1
-rw-r--r--source/blender/blenkernel/intern/report.c186
-rw-r--r--source/blender/blenloader/intern/writefile.c9
-rw-r--r--source/blender/editors/interface/interface.c6
-rw-r--r--source/blender/editors/interface/interface_handlers.c21
-rw-r--r--source/blender/editors/interface/interface_regions.c34
-rw-r--r--source/blender/editors/interface/view2d.c39
-rw-r--r--source/blender/editors/interface/view2d_ops.c69
-rw-r--r--source/blender/editors/screen/area.c40
-rw-r--r--source/blender/editors/screen/screen_edit.c65
-rw-r--r--source/blender/editors/screen/screen_ops.c184
-rw-r--r--source/blender/editors/space_action/action_header.c8
-rw-r--r--source/blender/editors/space_action/space_action.c4
-rw-r--r--source/blender/editors/space_api/space.c2
-rw-r--r--source/blender/editors/space_api/spacetypes.c2
-rw-r--r--source/blender/editors/space_buttons/buttons_header.c12
-rw-r--r--source/blender/editors/space_buttons/space_buttons.c4
-rw-r--r--source/blender/editors/space_file/file_header.c8
-rw-r--r--source/blender/editors/space_file/filesel.c2
-rw-r--r--source/blender/editors/space_file/space_file.c4
-rw-r--r--source/blender/editors/space_image/image_header.c8
-rw-r--r--source/blender/editors/space_image/space_image.c4
-rw-r--r--source/blender/editors/space_info/info_header.c16
-rw-r--r--source/blender/editors/space_info/space_info.c4
-rw-r--r--source/blender/editors/space_ipo/ipo_header.c8
-rw-r--r--source/blender/editors/space_ipo/space_ipo.c8
-rw-r--r--source/blender/editors/space_nla/nla_header.c8
-rw-r--r--source/blender/editors/space_nla/space_nla.c4
-rw-r--r--source/blender/editors/space_node/node_header.c8
-rw-r--r--source/blender/editors/space_node/space_node.c4
-rw-r--r--source/blender/editors/space_outliner/outliner_header.c10
-rw-r--r--source/blender/editors/space_outliner/space_outliner.c15
-rw-r--r--source/blender/editors/space_script/script_header.c8
-rw-r--r--source/blender/editors/space_script/space_script.c4
-rw-r--r--source/blender/editors/space_sequencer/sequencer_header.c8
-rw-r--r--source/blender/editors/space_sequencer/space_sequencer.c4
-rw-r--r--source/blender/editors/space_sound/sound_header.c8
-rw-r--r--source/blender/editors/space_sound/space_sound.c4
-rw-r--r--source/blender/editors/space_text/space_text.c4
-rw-r--r--source/blender/editors/space_text/text_header.c8
-rw-r--r--source/blender/editors/space_time/space_time.c5
-rw-r--r--source/blender/editors/space_time/time_header.c107
-rw-r--r--source/blender/editors/space_time/time_ops.c19
-rw-r--r--source/blender/editors/space_view3d/space_view3d.c1
-rw-r--r--source/blender/editors/space_view3d/view3d_header.c8
-rw-r--r--source/blender/editors/util/ed_markers.c25
-rw-r--r--source/blender/windowmanager/WM_api.h4
-rw-r--r--source/blender/windowmanager/intern/wm.c38
-rw-r--r--source/blender/windowmanager/intern/wm_cursors.c2
-rw-r--r--source/blender/windowmanager/intern/wm_event_system.c194
-rw-r--r--source/blender/windowmanager/intern/wm_files.c7
-rw-r--r--source/blender/windowmanager/intern/wm_gesture.c12
-rw-r--r--source/blender/windowmanager/intern/wm_init_exit.c9
-rw-r--r--source/blender/windowmanager/intern/wm_keymap.c18
-rw-r--r--source/blender/windowmanager/intern/wm_operators.c21
-rw-r--r--source/blender/windowmanager/intern/wm_report.c134
-rw-r--r--source/blender/windowmanager/intern/wm_subwindow.c1
-rw-r--r--source/blender/windowmanager/intern/wm_window.c51
66 files changed, 1435 insertions, 729 deletions
diff --git a/source/blender/blenkernel/BKE_context.h b/source/blender/blenkernel/BKE_context.h
new file mode 100644
index 00000000000..90f158cd714
--- /dev/null
+++ b/source/blender/blenkernel/BKE_context.h
@@ -0,0 +1,154 @@
+/**
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * Contributor(s): Blender Foundation (2008).
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifndef BKE_CONTEXT_H
+#define BKE_CONTEXT_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "DNA_listBase.h"
+
+struct ARegion;
+struct bScreen;
+struct EditMesh;
+struct ListBase;
+struct Main;
+struct Object;
+struct PointerRNA;
+struct ReportList;
+struct Scene;
+struct ScrArea;
+struct SpaceLink;
+struct StructRNA;
+struct ToolSettings;
+struct wmWindow;
+struct wmWindowManager;
+
+/* Structs */
+
+struct bContext;
+typedef struct bContext bContext;
+
+struct bContextDataMember;
+typedef struct bContextDataMember bContextDataMember;
+
+extern bContextDataMember CTX_DataMain;
+extern bContextDataMember CTX_DataScene;
+extern bContextDataMember CTX_DataObjects;
+extern bContextDataMember CTX_DataEditObject;
+extern bContextDataMember CTX_DataEditArmature;
+extern bContextDataMember CTX_DataEditMesh;
+
+typedef struct bContextDataIterator {
+ void *data;
+ int valid;
+
+ void (*begin)(bContext *C, struct bContextDataIterator *iter);
+ void (*next)(struct bContextDataIterator *iter);
+ void (*end)(struct bContextDataIterator *iter);
+ void *internal;
+} bContextDataIterator;
+
+typedef struct bContextDataResult {
+ void *pointer;
+ bContextDataIterator iterator;
+} bContextDataResult;
+
+typedef int (*bContextDataCallback)(const bContext *C,
+ const bContextDataMember *member, bContextDataResult *result);
+
+/* Context */
+
+bContext *CTX_create(void);
+void CTX_free(bContext *C);
+
+bContext *CTX_copy(const bContext *C, int thread);
+int CTX_thread(const bContext *C);
+
+/* Context Task and Reports */
+
+typedef enum bContextTask {
+ CTX_DRAWING = 0,
+ CTX_EDITING = 1,
+ CTX_EVALUATING = 2,
+ CTX_UNDEFINED = 3
+} bContextTask;
+
+bContextTask CTX_task(const bContext *C);
+void CTX_task_set(bContext *C, bContextTask task);
+
+struct ReportList *CTX_reports(const bContext *C);
+void CTX_reports_set(bContext *C, struct ReportList *reports);
+
+/* Window Manager Context */
+
+struct wmWindowManager *CTX_wm_manager(const bContext *C);
+struct wmWindow *CTX_wm_window(const bContext *C);
+struct bScreen *CTX_wm_screen(const bContext *C);
+struct ScrArea *CTX_wm_area(const bContext *C);
+struct SpaceLink *CTX_wm_space_data(const bContext *C);
+struct ARegion *CTX_wm_region(const bContext *C);
+void *CTX_wm_region_data(const bContext *C);
+struct uiBlock *CTX_wm_ui_block(const bContext *C);
+
+void CTX_wm_manager_set(bContext *C, struct wmWindowManager *wm);
+void CTX_wm_window_set(bContext *C, struct wmWindow *win);
+void CTX_wm_screen_set(bContext *C, struct bScreen *screen); /* to be removed */
+void CTX_wm_area_set(bContext *C, struct ScrArea *win);
+void CTX_wm_region_set(bContext *C, struct ARegion *win);
+void CTX_wm_ui_block_set(bContext *C, struct uiBlock *block, bContextDataCallback cb);
+
+/* Data Context */
+
+struct Main *CTX_data_main(const bContext *C);
+struct Scene *CTX_data_scene(const bContext *C);
+struct ToolSettings *CTX_data_tool_settings(const bContext *C);
+
+void CTX_data_main_set(bContext *C, struct Main *bmain);
+void CTX_data_scene_set(bContext *C, struct Scene *bmain);
+
+int CTX_data_objects(const bContext *C, bContextDataIterator *iter);
+
+struct Object *CTX_data_edit_object(const bContext *C);
+struct EditMesh *CTX_data_edit_mesh(const bContext *C);
+struct ListBase *CTX_data_edit_armature(const bContext *C);
+
+/* Data Evaluation Context */
+
+float CTX_eval_frame(const bContext *C);
+
+int CTX_eval_render_resolution(const bContext *C);
+void CTX_eval_render_resolution_set(bContext *C, int render);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
diff --git a/source/blender/blenkernel/BKE_global.h b/source/blender/blenkernel/BKE_global.h
index 498fd6169b2..284d41e7891 100644
--- a/source/blender/blenkernel/BKE_global.h
+++ b/source/blender/blenkernel/BKE_global.h
@@ -63,27 +63,6 @@ struct BMF_Font;
struct EditMesh;
struct BME_Glob;
-/* former global stuff. context is derived, not storage! */
-typedef struct bContext {
-
- /* windowmanager tree context */
- struct wmWindowManager *wm;
- struct wmWindow *window;
- struct bScreen *screen;
- struct ScrArea *area;
- struct ARegion *region;
-
- /* data context */
- struct Scene *scene;
- struct Object *obact;
- struct Object *obedit;
-
- /* edit data context */
- struct EditMesh *editMesh;
- struct ListBase edbo; /* Armature Editmode bones */
-
-} bContext;
-
typedef struct Global {
/* active pointers */
diff --git a/source/blender/blenkernel/BKE_report.h b/source/blender/blenkernel/BKE_report.h
new file mode 100644
index 00000000000..39a50769234
--- /dev/null
+++ b/source/blender/blenkernel/BKE_report.h
@@ -0,0 +1,83 @@
+/**
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * Contributor(s): Blender Foundation (2008).
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifndef BKE_REPORT_H
+#define BKE_REPORT_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "DNA_listBase.h"
+
+/* Reporting Information and Errors */
+
+typedef enum ReportType {
+ RPT_DEBUG = 0,
+ RPT_INFO = 1000,
+ RPT_WARNING = 2000,
+ RPT_ERROR = 3000,
+ RPT_ERROR_INVALID_INPUT = 3001,
+ RPT_ERROR_INVALID_CONTEXT = 3002,
+ RPT_ERROR_OUT_OF_MEMORY = 3003
+} ReportType;
+
+enum ReportListFlags {
+ RPT_PRINT = 1,
+ RPT_STORE = 2
+};
+
+typedef struct Report {
+ struct Report *next, *prev;
+ ReportType type;
+ char *typestr;
+ char *message;
+} Report;
+
+typedef struct ReportList {
+ ListBase list;
+ ReportType level;
+ int flags;
+} ReportList;
+
+void BKE_report_list_init(ReportList *reports, int flag);
+void BKE_report_list_clear(ReportList *reports);
+
+void BKE_report(ReportList *reports, ReportType type, const char *message);
+void BKE_reportf(ReportList *reports, ReportType type, const char *format, ...);
+
+ReportType BKE_report_level(ReportList *reports);
+void BKE_report_level_set(ReportList *reports, ReportType level);
+
+int BKE_report_has_error(ReportList *reports);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
diff --git a/source/blender/blenkernel/BKE_screen.h b/source/blender/blenkernel/BKE_screen.h
index bb3188de511..acb9814b64a 100644
--- a/source/blender/blenkernel/BKE_screen.h
+++ b/source/blender/blenkernel/BKE_screen.h
@@ -31,14 +31,17 @@
#ifndef BKE_SCREEN_H
#define BKE_SCREEN_H
-struct SpaceType;
-struct ScrArea;
-struct bScreen;
struct ARegion;
+struct bContext;
+struct bContextDataMember;
+struct bContextDataResult;
+struct bScreen;
+struct ListBase;
+struct ScrArea;
+struct SpaceType;
struct wmNotifier;
-struct wmWindowManager;
struct wmWindow;
-struct ListBase;
+struct wmWindowManager;
/* spacetype has everything stored to get an editor working, it gets initialized via
ED_spacetypes_init() in editors/area/spacetypes.c */
@@ -73,6 +76,9 @@ typedef struct SpaceType {
/* sets default cursor per region */
void (*cursor)(struct wmWindow *win, struct ARegion *ar);
+ /* return context data */
+ int (*context)(const struct bContext *, const struct bContextDataMember *, struct bContextDataResult *);
+
/* region type definitions */
ListBase regiontypes;
@@ -104,6 +110,9 @@ typedef struct ARegionType {
/* add own items to keymap */
void (*keymap)(struct wmWindowManager *);
+ /* return context data */
+ int (*context)(const struct bContext *, const struct bContextDataMember *, struct bContextDataResult *);
+
/* hardcoded constraints, smaller than these values region is not visible */
int minsizex, minsizey;
/* default keymaps to add */
diff --git a/source/blender/blenkernel/SConscript b/source/blender/blenkernel/SConscript
index 071fd5d82d9..33874d7c881 100644
--- a/source/blender/blenkernel/SConscript
+++ b/source/blender/blenkernel/SConscript
@@ -4,7 +4,7 @@ Import ('env')
sources = env.Glob('intern/*.c')
incs = '. #/intern/guardedalloc ../editors/include ../blenlib ../makesdna'
-incs += ' ../render/extern/include #/intern/decimation/extern'
+incs += ' ../render/extern/include #/intern/decimation/extern ../makesrna'
incs += ' ../imbuf ../avi #/intern/elbeem/extern ../nodes'
incs += ' #/intern/iksolver/extern ../blenloader'
incs += ' #/extern/bullet2/src'
diff --git a/source/blender/blenkernel/intern/Makefile b/source/blender/blenkernel/intern/Makefile
index 4cfc8f91efe..8919719d64d 100644
--- a/source/blender/blenkernel/intern/Makefile
+++ b/source/blender/blenkernel/intern/Makefile
@@ -43,6 +43,7 @@ CPPFLAGS += -I$(NAN_PYTHON)/include/python$(NAN_PYTHON_VERSION)
CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include
# Reference to the types in makesdna and imbuf
CPPFLAGS += -I../../makesdna
+CPPFLAGS += -I../../makesrna
CPPFLAGS += -I../../imbuf
# This mod uses the BLI and BLO module
CPPFLAGS += -I../../blenlib
diff --git a/source/blender/blenkernel/intern/blender.c b/source/blender/blenkernel/intern/blender.c
index e5625fa03e0..b891e75a71b 100644
--- a/source/blender/blenkernel/intern/blender.c
+++ b/source/blender/blenkernel/intern/blender.c
@@ -67,6 +67,7 @@
#include "BKE_action.h"
#include "BKE_blender.h"
+#include "BKE_context.h"
#include "BKE_curve.h"
#include "BKE_depsgraph.h"
#include "BKE_displist.h"
@@ -324,7 +325,7 @@ static void setup_app_data(bContext *C, BlendFileData *bfd, char *filename)
SWAP(ListBase, G.main->script, bfd->main->script);
/* we re-use current screen */
- curscreen= C->screen;
+ curscreen= CTX_wm_screen(C);
/* but use new Scene pointer */
curscene= bfd->curscene;
if(curscene==NULL) curscene= bfd->main->scene.first;
@@ -341,6 +342,7 @@ static void setup_app_data(bContext *C, BlendFileData *bfd, char *filename)
if(mode!='u') G.save_over = 1;
G.main= bfd->main;
+ CTX_data_main_set(C, G.main);
if (bfd->user) {
@@ -356,20 +358,20 @@ static void setup_app_data(bContext *C, BlendFileData *bfd, char *filename)
/* case G_FILE_NO_UI or no screens in file */
if(mode) {
- C->screen= curscreen;
- C->scene= curscene;
+ CTX_wm_screen_set(C, curscreen);
+ CTX_data_scene_set(C, curscene);
}
else {
G.winpos= bfd->winpos;
G.displaymode= bfd->displaymode;
G.fileflags= bfd->fileflags;
- C->screen= bfd->curscreen;
- C->scene= C->screen->scene;
+ CTX_wm_screen_set(C, bfd->curscreen);
+ CTX_data_scene_set(C, bfd->curscreen->scene);
}
/* this can happen when active scene was lib-linked, and doesnt exist anymore */
- if(C->scene==NULL) {
- C->scene= G.main->scene.first;
- C->screen->scene= C->scene;
+ if(CTX_data_scene(C)==NULL) {
+ CTX_data_scene_set(C, G.main->scene.first);
+ CTX_wm_screen(C)->scene= CTX_data_scene(C);
}
/* special cases, override loaded flags: */
@@ -385,7 +387,7 @@ static void setup_app_data(bContext *C, BlendFileData *bfd, char *filename)
}
/* baseflags, groups, make depsgraph, etc */
- set_scene_bg(C->scene);
+ set_scene_bg(CTX_data_scene(C));
/* clear BONE_UNKEYED flags, these are not valid anymore for proxies */
framechange_poses_clear_unkeyed();
@@ -397,7 +399,7 @@ static void setup_app_data(bContext *C, BlendFileData *bfd, char *filename)
}
/* now tag update flags, to ensure deformers get calculated on redraw */
- DAG_scene_update_flags(C->scene, C->scene->lay);
+ DAG_scene_update_flags(CTX_data_scene(C), CTX_data_scene(C)->lay);
if (G.f & G_DOSCRIPTLINKS) {
/* there's an onload scriptlink to execute in screenmain */
diff --git a/source/blender/blenkernel/intern/context.c b/source/blender/blenkernel/intern/context.c
new file mode 100644
index 00000000000..b8633d8618e
--- /dev/null
+++ b/source/blender/blenkernel/intern/context.c
@@ -0,0 +1,361 @@
+/**
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * Contributor(s): Blender Foundation (2008).
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include "MEM_guardedalloc.h"
+
+#include "DNA_listBase.h"
+#include "DNA_scene_types.h"
+#include "DNA_screen_types.h"
+#include "DNA_space_types.h"
+#include "DNA_windowmanager_types.h"
+
+#include "RNA_access.h"
+
+#include "BKE_context.h"
+#include "BKE_main.h"
+#include "BKE_report.h"
+#include "BKE_screen.h"
+
+#include <string.h>
+
+/* struct */
+
+struct bContext {
+ bContextTask task;
+ ReportList *reports;
+ int thread;
+
+ /* windowmanager context */
+ struct {
+ struct wmWindowManager *manager;
+ struct wmWindow *window;
+ struct bScreen *screen;
+ struct ScrArea *area;
+ struct ARegion *region;
+ struct uiBlock *block;
+
+ bContextDataCallback manager_cb;
+ bContextDataCallback window_cb;
+ bContextDataCallback screen_cb;
+ bContextDataCallback area_cb;
+ bContextDataCallback region_cb;
+ bContextDataCallback block_cb;
+ } wm;
+
+ /* data context */
+ struct {
+ struct Main *main;
+ struct Scene *scene;
+ } data;
+
+ /* data evaluation */
+ struct {
+ int render;
+ } eval;
+};
+
+/* context */
+
+bContext *CTX_create()
+{
+ bContext *C;
+
+ C= MEM_callocN(sizeof(bContext), "bContext");
+
+ C->task= CTX_UNDEFINED;
+ C->thread= 0;
+
+ return C;
+}
+
+bContext *CTX_copy(const bContext *C, int thread)
+{
+ bContext *newC;
+
+ if(C->task != CTX_UNDEFINED)
+ BKE_report(C->reports, RPT_ERROR_INVALID_CONTEXT, "CTX_copy not allowed for this task");
+
+ newC= MEM_dupallocN((void*)C);
+ newC->thread= thread;
+
+ return newC;
+}
+
+int CTX_thread(const bContext *C)
+{
+ return C->thread;
+}
+
+void CTX_free(bContext *C)
+{
+ MEM_freeN(C);
+}
+
+/* context task and reports */
+
+bContextTask CTX_task(const bContext *C)
+{
+ return C->task;
+}
+
+void CTX_task_set(bContext *C, bContextTask task)
+{
+ C->task= task;
+}
+
+ReportList *CTX_reports(const bContext *C)
+{
+ return C->reports;
+}
+
+void CTX_reports_set(bContext *C, ReportList *reports)
+{
+ C->reports= reports;
+}
+
+/* window manager context */
+
+wmWindowManager *CTX_wm_manager(const bContext *C)
+{
+ return C->wm.manager;
+}
+
+wmWindow *CTX_wm_window(const bContext *C)
+{
+ return C->wm.window;
+}
+
+bScreen *CTX_wm_screen(const bContext *C)
+{
+ return C->wm.screen;
+}
+
+ScrArea *CTX_wm_area(const bContext *C)
+{
+ return C->wm.area;
+}
+
+SpaceLink *CTX_wm_space_data(const bContext *C)
+{
+ return (C->wm.area)? C->wm.area->spacedata.first: NULL;
+}
+
+ARegion *CTX_wm_region(const bContext *C)
+{
+ return C->wm.region;
+}
+
+void *CTX_wm_region_data(const bContext *C)
+{
+ return (C->wm.region)? C->wm.region->regiondata: NULL;
+}
+
+struct uiBlock *CTX_wm_ui_block(const bContext *C)
+{
+ return C->wm.block;
+}
+
+void CTX_wm_manager_set(bContext *C, wmWindowManager *wm)
+{
+ C->wm.manager= wm;
+}
+
+void CTX_wm_window_set(bContext *C, wmWindow *win)
+{
+ C->wm.window= win;
+ C->wm.screen= (win)? win->screen: NULL;
+ C->data.scene= (C->wm.screen)? C->wm.screen->scene: NULL;
+}
+
+void CTX_wm_screen_set(bContext *C, bScreen *screen)
+{
+ C->wm.screen= screen;
+ C->data.scene= (C->wm.screen)? C->wm.screen->scene: NULL;
+}
+
+void CTX_wm_area_set(bContext *C, ScrArea *area)
+{
+ C->wm.area= area;
+ C->wm.area_cb= (area && area->type)? area->type->context: NULL;
+}
+
+void CTX_wm_region_set(bContext *C, ARegion *region)
+{
+ C->wm.region= region;
+ C->wm.region_cb= (region && region->type)? region->type->context: NULL;
+}
+
+void CTX_wm_ui_block_set(bContext *C, struct uiBlock *block, bContextDataCallback cb)
+{
+ C->wm.block= block;
+ C->wm.block_cb= cb;
+}
+
+/* data context utility functions */
+
+struct bContextDataMember {
+ StructRNA *rna;
+ const char *name;
+ int collection;
+};
+
+bContextDataMember CTX_DataMain = {&RNA_Main, "main", 0};
+bContextDataMember CTX_DataScene = {&RNA_Scene, "scene", 0};
+
+bContextDataMember CTX_DataObjects = {&RNA_Object, "objects", 1};
+
+bContextDataMember CTX_DataEditObject = {&RNA_Object, "edit_object", 0};
+bContextDataMember CTX_DataEditArmature = {NULL, "edit_armature", 0};
+bContextDataMember CTX_DataEditMesh = {NULL, "edit_mesh", 0};
+
+static int ctx_data_get(const bContext *C, const bContextDataMember *member, bContextDataResult *result)
+{
+ if(C->wm.block_cb && C->wm.block_cb(C, member, result)) return 1;
+ if(C->wm.region_cb && C->wm.region_cb(C, member, result)) return 1;
+ if(C->wm.area_cb && C->wm.area_cb(C, member, result)) return 1;
+ if(C->wm.screen_cb && C->wm.screen_cb(C, member, result)) return 1;
+ if(C->wm.window_cb && C->wm.window_cb(C, member, result)) return 1;
+ if(C->wm.manager_cb && C->wm.manager_cb(C, member, result)) return 1;
+
+ return 0;
+}
+
+static void *ctx_data_pointer_get(const bContext *C, const bContextDataMember *member)
+{
+ bContextDataResult result;
+
+ if(ctx_data_get(C, member, &result))
+ return result.pointer;
+
+ return NULL;
+}
+
+static int ctx_data_pointer_verify(const bContext *C, const bContextDataMember *member, void **pointer)
+{
+ bContextDataResult result;
+
+ if(ctx_data_get(C, member, &result)) {
+ *pointer= result.pointer;
+ return 1;
+ }
+ else {
+ *pointer= NULL;
+ return 0;
+ }
+}
+
+static int ctx_data_collection_get(const bContext *C, const bContextDataMember *member, bContextDataIterator *iter)
+{
+ bContextDataResult result;
+
+ if(ctx_data_get(C, member, &result)) {
+ *iter= result.iterator;
+ return 1;
+ }
+
+ return 0;
+}
+
+/* data context */
+
+Main *CTX_data_main(const bContext *C)
+{
+ Main *bmain;
+
+ if(ctx_data_pointer_verify(C, &CTX_DataMain, (void*)&bmain))
+ return bmain;
+ else
+ return C->data.main;
+}
+
+void CTX_data_main_set(bContext *C, Main *bmain)
+{
+ C->data.main= bmain;
+}
+
+Scene *CTX_data_scene(const bContext *C)
+{
+ Scene *scene;
+
+ if(ctx_data_pointer_verify(C, &CTX_DataScene, (void*)&scene))
+ return scene;
+ else
+ return C->data.scene;
+}
+
+void CTX_data_scene_set(bContext *C, Scene *scene)
+{
+ C->data.scene= scene;
+}
+
+ToolSettings *CTX_data_tool_settings(const bContext *C)
+{
+ Scene *scene = CTX_data_scene(C);
+
+ if(scene)
+ return scene->toolsettings;
+ else
+ return NULL;
+}
+
+int CTX_data_objects(const bContext *C, bContextDataIterator *iter)
+{
+ return ctx_data_collection_get(C, &CTX_DataObjects, iter);
+}
+
+struct Object *CTX_data_edit_object(const bContext *C)
+{
+ return ctx_data_pointer_get(C, &CTX_DataEditObject);
+}
+
+struct EditMesh *CTX_data_edit_mesh(const bContext *C)
+{
+ return ctx_data_pointer_get(C, &CTX_DataEditMesh);
+}
+
+ListBase *CTX_data_edit_armature(const bContext *C)
+{
+ return ctx_data_pointer_get(C, &CTX_DataEditArmature);
+}
+
+/* data evaluation */
+
+float CTX_eval_frame(const bContext *C)
+{
+ return (C->data.scene)? C->data.scene->r.cfra: 0.0f;
+}
+
+int CTX_eval_render_resolution(const bContext *C)
+{
+ return C->eval.render;
+}
+
+void CTX_eval_render_resolution_set(bContext *C, int render)
+{
+ C->eval.render= render;
+}
+
diff --git a/source/blender/blenkernel/intern/library.c b/source/blender/blenkernel/intern/library.c
index 8e36ea0204b..4fd36806393 100644
--- a/source/blender/blenkernel/intern/library.c
+++ b/source/blender/blenkernel/intern/library.c
@@ -83,6 +83,7 @@
#include "BLI_dynstr.h"
#include "BKE_library.h"
+#include "BKE_context.h"
#include "BKE_main.h"
#include "BKE_global.h"
#include "BKE_sound.h"
diff --git a/source/blender/blenkernel/intern/report.c b/source/blender/blenkernel/intern/report.c
new file mode 100644
index 00000000000..569377a1c2f
--- /dev/null
+++ b/source/blender/blenkernel/intern/report.c
@@ -0,0 +1,186 @@
+/**
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * Contributor(s): Blender Foundation (2008).
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include "MEM_guardedalloc.h"
+
+#include "DNA_listBase.h"
+
+#include "BLI_blenlib.h"
+
+#include "BKE_report.h"
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <string.h>
+
+#ifdef _WIN32
+#ifndef vsnprintf
+#define vsnprintf _vsnprintf
+#endif
+#endif
+
+static char *report_type_str(int type)
+{
+ switch(type) {
+ case RPT_DEBUG: return "Debug";
+ case RPT_INFO: return "Info";
+ case RPT_WARNING: return "Warning";
+ case RPT_ERROR: return "Error";
+ case RPT_ERROR_INVALID_INPUT: return "Invalid Input Error";
+ case RPT_ERROR_INVALID_CONTEXT: return "Invalid Context Error";
+ case RPT_ERROR_OUT_OF_MEMORY: return "Out Of Memory Error";
+ default: return "Undefined Type";
+ }
+}
+
+void BKE_report_list_init(ReportList *reports, int flags)
+{
+ memset(reports, 0, sizeof(ReportList));
+
+ reports->level= RPT_WARNING;
+ reports->flags= flags;
+}
+
+void BKE_report_list_clear(ReportList *reports)
+{
+ Report *report;
+
+ for(report=reports->list.first; report; report=report->next)
+ MEM_freeN(report->message);
+
+ BLI_freelistN(&reports->list);
+}
+
+void BKE_report(ReportList *reports, ReportType type, const char *message)
+{
+ Report *report;
+ int len;
+
+ if(!reports || type < reports->level)
+ return;
+
+ if(reports->flags & RPT_PRINT) {
+ printf("%s: %s\n", report_type_str(type), message);
+ fflush(stdout); /* this ensures the message is printed before a crash */
+ }
+
+ if(reports->flags & RPT_STORE) {
+ report= MEM_callocN(sizeof(Report), "Report");
+ report->type= type;
+ report->typestr= report_type_str(type);
+
+ len= strlen(message);
+ report->message= MEM_callocN(sizeof(char)*(len+1), "ReportMessage");
+ memcpy(report->message, message, sizeof(char)*(len+1));
+
+ BLI_addtail(&reports->list, report);
+ }
+}
+
+void BKE_reportf(ReportList *reports, ReportType type, const char *format, ...)
+{
+ Report *report;
+ va_list args;
+ char *message;
+ int len= 256, maxlen= 65536, retval;
+
+ if(!reports || type < reports->level)
+ return;
+
+ if(reports->flags & RPT_PRINT) {
+ va_start(args, format);
+ vprintf(format, args);
+ va_end(args);
+ fflush(stdout); /* this ensures the message is printed before a crash */
+ }
+
+ if(reports->flags & RPT_STORE) {
+ while(1) {
+ message= MEM_callocN(sizeof(char)*len+1, "ReportMessage");
+
+ va_start(args, format);
+ retval= vsnprintf(message, len, format, args);
+ va_end(args);
+
+ if(retval == -1) {
+ /* -1 means not enough space, but on windows it may also mean
+ * there is a formatting error, so we impose a maximum length */
+ MEM_freeN(message);
+ message= NULL;
+
+ len *= 2;
+ if(len > maxlen) {
+ fprintf(stderr, "BKE_reportf message too long or format error.\n");
+ break;
+ }
+ }
+ else if(retval > len) {
+ /* in C99 the actual length required is returned */
+ MEM_freeN(message);
+ message= NULL;
+
+ len= retval;
+ }
+ else
+ break;
+ }
+
+ if(message) {
+ report= MEM_callocN(sizeof(Report), "Report");
+ report->type= type;
+ report->typestr= report_type_str(type);
+ report->message= message;
+
+ BLI_addtail(&reports->list, report);
+ }
+ }
+}
+
+ReportType BKE_report_level(ReportList *reports)
+{
+ return reports->level;
+}
+
+void BKE_report_level_set(ReportList *reports, ReportType level)
+{
+ reports->level= level;
+}
+
+int BKE_report_has_error(ReportList *reports)
+{
+ Report *report;
+
+ if(!reports)
+ return 0;
+
+ for(report=reports->list.first; report; report=report->next)
+ if(report->type >= RPT_ERROR)
+ return 1;
+
+ return 0;
+}
+
diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c
index b5081888a96..d06ffe44465 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -145,6 +145,7 @@ Any case: direct data is ALWAYS after the lib block
#include "BKE_action.h"
#include "BKE_blender.h"
+#include "BKE_context.h"
#include "BKE_cloth.h"
#include "BKE_curve.h"
#include "BKE_customdata.h"
@@ -483,9 +484,9 @@ static void write_renderinfo(bContext *C, WriteData *wd) /* for renderdeamon */
Scene *sce;
int data[8];
- sce= G.main->scene.first;
+ sce= CTX_data_main(C)->scene.first;
while(sce) {
- if(sce->id.lib==0 && ( sce==C->scene || (sce->r.scemode & R_BG_RENDER)) ) {
+ if(sce->id.lib==0 && ( sce==CTX_data_scene(C) || (sce->r.scemode & R_BG_RENDER)) ) {
data[0]= sce->r.sfra;
data[1]= sce->r.efra;
@@ -2019,8 +2020,8 @@ static void write_global(bContext *C, WriteData *wd)
FileGlobal fg;
char subvstr[8];
- fg.curscreen= C->screen;
- fg.curscene= C->scene;
+ fg.curscreen= CTX_wm_screen(C);
+ fg.curscene= CTX_data_scene(C);
fg.displaymode= G.displaymode;
fg.winpos= G.winpos;
fg.fileflags= (G.fileflags & ~G_FILE_NO_UI); // prevent to save this, is not good convention, and feature with concerns...
diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c
index 398a526fbd8..4ac979d3a5c 100644
--- a/source/blender/editors/interface/interface.c
+++ b/source/blender/editors/interface/interface.c
@@ -41,7 +41,7 @@
#include "BLI_blenlib.h"
#include "BLI_dynstr.h"
-#include "BKE_global.h"
+#include "BKE_context.h"
#include "BKE_idprop.h"
#include "BKE_library.h"
#include "BKE_screen.h"
@@ -1389,7 +1389,7 @@ uiBlock *uiBeginBlock(const bContext *C, ARegion *region, char *name, short dt,
wmWindow *window;
int getsizex, getsizey;
- window= C->window;
+ window= CTX_wm_window(C);
lb= &region->uiblocks;
/* each listbase only has one block with this name, free block
@@ -2196,7 +2196,7 @@ void autocomplete_end(AutoComplete *autocpl, char *autoname)
static void autocomplete_id(bContext *C, char *str, void *arg_v)
{
int blocktype= (intptr_t)arg_v;
- ListBase *listb= wich_libbase(G.main, blocktype); /* XXX */
+ ListBase *listb= wich_libbase(CTX_data_main(C), blocktype);
if(listb==NULL) return;
diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c
index 1d1f8cb44b9..f22431ba73d 100644
--- a/source/blender/editors/interface/interface_handlers.c
+++ b/source/blender/editors/interface/interface_handlers.c
@@ -41,8 +41,9 @@
#include "PIL_time.h"
#include "BKE_colortools.h"
+#include "BKE_context.h"
#include "BKE_idprop.h"
-#include "BKE_global.h"
+#include "BKE_report.h"
#include "BKE_texture.h"
#include "BKE_utildefines.h"
@@ -345,7 +346,7 @@ static void ui_apply_but_NUM(bContext *C, uiBut *but, uiHandleButtonData *data)
/* XXX 2.50 missing python api */
#if 0
if(BPY_button_eval(data->str, &data->value)) {
- WM_report(C, WM_LOG_WARNING, "Invalid Python expression, check console");
+ BKE_report(CTX_reports(C), RPT_WARNING, "Invalid Python expression, check console");
data->value = 0.0f; /* Zero out value on error */
if(data->str[0]) {
@@ -2536,14 +2537,14 @@ static int ui_do_button(bContext *C, uiBlock *block, uiBut *but, wmEvent *event)
if(ELEM(event->type, LEFTMOUSE, RETKEY)) {
if(but->lock) {
if(but->lockstr) {
- WM_report(C, WM_LOG_WARNING, but->lockstr);
+ BKE_report(CTX_reports(C), RPT_WARNING, but->lockstr);
button_activate_state(C, but, BUTTON_STATE_EXIT);
return WM_UI_HANDLER_BREAK;
}
}
else if(but->pointype && but->poin==0) {
/* there's a pointer needed */
- WM_reportf(C, WM_LOG_WARNING, "DoButton pointer error: %s", but->str);
+ BKE_reportf(CTX_reports(C), RPT_WARNING, "DoButton pointer error: %s", but->str);
button_activate_state(C, but, BUTTON_STATE_EXIT);
return WM_UI_HANDLER_BREAK;
}
@@ -2862,7 +2863,7 @@ static void button_activate_init(bContext *C, ARegion *ar, uiBut *but, uiButtonA
/* setup struct */
data= MEM_callocN(sizeof(uiHandleButtonData), "uiHandleButtonData");
- data->window= C->window;
+ data->window= CTX_wm_window(C);
data->region= ar;
data->interactive= 0;
data->state = BUTTON_STATE_INIT;
@@ -3555,7 +3556,7 @@ static int ui_handler_region(bContext *C, wmEvent *event, void *userdata)
int retval;
/* here we handle buttons at the region level, non-modal */
- ar= C->region;
+ ar= CTX_wm_region(C);
retval= WM_UI_HANDLER_CONTINUE;
if(ar==NULL) return retval;
@@ -3584,12 +3585,12 @@ static void ui_handler_remove_region(bContext *C, void *userdata)
bScreen *sc;
ARegion *ar;
- ar= C->region;
+ ar= CTX_wm_region(C);
if(ar == NULL) return;
uiFreeBlocks(C, &ar->uiblocks);
- sc= C->screen;
+ sc= CTX_wm_screen(C);
if(sc == NULL) return;
/* delayed apply callbacks, but not for screen level regions, those
@@ -3608,7 +3609,7 @@ static int ui_handler_region_menu(bContext *C, wmEvent *event, void *userdata)
/* here we handle buttons at the window level, modal, for example
* while number sliding, text editing, or when a menu block is open */
- ar= C->region;
+ ar= CTX_wm_region(C);
but= ui_but_find_activated(ar);
if(but) {
@@ -3654,7 +3655,7 @@ static int ui_handler_popup(bContext *C, wmEvent *event, void *userdata)
/* free if done, does not free handle itself */
if(menu->menuretval) {
ui_menu_block_free(C, menu);
- WM_event_remove_ui_handler(&C->window->handlers, ui_handler_popup, ui_handler_remove_popup, menu);
+ WM_event_remove_ui_handler(&CTX_wm_window(C)->handlers, ui_handler_popup, ui_handler_remove_popup, menu);
if(menu->menuretval == UI_RETURN_OK && menu->popup_func)
menu->popup_func(C, menu->popup_arg, menu->retvalue);
diff --git a/source/blender/editors/interface/interface_regions.c b/source/blender/editors/interface/interface_regions.c
index a6f41195142..c60bf374e6d 100644
--- a/source/blender/editors/interface/interface_regions.c
+++ b/source/blender/editors/interface/interface_regions.c
@@ -37,7 +37,7 @@
#include "BLI_arithb.h"
#include "BLI_blenlib.h"
-#include "BKE_global.h"
+#include "BKE_context.h"
#include "BKE_screen.h"
#include "BKE_utildefines.h"
@@ -312,7 +312,7 @@ ARegion *ui_tooltip_create(bContext *C, ARegion *butregion, uiBut *but)
return NULL;
/* create area region */
- ar= ui_add_temporary_region(C->window->screen);
+ ar= ui_add_temporary_region(CTX_wm_screen(C));
memset(&type, 0, sizeof(ARegionType));
type.draw= ui_tooltip_region_draw;
@@ -353,7 +353,7 @@ ARegion *ui_tooltip_create(bContext *C, ARegion *butregion, uiBut *but)
y2 += butregion->winrct.ymin;
}
- wm_window_get_size(C->window, &winx, &winy);
+ wm_window_get_size(CTX_wm_window(C), &winx, &winy);
if(x2 > winx) {
/* super size */
@@ -387,7 +387,7 @@ ARegion *ui_tooltip_create(bContext *C, ARegion *butregion, uiBut *but)
void ui_tooltip_free(bContext *C, ARegion *ar)
{
- ui_remove_temporary_region(C, C->window->screen, ar);
+ ui_remove_temporary_region(C, CTX_wm_screen(C), ar);
WM_event_add_notifier(C, WM_NOTE_WINDOW_REDRAW, 0, NULL);
}
@@ -617,6 +617,7 @@ static void ui_block_region_draw(const bContext *C, ARegion *ar)
uiMenuBlockHandle *ui_menu_block_create(bContext *C, ARegion *butregion, uiBut *but, uiBlockFuncFP block_func, void *arg)
{
+ wmWindow *window= CTX_wm_window(C);
static ARegionType type;
ARegion *ar;
uiBlock *block;
@@ -628,7 +629,7 @@ uiMenuBlockHandle *ui_menu_block_create(bContext *C, ARegion *butregion, uiBut *
handle= MEM_callocN(sizeof(uiMenuBlockHandle), "uiMenuBlockHandle");
/* create area region */
- ar= ui_add_temporary_region(C->window->screen);
+ ar= ui_add_temporary_region(CTX_wm_screen(C));
memset(&type, 0, sizeof(ARegionType));
type.draw= ui_block_region_draw;
@@ -657,7 +658,7 @@ uiMenuBlockHandle *ui_menu_block_create(bContext *C, ARegion *butregion, uiBut *
if(but->flag & UI_MAKE_LEFT) block->direction |= UI_LEFT;
if(but->flag & UI_MAKE_RIGHT) block->direction |= UI_RIGHT;
- ui_block_position(C->window, butregion, but, block);
+ ui_block_position(window, butregion, but, block);
}
else {
/* keep a list of these, needed for pulldown menus */
@@ -692,8 +693,8 @@ uiMenuBlockHandle *ui_menu_block_create(bContext *C, ARegion *butregion, uiBut *
ED_region_init(C, ar);
/* get winmat now that we actually have the subwindow */
- wm_subwindow_set(C->window, ar->swinid);
- wm_subwindow_getmatrix(C->window, ar->swinid, block->winmat);
+ wm_subwindow_set(window, ar->swinid);
+ wm_subwindow_getmatrix(window, ar->swinid, block->winmat);
/* notify change and redraw */
ED_region_tag_redraw(ar);
@@ -703,7 +704,7 @@ uiMenuBlockHandle *ui_menu_block_create(bContext *C, ARegion *butregion, uiBut *
void ui_menu_block_free(bContext *C, uiMenuBlockHandle *handle)
{
- ui_remove_temporary_region(C, C->window->screen, handle->region);
+ ui_remove_temporary_region(C, CTX_wm_screen(C), handle->region);
MEM_freeN(handle);
WM_event_add_notifier(C, WM_NOTE_WINDOW_REDRAW, 0, NULL);
@@ -1355,7 +1356,7 @@ uiBlock *ui_block_func_PUPMENU(bContext *C, uiMenuBlockHandle *handle, void *arg
width+= 10;
if (width<50) width=50;
- wm_window_get_size(C->window, &xmax, &ymax);
+ wm_window_get_size(CTX_wm_window(C), &xmax, &ymax);
/* set first item */
lastselected= 0;
@@ -1527,7 +1528,7 @@ uiBlock *ui_block_func_PUPMENUCOL(bContext *C, uiMenuBlockHandle *handle, void *
height= rows*MENU_BUTTON_HEIGHT;
if (md->title) height+= MENU_BUTTON_HEIGHT;
- wm_window_get_size(C->window, &xmax, &ymax);
+ wm_window_get_size(CTX_wm_window(C), &xmax, &ymax);
/* find active item */
fvalue= handle->retvalue;
@@ -1616,10 +1617,6 @@ uiBlock *ui_block_func_PUPMENUCOL(bContext *C, uiMenuBlockHandle *handle, void *
uiBoundsBlock(block, 1);
uiEndBlock(C, block);
-
-#if 0
- event= uiDoBlocks(&listb, 0, 1);
-#endif
menudata_free(md);
@@ -1634,19 +1631,20 @@ uiBlock *ui_block_func_PUPMENUCOL(bContext *C, uiMenuBlockHandle *handle, void *
void uiPupmenu(bContext *C, int maxrow, uiPupmenuFunc func, void *arg, char *str, ...)
{
+ wmWindow *window= CTX_wm_window(C);
uiPupMenuInfo info;
uiMenuBlockHandle *menu;
memset(&info, 0, sizeof(info));
- info.mx= C->window->eventstate->x;
- info.my= C->window->eventstate->y;
+ info.mx= window->eventstate->x;
+ info.my= window->eventstate->y;
info.maxrow= maxrow;
info.instr= str;
menu= ui_menu_block_create(C, NULL, NULL, ui_block_func_PUPMENU, &info);
menu->popup= 1;
- UI_add_popup_handlers(&C->window->handlers, menu);
+ UI_add_popup_handlers(&window->handlers, menu);
WM_event_add_mousemove(C);
menu->popup_func= func;
diff --git a/source/blender/editors/interface/view2d.c b/source/blender/editors/interface/view2d.c
index cacde59145f..3213e120135 100644
--- a/source/blender/editors/interface/view2d.c
+++ b/source/blender/editors/interface/view2d.c
@@ -37,6 +37,7 @@
#include "BLI_blenlib.h"
+#include "BKE_context.h"
#include "BKE_global.h"
#include "BKE_utildefines.h"
@@ -630,16 +631,17 @@ static void view2d_map_cur_using_mask(View2D *v2d, rctf *curmasked)
void UI_view2d_view_ortho(const bContext *C, View2D *v2d)
{
+ wmWindow *window= CTX_wm_window(C);
rctf curmasked;
/* set the matrix - pixel offsets (-0.375) for 1:1 correspondance are not applied,
* as they were causing some unwanted offsets when drawing
*/
view2d_map_cur_using_mask(v2d, &curmasked);
- wmOrtho2(C->window, curmasked.xmin, curmasked.xmax, curmasked.ymin, curmasked.ymax);
+ wmOrtho2(window, curmasked.xmin, curmasked.xmax, curmasked.ymin, curmasked.ymax);
/* XXX is this necessary? */
- wmLoadIdentity(C->window);
+ wmLoadIdentity(window);
}
/* Set view matrices to only use one axis of 'cur' only
@@ -649,7 +651,8 @@ void UI_view2d_view_ortho(const bContext *C, View2D *v2d)
*/
void UI_view2d_view_orthoSpecial(const bContext *C, View2D *v2d, short xaxis)
{
- ARegion *ar= C->region;
+ wmWindow *window= CTX_wm_window(C);
+ ARegion *ar= CTX_wm_region(C);
rctf curmasked;
/* set the matrix - pixel offsets (-0.375) for 1:1 correspondance are not applied,
@@ -657,19 +660,19 @@ void UI_view2d_view_orthoSpecial(const bContext *C, View2D *v2d, short xaxis)
*/
view2d_map_cur_using_mask(v2d, &curmasked);
if (xaxis)
- wmOrtho2(C->window, curmasked.xmin, curmasked.xmax, 0, ar->winy);
+ wmOrtho2(window, curmasked.xmin, curmasked.xmax, 0, ar->winy);
else
- wmOrtho2(C->window, 0, ar->winx, curmasked.ymin, curmasked.ymax);
+ wmOrtho2(window, 0, ar->winx, curmasked.ymin, curmasked.ymax);
/* XXX is this necessary? */
- wmLoadIdentity(C->window);
+ wmLoadIdentity(window);
}
/* Restore view matrices after drawing */
void UI_view2d_view_restore(const bContext *C)
{
- ED_region_pixelspace(C, C->region);
+ ED_region_pixelspace(C, CTX_wm_region(C));
}
/* *********************************************************************** */
@@ -1490,24 +1493,30 @@ void UI_view2d_to_region_no_clip(View2D *v2d, float x, float y, short *regionx,
/* View2D data by default resides in region, so get from region stored in context */
View2D *UI_view2d_fromcontext(const bContext *C)
{
- if (C->area == NULL) return NULL;
- if (C->region == NULL) return NULL;
- return &(C->region->v2d);
+ ScrArea *area= CTX_wm_area(C);
+ ARegion *region= CTX_wm_region(C);
+
+ if (area == NULL) return NULL;
+ if (region == NULL) return NULL;
+ return &(region->v2d);
}
/* same as above, but it returns regionwindow. Utility for pulldowns or buttons */
View2D *UI_view2d_fromcontext_rwin(const bContext *C)
{
- if (C->area == NULL) return NULL;
- if (C->region == NULL) return NULL;
- if (C->region->regiontype!=RGN_TYPE_WINDOW) {
- ARegion *ar= C->area->regionbase.first;
+ ScrArea *area= CTX_wm_area(C);
+ ARegion *region= CTX_wm_region(C);
+
+ if (area == NULL) return NULL;
+ if (region == NULL) return NULL;
+ if (region->regiontype!=RGN_TYPE_WINDOW) {
+ ARegion *ar= area->regionbase.first;
for(; ar; ar= ar->next)
if(ar->regiontype==RGN_TYPE_WINDOW)
return &(ar->v2d);
return NULL;
}
- return &(C->region->v2d);
+ return &(region->v2d);
}
diff --git a/source/blender/editors/interface/view2d_ops.c b/source/blender/editors/interface/view2d_ops.c
index abf114e8fd9..5995cccc874 100644
--- a/source/blender/editors/interface/view2d_ops.c
+++ b/source/blender/editors/interface/view2d_ops.c
@@ -37,7 +37,7 @@
#include "BLI_blenlib.h"
-#include "BKE_global.h"
+#include "BKE_context.h"
#include "BKE_utildefines.h"
#include "RNA_access.h"
@@ -66,7 +66,7 @@
*/
static short mouse_in_v2d_scrollers (const bContext *C, View2D *v2d, int x, int y)
{
- ARegion *ar= C->region;
+ ARegion *ar= CTX_wm_region(C);
int co[2];
/* clamp x,y to region-coordinates first */
@@ -115,15 +115,14 @@ typedef struct v2dViewPanData {
/* initialise panning customdata */
static int view_pan_init(bContext *C, wmOperator *op)
{
+ ARegion *ar= CTX_wm_region(C);
v2dViewPanData *vpd;
- ARegion *ar;
View2D *v2d;
float winx, winy;
/* regions now have v2d-data by default, so check for region */
- if (C->region == NULL)
+ if (ar == NULL)
return 0;
- ar= C->region;
/* set custom-data for operator */
vpd= MEM_callocN(sizeof(v2dViewPanData), "v2dViewPanData");
@@ -166,8 +165,8 @@ static void view_pan_apply(bContext *C, wmOperator *op)
UI_view2d_curRect_validate(v2d);
/* request updates to be done... */
- ED_area_tag_redraw(C->area);
- UI_view2d_sync(C->screen, v2d, V2D_LOCK_COPY);
+ ED_area_tag_redraw(CTX_wm_area(C));
+ UI_view2d_sync(CTX_wm_screen(C), v2d, V2D_LOCK_COPY);
}
/* cleanup temp customdata */
@@ -195,6 +194,7 @@ static int view_pan_exec(bContext *C, wmOperator *op)
/* set up modal operator and relevant settings */
static int view_pan_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
+ wmWindow *window= CTX_wm_window(C);
v2dViewPanData *vpd;
View2D *v2d;
@@ -212,14 +212,14 @@ static int view_pan_invoke(bContext *C, wmOperator *op, wmEvent *event)
RNA_int_set(op->ptr, "deltay", 0);
if (v2d->keepofs & V2D_LOCKOFS_X)
- WM_cursor_modal(C->window, BC_NS_SCROLLCURSOR);
+ WM_cursor_modal(window, BC_NS_SCROLLCURSOR);
else if (v2d->keepofs & V2D_LOCKOFS_Y)
- WM_cursor_modal(C->window, BC_EW_SCROLLCURSOR);
+ WM_cursor_modal(window, BC_EW_SCROLLCURSOR);
else
- WM_cursor_modal(C->window, BC_NSEW_SCROLLCURSOR);
+ WM_cursor_modal(window, BC_NSEW_SCROLLCURSOR);
/* add temp handler */
- WM_event_add_modal_handler(C, &C->window->handlers, op);
+ WM_event_add_modal_handler(C, &window->handlers, op);
return OPERATOR_RUNNING_MODAL;
}
@@ -251,7 +251,7 @@ static int view_pan_modal(bContext *C, wmOperator *op, wmEvent *event)
RNA_int_set(op->ptr, "deltay", (vpd->starty - vpd->lasty));
view_pan_exit(C, op);
- WM_cursor_restore(C->window);
+ WM_cursor_restore(CTX_wm_window(C));
return OPERATOR_FINISHED;
}
@@ -455,12 +455,13 @@ void ED_View2D_OT_view_scrollup(wmOperatorType *ot)
/* check if step-zoom can be applied */
static short view_zoomstep_ok(bContext *C)
{
+ ARegion *ar= CTX_wm_region(C);
View2D *v2d;
/* check if there's a region in context to work with */
- if (C->region == NULL)
+ if (ar == NULL)
return 0;
- v2d= &C->region->v2d;
+ v2d= &ar->v2d;
/* check that 2d-view is zoomable */
if ((v2d->keepzoom & V2D_LOCKZOOM_X) && (v2d->keepzoom & V2D_LOCKZOOM_Y))
@@ -473,7 +474,8 @@ static short view_zoomstep_ok(bContext *C)
/* apply transform to view (i.e. adjust 'cur' rect) */
static void view_zoomstep_apply(bContext *C, wmOperator *op)
{
- View2D *v2d= &C->region->v2d;
+ ARegion *ar= CTX_wm_region(C);
+ View2D *v2d= &ar->v2d;
float dx, dy;
/* calculate amount to move view by */
@@ -494,8 +496,8 @@ static void view_zoomstep_apply(bContext *C, wmOperator *op)
UI_view2d_curRect_validate(v2d);
/* request updates to be done... */
- ED_area_tag_redraw(C->area);
- UI_view2d_sync(C->screen, v2d, V2D_LOCK_COPY);
+ ED_area_tag_redraw(CTX_wm_area(C));
+ UI_view2d_sync(CTX_wm_screen(C), v2d, V2D_LOCK_COPY);
}
/* --------------- Individual Operators ------------------- */
@@ -599,13 +601,14 @@ typedef struct v2dViewZoomData {
/* initialise panning customdata */
static int view_zoomdrag_init(bContext *C, wmOperator *op)
{
+ ARegion *ar= CTX_wm_region(C);
v2dViewZoomData *vzd;
View2D *v2d;
/* regions now have v2d-data by default, so check for region */
- if (C->region == NULL)
+ if (ar == NULL)
return 0;
- v2d= &C->region->v2d;
+ v2d= &ar->v2d;
/* check that 2d-view is zoomable */
if ((v2d->keepzoom & V2D_LOCKZOOM_X) && (v2d->keepzoom & V2D_LOCKZOOM_Y))
@@ -646,8 +649,8 @@ static void view_zoomdrag_apply(bContext *C, wmOperator *op)
UI_view2d_curRect_validate(v2d);
/* request updates to be done... */
- ED_area_tag_redraw(C->area);
- UI_view2d_sync(C->screen, v2d, V2D_LOCK_COPY);
+ ED_area_tag_redraw(CTX_wm_area(C));
+ UI_view2d_sync(CTX_wm_screen(C), v2d, V2D_LOCK_COPY);
}
/* cleanup temp customdata */
@@ -673,6 +676,7 @@ static int view_zoomdrag_exec(bContext *C, wmOperator *op)
/* set up modal operator and relevant settings */
static int view_zoomdrag_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
+ wmWindow *window= CTX_wm_window(C);
v2dViewZoomData *vzd;
View2D *v2d;
@@ -690,14 +694,14 @@ static int view_zoomdrag_invoke(bContext *C, wmOperator *op, wmEvent *event)
RNA_float_set(op->ptr, "deltay", 0);
if (v2d->keepofs & V2D_LOCKOFS_X)
- WM_cursor_modal(C->window, BC_NS_SCROLLCURSOR);
+ WM_cursor_modal(window, BC_NS_SCROLLCURSOR);
else if (v2d->keepofs & V2D_LOCKOFS_Y)
- WM_cursor_modal(C->window, BC_EW_SCROLLCURSOR);
+ WM_cursor_modal(window, BC_EW_SCROLLCURSOR);
else
- WM_cursor_modal(C->window, BC_NSEW_SCROLLCURSOR);
+ WM_cursor_modal(window, BC_NSEW_SCROLLCURSOR);
/* add temp handler */
- WM_event_add_modal_handler(C, &C->window->handlers, op);
+ WM_event_add_modal_handler(C, &window->handlers, op);
return OPERATOR_RUNNING_MODAL;
}
@@ -782,7 +786,7 @@ static int view_zoomdrag_modal(bContext *C, wmOperator *op, wmEvent *event)
/* free customdata */
view_zoomdrag_exit(C, op);
- WM_cursor_restore(C->window);
+ WM_cursor_restore(CTX_wm_window(C));
return OPERATOR_FINISHED;
}
@@ -916,7 +920,7 @@ static void scroller_activate_init(bContext *C, wmOperator *op, wmEvent *event,
{
v2dScrollerMove *vsm;
View2DScrollers *scrollers;
- ARegion *ar= C->region;
+ ARegion *ar= CTX_wm_region(C);
View2D *v2d= &ar->v2d;
float mask_size;
int x, y;
@@ -1026,8 +1030,8 @@ static void scroller_activate_apply(bContext *C, wmOperator *op)
UI_view2d_curRect_validate(v2d);
/* request updates to be done... */
- ED_area_tag_redraw(C->area);
- UI_view2d_sync(C->screen, v2d, V2D_LOCK_COPY);
+ ED_area_tag_redraw(CTX_wm_area(C));
+ UI_view2d_sync(CTX_wm_screen(C), v2d, V2D_LOCK_COPY);
}
/* handle user input for scrollers - calculations of mouse-movement need to be done here, not in the apply callback! */
@@ -1086,15 +1090,16 @@ static int scroller_activate_modal(bContext *C, wmOperator *op, wmEvent *event)
/* a click (or click drag in progress) should have occurred, so check if it happened in scrollbar */
static int scroller_activate_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
+ ARegion *ar= CTX_wm_region(C);
View2D *v2d= NULL;
short in_scroller= 0;
/* firstly, check context to see if mouse is actually in region */
// XXX isn't this the job of poll() callbacks which can't check events, but only context?
- if (C->region == NULL)
+ if (ar == NULL)
return OPERATOR_CANCELLED;
else
- v2d= &C->region->v2d;
+ v2d= &ar->v2d;
/* check if mouse in scrollbars, if they're enabled */
in_scroller= mouse_in_v2d_scrollers(C, v2d, event->x, event->y);
@@ -1121,7 +1126,7 @@ static int scroller_activate_invoke(bContext *C, wmOperator *op, wmEvent *event)
}
/* still ok, so can add */
- WM_event_add_modal_handler(C, &C->window->handlers, op);
+ WM_event_add_modal_handler(C, &CTX_wm_window(C)->handlers, op);
return OPERATOR_RUNNING_MODAL;
}
else {
diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c
index 35b7f21910a..27f70353e39 100644
--- a/source/blender/editors/screen/area.c
+++ b/source/blender/editors/screen/area.c
@@ -35,7 +35,7 @@
#include "BLI_arithb.h"
#include "BLI_rand.h"
-#include "BKE_global.h"
+#include "BKE_context.h"
#include "BKE_screen.h"
#include "BKE_utildefines.h"
@@ -95,11 +95,12 @@ static void region_draw_emboss(ARegion *ar)
void ED_region_pixelspace(const bContext *C, ARegion *ar)
{
+ wmWindow *win= CTX_wm_window(C);
int width= ar->winrct.xmax-ar->winrct.xmin+1;
int height= ar->winrct.ymax-ar->winrct.ymin+1;
- wmOrtho2(C->window, -0.375, (float)width-0.375, -0.375, (float)height-0.375);
- wmLoadIdentity(C->window);
+ wmOrtho2(win, -0.375, (float)width-0.375, -0.375, (float)height-0.375);
+ wmLoadIdentity(win);
}
void ED_region_do_listen(ARegion *ar, wmNotifier *note)
@@ -122,7 +123,7 @@ void ED_area_overdraw_flush(bContext *C)
{
ScrArea *sa;
- for(sa= C->screen->areabase.first; sa; sa= sa->next) {
+ for(sa= CTX_wm_screen(C)->areabase.first; sa; sa= sa->next) {
ARegion *ar;
for(ar= sa->regionbase.first; ar; ar= ar->next) {
@@ -144,15 +145,17 @@ void ED_area_overdraw_flush(bContext *C)
void ED_area_overdraw(bContext *C)
{
+ wmWindow *win= CTX_wm_window(C);
+ bScreen *screen= CTX_wm_screen(C);
ScrArea *sa;
/* Draw AZones, in screenspace */
- wm_subwindow_set(C->window, C->window->screen->mainwin);
+ wm_subwindow_set(win, screen->mainwin);
glEnable( GL_BLEND );
glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
- for(sa= C->screen->areabase.first; sa; sa= sa->next) {
+ for(sa= screen->areabase.first; sa; sa= sa->next) {
AZone *az;
for(az= sa->actionzones.first; az; az= az->next) {
if(az->do_draw) {
@@ -170,12 +173,14 @@ void ED_area_overdraw(bContext *C)
void ED_region_do_draw(bContext *C, ARegion *ar)
{
+ wmWindow *win= CTX_wm_window(C);
+ ScrArea *sa= CTX_wm_area(C);
ARegionType *at= ar->type;
- wm_subwindow_set(C->window, ar->swinid);
+ wm_subwindow_set(win, ar->swinid);
if(ar->swinid && at->draw) {
- UI_SetTheme(C->area);
+ UI_SetTheme(sa);
at->draw(C, ar);
UI_SetTheme(NULL);
}
@@ -193,7 +198,7 @@ void ED_region_do_draw(bContext *C, ARegion *ar)
glRecti(20, 2, 30, 12);
}
- if(C->area)
+ if(sa)
region_draw_emboss(ar);
/* XXX test: add convention to end regions always in pixel space, for drawing of borders/gestures etc */
@@ -476,7 +481,7 @@ void ED_region_init(bContext *C, ARegion *ar)
// ARegionType *at= ar->type;
/* refresh can be called before window opened */
- region_subwindow(C->wm, C->window, ar);
+ region_subwindow(CTX_wm_manager(C), CTX_wm_window(C), ar);
}
@@ -593,7 +598,7 @@ void area_newspace(bContext *C, ScrArea *sa, int type)
}
}
- ED_area_initialize(C->wm, C->window, sa);
+ ED_area_initialize(CTX_wm_manager(C), CTX_wm_window(C), sa);
/* tell WM to refresh, cursor types etc */
WM_event_add_mousemove(C);
@@ -640,13 +645,14 @@ static char *windowtype_pup(void)
static void spacefunc(struct bContext *C, void *arg1, void *arg2)
{
- area_newspace(C, C->area, C->area->butspacetype);
- ED_area_tag_redraw(C->area);
+ area_newspace(C, CTX_wm_area(C), CTX_wm_area(C)->butspacetype);
+ ED_area_tag_redraw(CTX_wm_area(C));
}
/* returns offset for next button in header */
int ED_area_header_standardbuttons(const bContext *C, uiBlock *block, int yco)
{
+ ScrArea *sa= CTX_wm_area(C);
uiBut *but;
int xco= 8;
@@ -655,7 +661,7 @@ int ED_area_header_standardbuttons(const bContext *C, uiBlock *block, int yco)
but= uiDefIconTextButC(block, ICONTEXTROW, 0, ICON_VIEW3D,
windowtype_pup(), xco, yco, XIC+10, YIC,
- &(C->area->butspacetype), 1.0, SPACEICONMAX, 0, 0,
+ &(sa->butspacetype), 1.0, SPACEICONMAX, 0, 0,
"Displays Current Window Type. "
"Click for menu of available types.");
uiButSetFunc(but, spacefunc, NULL, NULL);
@@ -663,18 +669,18 @@ int ED_area_header_standardbuttons(const bContext *C, uiBlock *block, int yco)
xco += XIC + 14;
uiBlockSetEmboss(block, UI_EMBOSSN);
- if (C->area->flag & HEADER_NO_PULLDOWN) {
+ if (sa->flag & HEADER_NO_PULLDOWN) {
uiDefIconButBitS(block, TOG, HEADER_NO_PULLDOWN, 0,
ICON_DISCLOSURE_TRI_RIGHT,
xco,yco,XIC,YIC-2,
- &(C->area->flag), 0, 0, 0, 0,
+ &(sa->flag), 0, 0, 0, 0,
"Show pulldown menus");
}
else {
uiDefIconButBitS(block, TOG, HEADER_NO_PULLDOWN, 0,
ICON_DISCLOSURE_TRI_DOWN,
xco,yco,XIC,YIC-2,
- &(C->area->flag), 0, 0, 0, 0,
+ &(sa->flag), 0, 0, 0, 0,
"Hide pulldown menus");
}
xco+=XIC;
diff --git a/source/blender/editors/screen/screen_edit.c b/source/blender/editors/screen/screen_edit.c
index fbcd27cf263..b88290bd64e 100644
--- a/source/blender/editors/screen/screen_edit.c
+++ b/source/blender/editors/screen/screen_edit.c
@@ -32,6 +32,7 @@
#include "BLI_blenlib.h"
+#include "BKE_context.h"
#include "BKE_global.h"
#include "BKE_library.h"
#include "BKE_main.h"
@@ -1015,33 +1016,33 @@ void ED_screens_initialize(wmWindowManager *wm)
void ED_region_exit(bContext *C, ARegion *ar)
{
- ARegion *prevar= C->region;
+ ARegion *prevar= CTX_wm_region(C);
- C->region= ar;
+ CTX_wm_region_set(C, ar);
WM_event_remove_handlers(C, &ar->handlers);
- C->region= prevar;
+ CTX_wm_region_set(C, prevar);
}
void ED_area_exit(bContext *C, ScrArea *sa)
{
- ScrArea *prevsa= C->area;
+ ScrArea *prevsa= CTX_wm_area(C);
ARegion *ar;
- C->area= sa;
+ CTX_wm_area_set(C, sa);
for(ar= sa->regionbase.first; ar; ar= ar->next)
ED_region_exit(C, ar);
WM_event_remove_handlers(C, &sa->handlers);
- C->area= prevsa;
+ CTX_wm_area_set(C, prevsa);
}
void ED_screen_exit(bContext *C, wmWindow *window, bScreen *screen)
{
- wmWindow *prevwin= C?C->window:NULL;
+ wmWindow *prevwin= CTX_wm_window(C);
ScrArea *sa;
ARegion *ar;
- C->window= window;
+ CTX_wm_window_set(C, window);
for(ar= screen->regionbase.first; ar; ar= ar->next)
ED_region_exit(C, ar);
@@ -1049,7 +1050,7 @@ void ED_screen_exit(bContext *C, wmWindow *window, bScreen *screen)
for(sa= screen->areabase.first; sa; sa= sa->next)
ED_area_exit(C, sa);
- C->window= prevwin;
+ CTX_wm_window_set(C, prevwin);
}
/* case when on area-edge or in azones, or outside window */
@@ -1144,11 +1145,13 @@ void ED_screen_set_subwinactive(wmWindow *win, wmEvent *event)
int ED_screen_area_active(const bContext *C)
{
+ bScreen *sc= CTX_wm_screen(C);
+ ScrArea *sa= CTX_wm_area(C);
- if(C->screen && C->area) {
+ if(sc && sa) {
ARegion *ar;
- for(ar= C->area->regionbase.first; ar; ar= ar->next)
- if(ar->swinid == C->screen->subwinactive)
+ for(ar= sa->regionbase.first; ar; ar= ar->next)
+ if(ar->swinid == sc->subwinactive)
return 1;
}
return 0;
@@ -1158,7 +1161,6 @@ int ED_screen_area_active(const bContext *C)
/* Do NOT call in area/region queues! */
void ed_screen_set(bContext *C, bScreen *sc)
{
-
if(sc->full) { /* find associated full */
bScreen *sc1;
for(sc1= G.main->screen.first; sc1; sc1= sc1->id.next) {
@@ -1171,12 +1173,11 @@ void ed_screen_set(bContext *C, bScreen *sc)
if(sc1==NULL) printf("set screen error\n");
}
- if (C->screen != sc) {
- ED_screen_exit(C, C->window, C->screen);
- C->window->screen= sc;
- C->screen= sc;
+ if (CTX_wm_screen(C) != sc) {
+ ED_screen_exit(C, CTX_wm_window(C), CTX_wm_screen(C));
+ CTX_wm_window(C)->screen= sc;
- ED_screen_refresh(C->wm, C->window);
+ ED_screen_refresh(CTX_wm_manager(C), CTX_wm_window(C));
WM_event_add_notifier(C, WM_NOTE_WINDOW_REDRAW, 0, NULL);
}
}
@@ -1188,9 +1189,9 @@ void ed_screen_fullarea(bContext *C)
ScrArea *newa, *old;
short fulltype;
- if(C->area->full) {
- sc= C->area->full; /* the old screen to restore */
- oldscreen= C->screen; /* the one disappearing */
+ if(CTX_wm_area(C)->full) {
+ sc= CTX_wm_area(C)->full; /* the old screen to restore */
+ oldscreen= CTX_wm_screen(C); /* the one disappearing */
fulltype = sc->full;
@@ -1211,7 +1212,7 @@ void ed_screen_fullarea(bContext *C)
// in autoplay screens the headers are disabled by
// default. So use the old headertype instead
- area_copy_data(old, C->area, 1); /* 1 = swap spacelist */
+ area_copy_data(old, CTX_wm_area(C), 1); /* 1 = swap spacelist */
old->full= NULL;
@@ -1222,33 +1223,33 @@ void ed_screen_fullarea(bContext *C)
}
}
else {
+ oldscreen= CTX_wm_screen(C);
+
/* is there only 1 area? */
- if(C->screen->areabase.first==C->screen->areabase.last) return;
- if(C->area->spacetype==SPACE_INFO) return;
+ if(oldscreen->areabase.first==CTX_wm_screen(C)->areabase.last) return;
+ if(CTX_wm_area(C)->spacetype==SPACE_INFO) return;
- C->screen->full = SCREENFULL;
+ oldscreen->full = SCREENFULL;
- oldscreen= C->screen;
- sc= screen_add(C->window, "temp");
+ sc= screen_add(CTX_wm_window(C), "temp");
/* returns the top small area */
- newa= area_split(C->window, sc, (ScrArea *)sc->areabase.first, 'h', 0.99f);
+ newa= area_split(CTX_wm_window(C), sc, (ScrArea *)sc->areabase.first, 'h', 0.99f);
area_newspace(C, newa, SPACE_INFO);
/* copy area */
newa= newa->prev;
- area_copy_data(newa, C->area, 1); /* 1 = swap spacelist */
+ area_copy_data(newa, CTX_wm_area(C), 1); /* 1 = swap spacelist */
- C->area->full= oldscreen;
+ CTX_wm_area(C)->full= oldscreen;
newa->full= oldscreen;
newa->next->full= oldscreen;
- C->screen= oldscreen;
ed_screen_set(C, sc);
}
/* XXX bad code: setscreen() ends with first area active. fullscreen render assumes this too */
- C->area= sc->areabase.first;
+ CTX_wm_area_set(C, sc->areabase.first);
/* XXX retopo_force_update(); */
diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c
index c4011550a07..4514d54e317 100644
--- a/source/blender/editors/screen/screen_ops.c
+++ b/source/blender/editors/screen/screen_ops.c
@@ -29,7 +29,7 @@
#include "BLI_blenlib.h"
#include "BLI_arithb.h"
-#include "BKE_global.h"
+#include "BKE_context.h"
#include "BKE_library.h"
#include "BKE_main.h"
#include "BKE_screen.h"
@@ -53,25 +53,25 @@
int ED_operator_areaactive(bContext *C)
{
- if(C->window==NULL) return 0;
- if(C->screen==NULL) return 0;
- if(C->area==NULL) return 0;
+ if(CTX_wm_window(C)==NULL) return 0;
+ if(CTX_wm_screen(C)==NULL) return 0;
+ if(CTX_wm_area(C)==NULL) return 0;
return 1;
}
int ED_operator_screenactive(bContext *C)
{
- if(C->window==NULL) return 0;
- if(C->screen==NULL) return 0;
+ if(CTX_wm_window(C)==NULL) return 0;
+ if(CTX_wm_screen(C)==NULL) return 0;
return 1;
}
/* when mouse is over area-edge */
int ED_operator_screen_mainwinactive(bContext *C)
{
- if(C->window==NULL) return 0;
- if(C->screen==NULL) return 0;
- if (C->screen->subwinactive!=C->screen->mainwin) return 0;
+ if(CTX_wm_window(C)==NULL) return 0;
+ if(CTX_wm_screen(C)==NULL) return 0;
+ if (CTX_wm_screen(C)->subwinactive!=CTX_wm_screen(C)->mainwin) return 0;
return 1;
}
@@ -141,7 +141,7 @@ AZone *is_in_area_actionzone(ScrArea *sa, int x, int y)
static int actionzone_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
- AZone *az= is_in_area_actionzone(C->area, event->x, event->y);
+ AZone *az= is_in_area_actionzone(CTX_wm_area(C), event->x, event->y);
sActionzoneData *sad;
/* quick escape */
@@ -150,12 +150,12 @@ static int actionzone_invoke(bContext *C, wmOperator *op, wmEvent *event)
/* ok we do the actionzone */
sad= op->customdata= MEM_callocN(sizeof(sActionzoneData), "sActionzoneData");
- sad->sa1= C->area;
+ sad->sa1= CTX_wm_area(C);
sad->az= az;
sad->x= event->x; sad->y= event->y;
/* add modal handler */
- WM_event_add_modal_handler(C, &C->window->handlers, op);
+ WM_event_add_modal_handler(C, &CTX_wm_window(C)->handlers, op);
return OPERATOR_RUNNING_MODAL;
}
@@ -171,14 +171,15 @@ static void actionzone_exit(bContext *C, wmOperator *op)
static void actionzone_apply(bContext *C, wmOperator *op)
{
wmEvent event;
+ wmWindow *win= CTX_wm_window(C);
- event= *(C->window->eventstate); /* XXX huh huh? make api call */
+ event= *(win->eventstate); /* XXX huh huh? make api call */
event.type= EVT_ACTIONZONE;
event.customdata= op->customdata;
event.customdatafree= TRUE;
op->customdata= NULL;
- wm_event_add(C->window, &event);
+ wm_event_add(win, &event);
}
static int actionzone_modal(bContext *C, wmOperator *op, wmEvent *event)
@@ -205,7 +206,7 @@ static int actionzone_modal(bContext *C, wmOperator *op, wmEvent *event)
if(ABS(deltax) > 12 || ABS(deltay) > 12) {
/* second area, for join */
- sad->sa2= screen_areahascursor(C->screen, event->x, event->y);
+ sad->sa2= screen_areahascursor(CTX_wm_screen(C), event->x, event->y);
/* apply sends event */
actionzone_apply(C, op);
actionzone_exit(C, op);
@@ -243,25 +244,30 @@ void ED_SCR_OT_actionzone(wmOperatorType *ot)
conventions: 'atomic' and 'dont think for user' :) */
static int screen_area_rip_op(bContext *C, wmOperator *op)
{
- wmWindow *win;
- bScreen *newsc;
+ wmWindow *newwin, *win;
+ bScreen *newsc, *sc;
+ ScrArea *sa;
rcti rect;
+ win= CTX_wm_window(C);
+ sc= CTX_wm_screen(C);
+ sa= CTX_wm_area(C);
+
/* poll() checks area context, but we don't accept full-area windows */
- if(C->screen->full != SCREENNORMAL)
+ if(sc->full != SCREENNORMAL)
return OPERATOR_CANCELLED;
/* adds window to WM */
- rect= C->area->totrct;
- BLI_translate_rcti(&rect, C->window->posx, C->window->posy);
- win= WM_window_open(C, &rect);
+ rect= sa->totrct;
+ BLI_translate_rcti(&rect, win->posx, win->posy);
+ newwin= WM_window_open(C, &rect);
/* allocs new screen and adds to newly created window, using window size */
- newsc= screen_add(win, C->screen->id.name+2);
+ newsc= screen_add(newwin, sc->id.name+2);
win->screen= newsc;
/* copy area to new screen */
- area_copy_data((ScrArea *)newsc->areabase.first, C->area, 0);
+ area_copy_data((ScrArea *)newsc->areabase.first, sa, 0);
/* screen, areas init */
WM_event_add_notifier(C, WM_NOTE_SCREEN_CHANGED, 0, NULL);
@@ -350,6 +356,7 @@ static void area_move_set_limits(bScreen *sc, int dir, int *bigger, int *smaller
/* return 0: init failed */
static int area_move_init (bContext *C, wmOperator *op)
{
+ bScreen *sc= CTX_wm_screen(C);
ScrEdge *actedge;
sAreaMoveData *md;
int x, y;
@@ -359,7 +366,7 @@ static int area_move_init (bContext *C, wmOperator *op)
y= RNA_int_get(op->ptr, "y");
/* setup */
- actedge= screen_find_active_scredge(C->screen, x, y);
+ actedge= screen_find_active_scredge(sc, x, y);
if(actedge==NULL) return 0;
md= MEM_callocN(sizeof(sAreaMoveData), "sAreaMoveData");
@@ -369,10 +376,10 @@ static int area_move_init (bContext *C, wmOperator *op)
if(md->dir=='h') md->origval= actedge->v1->vec.y;
else md->origval= actedge->v1->vec.x;
- select_connected_scredge(C->screen, actedge);
+ select_connected_scredge(sc, actedge);
/* now all vertices with 'flag==1' are the ones that can be moved. */
- area_move_set_limits(C->screen, md->dir, &md->bigger, &md->smaller);
+ area_move_set_limits(sc, md->dir, &md->bigger, &md->smaller);
return 1;
}
@@ -380,26 +387,28 @@ static int area_move_init (bContext *C, wmOperator *op)
/* moves selected screen edge amount of delta, used by split & move */
static void area_move_apply_do(bContext *C, int origval, int delta, int dir, int bigger, int smaller)
{
+ wmWindow *win= CTX_wm_window(C);
+ bScreen *sc= CTX_wm_screen(C);
ScrVert *v1;
delta= CLAMPIS(delta, -smaller, bigger);
- for (v1= C->screen->vertbase.first; v1; v1= v1->next) {
+ for (v1= sc->vertbase.first; v1; v1= v1->next) {
if (v1->flag) {
/* that way a nice AREAGRID */
- if((dir=='v') && v1->vec.x>0 && v1->vec.x<C->window->sizex-1) {
+ if((dir=='v') && v1->vec.x>0 && v1->vec.x<win->sizex-1) {
v1->vec.x= origval + delta;
if(delta != bigger && delta != -smaller) v1->vec.x-= (v1->vec.x % AREAGRID);
}
- if((dir=='h') && v1->vec.y>0 && v1->vec.y<C->window->sizey-1) {
+ if((dir=='h') && v1->vec.y>0 && v1->vec.y<win->sizey-1) {
v1->vec.y= origval + delta;
v1->vec.y+= AREAGRID-1;
v1->vec.y-= (v1->vec.y % AREAGRID);
/* prevent too small top header */
- if(v1->vec.y > C->window->sizey-AREAMINY)
- v1->vec.y= C->window->sizey-AREAMINY;
+ if(v1->vec.y > win->sizey-AREAMINY)
+ v1->vec.y= win->sizey-AREAMINY;
}
}
}
@@ -423,8 +432,8 @@ static void area_move_exit(bContext *C, wmOperator *op)
op->customdata= NULL;
/* this makes sure aligned edges will result in aligned grabbing */
- removedouble_scrverts(C->screen);
- removedouble_scredges(C->screen);
+ removedouble_scrverts(CTX_wm_screen(C));
+ removedouble_scredges(CTX_wm_screen(C));
}
static int area_move_exec(bContext *C, wmOperator *op)
@@ -448,7 +457,7 @@ static int area_move_invoke(bContext *C, wmOperator *op, wmEvent *event)
return OPERATOR_PASS_THROUGH;
/* add temp handler */
- WM_event_add_modal_handler(C, &C->window->handlers, op);
+ WM_event_add_modal_handler(C, &CTX_wm_window(C)->handlers, op);
return OPERATOR_RUNNING_MODAL;
}
@@ -575,26 +584,27 @@ typedef struct sAreaSplitData
/* generic init, no UI stuff here */
static int area_split_init(bContext *C, wmOperator *op)
{
+ ScrArea *sa= CTX_wm_area(C);
sAreaSplitData *sd;
int dir;
/* required context */
- if(C->area==NULL) return 0;
+ if(sa==NULL) return 0;
/* required properties */
dir= RNA_enum_get(op->ptr, "dir");
/* minimal size */
- if(dir=='v' && C->area->winx < 2*AREAMINX) return 0;
- if(dir=='h' && C->area->winy < 2*AREAMINY) return 0;
+ if(dir=='v' && sa->winx < 2*AREAMINX) return 0;
+ if(dir=='h' && sa->winy < 2*AREAMINY) return 0;
/* custom data */
sd= (sAreaSplitData*)MEM_callocN(sizeof (sAreaSplitData), "op_area_split");
op->customdata= sd;
- sd->sarea= C->area;
- sd->origsize= dir=='v' ? C->area->winx:C->area->winy;
- sd->origmin = dir=='v' ? C->area->totrct.xmin:C->area->totrct.ymin;
+ sd->sarea= sa;
+ sd->origsize= dir=='v' ? sa->winx:sa->winy;
+ sd->origmin = dir=='v' ? sa->totrct.xmin:sa->totrct.ymin;
return 1;
}
@@ -632,6 +642,7 @@ static ScrEdge *area_findsharededge(bScreen *screen, ScrArea *sa, ScrArea *sb)
/* do the split, return success */
static int area_split_apply(bContext *C, wmOperator *op)
{
+ bScreen *sc= CTX_wm_screen(C);
sAreaSplitData *sd= (sAreaSplitData *)op->customdata;
float fac;
int dir;
@@ -639,15 +650,15 @@ static int area_split_apply(bContext *C, wmOperator *op)
fac= RNA_float_get(op->ptr, "fac");
dir= RNA_enum_get(op->ptr, "dir");
- sd->narea= area_split(C->window, C->screen, sd->sarea, dir, fac);
+ sd->narea= area_split(CTX_wm_window(C), sc, sd->sarea, dir, fac);
if(sd->narea) {
ScrVert *sv;
- sd->nedge= area_findsharededge(C->screen, sd->sarea, sd->narea);
+ sd->nedge= area_findsharededge(sc, sd->sarea, sd->narea);
/* select newly created edge, prepare for moving edge */
- for(sv= C->screen->vertbase.first; sv; sv= sv->next)
+ for(sv= sc->vertbase.first; sv; sv= sv->next)
sv->flag = 0;
sd->nedge->v1->flag= 1;
@@ -674,8 +685,8 @@ static void area_split_exit(bContext *C, wmOperator *op)
WM_event_add_notifier(C, WM_NOTE_SCREEN_CHANGED, 0, NULL);
/* this makes sure aligned edges will result in aligned grabbing */
- removedouble_scrverts(C->screen);
- removedouble_scredges(C->screen);
+ removedouble_scrverts(CTX_wm_screen(C));
+ removedouble_scredges(CTX_wm_screen(C));
}
@@ -693,7 +704,7 @@ static int area_split_invoke(bContext *C, wmOperator *op, wmEvent *event)
return OPERATOR_PASS_THROUGH;
/* is this our *sad? if areas not equal it should be passed on */
- if(C->area!=sad->sa1 || sad->sa1!=sad->sa2)
+ if(CTX_wm_area(C)!=sad->sa1 || sad->sa1!=sad->sa2)
return OPERATOR_PASS_THROUGH;
/* prepare operator state vars */
@@ -718,10 +729,10 @@ static int area_split_invoke(bContext *C, wmOperator *op, wmEvent *event)
/* do the split */
if(area_split_apply(C, op)) {
- area_move_set_limits(C->screen, dir, &sd->bigger, &sd->smaller);
+ area_move_set_limits(CTX_wm_screen(C), dir, &sd->bigger, &sd->smaller);
/* add temp handler for edge move or cancel */
- WM_event_add_modal_handler(C, &C->window->handlers, op);
+ WM_event_add_modal_handler(C, &CTX_wm_window(C)->handlers, op);
return OPERATOR_RUNNING_MODAL;
}
@@ -753,9 +764,9 @@ static int area_split_cancel(bContext *C, wmOperator *op)
{
sAreaSplitData *sd= (sAreaSplitData *)op->customdata;
- if (screen_area_join(C, C->screen, sd->sarea, sd->narea)) {
- if (C->area == sd->narea) {
- C->area = NULL;
+ if (screen_area_join(C, CTX_wm_screen(C), sd->sarea, sd->narea)) {
+ if (CTX_wm_area(C) == sd->narea) {
+ CTX_wm_area_set(C, NULL);
}
sd->narea = NULL;
}
@@ -837,7 +848,7 @@ static int frame_offset_exec(bContext *C, wmOperator *op)
delta = RNA_int_get(op->ptr, "delta");
- C->scene->r.cfra += delta;
+ CTX_data_scene(C)->r.cfra += delta;
WM_event_add_notifier(C, WM_NOTE_WINDOW_REDRAW, 0, NULL);
/* XXX: add WM_NOTE_TIME_CHANGED? */
@@ -864,20 +875,20 @@ void ED_SCR_OT_frame_offset(wmOperatorType *ot)
/* function to be called outside UI context, or for redo */
static int screen_set_exec(bContext *C, wmOperator *op)
{
- bScreen *screen= C->screen;
+ bScreen *screen= CTX_wm_screen(C);
int delta= RNA_int_get(op->ptr, "delta");
/* this screen is 'fake', solve later XXX */
- if(C->area->full)
+ if(CTX_wm_area(C)->full)
return OPERATOR_CANCELLED;
if(delta==1) {
screen= screen->id.next;
- if(screen==NULL) screen= G.main->screen.first;
+ if(screen==NULL) screen= CTX_data_main(C)->screen.first;
}
else if(delta== -1) {
screen= screen->id.prev;
- if(screen==NULL) screen= G.main->screen.last;
+ if(screen==NULL) screen= CTX_data_main(C)->screen.last;
}
else {
screen= NULL;
@@ -979,8 +990,8 @@ static int area_join_init(bContext *C, wmOperator *op)
x2= RNA_int_get(op->ptr, "x2");
y2= RNA_int_get(op->ptr, "y2");
- sa1 = screen_areahascursor(C->screen, x1, y1);
- sa2 = screen_areahascursor(C->screen, x2, y2);
+ sa1 = screen_areahascursor(CTX_wm_screen(C), x1, y1);
+ sa2 = screen_areahascursor(CTX_wm_screen(C), x2, y2);
if(sa1==NULL || sa2==NULL || sa1==sa2)
return 0;
@@ -1002,11 +1013,11 @@ static int area_join_apply(bContext *C, wmOperator *op)
sAreaJoinData *jd = (sAreaJoinData *)op->customdata;
if (!jd) return 0;
- if(!screen_area_join(C, C->screen, jd->sa1, jd->sa2)){
+ if(!screen_area_join(C, CTX_wm_screen(C), jd->sa1, jd->sa2)){
return 0;
}
- if (C->area == jd->sa2) {
- C->area = NULL;
+ if (CTX_wm_area(C) == jd->sa2) {
+ CTX_wm_area_set(C, NULL);
}
return 1;
@@ -1021,9 +1032,9 @@ static void area_join_exit(bContext *C, wmOperator *op)
}
/* this makes sure aligned edges will result in aligned grabbing */
- removedouble_scredges(C->screen);
- removenotused_scredges(C->screen);
- removenotused_scrverts(C->screen);
+ removedouble_scredges(CTX_wm_screen(C));
+ removenotused_scredges(CTX_wm_screen(C));
+ removenotused_scrverts(CTX_wm_screen(C));
}
static int area_join_exec(bContext *C, wmOperator *op)
@@ -1062,7 +1073,7 @@ static int area_join_invoke(bContext *C, wmOperator *op, wmEvent *event)
return OPERATOR_PASS_THROUGH;
/* add temp handler */
- WM_event_add_modal_handler(C, &C->window->handlers, op);
+ WM_event_add_modal_handler(C, &CTX_wm_window(C)->handlers, op);
return OPERATOR_RUNNING_MODAL;
}
@@ -1093,6 +1104,7 @@ static int area_join_cancel(bContext *C, wmOperator *op)
/* modal callback while selecting area (space) that will be removed */
static int area_join_modal(bContext *C, wmOperator *op, wmEvent *event)
{
+ bScreen *sc= CTX_wm_screen(C);
sAreaJoinData *jd = (sAreaJoinData *)op->customdata;
/* execute the events */
@@ -1100,12 +1112,12 @@ static int area_join_modal(bContext *C, wmOperator *op, wmEvent *event)
case MOUSEMOVE:
{
- ScrArea *sa = screen_areahascursor(C->screen, event->x, event->y);
+ ScrArea *sa = screen_areahascursor(sc, event->x, event->y);
int dir;
if (sa) {
if (jd->sa1 != sa) {
- dir = area_getorientation(C->screen, jd->sa1, sa);
+ dir = area_getorientation(sc, jd->sa1, sa);
if (dir >= 0) {
if (jd->sa2) jd->sa2->flag &= ~AREA_FLAG_DRAWJOINTO;
jd->sa2 = sa;
@@ -1116,7 +1128,7 @@ static int area_join_modal(bContext *C, wmOperator *op, wmEvent *event)
we check if area has common border with the one marked for removal
in this case we can swap areas.
*/
- dir = area_getorientation(C->screen, sa, jd->sa2);
+ dir = area_getorientation(sc, sa, jd->sa2);
if (dir >= 0) {
if (jd->sa1) jd->sa1->flag &= ~AREA_FLAG_DRAWJOINFROM;
if (jd->sa2) jd->sa2->flag &= ~AREA_FLAG_DRAWJOINTO;
@@ -1142,13 +1154,13 @@ static int area_join_modal(bContext *C, wmOperator *op, wmEvent *event)
jd->sa2 = sa;
if (jd->sa1) jd->sa1->flag |= AREA_FLAG_DRAWJOINFROM;
if (jd->sa2) jd->sa2->flag |= AREA_FLAG_DRAWJOINTO;
- dir = area_getorientation(C->screen, jd->sa1, jd->sa2);
+ dir = area_getorientation(sc, jd->sa1, jd->sa2);
if (dir < 0) {
printf("oops, didn't expect that!\n");
}
}
else {
- dir = area_getorientation(C->screen, jd->sa1, sa);
+ dir = area_getorientation(sc, jd->sa1, sa);
if (dir >= 0) {
if (jd->sa2) jd->sa2->flag &= ~AREA_FLAG_DRAWJOINTO;
jd->sa2 = sa;
@@ -1207,7 +1219,7 @@ void ED_SCR_OT_area_join(wmOperatorType *ot)
static int repeat_last_exec(bContext *C, wmOperator *op)
{
- wmOperator *lastop= C->wm->operators.last;
+ wmOperator *lastop= CTX_wm_manager(C)->operators.last;
if(lastop) {
printf("repeat %s\n", lastop->type->idname);
@@ -1236,17 +1248,19 @@ void ED_SCR_OT_repeat_last(wmOperatorType *ot)
/* insert a region in the area region list */
static int region_split_exec(bContext *C, wmOperator *op)
{
- ARegion *newar= BKE_area_region_copy(C->region);
+ ScrArea *sa= CTX_wm_area(C);
+ ARegion *ar= CTX_wm_region(C);
+ ARegion *newar= BKE_area_region_copy(ar);
int dir= RNA_enum_get(op->ptr, "dir");
- BLI_insertlinkafter(&C->area->regionbase, C->region, newar);
+ BLI_insertlinkafter(&sa->regionbase, CTX_wm_region(C), newar);
- newar->alignment= C->region->alignment;
+ newar->alignment= ar->alignment;
if(dir=='h')
- C->region->alignment= RGN_ALIGN_HSPLIT;
+ ar->alignment= RGN_ALIGN_HSPLIT;
else
- C->region->alignment= RGN_ALIGN_VSPLIT;
+ ar->alignment= RGN_ALIGN_VSPLIT;
WM_event_add_notifier(C, WM_NOTE_SCREEN_CHANGED, 0, NULL);
@@ -1276,14 +1290,16 @@ void ED_SCR_OT_region_split(wmOperatorType *ot)
/* flip a region alignment */
static int region_flip_exec(bContext *C, wmOperator *op)
{
- if(C->region->alignment==RGN_ALIGN_TOP)
- C->region->alignment= RGN_ALIGN_BOTTOM;
- else if(C->region->alignment==RGN_ALIGN_BOTTOM)
- C->region->alignment= RGN_ALIGN_TOP;
- else if(C->region->alignment==RGN_ALIGN_LEFT)
- C->region->alignment= RGN_ALIGN_RIGHT;
- else if(C->region->alignment==RGN_ALIGN_RIGHT)
- C->region->alignment= RGN_ALIGN_LEFT;
+ ARegion *ar= CTX_wm_region(C);
+
+ if(ar->alignment==RGN_ALIGN_TOP)
+ ar->alignment= RGN_ALIGN_BOTTOM;
+ else if(ar->alignment==RGN_ALIGN_BOTTOM)
+ ar->alignment= RGN_ALIGN_TOP;
+ else if(ar->alignment==RGN_ALIGN_LEFT)
+ ar->alignment= RGN_ALIGN_RIGHT;
+ else if(ar->alignment==RGN_ALIGN_RIGHT)
+ ar->alignment= RGN_ALIGN_LEFT;
WM_event_add_notifier(C, WM_NOTE_SCREEN_CHANGED, 0, NULL);
diff --git a/source/blender/editors/space_action/action_header.c b/source/blender/editors/space_action/action_header.c
index beca0f07748..fc0299b0851 100644
--- a/source/blender/editors/space_action/action_header.c
+++ b/source/blender/editors/space_action/action_header.c
@@ -38,7 +38,7 @@
#include "BLI_blenlib.h"
-#include "BKE_global.h"
+#include "BKE_context.h"
#include "BKE_screen.h"
#include "ED_screen.h"
@@ -66,7 +66,7 @@ static void do_viewmenu(bContext *C, void *arg, int event)
static uiBlock *dummy_viewmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
{
- ScrArea *curarea= C->area;
+ ScrArea *curarea= CTX_wm_area(C);
uiBlock *block;
short yco= 0, menuwidth=120;
@@ -99,7 +99,7 @@ static void do_action_buttons(bContext *C, void *arg, int event)
void action_header_buttons(const bContext *C, ARegion *ar)
{
- ScrArea *sa= C->area;
+ ScrArea *sa= CTX_wm_area(C);
uiBlock *block;
int xco, yco= 3;
@@ -115,7 +115,7 @@ void action_header_buttons(const bContext *C, ARegion *ar)
uiBlockSetEmboss(block, UI_EMBOSSP);
xmax= GetButStringLength("View");
- uiDefPulldownBut(block, dummy_viewmenu, C->area,
+ uiDefPulldownBut(block, dummy_viewmenu, CTX_wm_area(C),
"View", xco, yco-2, xmax-3, 24, "");
xco+=XIC+xmax;
}
diff --git a/source/blender/editors/space_action/space_action.c b/source/blender/editors/space_action/space_action.c
index 26c99734d2d..35b5d592637 100644
--- a/source/blender/editors/space_action/space_action.c
+++ b/source/blender/editors/space_action/space_action.c
@@ -42,7 +42,7 @@
#include "BLI_rand.h"
#include "BKE_colortools.h"
-#include "BKE_global.h"
+#include "BKE_context.h"
#include "BKE_screen.h"
#include "ED_space_api.h"
@@ -159,7 +159,7 @@ static void action_main_area_init(wmWindowManager *wm, ARegion *ar)
static void action_main_area_draw(const bContext *C, ARegion *ar)
{
/* draw entirely, view changes should be handled here */
- // SpaceAction *saction= C->area->spacedata.first;
+ // SpaceAction *saction= (SpaceAction*)CTX_wm_space_data(C);
View2D *v2d= &ar->v2d;
float col[3];
diff --git a/source/blender/editors/space_api/space.c b/source/blender/editors/space_api/space.c
index 1d9e3ac97ff..3112cfffb22 100644
--- a/source/blender/editors/space_api/space.c
+++ b/source/blender/editors/space_api/space.c
@@ -34,7 +34,7 @@
#include "BLI_blenlib.h"
#include "BLI_arithb.h"
-#include "BKE_global.h"
+#include "BKE_context.h"
#include "BKE_screen.h"
#include "ED_screen.h"
diff --git a/source/blender/editors/space_api/spacetypes.c b/source/blender/editors/space_api/spacetypes.c
index 59198aaf3ba..2e958a4d6dc 100644
--- a/source/blender/editors/space_api/spacetypes.c
+++ b/source/blender/editors/space_api/spacetypes.c
@@ -29,7 +29,7 @@
#include "DNA_windowmanager_types.h"
-#include "BKE_global.h"
+#include "BKE_context.h"
#include "BKE_screen.h"
#include "UI_interface.h"
diff --git a/source/blender/editors/space_buttons/buttons_header.c b/source/blender/editors/space_buttons/buttons_header.c
index 9ffcc107753..74e062f5888 100644
--- a/source/blender/editors/space_buttons/buttons_header.c
+++ b/source/blender/editors/space_buttons/buttons_header.c
@@ -38,7 +38,7 @@
#include "BLI_blenlib.h"
-#include "BKE_global.h"
+#include "BKE_context.h"
#include "BKE_screen.h"
#include "ED_screen.h"
@@ -66,7 +66,7 @@ static void do_viewmenu(bContext *C, void *arg, int event)
static uiBlock *dummy_viewmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
{
- ScrArea *curarea= C->area;
+ ScrArea *curarea= CTX_wm_area(C);
uiBlock *block;
short yco= 0, menuwidth=120;
@@ -106,8 +106,8 @@ static void do_buttons_buttons(bContext *C, void *arg, int event)
void buttons_header_buttons(const bContext *C, ARegion *ar)
{
- ScrArea *sa= C->area;
- SpaceButs *sbuts= sa->spacedata.first;
+ ScrArea *sa= CTX_wm_area(C);
+ SpaceButs *sbuts= (SpaceButs*)CTX_wm_space_data(C);
uiBlock *block;
int xco, yco= 3;
@@ -123,7 +123,7 @@ void buttons_header_buttons(const bContext *C, ARegion *ar)
uiBlockSetEmboss(block, UI_EMBOSSP);
xmax= GetButStringLength("View");
- uiDefPulldownBut(block, dummy_viewmenu, C->area,
+ uiDefPulldownBut(block, dummy_viewmenu, CTX_wm_area(C),
"View", xco, yco-2, xmax-3, 24, "");
xco+=XIC+xmax;
@@ -182,7 +182,7 @@ void buttons_header_buttons(const bContext *C, ARegion *ar)
uiBlockEndAlign(block);
xco+=XIC;
- uiDefButI(block, NUM, B_NEWFRAME, "", (xco+20),yco,60,YIC, &(C->scene->r.cfra), 1.0, MAXFRAMEF, 0, 0, "Displays Current Frame of animation. Click to change.");
+ uiDefButI(block, NUM, B_NEWFRAME, "", (xco+20),yco,60,YIC, &(CTX_data_scene(C)->r.cfra), 1.0, MAXFRAMEF, 0, 0, "Displays Current Frame of animation. Click to change.");
xco+= 80;
// XXX buttons_active_id(&id, &idfrom);
diff --git a/source/blender/editors/space_buttons/space_buttons.c b/source/blender/editors/space_buttons/space_buttons.c
index 9ed56afec18..6819a28406d 100644
--- a/source/blender/editors/space_buttons/space_buttons.c
+++ b/source/blender/editors/space_buttons/space_buttons.c
@@ -41,7 +41,7 @@
#include "BLI_rand.h"
#include "BKE_colortools.h"
-#include "BKE_global.h"
+#include "BKE_context.h"
#include "BKE_screen.h"
#include "ED_space_api.h"
@@ -158,7 +158,7 @@ static void buttons_main_area_init(wmWindowManager *wm, ARegion *ar)
static void buttons_main_area_draw(const bContext *C, ARegion *ar)
{
/* draw entirely, view changes should be handled here */
- // SpaceButs *sbuts= C->area->spacedata.first;
+ // SpaceButs *sbuts= (SpaceButs*)CTX_wm_space_data(C);
View2D *v2d= &ar->v2d;
float col[3], fac;
diff --git a/source/blender/editors/space_file/file_header.c b/source/blender/editors/space_file/file_header.c
index c1dd69de1be..3669249648f 100644
--- a/source/blender/editors/space_file/file_header.c
+++ b/source/blender/editors/space_file/file_header.c
@@ -38,7 +38,7 @@
#include "BLI_blenlib.h"
-#include "BKE_global.h"
+#include "BKE_context.h"
#include "BKE_screen.h"
#include "ED_screen.h"
@@ -66,7 +66,7 @@ static void do_viewmenu(bContext *C, void *arg, int event)
static uiBlock *dummy_viewmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
{
- ScrArea *curarea= C->area;
+ ScrArea *curarea= CTX_wm_area(C);
uiBlock *block;
short yco= 0, menuwidth=120;
@@ -100,7 +100,7 @@ static void do_file_buttons(bContext *C, void *arg, int event)
void file_header_buttons(const bContext *C, ARegion *ar)
{
- ScrArea *sa= C->area;
+ ScrArea *sa= CTX_wm_area(C);
uiBlock *block;
int xco, yco= 3;
@@ -116,7 +116,7 @@ void file_header_buttons(const bContext *C, ARegion *ar)
uiBlockSetEmboss(block, UI_EMBOSSP);
xmax= GetButStringLength("View");
- uiDefPulldownBut(block, dummy_viewmenu, C->area,
+ uiDefPulldownBut(block, dummy_viewmenu, CTX_wm_area(C),
"View", xco, yco-2, xmax-3, 24, "");
xco+=XIC+xmax;
}
diff --git a/source/blender/editors/space_file/filesel.c b/source/blender/editors/space_file/filesel.c
index 36e2bae133b..ea20758884d 100644
--- a/source/blender/editors/space_file/filesel.c
+++ b/source/blender/editors/space_file/filesel.c
@@ -54,7 +54,7 @@
#include "BLI_storage_types.h"
#include "BLI_dynstr.h"
-#include "BKE_global.h"
+#include "BKE_context.h"
#include "BKE_screen.h"
#include "ED_screen.h"
diff --git a/source/blender/editors/space_file/space_file.c b/source/blender/editors/space_file/space_file.c
index b8bc573e2cd..5e19a993b73 100644
--- a/source/blender/editors/space_file/space_file.c
+++ b/source/blender/editors/space_file/space_file.c
@@ -43,7 +43,7 @@
#include "BLI_rand.h"
#include "BKE_colortools.h"
-#include "BKE_global.h"
+#include "BKE_context.h"
#include "BKE_screen.h"
#include "ED_space_api.h"
@@ -141,7 +141,7 @@ static void file_main_area_init(wmWindowManager *wm, ARegion *ar)
static void file_main_area_draw(const bContext *C, ARegion *ar)
{
/* draw entirely, view changes should be handled here */
- // SpaceFile *sfile= C->area->spacedata.first;
+ // SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C);
View2D *v2d= &ar->v2d;
float col[3];
diff --git a/source/blender/editors/space_image/image_header.c b/source/blender/editors/space_image/image_header.c
index a9cf0e03fe8..f741a7d44c0 100644
--- a/source/blender/editors/space_image/image_header.c
+++ b/source/blender/editors/space_image/image_header.c
@@ -38,7 +38,7 @@
#include "BLI_blenlib.h"
-#include "BKE_global.h"
+#include "BKE_context.h"
#include "BKE_screen.h"
#include "ED_screen.h"
@@ -66,7 +66,7 @@ static void do_viewmenu(bContext *C, void *arg, int event)
static uiBlock *dummy_viewmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
{
- ScrArea *curarea= C->area;
+ ScrArea *curarea= CTX_wm_area(C);
uiBlock *block;
short yco= 0, menuwidth=120;
@@ -99,7 +99,7 @@ static void do_image_buttons(bContext *C, void *arg, int event)
void image_header_buttons(const bContext *C, ARegion *ar)
{
- ScrArea *sa= C->area;
+ ScrArea *sa= CTX_wm_area(C);
uiBlock *block;
int xco, yco= 3;
@@ -115,7 +115,7 @@ void image_header_buttons(const bContext *C, ARegion *ar)
uiBlockSetEmboss(block, UI_EMBOSSP);
xmax= GetButStringLength("View");
- uiDefPulldownBut(block, dummy_viewmenu, C->area,
+ uiDefPulldownBut(block, dummy_viewmenu, CTX_wm_area(C),
"View", xco, yco-2, xmax-3, 24, "");
xco+=XIC+xmax;
}
diff --git a/source/blender/editors/space_image/space_image.c b/source/blender/editors/space_image/space_image.c
index 7a96fb0622c..ca642072829 100644
--- a/source/blender/editors/space_image/space_image.c
+++ b/source/blender/editors/space_image/space_image.c
@@ -42,7 +42,7 @@
#include "BLI_rand.h"
#include "BKE_colortools.h"
-#include "BKE_global.h"
+#include "BKE_context.h"
#include "BKE_screen.h"
#include "ED_space_api.h"
@@ -141,7 +141,7 @@ static void image_main_area_init(wmWindowManager *wm, ARegion *ar)
static void image_main_area_draw(const bContext *C, ARegion *ar)
{
/* draw entirely, view changes should be handled here */
- // SpaceImage *simage= C->area->spacedata.first;
+ // SpaceImage *simage= (SpaceImage*)CTX_wm_space_data(C);
View2D *v2d= &ar->v2d;
float col[3];
diff --git a/source/blender/editors/space_info/info_header.c b/source/blender/editors/space_info/info_header.c
index efaae1afb2e..9d6c7be9898 100644
--- a/source/blender/editors/space_info/info_header.c
+++ b/source/blender/editors/space_info/info_header.c
@@ -38,7 +38,7 @@
#include "BLI_blenlib.h"
-#include "BKE_global.h"
+#include "BKE_context.h"
#include "BKE_screen.h"
#include "ED_screen.h"
@@ -66,7 +66,7 @@ static void do_viewmenu(bContext *C, void *arg, int event)
static uiBlock *dummy_viewmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
{
- ScrArea *curarea= C->area;
+ ScrArea *curarea= CTX_wm_area(C);
uiBlock *block;
short yco= 0, menuwidth=120;
@@ -100,7 +100,7 @@ static void do_info_buttons(bContext *C, void *arg, int event)
void info_header_buttons(const bContext *C, ARegion *ar)
{
- ScrArea *sa= C->area;
+ ScrArea *sa= CTX_wm_area(C);
uiBlock *block;
int xco, yco= 3;
@@ -116,23 +116,23 @@ void info_header_buttons(const bContext *C, ARegion *ar)
uiBlockSetEmboss(block, UI_EMBOSSP);
xmax= GetButStringLength("File");
- uiDefPulldownBut(block, dummy_viewmenu, C->area, "File", xco, yco, xmax-3, 22, "");
+ uiDefPulldownBut(block, dummy_viewmenu, sa, "File", xco, yco, xmax-3, 22, "");
xco+= xmax;
xmax= GetButStringLength("Add");
- uiDefPulldownBut(block, dummy_viewmenu, C->area, "Add", xco, yco, xmax-3, 22, "");
+ uiDefPulldownBut(block, dummy_viewmenu, sa, "Add", xco, yco, xmax-3, 22, "");
xco+= xmax;
xmax= GetButStringLength("Timeline");
- uiDefPulldownBut(block, dummy_viewmenu, C->area, "Timeline", xco, yco, xmax-3, 22, "");
+ uiDefPulldownBut(block, dummy_viewmenu, sa, "Timeline", xco, yco, xmax-3, 22, "");
xco+= xmax;
xmax= GetButStringLength("Game");
- uiDefPulldownBut(block, dummy_viewmenu, C->area, "Game", xco, yco, xmax-3, 22, "");
+ uiDefPulldownBut(block, dummy_viewmenu, sa, "Game", xco, yco, xmax-3, 22, "");
xco+= xmax;
xmax= GetButStringLength("Render");
- uiDefPulldownBut(block, dummy_viewmenu, C->area, "Render", xco, yco, xmax-3, 22, "");
+ uiDefPulldownBut(block, dummy_viewmenu, sa, "Render", xco, yco, xmax-3, 22, "");
xco+= xmax;
xmax= GetButStringLength("Help");
diff --git a/source/blender/editors/space_info/space_info.c b/source/blender/editors/space_info/space_info.c
index 7ef08495ae1..ae6b4333150 100644
--- a/source/blender/editors/space_info/space_info.c
+++ b/source/blender/editors/space_info/space_info.c
@@ -40,8 +40,8 @@
#include "BLI_arithb.h"
#include "BLI_rand.h"
+#include "BKE_context.h"
#include "BKE_colortools.h"
-#include "BKE_global.h"
#include "BKE_screen.h"
#include "ED_space_api.h"
@@ -129,7 +129,7 @@ static void info_main_area_init(wmWindowManager *wm, ARegion *ar)
static void info_main_area_draw(const bContext *C, ARegion *ar)
{
/* draw entirely, view changes should be handled here */
- // SpaceInfo *sinfo= C->area->spacedata.first;
+ // SpaceInfo *sinfo= (SpaceInfo*)CTX_wm_space_data(C);
View2D *v2d= &ar->v2d;
float col[3];
diff --git a/source/blender/editors/space_ipo/ipo_header.c b/source/blender/editors/space_ipo/ipo_header.c
index 61f7b80f703..bf088cb700e 100644
--- a/source/blender/editors/space_ipo/ipo_header.c
+++ b/source/blender/editors/space_ipo/ipo_header.c
@@ -38,7 +38,7 @@
#include "BLI_blenlib.h"
-#include "BKE_global.h"
+#include "BKE_context.h"
#include "BKE_screen.h"
#include "ED_screen.h"
@@ -66,7 +66,7 @@ static void do_viewmenu(bContext *C, void *arg, int event)
static uiBlock *dummy_viewmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
{
- ScrArea *curarea= C->area;
+ ScrArea *curarea= CTX_wm_area(C);
uiBlock *block;
short yco= 0, menuwidth=120;
@@ -99,7 +99,7 @@ static void do_ipo_buttons(bContext *C, void *arg, int event)
void ipo_header_buttons(const bContext *C, ARegion *ar)
{
- ScrArea *sa= C->area;
+ ScrArea *sa= CTX_wm_area(C);
uiBlock *block;
int xco, yco= 3;
@@ -115,7 +115,7 @@ void ipo_header_buttons(const bContext *C, ARegion *ar)
uiBlockSetEmboss(block, UI_EMBOSSP);
xmax= GetButStringLength("View");
- uiDefPulldownBut(block, dummy_viewmenu, C->area,
+ uiDefPulldownBut(block, dummy_viewmenu, CTX_wm_area(C),
"View", xco, yco-2, xmax-3, 24, "");
}
diff --git a/source/blender/editors/space_ipo/space_ipo.c b/source/blender/editors/space_ipo/space_ipo.c
index 325d14120ae..1c1c5997ee7 100644
--- a/source/blender/editors/space_ipo/space_ipo.c
+++ b/source/blender/editors/space_ipo/space_ipo.c
@@ -41,7 +41,7 @@
#include "BLI_arithb.h"
#include "BLI_rand.h"
-#include "BKE_global.h"
+#include "BKE_context.h"
#include "BKE_screen.h"
#include "ED_space_api.h"
@@ -149,7 +149,7 @@ static SpaceLink *ipo_duplicate(SpaceLink *sl)
// XXX this should be defined in some general lib for anim editors...
static void draw_cfra(const bContext *C, SpaceIpo *sipo, View2D *v2d)
{
- Scene *scene= C->scene;
+ Scene *scene= CTX_data_scene(C);
float vec[2];
//vec[0] = get_ipo_cfra_from_cfra(sipo, scene->r.cfra);
@@ -168,7 +168,7 @@ static void draw_cfra(const bContext *C, SpaceIpo *sipo, View2D *v2d)
#if 0
if(sipo->blocktype==ID_OB) {
- ob= (G.scene->basact) ? (G.scene->basact->object) : 0;
+ ob= (scene->basact) ? (scene->basact->object) : 0;
if (ob && (ob->ipoflag & OB_OFFS_OB) && (give_timeoffset(ob)!=0.0)) {
vec[0]-= give_timeoffset(ob);
@@ -204,7 +204,7 @@ static void ipo_main_area_init(wmWindowManager *wm, ARegion *ar)
static void ipo_main_area_draw(const bContext *C, ARegion *ar)
{
/* draw entirely, view changes should be handled here */
- SpaceIpo *sipo= C->area->spacedata.first;
+ SpaceIpo *sipo= (SpaceIpo*)CTX_wm_space_data(C);
View2D *v2d= &ar->v2d;
View2DGrid *grid;
View2DScrollers *scrollers;
diff --git a/source/blender/editors/space_nla/nla_header.c b/source/blender/editors/space_nla/nla_header.c
index 5fee33b8aa5..a2069b1aa99 100644
--- a/source/blender/editors/space_nla/nla_header.c
+++ b/source/blender/editors/space_nla/nla_header.c
@@ -38,7 +38,7 @@
#include "BLI_blenlib.h"
-#include "BKE_global.h"
+#include "BKE_context.h"
#include "BKE_screen.h"
#include "ED_screen.h"
@@ -66,7 +66,7 @@ static void do_viewmenu(bContext *C, void *arg, int event)
static uiBlock *dummy_viewmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
{
- ScrArea *curarea= C->area;
+ ScrArea *curarea= CTX_wm_area(C);
uiBlock *block;
short yco= 0, menuwidth=120;
@@ -99,7 +99,7 @@ static void do_nla_buttons(bContext *C, void *arg, int event)
void nla_header_buttons(const bContext *C, ARegion *ar)
{
- ScrArea *sa= C->area;
+ ScrArea *sa= CTX_wm_area(C);
uiBlock *block;
int xco, yco= 3;
@@ -115,7 +115,7 @@ void nla_header_buttons(const bContext *C, ARegion *ar)
uiBlockSetEmboss(block, UI_EMBOSSP);
xmax= GetButStringLength("View");
- uiDefPulldownBut(block, dummy_viewmenu, C->area,
+ uiDefPulldownBut(block, dummy_viewmenu, CTX_wm_area(C),
"View", xco, yco-2, xmax-3, 24, "");
xco+=XIC+xmax;
}
diff --git a/source/blender/editors/space_nla/space_nla.c b/source/blender/editors/space_nla/space_nla.c
index 71c5a8c0fe4..6bb42527241 100644
--- a/source/blender/editors/space_nla/space_nla.c
+++ b/source/blender/editors/space_nla/space_nla.c
@@ -42,7 +42,7 @@
#include "BLI_rand.h"
#include "BKE_colortools.h"
-#include "BKE_global.h"
+#include "BKE_context.h"
#include "BKE_screen.h"
#include "ED_space_api.h"
@@ -158,7 +158,7 @@ static void nla_main_area_init(wmWindowManager *wm, ARegion *ar)
static void nla_main_area_draw(const bContext *C, ARegion *ar)
{
/* draw entirely, view changes should be handled here */
- // SpaceNla *snla= C->area->spacedata.first;
+ // SpaceNla *snla= (SpaceNla*)CTX_wm_space_data(C);
View2D *v2d= &ar->v2d;
float col[3];
diff --git a/source/blender/editors/space_node/node_header.c b/source/blender/editors/space_node/node_header.c
index 4252a36e4c9..5614f643578 100644
--- a/source/blender/editors/space_node/node_header.c
+++ b/source/blender/editors/space_node/node_header.c
@@ -38,7 +38,7 @@
#include "BLI_blenlib.h"
-#include "BKE_global.h"
+#include "BKE_context.h"
#include "BKE_screen.h"
#include "ED_screen.h"
@@ -66,7 +66,7 @@ static void do_viewmenu(bContext *C, void *arg, int event)
static uiBlock *dummy_viewmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
{
- ScrArea *curarea= C->area;
+ ScrArea *curarea= CTX_wm_area(C);
uiBlock *block;
short yco= 0, menuwidth=120;
@@ -99,7 +99,7 @@ static void do_node_buttons(bContext *C, void *arg, int event)
void node_header_buttons(const bContext *C, ARegion *ar)
{
- ScrArea *sa= C->area;
+ ScrArea *sa= CTX_wm_area(C);
uiBlock *block;
int xco, yco= 3;
@@ -115,7 +115,7 @@ void node_header_buttons(const bContext *C, ARegion *ar)
uiBlockSetEmboss(block, UI_EMBOSSP);
xmax= GetButStringLength("View");
- uiDefPulldownBut(block, dummy_viewmenu, C->area,
+ uiDefPulldownBut(block, dummy_viewmenu, CTX_wm_area(C),
"View", xco, yco-2, xmax-3, 24, "");
}
diff --git a/source/blender/editors/space_node/space_node.c b/source/blender/editors/space_node/space_node.c
index ba460900bf2..642fe92d29b 100644
--- a/source/blender/editors/space_node/space_node.c
+++ b/source/blender/editors/space_node/space_node.c
@@ -42,7 +42,7 @@
#include "BLI_rand.h"
#include "BKE_colortools.h"
-#include "BKE_global.h"
+#include "BKE_context.h"
#include "BKE_screen.h"
#include "ED_space_api.h"
@@ -152,7 +152,7 @@ static void node_main_area_init(wmWindowManager *wm, ARegion *ar)
static void node_main_area_draw(const bContext *C, ARegion *ar)
{
/* draw entirely, view changes should be handled here */
- // SpaceNode *snode= C->area->spacedata.first;
+ // SpaceNode *snode= (SpaceNode*)CTX_wm_space_data(C);
View2D *v2d= &ar->v2d;
//View2DGrid *grid;
float col[3];
diff --git a/source/blender/editors/space_outliner/outliner_header.c b/source/blender/editors/space_outliner/outliner_header.c
index 5a56e8ef0f1..fd2f6fc7576 100644
--- a/source/blender/editors/space_outliner/outliner_header.c
+++ b/source/blender/editors/space_outliner/outliner_header.c
@@ -38,7 +38,7 @@
#include "BLI_blenlib.h"
-#include "BKE_global.h"
+#include "BKE_context.h"
#include "BKE_screen.h"
#include "ED_screen.h"
@@ -66,7 +66,7 @@ static void do_viewmenu(bContext *C, void *arg, int event)
static uiBlock *dummy_viewmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
{
- ScrArea *curarea= C->area;
+ ScrArea *curarea= CTX_wm_area(C);
uiBlock *block;
short yco= 0, menuwidth=120;
@@ -99,8 +99,8 @@ static void do_outliner_buttons(bContext *C, void *arg, int event)
void outliner_header_buttons(const bContext *C, ARegion *ar)
{
- ScrArea *sa= C->area;
- SpaceOops *soutliner= sa->spacedata.first;
+ ScrArea *sa= CTX_wm_area(C);
+ SpaceOops *soutliner= (SpaceOops*)CTX_wm_space_data(C);
uiBlock *block;
int xco, yco= 3;
char *path;
@@ -117,7 +117,7 @@ void outliner_header_buttons(const bContext *C, ARegion *ar)
uiBlockSetEmboss(block, UI_EMBOSSP);
xmax= GetButStringLength("View");
- uiDefPulldownBut(block, dummy_viewmenu, C->area,
+ uiDefPulldownBut(block, dummy_viewmenu, CTX_wm_area(C),
"View", xco, yco-2, xmax-3, 24, "");
xco += xmax;
diff --git a/source/blender/editors/space_outliner/space_outliner.c b/source/blender/editors/space_outliner/space_outliner.c
index 36afb206ab6..4fa10adcd91 100644
--- a/source/blender/editors/space_outliner/space_outliner.c
+++ b/source/blender/editors/space_outliner/space_outliner.c
@@ -47,7 +47,7 @@
#include "BLI_rand.h"
#include "BKE_colortools.h"
-#include "BKE_global.h"
+#include "BKE_context.h"
#include "BKE_screen.h"
#include "BKE_texture.h"
#include "BKE_utildefines.h"
@@ -108,15 +108,16 @@ void UI_table_free(uiTable *table)
void UI_table_draw(const bContext *C, uiTable *table)
{
+ ARegion *ar= CTX_wm_region(C);
uiBlock *block;
View2D *v2d;
rcti *rct, cellrct;
int y, row, col;
- v2d= &C->region->v2d;
+ v2d= &ar->v2d;
rct= &table->rct;
- block= uiBeginBlock(C, C->region, "table outliner", UI_EMBOSST, UI_HELV);
+ block= uiBeginBlock(C, ar, "table outliner", UI_EMBOSST, UI_HELV);
for(y=rct->ymax, row=0; y>rct->ymin; y-=ROW_HEIGHT, row++) {
if(row%2 == 0) {
@@ -161,7 +162,7 @@ typedef struct CellRNA {
static void rna_back_cb(bContext *C, void *arg_unused, void *arg_unused2)
{
- SpaceOops *soutliner= C->area->spacedata.first;
+ SpaceOops *soutliner= (SpaceOops*)CTX_wm_space_data(C);
char *newpath;
newpath= RNA_path_back(soutliner->rnapath);
@@ -172,7 +173,7 @@ static void rna_back_cb(bContext *C, void *arg_unused, void *arg_unused2)
static void rna_pointer_cb(bContext *C, void *arg_prop, void *arg_index)
{
- SpaceOops *soutliner= C->area->spacedata.first;
+ SpaceOops *soutliner= (SpaceOops*)CTX_wm_space_data(C);
PropertyRNA *prop= arg_prop;
char *newpath;
int index= GET_INT_FROM_POINTER(arg_index);;
@@ -406,7 +407,7 @@ static void outliner_main_area_draw(const bContext *C, ARegion *ar)
PointerRNA newptr;
float col[3];
int rows, cols, awidth, aheight, width, height;
- SpaceOops *soutliner= C->area->spacedata.first;
+ SpaceOops *soutliner= (SpaceOops*)CTX_wm_space_data(C);
View2D *v2d= &ar->v2d;
View2DScrollers *scrollers;
@@ -421,7 +422,7 @@ static void outliner_main_area_draw(const bContext *C, ARegion *ar)
/* create table */
cell.space= soutliner;
cell.lastrow= -1;
- RNA_main_pointer_create(G.main, &cell.ptr);
+ RNA_main_pointer_create(CTX_data_main(C), &cell.ptr);
cell.prop= NULL;
/* solve RNA path or reset if fails */
diff --git a/source/blender/editors/space_script/script_header.c b/source/blender/editors/space_script/script_header.c
index 8cc3966fdf1..7f18f4bbbeb 100644
--- a/source/blender/editors/space_script/script_header.c
+++ b/source/blender/editors/space_script/script_header.c
@@ -38,7 +38,7 @@
#include "BLI_blenlib.h"
-#include "BKE_global.h"
+#include "BKE_context.h"
#include "BKE_screen.h"
#include "ED_screen.h"
@@ -66,7 +66,7 @@ static void do_viewmenu(bContext *C, void *arg, int event)
static uiBlock *dummy_viewmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
{
- ScrArea *curarea= C->area;
+ ScrArea *curarea= CTX_wm_area(C);
uiBlock *block;
short yco= 0, menuwidth=120;
@@ -99,7 +99,7 @@ static void do_script_buttons(bContext *C, void *arg, int event)
void script_header_buttons(const bContext *C, ARegion *ar)
{
- ScrArea *sa= C->area;
+ ScrArea *sa= CTX_wm_area(C);
uiBlock *block;
int xco, yco= 3;
@@ -115,7 +115,7 @@ void script_header_buttons(const bContext *C, ARegion *ar)
uiBlockSetEmboss(block, UI_EMBOSSP);
xmax= GetButStringLength("View");
- uiDefPulldownBut(block, dummy_viewmenu, C->area,
+ uiDefPulldownBut(block, dummy_viewmenu, CTX_wm_area(C),
"View", xco, yco-2, xmax-3, 24, "");
xco+=XIC+xmax;
}
diff --git a/source/blender/editors/space_script/space_script.c b/source/blender/editors/space_script/space_script.c
index 8b9196ac506..6693d71b507 100644
--- a/source/blender/editors/space_script/space_script.c
+++ b/source/blender/editors/space_script/space_script.c
@@ -41,7 +41,7 @@
#include "BLI_rand.h"
#include "BKE_colortools.h"
-#include "BKE_global.h"
+#include "BKE_context.h"
#include "BKE_screen.h"
#include "ED_space_api.h"
@@ -139,7 +139,7 @@ static void script_main_area_init(wmWindowManager *wm, ARegion *ar)
static void script_main_area_draw(const bContext *C, ARegion *ar)
{
/* draw entirely, view changes should be handled here */
- // SpaceScript *sscript= C->area->spacedata.first;
+ // SpaceScript *sscript= (SpaceScript*)CTX_wm_space_data(C);
View2D *v2d= &ar->v2d;
float col[3];
diff --git a/source/blender/editors/space_sequencer/sequencer_header.c b/source/blender/editors/space_sequencer/sequencer_header.c
index 0787920670b..26e92e67c77 100644
--- a/source/blender/editors/space_sequencer/sequencer_header.c
+++ b/source/blender/editors/space_sequencer/sequencer_header.c
@@ -38,7 +38,7 @@
#include "BLI_blenlib.h"
-#include "BKE_global.h"
+#include "BKE_context.h"
#include "BKE_screen.h"
#include "ED_screen.h"
@@ -66,7 +66,7 @@ static void do_viewmenu(bContext *C, void *arg, int event)
static uiBlock *dummy_viewmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
{
- ScrArea *curarea= C->area;
+ ScrArea *curarea= CTX_wm_area(C);
uiBlock *block;
short yco= 0, menuwidth=120;
@@ -99,7 +99,7 @@ static void do_sequencer_buttons(bContext *C, void *arg, int event)
void sequencer_header_buttons(const bContext *C, ARegion *ar)
{
- ScrArea *sa= C->area;
+ ScrArea *sa= CTX_wm_area(C);
uiBlock *block;
int xco, yco= 3;
@@ -115,7 +115,7 @@ void sequencer_header_buttons(const bContext *C, ARegion *ar)
uiBlockSetEmboss(block, UI_EMBOSSP);
xmax= GetButStringLength("View");
- uiDefPulldownBut(block, dummy_viewmenu, C->area,
+ uiDefPulldownBut(block, dummy_viewmenu, CTX_wm_area(C),
"View", xco, yco-2, xmax-3, 24, "");
xco+=XIC+xmax;
}
diff --git a/source/blender/editors/space_sequencer/space_sequencer.c b/source/blender/editors/space_sequencer/space_sequencer.c
index 20618b6ab9b..2452b103a56 100644
--- a/source/blender/editors/space_sequencer/space_sequencer.c
+++ b/source/blender/editors/space_sequencer/space_sequencer.c
@@ -41,7 +41,7 @@
#include "BLI_rand.h"
#include "BKE_colortools.h"
-#include "BKE_global.h"
+#include "BKE_context.h"
#include "BKE_screen.h"
#include "ED_space_api.h"
@@ -158,7 +158,7 @@ static void sequencer_main_area_init(wmWindowManager *wm, ARegion *ar)
static void sequencer_main_area_draw(const bContext *C, ARegion *ar)
{
/* draw entirely, view changes should be handled here */
- // SpaceSeq *sseq= C->area->spacedata.first;
+ // SpaceSeq *sseq= (SpaceSeq*)CTX_wm_space_data(C);
View2D *v2d= &ar->v2d;
float col[3];
diff --git a/source/blender/editors/space_sound/sound_header.c b/source/blender/editors/space_sound/sound_header.c
index 8a566de4b5a..1702b3e06a0 100644
--- a/source/blender/editors/space_sound/sound_header.c
+++ b/source/blender/editors/space_sound/sound_header.c
@@ -38,7 +38,7 @@
#include "BLI_blenlib.h"
-#include "BKE_global.h"
+#include "BKE_context.h"
#include "BKE_screen.h"
#include "ED_screen.h"
@@ -66,7 +66,7 @@ static void do_viewmenu(bContext *C, void *arg, int event)
static uiBlock *dummy_viewmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
{
- ScrArea *curarea= C->area;
+ ScrArea *curarea= CTX_wm_area(C);
uiBlock *block;
short yco= 0, menuwidth=120;
@@ -99,7 +99,7 @@ static void do_sound_buttons(bContext *C, void *arg, int event)
void sound_header_buttons(const bContext *C, ARegion *ar)
{
- ScrArea *sa= C->area;
+ ScrArea *sa= CTX_wm_area(C);
uiBlock *block;
int xco, yco= 3;
@@ -115,7 +115,7 @@ void sound_header_buttons(const bContext *C, ARegion *ar)
uiBlockSetEmboss(block, UI_EMBOSSP);
xmax= GetButStringLength("View");
- uiDefPulldownBut(block, dummy_viewmenu, C->area,
+ uiDefPulldownBut(block, dummy_viewmenu, CTX_wm_area(C),
"View", xco, yco-2, xmax-3, 24, "");
xco+=XIC+xmax;
}
diff --git a/source/blender/editors/space_sound/space_sound.c b/source/blender/editors/space_sound/space_sound.c
index 712e4f27192..82ed6082a38 100644
--- a/source/blender/editors/space_sound/space_sound.c
+++ b/source/blender/editors/space_sound/space_sound.c
@@ -42,7 +42,7 @@
#include "BLI_rand.h"
#include "BKE_colortools.h"
-#include "BKE_global.h"
+#include "BKE_context.h"
#include "BKE_screen.h"
#include "ED_space_api.h"
@@ -154,7 +154,7 @@ static void sound_main_area_init(wmWindowManager *wm, ARegion *ar)
static void sound_main_area_draw(const bContext *C, ARegion *ar)
{
/* draw entirely, view changes should be handled here */
- // SpaceSound *ssound= C->area->spacedata.first;
+ // SpaceSound *ssound= (SpaceSound*)CTX_wm_space_data(C);
View2D *v2d= &ar->v2d;
float col[3];
diff --git a/source/blender/editors/space_text/space_text.c b/source/blender/editors/space_text/space_text.c
index e37dbdc613e..bab9ce3c143 100644
--- a/source/blender/editors/space_text/space_text.c
+++ b/source/blender/editors/space_text/space_text.c
@@ -42,7 +42,7 @@
#include "BLI_rand.h"
#include "BKE_colortools.h"
-#include "BKE_global.h"
+#include "BKE_context.h"
#include "BKE_screen.h"
#include "ED_space_api.h"
@@ -132,7 +132,7 @@ static void text_main_area_init(wmWindowManager *wm, ARegion *ar)
static void text_main_area_draw(const bContext *C, ARegion *ar)
{
/* draw entirely, view changes should be handled here */
- // SpaceText *stext= C->area->spacedata.first;
+ // SpaceText *stext= (SpaceText*)CTX_wm_space_data(C);
View2D *v2d= &ar->v2d;
float col[3];
diff --git a/source/blender/editors/space_text/text_header.c b/source/blender/editors/space_text/text_header.c
index d43f33117df..47c408f0044 100644
--- a/source/blender/editors/space_text/text_header.c
+++ b/source/blender/editors/space_text/text_header.c
@@ -38,7 +38,7 @@
#include "BLI_blenlib.h"
-#include "BKE_global.h"
+#include "BKE_context.h"
#include "BKE_screen.h"
#include "ED_screen.h"
@@ -66,7 +66,7 @@ static void do_viewmenu(bContext *C, void *arg, int event)
static uiBlock *dummy_viewmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
{
- ScrArea *curarea= C->area;
+ ScrArea *curarea= CTX_wm_area(C);
uiBlock *block;
short yco= 0, menuwidth=120;
@@ -99,7 +99,7 @@ static void do_text_buttons(bContext *C, void *arg, int event)
void text_header_buttons(const bContext *C, ARegion *ar)
{
- ScrArea *sa= C->area;
+ ScrArea *sa= CTX_wm_area(C);
uiBlock *block;
int xco, yco= 3;
@@ -115,7 +115,7 @@ void text_header_buttons(const bContext *C, ARegion *ar)
uiBlockSetEmboss(block, UI_EMBOSSP);
xmax= GetButStringLength("View");
- uiDefPulldownBut(block, dummy_viewmenu, C->area,
+ uiDefPulldownBut(block, dummy_viewmenu, CTX_wm_area(C),
"View", xco, yco-2, xmax-3, 24, "");
xco+=XIC+xmax;
}
diff --git a/source/blender/editors/space_time/space_time.c b/source/blender/editors/space_time/space_time.c
index 3c4152366ee..e89a64faf94 100644
--- a/source/blender/editors/space_time/space_time.c
+++ b/source/blender/editors/space_time/space_time.c
@@ -38,6 +38,7 @@
#include "BLI_blenlib.h"
+#include "BKE_context.h"
#include "BKE_global.h"
#include "BKE_screen.h"
@@ -64,7 +65,7 @@
/* draws a current frame indicator for the TimeLine */
static void time_draw_cfra_time(const bContext *C, SpaceTime *stime, ARegion *ar)
{
- Scene *scene= C->scene;
+ Scene *scene= CTX_data_scene(C);
float vec[2];
vec[0]= scene->r.cfra*scene->r.framelen;
@@ -120,7 +121,7 @@ static void time_main_area_init(wmWindowManager *wm, ARegion *ar)
static void time_main_area_draw(const bContext *C, ARegion *ar)
{
/* draw entirely, view changes should be handled here */
- SpaceTime *stime= C->area->spacedata.first;
+ SpaceTime *stime= (SpaceTime*)CTX_wm_space_data(C);
View2D *v2d= &ar->v2d;
View2DGrid *grid;
View2DScrollers *scrollers;
diff --git a/source/blender/editors/space_time/time_header.c b/source/blender/editors/space_time/time_header.c
index cc8ac6d1e73..5faacb29654 100644
--- a/source/blender/editors/space_time/time_header.c
+++ b/source/blender/editors/space_time/time_header.c
@@ -39,6 +39,7 @@
#include "BLI_blenlib.h"
+#include "BKE_context.h"
#include "BKE_global.h"
#include "BKE_screen.h"
@@ -65,7 +66,7 @@
static void do_time_redrawmenu(bContext *C, void *arg, int event)
{
- SpaceTime *stime= C->area->spacedata.first;
+ SpaceTime *stime= (SpaceTime*)CTX_wm_space_data(C);
if(event < 1001) {
@@ -76,7 +77,7 @@ static void do_time_redrawmenu(bContext *C, void *arg, int event)
}
else {
if(event==1001) {
-// button(&C->scene->r.frs_sec,1,120,"FPS:");
+// button(&CTX_data_scene(C)->r.frs_sec,1,120,"FPS:");
}
}
}
@@ -84,8 +85,9 @@ static void do_time_redrawmenu(bContext *C, void *arg, int event)
static uiBlock *time_redrawmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
{
- ScrArea *curarea= C->area;
- SpaceTime *stime= curarea->spacedata.first;
+ ScrArea *curarea= CTX_wm_area(C);
+ SpaceTime *stime= (SpaceTime*)CTX_wm_space_data(C);
+ Scene *scene= CTX_data_scene(C);
uiBlock *block;
short yco= 0, menuwidth=120, icon;
char str[32];
@@ -120,7 +122,7 @@ static uiBlock *time_redrawmenu(bContext *C, uiMenuBlockHandle *handle, void *ar
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
- sprintf(str, "Set Frames/Sec (%d/%f)", C->scene->r.frs_sec, C->scene->r.frs_sec_base);
+ sprintf(str, "Set Frames/Sec (%d/%f)", scene->r.frs_sec, scene->r.frs_sec_base);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, str, 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1001, "");
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
@@ -146,9 +148,10 @@ static uiBlock *time_redrawmenu(bContext *C, uiMenuBlockHandle *handle, void *ar
static void do_time_viewmenu(bContext *C, void *arg, int event)
{
- ScrArea *curarea= C->area;
- SpaceTime *stime= curarea->spacedata.first;
+ ScrArea *curarea= CTX_wm_area(C);
+ SpaceTime *stime= (SpaceTime*)CTX_wm_space_data(C);
View2D *v2d= UI_view2d_fromcontext_rwin(C);
+ Scene *scene= CTX_data_scene(C);
int first;
switch(event) {
@@ -158,12 +161,12 @@ static void do_time_viewmenu(bContext *C, void *arg, int event)
break;
case 3: /* View All */
if(v2d) {
- first= C->scene->r.sfra;
- if(first >= C->scene->r.efra) first= C->scene->r.efra;
+ first= scene->r.sfra;
+ if(first >= scene->r.efra) first= scene->r.efra;
v2d->cur.xmin=v2d->tot.xmin= (float)first-2;
- v2d->cur.xmax=v2d->tot.xmax= (float)C->scene->r.efra+2;
+ v2d->cur.xmax=v2d->tot.xmax= (float)scene->r.efra+2;
- ED_area_tag_redraw(C->area);
+ ED_area_tag_redraw(curarea);
}
break;
case 4: /* Maximize Window */
@@ -171,7 +174,7 @@ static void do_time_viewmenu(bContext *C, void *arg, int event)
break;
case 5: /* show time or frames */
stime->flag ^= TIME_DRAWFRAMES;
- ED_area_tag_redraw(C->area);
+ ED_area_tag_redraw(curarea);
break;
case 6:
//nextprev_marker(1);
@@ -191,20 +194,20 @@ static void do_time_viewmenu(bContext *C, void *arg, int event)
case 11:
if(v2d) {
v2d->flag ^= V2D_VIEWSYNC_X;
- UI_view2d_sync(C->screen, v2d, V2D_LOCK_SET);
+ UI_view2d_sync(CTX_wm_screen(C), v2d, V2D_LOCK_SET);
}
break;
case 12: /* only show keyframes from selected data */
stime->flag ^= TIME_ONLYACTSEL;
- ED_area_tag_redraw(C->area);
+ ED_area_tag_redraw(curarea);
break;
}
}
static uiBlock *time_viewmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
{
- ScrArea *curarea= C->area;
- SpaceTime *stime= curarea->spacedata.first;
+ ScrArea *curarea= CTX_wm_area(C);
+ SpaceTime *stime= (SpaceTime*)CTX_wm_space_data(C);
View2D *v2d= UI_view2d_fromcontext_rwin(C);
uiBlock *block;
short yco= 0, menuwidth=120;
@@ -260,25 +263,27 @@ static uiBlock *time_viewmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_
static void do_time_framemenu(bContext *C, void *arg, int event)
{
+ Scene *scene= CTX_data_scene(C);
+
switch(event) {
case 1: /*Set as Start */
- if (C->scene->r.psfra) {
- if (C->scene->r.pefra < CFRA)
- C->scene->r.pefra= CFRA;
- C->scene->r.psfra= CFRA;
+ if (scene->r.psfra) {
+ if (scene->r.pefra < scene->r.cfra)
+ scene->r.pefra= scene->r.cfra;
+ scene->r.psfra= scene->r.cfra;
}
else
- C->scene->r.sfra = CFRA;
+ scene->r.sfra = scene->r.cfra;
WM_event_add_notifier(C, WM_NOTE_WINDOW_REDRAW, 0, NULL);
break;
case 2: /* Set as End */
- if (C->scene->r.psfra) {
- if (CFRA < C->scene->r.psfra)
- C->scene->r.psfra= CFRA;
- C->scene->r.pefra= CFRA;
+ if (scene->r.psfra) {
+ if (scene->r.cfra < scene->r.psfra)
+ scene->r.psfra= scene->r.cfra;
+ scene->r.pefra= scene->r.cfra;
}
else
- C->scene->r.efra = CFRA;
+ scene->r.efra = scene->r.cfra;
WM_event_add_notifier(C, WM_NOTE_WINDOW_REDRAW, 0, NULL);
break;
case 3: /* Rename Marker */
@@ -289,7 +294,7 @@ static void do_time_framemenu(bContext *C, void *arg, int event)
static uiBlock *time_framemenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
{
- ScrArea *curarea= C->area;
+ ScrArea *curarea= CTX_wm_area(C);
uiBlock *block;
short yco= 0, menuwidth=120;
@@ -368,14 +373,15 @@ static void end_animated_screen(SpaceTime *stime)
void do_time_buttons(bContext *C, void *arg, int event)
{
- SpaceTime *stime= C->area->spacedata.first;
+ SpaceTime *stime= (SpaceTime*)CTX_wm_space_data(C);
+ Scene *scene= CTX_data_scene(C);
switch(event) {
case B_REDRAWALL:
WM_event_add_notifier(C, WM_NOTE_WINDOW_REDRAW, 0, NULL);
break;
case B_TL_REW:
- CFRA= PSFRA;
+ scene->r.cfra= PSFRA;
//update_for_newframe();
break;
case B_TL_PLAY:
@@ -387,7 +393,7 @@ void do_time_buttons(bContext *C, void *arg, int event)
break;
case B_TL_FF:
/* end frame */
- CFRA= PEFRA;
+ scene->r.cfra= PEFRA;
//update_for_newframe();
break;
case B_TL_PREVKEY:
@@ -400,15 +406,15 @@ void do_time_buttons(bContext *C, void *arg, int event)
break;
case B_TL_PREVIEWON:
- if (C->scene->r.psfra) {
+ if (scene->r.psfra) {
/* turn on preview range */
- C->scene->r.psfra= C->scene->r.sfra;
- C->scene->r.pefra= C->scene->r.efra;
+ scene->r.psfra= scene->r.sfra;
+ scene->r.pefra= scene->r.efra;
}
else {
/* turn off preview range */
- C->scene->r.psfra= 0;
- C->scene->r.pefra= 0;
+ scene->r.psfra= 0;
+ scene->r.pefra= 0;
}
//BIF_undo_push("Set anim-preview range");
WM_event_add_notifier(C, WM_NOTE_WINDOW_REDRAW, 0, NULL);
@@ -430,8 +436,9 @@ void do_time_buttons(bContext *C, void *arg, int event)
void time_header_buttons(const bContext *C, ARegion *ar)
{
- ScrArea *sa= C->area;
- SpaceTime *stime= sa->spacedata.first;
+ ScrArea *sa= CTX_wm_area(C);
+ SpaceTime *stime= (SpaceTime*)CTX_wm_space_data(C);
+ Scene *scene= CTX_data_scene(C);
uiBlock *block;
int xco, yco= 3;
@@ -447,16 +454,16 @@ void time_header_buttons(const bContext *C, ARegion *ar)
uiBlockSetEmboss(block, UI_EMBOSSP);
xmax= GetButStringLength("View");
- uiDefPulldownBut(block, time_viewmenu, C->area,
+ uiDefPulldownBut(block, time_viewmenu, sa,
"View", xco, yco-2, xmax-3, 24, "");
xco+= xmax;
xmax= GetButStringLength("Frame");
- uiDefPulldownBut(block, time_framemenu, C->area,
+ uiDefPulldownBut(block, time_framemenu, sa,
"Frame", xco, yco-2, xmax-3, 24, "");
xco+= xmax;
xmax= GetButStringLength("Playback");
- uiDefPulldownBut(block, time_redrawmenu, C->area,
+ uiDefPulldownBut(block, time_redrawmenu, sa,
"Playback", xco, yco-2, xmax-3, 24, "");
xco+= xmax;
}
@@ -467,35 +474,35 @@ void time_header_buttons(const bContext *C, ARegion *ar)
uiDefButI(block, TOG, B_TL_PREVIEWON,"Preview",
xco,yco, XIC, YIC,
- &C->scene->r.psfra,0, 1, 0, 0,
+ &scene->r.psfra,0, 1, 0, 0,
"Show settings for frame range of animation preview");
xco += XIC;
- if (C->scene->r.psfra) {
+ if (scene->r.psfra) {
uiDefButI(block, NUM, B_REDRAWALL,"Start:",
xco,yco, 4.5*XIC, YIC,
- &C->scene->r.psfra,MINFRAMEF, MAXFRAMEF, 0, 0,
+ &scene->r.psfra,MINFRAMEF, MAXFRAMEF, 0, 0,
"The start frame of the animation preview (inclusive)");
xco += (short)(4.5*XIC);
uiDefButI(block, NUM, B_REDRAWALL,"End:",
xco,yco,4.5*XIC,YIC,
- &C->scene->r.pefra,PSFRA,MAXFRAMEF, 0, 0,
+ &scene->r.pefra,PSFRA,MAXFRAMEF, 0, 0,
"The end frame of the animation preview (inclusive)");
}
else {
uiDefButI(block, NUM, B_REDRAWALL,"Start:",
xco,yco, 4.5*XIC, YIC,
- &C->scene->r.sfra,MINFRAMEF, MAXFRAMEF, 0, 0,
+ &scene->r.sfra,MINFRAMEF, MAXFRAMEF, 0, 0,
"The start frame of the animation (inclusive)");
xco += (short)(4.5*XIC);
uiDefButI(block, NUM, B_REDRAWALL,"End:",
xco,yco,4.5*XIC,YIC,
- &C->scene->r.efra,(float)SFRA,MAXFRAMEF, 0, 0,
+ &scene->r.efra,(float)SFRA,MAXFRAMEF, 0, 0,
"The end frame of the animation (inclusive)");
}
uiBlockEndAlign(block);
@@ -504,7 +511,7 @@ void time_header_buttons(const bContext *C, ARegion *ar)
uiDefButI(block, NUM, B_NEWFRAME, "",
xco,yco,3.5*XIC,YIC,
- &(C->scene->r.cfra), MINFRAMEF, MAXFRAMEF, 0, 0,
+ &(scene->r.cfra), MINFRAMEF, MAXFRAMEF, 0, 0,
"Displays Current Frame of animation");
xco += (short)(3.5 * XIC + 16);
@@ -532,12 +539,12 @@ void time_header_buttons(const bContext *C, ARegion *ar)
xco+= XIC+8;
uiDefIconButBitS(block, TOG, AUTOKEY_ON, REDRAWINFO, ICON_REC,
- xco, yco, XIC, YIC, &(C->scene->autokey_mode), 0, 0, 0, 0, "Automatic keyframe insertion for Objects and Bones");
+ xco, yco, XIC, YIC, &(scene->autokey_mode), 0, 0, 0, 0, "Automatic keyframe insertion for Objects and Bones");
xco+= XIC;
- if (C->scene->autokey_mode & AUTOKEY_ON) {
+ if (scene->autokey_mode & AUTOKEY_ON) {
uiDefButS(block, MENU, REDRAWINFO,
"Auto-Keying Mode %t|Add/Replace Keys%x3|Replace Keys %x5",
- xco, yco, 3.5*XIC, YIC, &(C->scene->autokey_mode), 0, 1, 0, 0,
+ xco, yco, 3.5*XIC, YIC, &(scene->autokey_mode), 0, 1, 0, 0,
"Mode of automatic keyframe insertion for Objects and Bones");
xco+= (4*XIC);
}
diff --git a/source/blender/editors/space_time/time_ops.c b/source/blender/editors/space_time/time_ops.c
index 599594a3ec0..30b0e808e05 100644
--- a/source/blender/editors/space_time/time_ops.c
+++ b/source/blender/editors/space_time/time_ops.c
@@ -38,7 +38,7 @@
#include "BLI_blenlib.h"
-#include "BKE_global.h"
+#include "BKE_context.h"
#include "BKE_utildefines.h"
#include "UI_interface.h"
@@ -56,7 +56,7 @@
static int change_frame_init(bContext *C, wmOperator *op)
{
- SpaceTime *stime= C->area->spacedata.first;
+ SpaceTime *stime= (SpaceTime*)CTX_wm_space_data(C);
stime->flag |= TIME_CFRA_NUM;
@@ -65,6 +65,7 @@ static int change_frame_init(bContext *C, wmOperator *op)
static void change_frame_apply(bContext *C, wmOperator *op)
{
+ Scene *scene= CTX_data_scene(C);
int cfra;
cfra= RNA_int_get(op->ptr, "frame");
@@ -83,8 +84,8 @@ static void change_frame_apply(bContext *C, wmOperator *op)
else PIL_sleep_ms(30);
#endif
- if(cfra!=CFRA)
- CFRA= cfra;
+ if(cfra!=scene->r.cfra)
+ scene->r.cfra= cfra;
WM_event_add_notifier(C, WM_NOTE_WINDOW_REDRAW, 0, NULL);
/* XXX: add WM_NOTE_TIME_CHANGED? */
@@ -92,7 +93,7 @@ static void change_frame_apply(bContext *C, wmOperator *op)
static void change_frame_exit(bContext *C, wmOperator *op)
{
- SpaceTime *stime= C->area->spacedata.first;
+ SpaceTime *stime= (SpaceTime*)CTX_wm_space_data(C);
stime->flag &= ~TIME_CFRA_NUM;
}
@@ -109,7 +110,7 @@ static int change_frame_exec(bContext *C, wmOperator *op)
static int frame_from_event(bContext *C, wmEvent *event)
{
- ARegion *region= C->region;
+ ARegion *region= CTX_wm_region(C);
int x, y;
float viewx;
@@ -127,7 +128,7 @@ static int change_frame_invoke(bContext *C, wmOperator *op, wmEvent *event)
change_frame_apply(C, op);
/* add temp handler */
- WM_event_add_modal_handler(C, &C->window->handlers, op);
+ WM_event_add_modal_handler(C, &CTX_wm_window(C)->handlers, op);
return OPERATOR_RUNNING_MODAL;
}
@@ -182,12 +183,12 @@ static int toggle_time_exec(bContext *C, wmOperator *op)
{
SpaceTime *stime;
- if (ELEM(NULL, C->area, C->area->spacedata.first))
+ if (ELEM(NULL, CTX_wm_area(C), CTX_wm_space_data(C)))
return OPERATOR_CANCELLED;
/* simply toggle draw frames flag for now */
// XXX in past, this displayed menu to choose... (for later!)
- stime= C->area->spacedata.first;
+ stime= (SpaceTime*)CTX_wm_space_data(C);
stime->flag ^= TIME_DRAWFRAMES;
return OPERATOR_FINISHED;
diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c
index d98b59ac2c6..3f30d1cbd79 100644
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@ -41,6 +41,7 @@
#include "BLI_arithb.h"
#include "BLI_rand.h"
+#include "BKE_context.h"
#include "BKE_global.h"
#include "BKE_screen.h"
diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c
index 337874074c3..aa950b87238 100644
--- a/source/blender/editors/space_view3d/view3d_header.c
+++ b/source/blender/editors/space_view3d/view3d_header.c
@@ -38,7 +38,7 @@
#include "BLI_blenlib.h"
-#include "BKE_global.h"
+#include "BKE_context.h"
#include "BKE_screen.h"
#include "ED_screen.h"
@@ -66,7 +66,7 @@ static void do_viewmenu(bContext *C, void *arg, int event)
static uiBlock *dummy_viewmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
{
- ScrArea *curarea= C->area;
+ ScrArea *curarea= CTX_wm_area(C);
uiBlock *block;
short yco= 0, menuwidth=120;
@@ -100,7 +100,7 @@ static void do_view3d_buttons(bContext *C, void *arg, int event)
void view3d_header_buttons(const bContext *C, ARegion *ar)
{
- ScrArea *sa= C->area;
+ ScrArea *sa= CTX_wm_area(C);
uiBlock *block;
int xco, yco= 3;
@@ -116,7 +116,7 @@ void view3d_header_buttons(const bContext *C, ARegion *ar)
uiBlockSetEmboss(block, UI_EMBOSSP);
xmax= GetButStringLength("View");
- uiDefPulldownBut(block, dummy_viewmenu, C->area,
+ uiDefPulldownBut(block, dummy_viewmenu, CTX_wm_area(C),
"View", xco, yco-2, xmax-3, 24, "");
}
diff --git a/source/blender/editors/util/ed_markers.c b/source/blender/editors/util/ed_markers.c
index 843a81e7086..96f7f15f8c9 100644
--- a/source/blender/editors/util/ed_markers.c
+++ b/source/blender/editors/util/ed_markers.c
@@ -43,6 +43,7 @@
#include "BLI_blenlib.h"
+#include "BKE_context.h"
#include "BKE_global.h"
#include "BKE_utildefines.h"
@@ -79,7 +80,7 @@ static ListBase *context_get_markers(const bContext *C)
else
#endif
- return &C->scene->markers;
+ return &CTX_data_scene(C)->markers;
}
/* ************* Marker Drawing ************ */
@@ -162,12 +163,12 @@ void draw_markers_time(const bContext *C, int flag)
/* unselected markers are drawn at the first time */
for (marker= markers->first; marker; marker= marker->next) {
- if (!(marker->flag & SELECT)) draw_marker(v2d, marker, C->scene->r.cfra, flag);
+ if (!(marker->flag & SELECT)) draw_marker(v2d, marker, CTX_data_scene(C)->r.cfra, flag);
}
/* selected markers are drawn later */
for (marker= markers->first; marker; marker= marker->next) {
- if (marker->flag & SELECT) draw_marker(v2d, marker, C->scene->r.cfra, flag);
+ if (marker->flag & SELECT) draw_marker(v2d, marker, CTX_data_scene(C)->r.cfra, flag);
}
}
@@ -180,7 +181,7 @@ static int ed_marker_add(bContext *C, wmOperator *op)
{
ListBase *markers= context_get_markers(C);
TimeMarker *marker;
- int frame= C->scene->r.cfra;
+ int frame= CTX_data_scene(C)->r.cfra;
/* two markers can't be at the same place */
for(marker= markers->first; marker; marker= marker->next)
@@ -264,7 +265,7 @@ static int ed_marker_move_init(bContext *C, wmOperator *op)
if (totmark==0) return 0;
op->customdata= mm= MEM_callocN(sizeof(MarkerMove), "Markermove");
- mm->slink= C->area->spacedata.first;
+ mm->slink= CTX_wm_space_data(C);
mm->markers= markers;
mm->oldframe= MEM_callocN(totmark*sizeof(int), "MarkerMove oldframe");
@@ -298,7 +299,7 @@ static int ed_marker_move_invoke(bContext *C, wmOperator *op, wmEvent *evt)
mm->event_type= evt->type;
/* add temp handler */
- WM_event_add_modal_handler(C, &C->window->handlers, op);
+ WM_event_add_modal_handler(C, &CTX_wm_window(C)->handlers, op);
/* reset frs delta */
RNA_int_set(op->ptr, "frs", 0);
@@ -563,12 +564,12 @@ static void ED_MARKER_OT_duplicate(wmOperatorType *ot)
/* ************************** selection ************************************/
/* select/deselect TimeMarker at current frame */
-static void select_timeline_marker_frame(int frame, unsigned char shift)
+static void select_timeline_marker_frame(ListBase *markers, int frame, unsigned char shift)
{
TimeMarker *marker;
int select=0;
- for(marker= G.scene->markers.first; marker; marker= marker->next) {
+ for(marker= markers->first; marker; marker= marker->next) {
/* if Shift is not set, then deselect Markers */
if(!shift) marker->flag &= ~SELECT;
/* this way a not-shift select will allways give 1 selected marker */
@@ -607,17 +608,17 @@ static int ed_marker_select(bContext *C, wmEvent *evt, int extend)
float viewx;
int x, y, cfra;
- x= evt->x - C->region->winrct.xmin;
- y= evt->y - C->region->winrct.ymin;
+ x= evt->x - CTX_wm_region(C)->winrct.xmin;
+ y= evt->y - CTX_wm_region(C)->winrct.ymin;
UI_view2d_region_to_view(v2d, x, y, &viewx, NULL);
cfra= find_nearest_marker_time(markers, viewx);
if (extend)
- select_timeline_marker_frame(cfra, 1);
+ select_timeline_marker_frame(markers, cfra, 1);
else
- select_timeline_marker_frame(cfra, 0);
+ select_timeline_marker_frame(markers, cfra, 0);
WM_event_add_notifier(C, WM_NOTE_MARKERS_CHANGED, 0, NULL);
diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h
index ded0cb854b9..3c8628c5fbb 100644
--- a/source/blender/windowmanager/WM_api.h
+++ b/source/blender/windowmanager/WM_api.h
@@ -126,10 +126,6 @@ void WM_OT_tweak_gesture(wmOperatorType *ot);
struct wmGesture *WM_gesture_new(struct bContext *C, struct wmEvent *event, int type);
void WM_gesture_end(struct bContext *C, struct wmGesture *gesture);
- /* Reporting information and errors */
-void WM_report(struct bContext *C, int type, const char *message);
-void WM_reportf(struct bContext *C, int type, const char *format, ...);
-
/* OpenGL wrappers, mimicing opengl syntax */
void wmLoadMatrix (wmWindow *win, float mat[][4]);
void wmGetMatrix (wmWindow *win, float mat[][4]);
diff --git a/source/blender/windowmanager/intern/wm.c b/source/blender/windowmanager/intern/wm.c
index d37857ebfa0..5e89ad11de2 100644
--- a/source/blender/windowmanager/intern/wm.c
+++ b/source/blender/windowmanager/intern/wm.c
@@ -33,7 +33,7 @@
#include "BLI_blenlib.h"
#include "BKE_blender.h"
-#include "BKE_global.h"
+#include "BKE_context.h"
#include "BKE_library.h"
#include "BKE_main.h"
#include "BKE_idprop.h"
@@ -90,36 +90,40 @@ void wm_operator_register(wmWindowManager *wm, wmOperator *op)
void wm_check(bContext *C)
{
+ wmWindowManager *wm= CTX_wm_manager(C);
/* wm context */
- if(C->wm==NULL) C->wm= G.main->wm.first;
- if(C->wm==NULL) return;
- if(C->wm->windows.first==NULL) return;
+ if(CTX_wm_manager(C)==NULL) {
+ wm= CTX_data_main(C)->wm.first;
+ CTX_wm_manager_set(C, wm);
+ }
+ if(wm==NULL) return;
+ if(wm->windows.first==NULL) return;
/* case: no open windows at all, for old file reads */
- wm_window_add_ghostwindows(C->wm);
+ wm_window_add_ghostwindows(wm);
/* case: fileread */
- if(C->wm->initialized==0) {
+ if(wm->initialized==0) {
- wm_window_keymap(C->wm);
- ED_spacetypes_keymap(C->wm);
+ wm_window_keymap(wm);
+ ED_spacetypes_keymap(wm);
- ED_screens_initialize(C->wm);
- C->wm->initialized= 1;
+ ED_screens_initialize(wm);
+ wm->initialized= 1;
}
}
/* on startup, it adds all data, for matching */
void wm_add_default(bContext *C)
{
- wmWindowManager *wm= alloc_libblock(&G.main->wm, ID_WM, "WinMan");
+ wmWindowManager *wm= alloc_libblock(&CTX_data_main(C)->wm, ID_WM, "WinMan");
wmWindow *win;
- C->wm= wm;
+ CTX_wm_manager_set(C, wm);
win= wm_window_new(C);
- win->screen= C->screen;
+ win->screen= CTX_wm_screen(C); /* XXX from window? */
wm->winactive= win;
wm_window_make_drawable(C, win);
}
@@ -130,7 +134,6 @@ void wm_close_and_free(bContext *C, wmWindowManager *wm)
{
wmWindow *win;
wmOperator *op;
- wmReport *report;
wmKeyMap *km;
wmKeymapItem *kmi;
@@ -144,11 +147,6 @@ void wm_close_and_free(bContext *C, wmWindowManager *wm)
wm_operator_free(op);
}
- while((report= wm->reports.first)) {
- BLI_remlink(&wm->reports, report);
- wm_report_free(report);
- }
-
while((km= wm->keymaps.first)) {
for(kmi=km->keymap.first; kmi; kmi=kmi->next) {
if(kmi->ptr)
@@ -167,7 +165,7 @@ void wm_close_and_free(bContext *C, wmWindowManager *wm)
BLI_freelistN(&wm->queue);
- if(C && C->wm==wm) C->wm= NULL;
+ if(C && CTX_wm_manager(C)==wm) CTX_wm_manager_set(C, NULL);
}
void wm_close_and_free_all(bContext *C, ListBase *wmlist)
diff --git a/source/blender/windowmanager/intern/wm_cursors.c b/source/blender/windowmanager/intern/wm_cursors.c
index 8b4ddd786e0..3afc9cc884b 100644
--- a/source/blender/windowmanager/intern/wm_cursors.c
+++ b/source/blender/windowmanager/intern/wm_cursors.c
@@ -35,7 +35,7 @@
#include "DNA_listBase.h"
#include "DNA_userdef_types.h"
-#include "BKE_global.h"
+#include "BKE_context.h"
#include "WM_api.h"
#include "wm_cursors.h"
diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c
index 5cc28ec45d8..72ad5d8c4ac 100644
--- a/source/blender/windowmanager/intern/wm_event_system.c
+++ b/source/blender/windowmanager/intern/wm_event_system.c
@@ -41,6 +41,7 @@
#include "BLI_blenlib.h"
#include "BKE_blender.h"
+#include "BKE_context.h"
#include "BKE_idprop.h"
#include "BKE_global.h"
@@ -98,11 +99,11 @@ void WM_event_add_notifier(bContext *C, int type, int value, void *data)
{
wmNotifier *note= MEM_callocN(sizeof(wmNotifier), "notifier");
- BLI_addtail(&C->wm->queue, note);
+ BLI_addtail(&CTX_wm_manager(C)->queue, note);
- note->window= C->window;
- if(C->region)
- note->swinid= C->region->swinid;
+ note->window= CTX_wm_window(C);
+ if(CTX_wm_region(C))
+ note->swinid= CTX_wm_region(C)->swinid;
note->type= type;
note->value= value;
note->data= data;
@@ -119,17 +120,18 @@ static wmNotifier *wm_notifier_next(wmWindowManager *wm)
/* called in mainloop */
void wm_event_do_notifiers(bContext *C)
{
+ wmWindowManager *wm= CTX_wm_manager(C);
wmNotifier *note;
- while( (note=wm_notifier_next(C->wm)) ) {
+ while( (note=wm_notifier_next(wm)) ) {
wmWindow *win;
- for(win= C->wm->windows.first; win; win= win->next) {
+ for(win= wm->windows.first; win; win= win->next) {
ScrArea *sa;
ARegion *ar;
- C->window= win;
- C->screen= win->screen; /* XXX context in notifiers? */
+ /* XXX context in notifiers? */
+ CTX_wm_window_set(C, win);
/* printf("notifier win %d screen %s\n", win->winid, win->screen->id.name+2); */
ED_screen_do_listen(win, note);
@@ -144,8 +146,7 @@ void wm_event_do_notifiers(bContext *C)
}
}
- C->window= NULL;
- C->screen= NULL;
+ CTX_wm_window_set(C, NULL);
}
MEM_freeN(note);
@@ -170,11 +171,12 @@ static void wm_flush_regions(bScreen *screen, rcti *dirty)
static void wm_flush_draw_update(bContext *C)
{
ARegion *ar;
+ bScreen *screen= CTX_wm_screen(C);
/* flush redraws of screen regions (menus) down */
- for(ar= C->screen->regionbase.first; ar; ar= ar->next) {
+ for(ar= screen->regionbase.first; ar; ar= ar->next) {
if(ar->swinid && ar->do_draw) {
- wm_flush_regions(C->screen, &ar->winrct);
+ wm_flush_regions(screen, &ar->winrct);
}
}
@@ -209,40 +211,40 @@ static int wm_draw_update_test_window(wmWindow *win)
void wm_draw_update(bContext *C)
{
+ wmWindowManager *wm= CTX_wm_manager(C);
wmWindow *win;
- for(win= C->wm->windows.first; win; win= win->next) {
+ for(win= wm->windows.first; win; win= win->next) {
if(wm_draw_update_test_window(win)) {
ScrArea *sa;
ARegion *ar;
- C->window= win;
- C->screen= win->screen;
+ CTX_wm_window_set(C, win);
/* sets context window+screen */
wm_window_make_drawable(C, win);
/* notifiers for screen redraw */
if(win->screen->do_refresh)
- ED_screen_refresh(C->wm, win);
+ ED_screen_refresh(wm, win);
/* flush draw updates for multiple layers */
wm_flush_draw_update(C);
for(sa= win->screen->areabase.first; sa; sa= sa->next) {
- C->area= sa;
+ CTX_wm_area_set(C, sa);
for(ar=sa->regionbase.first; ar; ar= ar->next) {
- C->region= ar;
+ CTX_wm_region_set(C, ar);
if(ar->swinid && ar->do_draw)
ED_region_do_draw(C, ar);
- C->region= NULL;
+ CTX_wm_region_set(C, NULL);
}
- C->area = NULL;
+ CTX_wm_area_set(C, NULL);
}
/* move this here so we can do area 'overlay' drawing */
@@ -253,12 +255,12 @@ void wm_draw_update(bContext *C)
/* regions are menus here */
for(ar=win->screen->regionbase.first; ar; ar= ar->next) {
- C->region= ar;
+ CTX_wm_region_set(C, ar);
if(ar->swinid && ar->do_draw)
ED_region_do_draw(C, ar);
- C->region= NULL;
+ CTX_wm_region_set(C, NULL);
}
if(win->screen->do_gesture)
@@ -266,8 +268,7 @@ void wm_draw_update(bContext *C)
wm_window_swap_buffers(win);
- C->window= NULL;
- C->screen= NULL;
+ CTX_wm_window_set(C, NULL);
}
}
}
@@ -277,6 +278,7 @@ void wm_draw_update(bContext *C)
static int wm_operator_invoke(bContext *C, wmOperatorType *ot, wmEvent *event, IDProperty *properties)
{
+ wmWindowManager *wm= CTX_wm_manager(C);
int retval= OPERATOR_PASS_THROUGH;
if(ot->poll==NULL || ot->poll(C)) {
@@ -290,7 +292,7 @@ static int wm_operator_invoke(bContext *C, wmOperatorType *ot, wmEvent *event, I
BLI_strncpy(op->idname, ot->idname, OP_MAX_TYPENAME);
op->ptr= MEM_callocN(sizeof(PointerRNA), "wmOperatorPtrRNA");
- RNA_pointer_create(&RNA_WindowManager, &C->wm->id, ot->srna, &op->properties, op->ptr);
+ RNA_pointer_create(&RNA_WindowManager, &wm->id, ot->srna, &op->properties, op->ptr);
if(op->type->invoke)
retval= (*op->type->invoke)(C, op, event);
@@ -298,7 +300,7 @@ static int wm_operator_invoke(bContext *C, wmOperatorType *ot, wmEvent *event, I
retval= op->type->exec(C, op);
if((retval & OPERATOR_FINISHED) && (ot->flag & OPTYPE_REGISTER)) {
- wm_operator_register(C->wm, op);
+ wm_operator_register(wm, op);
}
else if(!(retval & OPERATOR_RUNNING_MODAL)) {
wm_operator_free(op);
@@ -312,55 +314,57 @@ static int wm_operator_invoke(bContext *C, wmOperatorType *ot, wmEvent *event, I
int WM_operator_call(bContext *C, const char *opstring, int context, IDProperty *properties)
{
wmOperatorType *ot= WM_operatortype_find(opstring);
+ wmWindow *window= CTX_wm_window(C);
int retval;
/* dummie test */
- if(ot && C && C->window) {
+ if(ot && C && window) {
if(context == WM_OP_REGION_WIN) {
/* forces event to go to the region window, for header menus */
- ARegion *ar= C->region;
+ ARegion *ar= CTX_wm_region(C);
+ ScrArea *area= CTX_wm_area(C);
- if(C->area) {
- ARegion *ar1= C->area->regionbase.first;
+ if(area) {
+ ARegion *ar1= area->regionbase.first;
for(; ar1; ar1= ar1->next)
if(ar1->regiontype==RGN_TYPE_WINDOW)
break;
if(ar1)
- C->region= ar1;
+ CTX_wm_region_set(C, ar1);
}
- retval= wm_operator_invoke(C, ot, C->window->eventstate, properties);
+ retval= wm_operator_invoke(C, ot, window->eventstate, properties);
/* set region back */
- C->region= ar;
+ CTX_wm_region_set(C, ar);
return retval;
}
else if(context == WM_OP_AREA) {
/* remove region from context */
- ARegion *ar= C->region;
+ ARegion *ar= CTX_wm_region(C);
- C->region= NULL;
- retval= wm_operator_invoke(C, ot, C->window->eventstate, properties);
- C->region= ar;
+ CTX_wm_region_set(C, NULL);
+ retval= wm_operator_invoke(C, ot, window->eventstate, properties);
+ CTX_wm_region_set(C, ar);
return retval;
}
else if(context == WM_OP_SCREEN) {
/* remove region + area from context */
- ARegion *ar= C->region;
- ScrArea *area= C->area;
+ ARegion *ar= CTX_wm_region(C);
+ ScrArea *area= CTX_wm_area(C);
- C->region= NULL;
- C->area= NULL;
- retval= wm_operator_invoke(C, ot, C->window->eventstate, properties);
- C->region= ar;
- C->area= area;
+ CTX_wm_region_set(C, NULL);
+ CTX_wm_area_set(C, NULL);
+ retval= wm_operator_invoke(C, ot, window->eventstate, properties);
+ CTX_wm_region_set(C, ar);
+ CTX_wm_area_set(C, area);
return retval;
}
else
- return wm_operator_invoke(C, ot, C->window->eventstate, properties);
+ return wm_operator_invoke(C, ot, window->eventstate, properties);
}
return 0;
@@ -386,31 +390,31 @@ void WM_event_remove_handlers(bContext *C, ListBase *handlers)
if(handler->op) {
if(handler->op->type->cancel) {
- ScrArea *area= C->area;
- ARegion *region= C->region;
+ ScrArea *area= CTX_wm_area(C);
+ ARegion *region= CTX_wm_region(C);
- C->area= handler->op_area;
- C->region= handler->op_region;
+ CTX_wm_area_set(C, handler->op_area);
+ CTX_wm_region_set(C, handler->op_region);
handler->op->type->cancel(C, handler->op);
- C->area= area;
- C->region= region;
+ CTX_wm_area_set(C, area);
+ CTX_wm_region_set(C, region);
}
wm_operator_free(handler->op);
}
else if(handler->ui_remove) {
- ScrArea *area= C->area;
- ARegion *region= C->region;
+ ScrArea *area= CTX_wm_area(C);
+ ARegion *region= CTX_wm_region(C);
- if(handler->ui_area) C->area= handler->ui_area;
- if(handler->ui_region) C->region= handler->ui_region;
+ if(handler->ui_area) CTX_wm_area_set(C, handler->ui_area);
+ if(handler->ui_region) CTX_wm_region_set(C, handler->ui_region);
handler->ui_remove(C, handler->ui_userdata);
- C->area= area;
- C->region= region;
+ CTX_wm_area_set(C, area);
+ CTX_wm_region_set(C, region);
}
wm_event_free_handler(handler);
@@ -449,20 +453,20 @@ static int wm_handler_operator_call(bContext *C, ListBase *handlers, wmEventHand
if(ot->modal) {
/* we set context to where modal handler came from */
- ScrArea *area= C->area;
- ARegion *region= C->region;
+ ScrArea *area= CTX_wm_area(C);
+ ARegion *region= CTX_wm_region(C);
- C->area= handler->op_area;
- C->region= handler->op_region;
+ CTX_wm_area_set(C, handler->op_area);
+ CTX_wm_region_set(C, handler->op_region);
retval= ot->modal(C, op, event);
/* putting back screen context */
- C->area= area;
- C->region= region;
+ CTX_wm_area_set(C, area);
+ CTX_wm_region_set(C, region);
if((retval & OPERATOR_FINISHED) && (ot->flag & OPTYPE_REGISTER)) {
- wm_operator_register(C->wm, op);
+ wm_operator_register(CTX_wm_manager(C), op);
handler->op= NULL;
}
else if(retval & (OPERATOR_CANCELLED|OPERATOR_FINISHED)) {
@@ -500,19 +504,19 @@ static int wm_handler_operator_call(bContext *C, ListBase *handlers, wmEventHand
static int wm_handler_ui_call(bContext *C, wmEventHandler *handler, wmEvent *event)
{
- ScrArea *area= C->area;
- ARegion *region= C->region;
+ ScrArea *area= CTX_wm_area(C);
+ ARegion *region= CTX_wm_region(C);
int retval;
/* we set context to where ui handler came from */
- if(handler->ui_area) C->area= handler->ui_area;
- if(handler->ui_region) C->region= handler->ui_region;
+ if(handler->ui_area) CTX_wm_area_set(C, handler->ui_area);
+ if(handler->ui_region) CTX_wm_region_set(C, handler->ui_region);
retval= handler->ui_handle(C, event, handler->ui_userdata);
/* putting back screen context */
- C->area= area;
- C->region= region;
+ CTX_wm_area_set(C, area);
+ CTX_wm_region_set(C, region);
if(retval == WM_UI_HANDLER_BREAK)
return WM_HANDLER_BREAK;
@@ -564,7 +568,7 @@ static int wm_handlers_do(bContext *C, wmEvent *event, ListBase *handlers)
for(kmi= handler->keymap->first; kmi; kmi= kmi->next) {
if(wm_eventmatch(event, kmi)) {
if((G.f & G_DEBUG) && event->type!=MOUSEMOVE)
- printf("handle evt %d win %d op %s\n", event->type, C->window->winid, kmi->idname);
+ printf("handle evt %d win %d op %s\n", event->type, CTX_wm_window(C)->winid, kmi->idname);
event->keymap_idname= kmi->idname; /* weak, but allows interactive callback to not use rawkey */
@@ -610,10 +614,11 @@ static int wm_event_prev_inside_i(wmEvent *event, rcti *rect)
static ScrArea *area_event_inside(bContext *C, wmEvent *event)
{
+ bScreen *screen= CTX_wm_screen(C);
ScrArea *sa;
- if(C->screen)
- for(sa= C->screen->areabase.first; sa; sa= sa->next)
+ if(screen)
+ for(sa= screen->areabase.first; sa; sa= sa->next)
if(BLI_in_rcti(&sa->totrct, event->x, event->y))
return sa;
return NULL;
@@ -621,10 +626,12 @@ static ScrArea *area_event_inside(bContext *C, wmEvent *event)
static ARegion *region_event_inside(bContext *C, wmEvent *event)
{
+ bScreen *screen= CTX_wm_screen(C);
+ ScrArea *area= CTX_wm_area(C);
ARegion *ar;
- if(C->screen && C->area)
- for(ar= C->area->regionbase.first; ar; ar= ar->next)
+ if(screen && area)
+ for(ar= area->regionbase.first; ar; ar= ar->next)
if(BLI_in_rcti(&ar->winrct, event->x, event->y))
return ar;
return NULL;
@@ -637,7 +644,7 @@ void wm_event_do_handlers(bContext *C)
{
wmWindow *win;
- for(win= C->wm->windows.first; win; win= win->next) {
+ for(win= CTX_wm_manager(C)->windows.first; win; win= win->next) {
wmEvent *event;
if( win->screen==NULL )
@@ -646,10 +653,9 @@ void wm_event_do_handlers(bContext *C)
while( (event=wm_event_next(win)) ) {
int action;
- C->window= win;
- C->screen= win->screen;
- C->area= area_event_inside(C, event);
- C->region= region_event_inside(C, event);
+ CTX_wm_window_set(C, win);
+ CTX_wm_area_set(C, area_event_inside(C, event));
+ CTX_wm_region_set(C, region_event_inside(C, event));
/* MVC demands to not draw in event handlers... for now we leave it */
wm_window_make_drawable(C, win);
@@ -668,15 +674,15 @@ void wm_event_do_handlers(bContext *C)
for(sa= win->screen->areabase.first; sa; sa= sa->next) {
if(wm_event_always_pass(event) || wm_event_prev_inside_i(event, &sa->totrct)) {
doit= 1;
- C->area= sa;
+ CTX_wm_area_set(C, sa);
action= wm_handlers_do(C, event, &sa->handlers);
if(wm_event_always_pass(event) || action==WM_HANDLER_CONTINUE) {
for(ar=sa->regionbase.first; ar; ar= ar->next) {
if(wm_event_always_pass(event) || wm_event_inside_i(event, &ar->winrct) || wm_event_prev_inside_i(event, &ar->winrct)) {
- C->region= ar;
+ CTX_wm_region_set(C, ar);
action= wm_handlers_do(C, event, &ar->handlers);
- C->region= NULL;
+ CTX_wm_region_set(C, NULL);
if(!wm_event_always_pass(event)) {
if(action==WM_HANDLER_BREAK)
@@ -686,21 +692,20 @@ void wm_event_do_handlers(bContext *C)
}
}
- C->area= NULL;
+ CTX_wm_area_set(C, NULL);
/* NOTE: do not escape on WM_HANDLER_BREAK, mousemove needs handled for previous area */
}
}
/* XXX hrmf, this gives reliable previous mouse coord for area change, feels bad?
doing it on ghost queue gives errors when mousemoves go over area borders */
if(doit) {
- C->window->eventstate->prevx= event->x;
- C->window->eventstate->prevy= event->y;
+ CTX_wm_window(C)->eventstate->prevx= event->x;
+ CTX_wm_window(C)->eventstate->prevy= event->y;
}
}
wm_event_free(event);
- C->window= NULL;
- C->screen= NULL;
+ CTX_wm_window_set(C, NULL);
}
}
}
@@ -715,8 +720,8 @@ wmEventHandler *WM_event_add_modal_handler(bContext *C, ListBase *handlers, wmOp
{
wmEventHandler *handler= MEM_callocN(sizeof(wmEventHandler), "event modal handler");
handler->op= op;
- handler->op_area= C->area; /* means frozen screen context for modal handlers! */
- handler->op_region= C->region;
+ handler->op_area= CTX_wm_area(C); /* means frozen screen context for modal handlers! */
+ handler->op_region= CTX_wm_region(C);
BLI_addhead(handlers, handler);
@@ -768,8 +773,8 @@ wmEventHandler *WM_event_add_ui_handler(bContext *C, ListBase *handlers, wmUIHan
handler->ui_handle= func;
handler->ui_remove= remove;
handler->ui_userdata= userdata;
- handler->ui_area= (C)? C->area: NULL;
- handler->ui_region= (C)? C->region: NULL;
+ handler->ui_area= (C)? CTX_wm_area(C): NULL;
+ handler->ui_region= (C)? CTX_wm_region(C): NULL;
BLI_addhead(handlers, handler);
@@ -792,11 +797,12 @@ void WM_event_remove_ui_handler(ListBase *handlers, wmUIHandlerFunc func, wmUIHa
void WM_event_add_mousemove(bContext *C)
{
- wmEvent event= *(C->window->eventstate);
+ wmWindow *window= CTX_wm_window(C);
+ wmEvent event= *(window->eventstate);
event.type= MOUSEMOVE;
event.prevx= event.x;
event.prevy= event.y;
- wm_event_add(C->window, &event);
+ wm_event_add(window, &event);
}
/* ********************* ghost stuff *************** */
diff --git a/source/blender/windowmanager/intern/wm_files.c b/source/blender/windowmanager/intern/wm_files.c
index 75306dc75d8..b6d8ea59a48 100644
--- a/source/blender/windowmanager/intern/wm_files.c
+++ b/source/blender/windowmanager/intern/wm_files.c
@@ -57,6 +57,7 @@
#include "DNA_windowmanager_types.h"
#include "BKE_blender.h"
+#include "BKE_context.h"
#include "BKE_DerivedMesh.h"
#include "BKE_exotic.h"
#include "BKE_font.h"
@@ -373,7 +374,7 @@ return;
/* we take apart the used screens from non-active window */
for(win= wm->windows.first; win; win= win->next) {
BLI_strncpy(win->screenname, win->screen->id.name, MAX_ID_NAME);
- if(win!=C->wm->winactive) {
+ if(win!=wm->winactive) {
BLI_remlink(&G.main->screen, win->screen);
//BLI_addtail(screenbase, win->screen);
}
@@ -410,7 +411,7 @@ static void wm_window_match_do(bContext *C, ListBase *wmlist)
win->screen= (bScreen *)find_id("SR", win->screenname);
if(win->screen==NULL)
- win->screen= ED_screen_duplicate(win, C->screen); /* active screen */
+ win->screen= ED_screen_duplicate(win, CTX_wm_screen(C)); /* active screen */
if(win->screen->winid==0)
win->screen->winid= win->winid;
@@ -807,7 +808,7 @@ void WM_write_file(bContext *C, char *target)
}
/* send the OnSave event */
-// XXX if (G.f & G_DOSCRIPTLINKS) BPY_do_pyscript(&C->scene->id, SCRIPT_ONSAVE);
+// XXX if (G.f & G_DOSCRIPTLINKS) BPY_do_pyscript(&CTX_data_scene(C)->id, SCRIPT_ONSAVE);
for (li= G.main->library.first; li; li= li->id.next) {
if (BLI_streq(li->name, target)) {
diff --git a/source/blender/windowmanager/intern/wm_gesture.c b/source/blender/windowmanager/intern/wm_gesture.c
index ba8da93495c..e6e5186f8b1 100644
--- a/source/blender/windowmanager/intern/wm_gesture.c
+++ b/source/blender/windowmanager/intern/wm_gesture.c
@@ -37,7 +37,7 @@
#include "BLI_blenlib.h"
-#include "BKE_global.h"
+#include "BKE_context.h"
#include "BKE_utildefines.h"
#include "WM_api.h"
@@ -54,15 +54,17 @@
wmGesture *WM_gesture_new(bContext *C, wmEvent *event, int type)
{
wmGesture *gesture= MEM_callocN(sizeof(wmGesture), "new gesture");
+ wmWindow *window= CTX_wm_window(C);
+ bScreen *screen= CTX_wm_screen(C);
int sx, sy;
- BLI_addtail(&C->window->gesture, gesture);
+ BLI_addtail(&window->gesture, gesture);
gesture->type= type;
gesture->event_type= event->type;
- gesture->swinid= C->screen->subwinactive; /* means only in area-region context! */
+ gesture->swinid= screen->subwinactive; /* means only in area-region context! */
- wm_subwindow_getorigin(C->window, gesture->swinid, &sx, &sy);
+ wm_subwindow_getorigin(window, gesture->swinid, &sx, &sy);
if( ELEM3(type, WM_GESTURE_RECT, WM_GESTURE_CROSS_RECT, WM_GESTURE_TWEAK)) {
rcti *rect= MEM_callocN(sizeof(rcti), "gesture rect new");
@@ -79,7 +81,7 @@ wmGesture *WM_gesture_new(bContext *C, wmEvent *event, int type)
void WM_gesture_end(bContext *C, wmGesture *gesture)
{
- BLI_remlink(&C->window->gesture, gesture);
+ BLI_remlink(&CTX_wm_window(C)->gesture, gesture);
MEM_freeN(gesture->customdata);
MEM_freeN(gesture);
}
diff --git a/source/blender/windowmanager/intern/wm_init_exit.c b/source/blender/windowmanager/intern/wm_init_exit.c
index 8727a9cadfe..ae84ac26979 100644
--- a/source/blender/windowmanager/intern/wm_init_exit.c
+++ b/source/blender/windowmanager/intern/wm_init_exit.c
@@ -43,6 +43,7 @@
#include "DNA_windowmanager_types.h"
#include "BKE_blender.h"
+#include "BKE_context.h"
#include "BKE_curve.h"
#include "BKE_displist.h"
#include "BKE_DerivedMesh.h"
@@ -165,10 +166,10 @@ void WM_exit(bContext *C)
/* first wrap up running stuff, we assume only the active WM is running */
/* modal handlers are on window level freed, others too? */
- if(C && C->wm) {
- for(win= C->wm->windows.first; win; win= win->next) {
+ if(C && CTX_wm_manager(C)) {
+ for(win= CTX_wm_manager(C)->windows.first; win; win= win->next) {
- C->window= win; /* needed by operator close callbacks */
+ CTX_wm_window_set(C, win); /* needed by operator close callbacks */
WM_event_remove_handlers(C, &win->handlers);
ED_screen_exit(C, win, win->screen);
}
@@ -258,7 +259,7 @@ void WM_exit(bContext *C)
RNA_exit();
- MEM_freeN(C);
+ CTX_free(C);
if(MEM_get_memory_blocks_in_use()!=0) {
printf("Error Totblock: %d\n", MEM_get_memory_blocks_in_use());
diff --git a/source/blender/windowmanager/intern/wm_keymap.c b/source/blender/windowmanager/intern/wm_keymap.c
index 139fff45b48..a7ce67aeeba 100644
--- a/source/blender/windowmanager/intern/wm_keymap.c
+++ b/source/blender/windowmanager/intern/wm_keymap.c
@@ -36,7 +36,7 @@
#include "BLI_blenlib.h"
#include "BKE_blender.h"
-#include "BKE_global.h"
+#include "BKE_context.h"
#include "BKE_library.h"
#include "BKE_main.h"
@@ -515,8 +515,8 @@ char *WM_key_event_operator_string(bContext *C, char *opname, int opcontext, cha
/* find right handler list based on specified context */
if(opcontext == WM_OP_REGION_WIN) {
- if(C->area) {
- ARegion *ar= C->area->regionbase.first;
+ if(CTX_wm_area(C)) {
+ ARegion *ar= CTX_wm_area(C)->regionbase.first;
for(; ar; ar= ar->next)
if(ar->regiontype==RGN_TYPE_WINDOW)
break;
@@ -526,16 +526,16 @@ char *WM_key_event_operator_string(bContext *C, char *opname, int opcontext, cha
}
}
else if(opcontext == WM_OP_AREA) {
- if(C->area)
- handlers= &C->area->handlers;
+ if(CTX_wm_area(C))
+ handlers= &CTX_wm_area(C)->handlers;
}
else if(opcontext == WM_OP_SCREEN) {
- if(C->window)
- handlers= &C->window->handlers;
+ if(CTX_wm_window(C))
+ handlers= &CTX_wm_window(C)->handlers;
}
else {
- if(C->region)
- handlers= &C->region->handlers;
+ if(CTX_wm_region(C))
+ handlers= &CTX_wm_region(C)->handlers;
}
if(!handlers)
diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c
index 262052c442a..6f5b09d7d95 100644
--- a/source/blender/windowmanager/intern/wm_operators.c
+++ b/source/blender/windowmanager/intern/wm_operators.c
@@ -37,7 +37,7 @@
#include "BLI_blenlib.h"
#include "BKE_blender.h"
-#include "BKE_global.h"
+#include "BKE_context.h"
#include "BKE_idprop.h"
#include "BKE_library.h"
#include "BKE_main.h"
@@ -109,7 +109,7 @@ int WM_operator_confirm(bContext *C, wmOperator *op, wmEvent *event)
int WM_operator_winactive(bContext *C)
{
- if(C->window==NULL) return 0;
+ if(CTX_wm_window(C)==NULL) return 0;
return 1;
}
@@ -199,7 +199,7 @@ static void border_select_end(bContext *C, wmOperator *op)
WM_gesture_end(C, gesture); /* frees gesture itself, and unregisters from window */
op->customdata= NULL;
- ED_area_tag_redraw(C->area);
+ ED_area_tag_redraw(CTX_wm_area(C));
}
@@ -208,7 +208,7 @@ int WM_border_select_invoke(bContext *C, wmOperator *op, wmEvent *event)
op->customdata= WM_gesture_new(C, event, WM_GESTURE_CROSS_RECT);
/* add modal handler */
- WM_event_add_modal_handler(C, &C->window->handlers, op);
+ WM_event_add_modal_handler(C, &CTX_wm_window(C)->handlers, op);
WM_event_add_notifier(C, WM_NOTE_GESTURE_REDRAW, 0, NULL);
@@ -224,7 +224,7 @@ int WM_border_select_modal(bContext *C, wmOperator *op, wmEvent *event)
switch(event->type) {
case MOUSEMOVE:
- wm_subwindow_getorigin(C->window, gesture->swinid, &sx, &sy);
+ wm_subwindow_getorigin(CTX_wm_window(C), gesture->swinid, &sx, &sy);
if(gesture->type==WM_GESTURE_CROSS_RECT && gesture->mode==0) {
rect->xmin= rect->xmax= event->x - sx;
@@ -268,7 +268,7 @@ static int tweak_gesture_invoke(bContext *C, wmOperator *op, wmEvent *event)
op->customdata= WM_gesture_new(C, event, WM_GESTURE_TWEAK);
/* add modal handler */
- WM_event_add_modal_handler(C, &C->window->handlers, op);
+ WM_event_add_modal_handler(C, &CTX_wm_window(C)->handlers, op);
WM_event_add_notifier(C, WM_NOTE_GESTURE_REDRAW, 0, NULL);
@@ -282,12 +282,13 @@ static void tweak_gesture_end(bContext *C, wmOperator *op)
WM_gesture_end(C, gesture); /* frees gesture itself, and unregisters from window */
op->customdata= NULL;
- ED_area_tag_redraw(C->area);
+ ED_area_tag_redraw(CTX_wm_area(C));
}
static int tweak_gesture_modal(bContext *C, wmOperator *op, wmEvent *event)
{
+ wmWindow *window= CTX_wm_window(C);
wmGesture *gesture= op->customdata;
rcti *rect= gesture->customdata;
int sx, sy, val;
@@ -295,7 +296,7 @@ static int tweak_gesture_modal(bContext *C, wmOperator *op, wmEvent *event)
switch(event->type) {
case MOUSEMOVE:
- wm_subwindow_getorigin(C->window, gesture->swinid, &sx, &sy);
+ wm_subwindow_getorigin(window, gesture->swinid, &sx, &sy);
rect->xmax= event->x - sx;
rect->ymax= event->y - sy;
@@ -303,7 +304,7 @@ static int tweak_gesture_modal(bContext *C, wmOperator *op, wmEvent *event)
if((val= wm_gesture_evaluate(C, gesture))) {
wmEvent event;
- event= *(C->window->eventstate);
+ event= *(window->eventstate);
if(gesture->event_type==LEFTMOUSE)
event.type= EVT_TWEAK_L;
else if(gesture->event_type==RIGHTMOUSE)
@@ -312,7 +313,7 @@ static int tweak_gesture_modal(bContext *C, wmOperator *op, wmEvent *event)
event.type= EVT_TWEAK_M;
event.val= val;
/* mouse coords! */
- wm_event_add(C->window, &event);
+ wm_event_add(window, &event);
tweak_gesture_end(C, op);
return OPERATOR_FINISHED;
diff --git a/source/blender/windowmanager/intern/wm_report.c b/source/blender/windowmanager/intern/wm_report.c
deleted file mode 100644
index 3be991e12e4..00000000000
--- a/source/blender/windowmanager/intern/wm_report.c
+++ /dev/null
@@ -1,134 +0,0 @@
-
-#include "MEM_guardedalloc.h"
-
-#include "DNA_windowmanager_types.h"
-
-#include "BLI_blenlib.h"
-
-#include "BKE_global.h"
-
-#include "WM_api.h"
-#include "WM_types.h"
-
-#include <stdarg.h>
-#include <stdio.h>
-#include <string.h>
-
-#ifdef _WIN32
-#ifndef vsnprintf
-#define vsnprintf _vsnprintf
-#endif
-#endif
-
-static int wmReportLevel= WM_LOG_INFO;
-static int wmReportPrint= 0;
-
-static const char *wm_report_type_str(int type)
-{
- switch(type) {
- case WM_LOG_DEBUG: return "Debug";
- case WM_LOG_INFO: return "Info";
- case WM_LOG_WARNING: return "Warning";
- case WM_ERROR_UNDEFINED: return "Error";
- case WM_ERROR_INVALID_INPUT: return "Invalid Input Error";
- case WM_ERROR_INVALID_CONTEXT: return "Invalid Context Error";
- case WM_ERROR_OUT_OF_MEMORY: return "Out Of Memory Error";
- default: return "Undefined Type";
- }
-}
-
-static void wm_print_report(wmReport *report)
-{
- printf("%s: %s\n", report->typestr, report->message);
- fflush(stdout); /* this ensures the message is printed before a crash */
-}
-
-void WM_report(bContext *C, int type, const char *message)
-{
- wmReport *report;
- int len;
-
- if(!C->wm) {
- fprintf(stderr, "WM_report: can't report without windowmanager.\n");
- return;
- }
- if(type < wmReportLevel)
- return;
-
- report= MEM_callocN(sizeof(wmReport), "wmReport");
- report->type= type;
- report->typestr= wm_report_type_str(type);
-
- len= strlen(message);
- report->message= MEM_callocN(sizeof(char)*(len+1), "wmReportMessage");
- memcpy(report->message, message, sizeof(char)*(len+1));
-
- if(wmReportPrint)
- wm_print_report(report);
-
- BLI_addtail(&C->wm->reports, report);
-}
-
-void WM_reportf(bContext *C, int type, const char *format, ...)
-{
- wmReport *report;
- va_list args;
- char *message;
- int len= 256, maxlen= 65536, retval;
-
- if(!C->wm) {
- fprintf(stderr, "WM_report: can't report without windowmanager.\n");
- return;
- }
- if(type < wmReportLevel)
- return;
-
- while(1) {
- message= MEM_callocN(sizeof(char)*len+1, "wmReportMessage");
-
- va_start(args, format);
- retval= vsnprintf(message, len, format, args);
- va_end(args);
-
- if(retval == -1) {
- /* -1 means not enough space, but on windows it may also mean
- * there is a formatting error, so we impose a maximum length */
- MEM_freeN(message);
- message= NULL;
-
- len *= 2;
- if(len > maxlen) {
- fprintf(stderr, "WM_report message too long or format error.\n");
- break;
- }
- }
- else if(retval > len) {
- /* in C99 the actual length required is returned */
- MEM_freeN(message);
- message= NULL;
-
- len= retval;
- }
- else
- break;
- }
-
- if(message) {
- report= MEM_callocN(sizeof(wmReport), "wmReport");
- report->type= type;
- report->typestr= wm_report_type_str(type);
- report->message= message;
-
- if(wmReportPrint)
- wm_print_report(report);
-
- BLI_addtail(&C->wm->reports, report);
- }
-}
-
-void wm_report_free(wmReport *report)
-{
- MEM_freeN(report->message);
- MEM_freeN(report);
-}
-
diff --git a/source/blender/windowmanager/intern/wm_subwindow.c b/source/blender/windowmanager/intern/wm_subwindow.c
index cfd111d355c..56574829b53 100644
--- a/source/blender/windowmanager/intern/wm_subwindow.c
+++ b/source/blender/windowmanager/intern/wm_subwindow.c
@@ -40,6 +40,7 @@
#include "BLI_blenlib.h"
#include "BLI_arithb.h"
+#include "BKE_context.h"
#include "BKE_global.h"
#include "BIF_gl.h"
diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c
index 84c003c8a00..f3c5f626f48 100644
--- a/source/blender/windowmanager/intern/wm_window.c
+++ b/source/blender/windowmanager/intern/wm_window.c
@@ -40,6 +40,7 @@
#include "BLI_blenlib.h"
#include "BKE_blender.h"
+#include "BKE_context.h"
#include "BKE_global.h"
#include "BKE_utildefines.h"
@@ -88,14 +89,14 @@ void wm_window_free(bContext *C, wmWindow *win)
{
/* update context */
if(C) {
- if(C->wm->windrawable==win)
- C->wm->windrawable= NULL;
- if(C->wm->winactive==win)
- C->wm->winactive= NULL;
- if(C->window==win)
- C->window= NULL;
- if(C->screen==win->screen)
- C->screen= NULL;
+ wmWindowManager *wm= CTX_wm_manager(C);
+
+ if(wm->windrawable==win)
+ wm->windrawable= NULL;
+ if(wm->winactive==win)
+ wm->winactive= NULL;
+ if(CTX_wm_window(C)==win)
+ CTX_wm_window_set(C, NULL);
}
if(win->eventstate) MEM_freeN(win->eventstate);
@@ -123,10 +124,11 @@ static int find_free_winid(wmWindowManager *wm)
/* dont change context itself */
wmWindow *wm_window_new(bContext *C)
{
+ wmWindowManager *wm= CTX_wm_manager(C);
wmWindow *win= MEM_callocN(sizeof(wmWindow), "window");
- BLI_addtail(&C->wm->windows, win);
- win->winid= find_free_winid(C->wm);
+ BLI_addtail(&wm->windows, win);
+ win->winid= find_free_winid(wm);
return win;
}
@@ -152,12 +154,13 @@ wmWindow *wm_window_copy(bContext *C, wmWindow *winorig)
/* this is event from ghost */
static void wm_window_close(bContext *C, wmWindow *win)
{
- BLI_remlink(&C->wm->windows, win);
+ wmWindowManager *wm= CTX_wm_manager(C);
+ BLI_remlink(&wm->windows, win);
ED_screen_exit(C, win, win->screen);
wm_window_free(C, win);
- if(C->wm->windows.first==NULL)
+ if(wm->windows.first==NULL)
WM_exit(C);
}
@@ -256,6 +259,7 @@ void wm_window_add_ghostwindows(wmWindowManager *wm)
/* area-rip calls this */
wmWindow *WM_window_open(bContext *C, rcti *rect)
{
+ wmWindowManager *wm= CTX_wm_manager(C);
wmWindow *win= wm_window_new(C);
win->posx= rect->xmin;
@@ -263,7 +267,7 @@ wmWindow *WM_window_open(bContext *C, rcti *rect)
win->sizex= rect->xmax - rect->xmin;
win->sizey= rect->ymax - rect->ymin;
- wm_window_add_ghostwindow(C->wm, "Blender", win);
+ wm_window_add_ghostwindow(wm, "Blender", win);
return win;
}
@@ -274,7 +278,7 @@ wmWindow *WM_window_open(bContext *C, rcti *rect)
/* operator callback */
int wm_window_duplicate_op(bContext *C, wmOperator *op)
{
- wm_window_copy(C, C->window);
+ wm_window_copy(C, CTX_wm_window(C));
wm_check(C);
return OPERATOR_FINISHED;
@@ -284,11 +288,12 @@ int wm_window_duplicate_op(bContext *C, wmOperator *op)
/* fullscreen operator callback */
int wm_window_fullscreen_toggle_op(bContext *C, wmOperator *op)
{
- GHOST_TWindowState state = GHOST_GetWindowState(C->window->ghostwin);
+ wmWindow *window= CTX_wm_window(C);
+ GHOST_TWindowState state = GHOST_GetWindowState(window->ghostwin);
if(state!=GHOST_kWindowStateFullScreen)
- GHOST_SetWindowState(C->window->ghostwin, GHOST_kWindowStateFullScreen);
+ GHOST_SetWindowState(window->ghostwin, GHOST_kWindowStateFullScreen);
else
- GHOST_SetWindowState(C->window->ghostwin, GHOST_kWindowStateNormal);
+ GHOST_SetWindowState(window->ghostwin, GHOST_kWindowStateNormal);
return OPERATOR_FINISHED;
@@ -298,7 +303,9 @@ int wm_window_fullscreen_toggle_op(bContext *C, wmOperator *op)
/* exit blender */
int wm_exit_blender_op(bContext *C, wmOperator *op)
{
- wmWindow *win= C->wm->windows.first;
+ wmWindowManager *wm= CTX_wm_manager(C);
+ wmWindow *win= wm->windows.first;
+
while(win) {
wm_window_close(C, win);
win= win->next;
@@ -337,10 +344,12 @@ static int query_qual(char qual)
void wm_window_make_drawable(bContext *C, wmWindow *win)
{
- if (win != C->wm->windrawable && win->ghostwin) {
+ wmWindowManager *wm= CTX_wm_manager(C);
+
+ if (win != wm->windrawable && win->ghostwin) {
// win->lmbut= 0; /* keeps hanging when mousepressed while other window opened */
- C->wm->windrawable= win;
+ wm->windrawable= win;
if(G.f & G_DEBUG) printf("set drawable %d\n", win->winid);
GHOST_ActivateWindowDrawingContext(win->ghostwin);
}
@@ -382,7 +391,7 @@ static int ghost_event_proc(GHOST_EventHandle evt, GHOST_TUserDataPtr private)
GHOST_TEventKeyData kdata;
int cx, cy, wx, wy;
- C->wm->winactive= win; /* no context change! c->wm->windrawable is drawable, or for area queues */
+ CTX_wm_manager(C)->winactive= win; /* no context change! c->wm->windrawable is drawable, or for area queues */
win->active= 1;
// window_handle(win, INPUTCHANGE, win->active);