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:
-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
-rw-r--r--source/creator/creator.c3
67 files changed, 1437 insertions, 730 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);
diff --git a/source/creator/creator.c b/source/creator/creator.c
index 8cb436f4d6d..f96edf99029 100644
--- a/source/creator/creator.c
+++ b/source/creator/creator.c
@@ -53,6 +53,7 @@
#include "BKE_utildefines.h"
#include "BKE_blender.h"
+#include "BKE_context.h"
#include "BKE_font.h"
#include "BKE_global.h"
#include "BKE_main.h"
@@ -261,7 +262,7 @@ double PIL_check_seconds_timer(void);
int main(int argc, char **argv)
{
SYS_SystemHandle syshandle;
- bContext *C= MEM_callocN(sizeof(bContext), "creator.c context");
+ bContext *C= CTX_create();
int a, i, stax, stay, sizx, sizy /*XXX, scr_init = 0*/;
#if defined(WIN32) || defined (__linux__)