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
path: root/source
diff options
context:
space:
mode:
authorTon Roosendaal <ton@blender.org>2009-02-17 18:53:52 +0300
committerTon Roosendaal <ton@blender.org>2009-02-17 18:53:52 +0300
commit9322bddf2c8997adafe3474e50bbb2eab7ab2076 (patch)
treedcb59d85488efc58d745c9b124bf44a8264526b1 /source
parent9185f7931aba220c0b8ac82878e869225f2549dd (diff)
2.5
Fix for the 'repeat last operator' option. It didn't work yet well outside editmode. Now undo/redo has to fully keep the UI alive, even when called from within a running popup. Another fix: when regions collapse/hide they were not effectively disabled, still accepting events. (like Nkey in 3d window).
Diffstat (limited to 'source')
-rw-r--r--source/blender/blenkernel/intern/blender.c15
-rw-r--r--source/blender/editors/interface/interface.c12
-rw-r--r--source/blender/editors/screen/area.c16
-rw-r--r--source/blender/editors/transform/transform.c6
4 files changed, 34 insertions, 15 deletions
diff --git a/source/blender/blenkernel/intern/blender.c b/source/blender/blenkernel/intern/blender.c
index 64acd933d46..be64faec3cf 100644
--- a/source/blender/blenkernel/intern/blender.c
+++ b/source/blender/blenkernel/intern/blender.c
@@ -321,10 +321,6 @@ static void setup_app_data(bContext *C, BlendFileData *bfd, char *filename)
G.main= bfd->main;
CTX_data_main_set(C, G.main);
- CTX_wm_screen_set(C, NULL);
- CTX_wm_area_set(C, NULL);
- CTX_wm_region_set(C, NULL);
- CTX_wm_ui_block_set(C, NULL, NULL);
if (bfd->user) {
@@ -340,15 +336,19 @@ static void setup_app_data(bContext *C, BlendFileData *bfd, char *filename)
/* case G_FILE_NO_UI or no screens in file */
if(mode) {
- CTX_wm_screen_set(C, curscreen);
+ /* leave entire context further unaltered? */
CTX_data_scene_set(C, curscene);
}
else {
G.winpos= bfd->winpos;
G.displaymode= bfd->displaymode;
G.fileflags= bfd->fileflags;
+
CTX_wm_screen_set(C, bfd->curscreen);
CTX_data_scene_set(C, bfd->curscreen->scene);
+ CTX_wm_area_set(C, NULL);
+ CTX_wm_region_set(C, NULL);
+ CTX_wm_ui_block_set(C, NULL, NULL);
}
/* this can happen when active scene was lib-linked, and doesnt exist anymore */
@@ -372,8 +372,9 @@ static void setup_app_data(bContext *C, BlendFileData *bfd, char *filename)
//setscreen(G.curscreen);
}
- // XXX is this in the right place?
- do_versions_ipos_to_animato(G.main); // XXX fixme... complicated versionpatching
+ // XXX temporarily here
+ if(G.main->versionfile < 250)
+ do_versions_ipos_to_animato(G.main); // XXX fixme... complicated versionpatching
/* baseflags, groups, make depsgraph, etc */
set_scene_bg(CTX_data_scene(C));
diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c
index 66d9653bdd0..f6a5086773a 100644
--- a/source/blender/editors/interface/interface.c
+++ b/source/blender/editors/interface/interface.c
@@ -1494,6 +1494,7 @@ static void ui_free_link(uiLink *link)
}
}
+/* can be called with C==NULL */
static void ui_free_but(const bContext *C, uiBut *but)
{
if(but->opptr) {
@@ -1501,13 +1502,21 @@ static void ui_free_but(const bContext *C, uiBut *but)
MEM_freeN(but->opptr);
}
if(but->func_argN) MEM_freeN(but->func_argN);
- if(but->active) ui_button_active_cancel(C, but);
+ if(but->active) {
+ /* XXX solve later, buttons should be free-able without context? */
+ if(C)
+ ui_button_active_cancel(C, but);
+ else
+ if(but->active)
+ MEM_freeN(but->active);
+ }
if(but->str && but->str != but->strdata) MEM_freeN(but->str);
ui_free_link(but->link);
MEM_freeN(but);
}
+/* can be called with C==NULL */
void uiFreeBlock(const bContext *C, uiBlock *block)
{
uiBut *but;
@@ -1525,6 +1534,7 @@ void uiFreeBlock(const bContext *C, uiBlock *block)
MEM_freeN(block);
}
+/* can be called with C==NULL */
void uiFreeBlocks(const bContext *C, ListBase *lb)
{
uiBlock *block;
diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c
index c738aa78d51..dfbd6c031d1 100644
--- a/source/blender/editors/screen/area.c
+++ b/source/blender/editors/screen/area.c
@@ -330,6 +330,8 @@ static void region_rect_recursive(ARegion *ar, rcti *remainder, int quad)
if(ar==NULL)
return;
+ BLI_init_rcti(&ar->winrct, 0, 0, 0, 0);
+
/* clear state flags first */
ar->flag &= ~RGN_FLAG_TOO_SMALL;
/* user errors */
@@ -603,11 +605,17 @@ void ED_area_initialize(wmWindowManager *wm, wmWindow *win, ScrArea *sa)
for(ar= sa->regionbase.first; ar; ar= ar->next) {
region_subwindow(wm, win, ar);
- /* default region handlers */
- ed_default_handlers(wm, &ar->handlers, ar->type->keymapflag);
+ if(ar->swinid) {
+ /* default region handlers */
+ ed_default_handlers(wm, &ar->handlers, ar->type->keymapflag);
- if(ar->type->init)
- ar->type->init(wm, ar);
+ if(ar->type->init)
+ ar->type->init(wm, ar);
+ }
+ else {
+ /* prevent uiblocks to run */
+ uiFreeBlocks(NULL, &ar->uiblocks);
+ }
}
area_azone_initialize(sa);
diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c
index 8c7bb0463c2..e6b8662ce4c 100644
--- a/source/blender/editors/transform/transform.c
+++ b/source/blender/editors/transform/transform.c
@@ -1175,11 +1175,11 @@ int transformEnd(bContext *C, TransInfo *t)
/* Undo as last, certainly after special_trans_update! */
if(t->state == TRANS_CANCEL) {
- if(t->undostr) ED_undo_push(C, t->undostr);
+// if(t->undostr) ED_undo_push(C, t->undostr);
}
else {
- if(t->undostr) ED_undo_push(C, t->undostr);
- else ED_undo_push(C, transform_to_undostr(t));
+// if(t->undostr) ED_undo_push(C, t->undostr);
+// else ED_undo_push(C, transform_to_undostr(t));
}
t->undostr= NULL;