[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [31675] trunk/blender/source/blender: patch [#23585] Fix for [#23553] in File Selector; Multiple Calls of Selector

Campbell Barton ideasman42 at gmail.com
Tue Aug 31 16:22:00 CEST 2010


Revision: 31675
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=31675
Author:   campbellbarton
Date:     2010-08-31 16:22:00 +0200 (Tue, 31 Aug 2010)

Log Message:
-----------
patch [#23585] Fix for [#23553] in File Selector; Multiple Calls of Selector
from Alexander Kuznetsov (alexk)
bugfix for [#23553] F2 on filebrowser = bug?

from the tracker
--- snip
File Explorer redraws weirdly on second press of F2 if non-default view or file types were selected previously.

This patch prohibits second call of file selector in the same window.

The bug goes much deeper. If file selector is never closed properly (cancel or select), it never gets released. (at
least the handler). If you press F2 or Ctrl-F3 ten times and than "Back to Previous" and repeat all of this
several times Blender will freeze. Also after calling file selector at least two times, on cancellation Blender will
return to full area independently to what state it was before.
---

include small unrelated change to quiet unpack prints when fonts are not found.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/font.c
    trunk/blender/source/blender/windowmanager/intern/wm_event_system.c

Modified: trunk/blender/source/blender/blenkernel/intern/font.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/font.c	2010-08-31 12:54:17 UTC (rev 31674)
+++ trunk/blender/source/blender/blenkernel/intern/font.c	2010-08-31 14:22:00 UTC (rev 31675)
@@ -265,13 +265,11 @@
 void free_ttfont(void)
 {
 	struct TmpFont *tf;
-	
-	tf= ttfdata.first;
-	while(tf) {
-		freePackedFile(tf->pf);
+
+	for(tf= ttfdata.first; tf; tf= tf->next) {
+		if(tf->pf) freePackedFile(tf->pf); /* NULL when the font file can't be found on disk */
 		tf->pf= NULL;
 		tf->vfont= NULL;
-		tf= tf->next;
 	}
 	BLI_freelistN(&ttfdata);
 }

Modified: trunk/blender/source/blender/windowmanager/intern/wm_event_system.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_event_system.c	2010-08-31 12:54:17 UTC (rev 31674)
+++ trunk/blender/source/blender/windowmanager/intern/wm_event_system.c	2010-08-31 14:22:00 UTC (rev 31675)
@@ -1800,10 +1800,18 @@
 
 void WM_event_add_fileselect(bContext *C, wmOperator *op)
 {
-	wmEventHandler *handler= MEM_callocN(sizeof(wmEventHandler), "fileselect handler");
+	wmEventHandler *handler;
 	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;
+	}
 	
+	handler = MEM_callocN(sizeof(wmEventHandler), "fileselect handler");
+	
 	handler->type= WM_HANDLER_FILESELECT;
 	handler->op= op;
 	handler->op_area= CTX_wm_area(C);





More information about the Bf-blender-cvs mailing list