[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [34064] trunk/blender/source/blender: Todo items:

Ton Roosendaal ton at blender.org
Tue Jan 4 15:37:21 CET 2011


Revision: 34064
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=34064
Author:   ton
Date:     2011-01-04 15:37:21 +0100 (Tue, 04 Jan 2011)

Log Message:
-----------
Todo items:

- File Window: when opened with operator (save, load, etc), you 
  couldn't start a new one, causing memleaks. Now it nicely 
  refreshes file window for new operator.
  Also means you can make CTRL+F3 screenies of filewindow now.
- CTRL+F3 screenshot had memleak on cancel.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/screen/area.c
    trunk/blender/source/blender/editors/screen/screendump.c
    trunk/blender/source/blender/windowmanager/intern/wm_event_system.c

Modified: trunk/blender/source/blender/editors/screen/area.c
===================================================================
--- trunk/blender/source/blender/editors/screen/area.c	2011-01-04 13:10:46 UTC (rev 34063)
+++ trunk/blender/source/blender/editors/screen/area.c	2011-01-04 14:37:21 UTC (rev 34064)
@@ -1103,10 +1103,12 @@
 				
 		/*send space change notifyer*/
 		WM_event_add_notifier(C, NC_SPACE|ND_SPACE_CHANGED, sa);
-
-		ED_area_tag_redraw(sa);
+		
 		ED_area_tag_refresh(sa);
 	}
+	
+	/* also redraw when re-used */
+	ED_area_tag_redraw(sa);
 }
 
 void ED_area_prevspace(bContext *C, ScrArea *sa)

Modified: trunk/blender/source/blender/editors/screen/screendump.c
===================================================================
--- trunk/blender/source/blender/editors/screen/screendump.c	2011-01-04 13:10:46 UTC (rev 34063)
+++ trunk/blender/source/blender/editors/screen/screendump.c	2011-01-04 14:37:21 UTC (rev 34064)
@@ -70,29 +70,31 @@
 {
 	ScreenshotData *scd= op->customdata;
 	
-	if(scd && scd->dumprect) {
-		Scene *scene= CTX_data_scene(C);
-		ImBuf *ibuf;
-		char path[FILE_MAX];
-	
-		RNA_string_get(op->ptr, "filepath", path);
-	
-		strcpy(G.ima, path);
-		BLI_path_abs(path, G.main->name);
+	if(scd) {
+		if(scd->dumprect) {
+			Scene *scene= CTX_data_scene(C);
+			ImBuf *ibuf;
+			char path[FILE_MAX];
 		
-		/* BKE_add_image_extension() checks for if extension was already set */
-		if(scene->r.scemode & R_EXTENSION) 
-			if(strlen(path)<FILE_MAXDIR+FILE_MAXFILE-5)
-				BKE_add_image_extension(path, scene->r.imtype);
+			RNA_string_get(op->ptr, "filepath", path);
 		
-		ibuf= IMB_allocImBuf(scd->dumpsx, scd->dumpsy, 24, 0);
-		ibuf->rect= scd->dumprect;
-		
-		BKE_write_ibuf(scene, ibuf, path, scene->r.imtype, scene->r.subimtype, scene->r.quality);
+			strcpy(G.ima, path);
+			BLI_path_abs(path, G.main->name);
+			
+			/* BKE_add_image_extension() checks for if extension was already set */
+			if(scene->r.scemode & R_EXTENSION) 
+				if(strlen(path)<FILE_MAXDIR+FILE_MAXFILE-5)
+					BKE_add_image_extension(path, scene->r.imtype);
+			
+			ibuf= IMB_allocImBuf(scd->dumpsx, scd->dumpsy, 24, 0);
+			ibuf->rect= scd->dumprect;
+			
+			BKE_write_ibuf(scene, ibuf, path, scene->r.imtype, scene->r.subimtype, scene->r.quality);
 
-		IMB_freeImBuf(ibuf);
+			IMB_freeImBuf(ibuf);
 
-		MEM_freeN(scd->dumprect);
+			MEM_freeN(scd->dumprect);
+		}
 		MEM_freeN(scd);
 		op->customdata= NULL;
 	}
@@ -159,7 +161,19 @@
 	return OPERATOR_CANCELLED;
 }
 
+static int screenshot_cancel(bContext *UNUSED(C), wmOperator *op)
+{
+	ScreenshotData *scd= op->customdata;
 
+	if(scd) {
+		if(scd->dumprect)
+			MEM_freeN(scd->dumprect);
+		MEM_freeN(scd);
+		op->customdata= NULL;
+	}
+	return OPERATOR_CANCELLED;
+}
+
 void SCREEN_OT_screenshot(wmOperatorType *ot)
 {
 	ot->name= "Save Screenshot"; /* weak: opname starting with 'save' makes filewindow give save-over */
@@ -168,6 +182,7 @@
 	ot->invoke= screenshot_invoke;
 	ot->exec= screenshot_exec;
 	ot->poll= WM_operator_winactive;
+	ot->cancel= screenshot_cancel;
 	
 	ot->flag= 0;
 	

Modified: trunk/blender/source/blender/windowmanager/intern/wm_event_system.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_event_system.c	2011-01-04 13:10:46 UTC (rev 34063)
+++ trunk/blender/source/blender/windowmanager/intern/wm_event_system.c	2011-01-04 14:37:21 UTC (rev 34064)
@@ -1893,14 +1893,20 @@
 
 void WM_event_add_fileselect(bContext *C, wmOperator *op)
 {
-	wmEventHandler *handler;
+	wmEventHandler *handler, *handlernext;
 	wmWindow *win= CTX_wm_window(C);
 	int full= 1;	// XXX preset?
 
-	/* only allow file selector open per window bug [#23553] */
-	for(handler= win->modalhandlers.first; handler; handler=handler->next) {
-		if(handler->type == WM_HANDLER_FILESELECT)
-			return;
+	/* only allow 1 file selector open per window */
+	for(handler= win->modalhandlers.first; handler; handler=handlernext) {
+		handlernext= handler->next;
+		
+		if(handler->type == WM_HANDLER_FILESELECT) {
+			if(handler->op)
+				WM_operator_free(handler->op);
+			BLI_remlink(&win->modalhandlers, handler);
+			wm_event_free_handler(handler);
+		}
 	}
 	
 	handler = MEM_callocN(sizeof(wmEventHandler), "fileselect handler");





More information about the Bf-blender-cvs mailing list