forked from bartvdbraak/blender
fix for crash opening the file selector twice with multiple windows open (when the mouse was over the inactive window).
This commit is contained in:
parent
7da45bcbcb
commit
e4bb5403d3
@ -1738,7 +1738,7 @@ static void direct_link_fmodifiers(FileData *fd, ListBase *list)
|
|||||||
data->coefficients= newdataadr(fd, data->coefficients);
|
data->coefficients= newdataadr(fd, data->coefficients);
|
||||||
|
|
||||||
if(fd->flags & FD_FLAGS_SWITCH_ENDIAN) {
|
if(fd->flags & FD_FLAGS_SWITCH_ENDIAN) {
|
||||||
unsigned a;
|
unsigned int a;
|
||||||
for(a = 0; a < data->arraysize; a++)
|
for(a = 0; a < data->arraysize; a++)
|
||||||
SWITCH_INT(data->coefficients[a]);
|
SWITCH_INT(data->coefficients[a]);
|
||||||
}
|
}
|
||||||
|
@ -107,7 +107,7 @@ void ED_screen_set_subwinactive(struct bContext *C, struct wmEvent *event);
|
|||||||
void ED_screen_exit(struct bContext *C, struct wmWindow *window, struct bScreen *screen);
|
void ED_screen_exit(struct bContext *C, struct wmWindow *window, struct bScreen *screen);
|
||||||
void ED_screen_animation_timer(struct bContext *C, int redraws, int refresh, int sync, int enable);
|
void ED_screen_animation_timer(struct bContext *C, int redraws, int refresh, int sync, int enable);
|
||||||
void ED_screen_animation_timer_update(struct bScreen *screen, int redraws, int refresh);
|
void ED_screen_animation_timer_update(struct bScreen *screen, int redraws, int refresh);
|
||||||
int ED_screen_full_newspace(struct bContext *C, ScrArea *sa, int type);
|
ScrArea *ED_screen_full_newspace(struct bContext *C, ScrArea *sa, int type);
|
||||||
void ED_screen_full_prevspace(struct bContext *C, ScrArea *sa);
|
void ED_screen_full_prevspace(struct bContext *C, ScrArea *sa);
|
||||||
void ED_screen_full_restore(struct bContext *C, ScrArea *sa);
|
void ED_screen_full_restore(struct bContext *C, ScrArea *sa);
|
||||||
struct ScrArea *ED_screen_full_toggle(struct bContext *C, struct wmWindow *win, struct ScrArea *sa);
|
struct ScrArea *ED_screen_full_toggle(struct bContext *C, struct wmWindow *win, struct ScrArea *sa);
|
||||||
|
@ -184,8 +184,7 @@ void render_view_open(bContext *C, int mx, int my)
|
|||||||
area_was_image = 1;
|
area_was_image = 1;
|
||||||
|
|
||||||
/* this function returns with changed context */
|
/* this function returns with changed context */
|
||||||
ED_screen_full_newspace(C, CTX_wm_area(C), SPACE_IMAGE);
|
sa= ED_screen_full_newspace(C, CTX_wm_area(C), SPACE_IMAGE);
|
||||||
sa= CTX_wm_area(C);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!sa) {
|
if(!sa) {
|
||||||
|
@ -1513,7 +1513,7 @@ void ED_screen_delete_scene(bContext *C, Scene *scene)
|
|||||||
unlink_scene(bmain, scene, newscene);
|
unlink_scene(bmain, scene, newscene);
|
||||||
}
|
}
|
||||||
|
|
||||||
int ED_screen_full_newspace(bContext *C, ScrArea *sa, int type)
|
ScrArea *ED_screen_full_newspace(bContext *C, ScrArea *sa, int type)
|
||||||
{
|
{
|
||||||
wmWindow *win= CTX_wm_window(C);
|
wmWindow *win= CTX_wm_window(C);
|
||||||
bScreen *screen= CTX_wm_screen(C);
|
bScreen *screen= CTX_wm_screen(C);
|
||||||
@ -1538,7 +1538,7 @@ int ED_screen_full_newspace(bContext *C, ScrArea *sa, int type)
|
|||||||
|
|
||||||
ED_area_newspace(C, newsa, type);
|
ED_area_newspace(C, newsa, type);
|
||||||
|
|
||||||
return 1;
|
return newsa;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ED_screen_full_prevspace(bContext *C, ScrArea *sa)
|
void ED_screen_full_prevspace(bContext *C, ScrArea *sa)
|
||||||
|
@ -1289,16 +1289,23 @@ static int wm_handler_fileselect_call(bContext *C, ListBase *handlers, wmEventHa
|
|||||||
if (handler->op_area == NULL) {
|
if (handler->op_area == NULL) {
|
||||||
bScreen *screen = CTX_wm_screen(C);
|
bScreen *screen = CTX_wm_screen(C);
|
||||||
sa = (ScrArea *)screen->areabase.first;
|
sa = (ScrArea *)screen->areabase.first;
|
||||||
} else
|
}
|
||||||
|
else {
|
||||||
sa = handler->op_area;
|
sa = handler->op_area;
|
||||||
|
}
|
||||||
|
|
||||||
if(event->val==EVT_FILESELECT_OPEN)
|
if(event->val==EVT_FILESELECT_OPEN) {
|
||||||
ED_area_newspace(C, sa, SPACE_FILE);
|
ED_area_newspace(C, sa, SPACE_FILE); /* 'sa' is modified in-place */
|
||||||
else
|
}
|
||||||
ED_screen_full_newspace(C, sa, SPACE_FILE); /* sets context */
|
else {
|
||||||
|
sa= ED_screen_full_newspace(C, sa, SPACE_FILE); /* sets context */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* note, getting the 'sa' back from the context causes a nasty bug where the newly created
|
||||||
|
* 'sa' != CTX_wm_area(C). removed the line below and set 'sa' in the 'if' above */
|
||||||
|
/* sa = CTX_wm_area(C); */
|
||||||
|
|
||||||
/* settings for filebrowser, sfile is not operator owner but sends events */
|
/* settings for filebrowser, sfile is not operator owner but sends events */
|
||||||
sa = CTX_wm_area(C);
|
|
||||||
sfile= (SpaceFile*)sa->spacedata.first;
|
sfile= (SpaceFile*)sa->spacedata.first;
|
||||||
sfile->op= handler->op;
|
sfile->op= handler->op;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user