[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [55315] trunk/blender/source/blender: Screen: add exit callback for area and region types, this gets called when

Brecht Van Lommel brechtvanlommel at pandora.be
Fri Mar 15 20:56:30 CET 2013


Revision: 55315
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=55315
Author:   blendix
Date:     2013-03-15 19:56:29 +0000 (Fri, 15 Mar 2013)
Log Message:
-----------
Screen: add exit callback for area and region types, this gets called when
hiding or removing an area or region.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_screen.h
    trunk/blender/source/blender/editors/include/ED_fileselect.h
    trunk/blender/source/blender/editors/screen/screen_edit.c
    trunk/blender/source/blender/editors/space_file/file_draw.c
    trunk/blender/source/blender/editors/space_file/file_ops.c
    trunk/blender/source/blender/editors/space_file/filelist.c
    trunk/blender/source/blender/editors/space_file/filelist.h
    trunk/blender/source/blender/editors/space_file/filesel.c
    trunk/blender/source/blender/editors/space_file/space_file.c
    trunk/blender/source/blender/editors/space_view3d/space_view3d.c
    trunk/blender/source/blender/windowmanager/WM_api.h
    trunk/blender/source/blender/windowmanager/intern/wm_event_system.c

Modified: trunk/blender/source/blender/blenkernel/BKE_screen.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_screen.h	2013-03-15 19:38:42 UTC (rev 55314)
+++ trunk/blender/source/blender/blenkernel/BKE_screen.h	2013-03-15 19:56:29 UTC (rev 55315)
@@ -75,6 +75,8 @@
 	
 	/* init is to cope with file load, screen (size) changes, check handlers */
 	void (*init)(struct wmWindowManager *, struct ScrArea *);
+	/* exit is called when the area is hidden or removed */
+	void (*exit)(struct wmWindowManager *, struct ScrArea *);
 	/* Listeners can react to bContext changes */
 	void (*listener)(struct ScrArea *, struct wmNotifier *);
 	
@@ -116,6 +118,8 @@
 	
 	/* add handlers, stuff you only do once or on area/region type/size changes */
 	void (*init)(struct wmWindowManager *, struct ARegion *);
+	/* exit is called when the region is hidden or removed */
+	void (*exit)(struct wmWindowManager *, struct ARegion *);
 	/* draw entirely, view changes should be handled here */
 	void (*draw)(const struct bContext *, struct ARegion *);
 	/* contextual changes should be handled here */

Modified: trunk/blender/source/blender/editors/include/ED_fileselect.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_fileselect.h	2013-03-15 19:38:42 UTC (rev 55314)
+++ trunk/blender/source/blender/editors/include/ED_fileselect.h	2013-03-15 19:56:29 UTC (rev 55315)
@@ -31,10 +31,11 @@
 #ifndef __ED_FILESELECT_H__
 #define __ED_FILESELECT_H__
 
-struct SpaceFile;
 struct ARegion;
 struct FileSelectParams;
+struct SpaceFile;
 struct bContext;
+struct wmWindowManager;
 
 #define FILE_LAYOUT_HOR 1
 #define FILE_LAYOUT_VER 2
@@ -99,9 +100,9 @@
 
 void ED_operatormacros_file(void);
 
-void ED_fileselect_clear(struct bContext *C, struct SpaceFile *sfile);
+void ED_fileselect_clear(struct wmWindowManager *wm, struct SpaceFile *sfile);
 
-void ED_fileselect_exit(struct bContext *C, struct SpaceFile *sfile);
+void ED_fileselect_exit(struct wmWindowManager *wm, struct SpaceFile *sfile);
 
 int ED_file_extension_icon(const char *relname);
 

Modified: trunk/blender/source/blender/editors/screen/screen_edit.c
===================================================================
--- trunk/blender/source/blender/editors/screen/screen_edit.c	2013-03-15 19:38:42 UTC (rev 55314)
+++ trunk/blender/source/blender/editors/screen/screen_edit.c	2013-03-15 19:56:29 UTC (rev 55315)
@@ -1137,8 +1137,12 @@
 
 void ED_region_exit(bContext *C, ARegion *ar)
 {
+	wmWindowManager *wm = CTX_wm_manager(C);
 	ARegion *prevar = CTX_wm_region(C);
 
+	if (ar->type && ar->type->exit)
+		ar->type->exit(wm, ar);
+
 	CTX_wm_region_set(C, ar);
 	WM_event_remove_handlers(C, &ar->handlers);
 	if (ar->swinid)
@@ -1157,18 +1161,12 @@
 
 void ED_area_exit(bContext *C, ScrArea *sa)
 {
+	wmWindowManager *wm = CTX_wm_manager(C);
 	ScrArea *prevsa = CTX_wm_area(C);
 	ARegion *ar;
 
-	if (sa->spacetype == SPACE_FILE) {
-		SpaceLink *sl = sa->spacedata.first;
-		if (sl && sl->spacetype == SPACE_FILE) {
-			ED_fileselect_exit(C, (SpaceFile *)sl);
-		}
-	}
-	else if (sa->spacetype == SPACE_VIEW3D) {
-		ED_render_engine_area_exit(sa);
-	}
+	if (sa->type && sa->type->exit)
+		sa->type->exit(wm, sa);
 
 	CTX_wm_area_set(C, sa);
 	for (ar = sa->regionbase.first; ar; ar = ar->next)

Modified: trunk/blender/source/blender/editors/space_file/file_draw.c
===================================================================
--- trunk/blender/source/blender/editors/space_file/file_draw.c	2013-03-15 19:38:42 UTC (rev 55314)
+++ trunk/blender/source/blender/editors/space_file/file_draw.c	2013-03-15 19:56:29 UTC (rev 55315)
@@ -56,6 +56,7 @@
 #include "MEM_guardedalloc.h"
 
 #include "DNA_userdef_types.h"
+#include "DNA_windowmanager_types.h"
 
 #include "RNA_access.h"
 
@@ -397,6 +398,7 @@
 	char newname[FILE_MAX + 12];
 	char orgname[FILE_MAX + 12];
 	char filename[FILE_MAX + 12];
+	wmWindowManager *wm = CTX_wm_manager(C);
 	SpaceFile *sfile = (SpaceFile *)CTX_wm_space_data(C);
 	ARegion *ar = CTX_wm_region(C);
 
@@ -408,7 +410,7 @@
 		if (!BLI_exists(newname)) {
 			BLI_rename(orgname, newname);
 			/* to make sure we show what is on disk */
-			ED_fileselect_clear(C, sfile);
+			ED_fileselect_clear(wm, sfile);
 		}
 
 		ED_region_tag_redraw(ar);

Modified: trunk/blender/source/blender/editors/space_file/file_ops.c
===================================================================
--- trunk/blender/source/blender/editors/space_file/file_ops.c	2013-03-15 19:38:42 UTC (rev 55314)
+++ trunk/blender/source/blender/editors/space_file/file_ops.c	2013-03-15 19:56:29 UTC (rev 55315)
@@ -612,12 +612,13 @@
 
 int file_cancel_exec(bContext *C, wmOperator *UNUSED(unused))
 {
+	wmWindowManager *wm = CTX_wm_manager(C);
 	SpaceFile *sfile = CTX_wm_space_file(C);
 	wmOperator *op = sfile->op;
 	
 	sfile->op = NULL;
 
-	WM_event_fileselect_event(C, op, EVT_FILESELECT_CANCEL);
+	WM_event_fileselect_event(wm, op, EVT_FILESELECT_CANCEL);
 	
 	return OPERATOR_FINISHED;
 }
@@ -780,6 +781,7 @@
 /* sends events now, so things get handled on windowqueue level */
 int file_exec(bContext *C, wmOperator *exec_op)
 {
+	wmWindowManager *wm = CTX_wm_manager(C);
 	SpaceFile *sfile = CTX_wm_space_file(C);
 	char filepath[FILE_MAX];
 	
@@ -811,7 +813,7 @@
 
 		BLI_make_file_string(G.main->name, filepath, BLI_get_folder_create(BLENDER_USER_CONFIG, NULL), BLENDER_BOOKMARK_FILE);
 		fsmenu_write_file(fsmenu_get(), filepath);
-		WM_event_fileselect_event(C, op, EVT_FILESELECT_EXEC);
+		WM_event_fileselect_event(wm, op, EVT_FILESELECT_EXEC);
 
 	}
 				
@@ -871,10 +873,11 @@
 
 static int file_refresh_exec(bContext *C, wmOperator *UNUSED(unused))
 {
+	wmWindowManager *wm = CTX_wm_manager(C);
 	SpaceFile *sfile = CTX_wm_space_file(C);
 	struct FSMenu *fsmenu = fsmenu_get();
 
-	ED_fileselect_clear(C, sfile);
+	ED_fileselect_clear(wm, sfile);
 
 	/* refresh system directory menu */
 	fsmenu_refresh_system_category(fsmenu);
@@ -1088,6 +1091,7 @@
 	char path[FILE_MAX];
 	int generate_name = 1;
 
+	wmWindowManager *wm = CTX_wm_manager(C);
 	SpaceFile *sfile = CTX_wm_space_file(C);
 	
 	if (!sfile->params) {
@@ -1126,7 +1130,7 @@
 	sfile->scroll_offset = 0;
 
 	/* reload dir to make sure we're seeing what's in the directory */
-	ED_fileselect_clear(C, sfile);
+	ED_fileselect_clear(wm, sfile);
 	WM_event_add_notifier(C, NC_SPACE | ND_SPACE_FILE_LIST, NULL);
 
 	return OPERATOR_FINISHED;
@@ -1291,11 +1295,12 @@
 
 static int file_hidedot_exec(bContext *C, wmOperator *UNUSED(unused))
 {
+	wmWindowManager *wm = CTX_wm_manager(C);
 	SpaceFile *sfile = CTX_wm_space_file(C);
 	
 	if (sfile->params) {
 		sfile->params->flag ^= FILE_HIDE_DOT;
-		ED_fileselect_clear(C, sfile);
+		ED_fileselect_clear(wm, sfile);
 		WM_event_add_notifier(C, NC_SPACE | ND_SPACE_FILE_LIST, NULL);
 	}
 	
@@ -1477,6 +1482,7 @@
 int file_delete_exec(bContext *C, wmOperator *UNUSED(op))
 {
 	char str[FILE_MAX];
+	wmWindowManager *wm = CTX_wm_manager(C);
 	SpaceFile *sfile = CTX_wm_space_file(C);
 	struct direntry *file;
 	
@@ -1484,7 +1490,7 @@
 	file = filelist_file(sfile->files, sfile->params->active_file);
 	BLI_make_file_string(G.main->name, str, sfile->params->dir, file->relname);
 	BLI_delete(str, false, false);
-	ED_fileselect_clear(C, sfile);
+	ED_fileselect_clear(wm, sfile);
 	WM_event_add_notifier(C, NC_SPACE | ND_SPACE_FILE_LIST, NULL);
 	
 	return OPERATOR_FINISHED;

Modified: trunk/blender/source/blender/editors/space_file/filelist.c
===================================================================
--- trunk/blender/source/blender/editors/space_file/filelist.c	2013-03-15 19:38:42 UTC (rev 55314)
+++ trunk/blender/source/blender/editors/space_file/filelist.c	2013-03-15 19:56:29 UTC (rev 55315)
@@ -1337,7 +1337,7 @@
 }
 
 
-void thumbnails_start(struct FileList *filelist, const struct bContext *C)
+void thumbnails_start(FileList *filelist, const bContext *C)
 {
 	wmJob *wm_job;
 	ThumbnailJob *tj;
@@ -1349,7 +1349,7 @@
 	for (idx = 0; idx < filelist->numfiles; idx++) {
 		if (!filelist->filelist[idx].image) {
 			if ( (filelist->filelist[idx].flags & (IMAGEFILE | MOVIEFILE | BLENDERFILE | BLENDERFILE_BACKUP)) ) {
-				FileImage *limg = MEM_callocN(sizeof(struct FileImage), "loadimage");
+				FileImage *limg = MEM_callocN(sizeof(FileImage), "loadimage");
 				BLI_strncpy(limg->path, filelist->filelist[idx].path, FILE_MAX);
 				limg->index = idx;
 				limg->flags = filelist->filelist[idx].flags;
@@ -1371,12 +1371,12 @@
 	WM_jobs_start(CTX_wm_manager(C), wm_job);
 }
 
-void thumbnails_stop(struct FileList *filelist, const struct bContext *C)
+void thumbnails_stop(wmWindowManager *wm, FileList *filelist)
 {
-	WM_jobs_kill(CTX_wm_manager(C), filelist, NULL);
+	WM_jobs_kill(wm, filelist, NULL);
 }
 
-int thumbnails_running(struct FileList *filelist, const struct bContext *C)
+int thumbnails_running(wmWindowManager *wm, FileList *filelist)
 {
-	return WM_jobs_test(CTX_wm_manager(C), filelist, WM_JOB_TYPE_FILESEL_THUMBNAIL);
+	return WM_jobs_test(wm, filelist, WM_JOB_TYPE_FILESEL_THUMBNAIL);
 }

Modified: trunk/blender/source/blender/editors/space_file/filelist.h
===================================================================
--- trunk/blender/source/blender/editors/space_file/filelist.h	2013-03-15 19:38:42 UTC (rev 55314)
+++ trunk/blender/source/blender/editors/space_file/filelist.h	2013-03-15 19:56:29 UTC (rev 55315)
@@ -37,15 +37,16 @@
 extern "C" {
 #endif
 
+struct BlendHandle;
 struct FileList;
+struct FileSelection;
 struct FolderList;
+struct Main;
+struct ReportList;
+struct Scene;
 struct direntry;
-struct BlendHandle;
-struct Scene;
-struct Main;
 struct rcti;
-struct ReportList;
-struct FileSelection;
+struct wmWindowManager;
 
 typedef enum FileSelType {
 	FILE_SEL_REMOVE = 0,
@@ -99,9 +100,9 @@
 void                folderlist_pushdir(struct ListBase *folderlist, const char *dir);
 int                 folderlist_clear_next(struct SpaceFile *sfile);
 
-void                thumbnails_stop(struct FileList *filelist, const struct bContext *C);
 void                thumbnails_start(struct FileList *filelist, const struct bContext *C);
-int                 thumbnails_running(struct FileList *filelist, const struct bContext *C);
+void                thumbnails_stop(struct wmWindowManager *wm, struct FileList *filelist);
+int                 thumbnails_running(struct wmWindowManager *wm, struct FileList *filelist);
 
 #ifdef __cplusplus
 }


@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list