[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [26133] trunk/blender/source/blender/ editors/space_file/file_ops.c: Fix [#20737] Double-click in file dialog opens ".." directory (and fails of course)

Matt Ebb matt at mke3.net
Wed Jan 20 09:57:28 CET 2010


Revision: 26133
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=26133
Author:   broken
Date:     2010-01-20 09:57:26 +0100 (Wed, 20 Jan 2010)

Log Message:
-----------
Fix [#20737] Double-click in file dialog opens ".." directory (and fails of course)

Modified Paths:
--------------
    trunk/blender/source/blender/editors/space_file/file_ops.c

Modified: trunk/blender/source/blender/editors/space_file/file_ops.c
===================================================================
--- trunk/blender/source/blender/editors/space_file/file_ops.c	2010-01-20 08:30:40 UTC (rev 26132)
+++ trunk/blender/source/blender/editors/space_file/file_ops.c	2010-01-20 08:57:26 UTC (rev 26133)
@@ -560,7 +560,7 @@
 }
 
 /* sends events now, so things get handled on windowqueue level */
-int file_exec(bContext *C, wmOperator *unused)
+int file_exec(bContext *C, wmOperator *exec_op)
 {
 	SpaceFile *sfile= CTX_wm_space_file(C);
 	char name[FILE_MAX];
@@ -568,6 +568,22 @@
 	if(sfile->op) {
 		wmOperator *op= sfile->op;
 	
+		/* when used as a macro, for doubleclick, 
+		 to prevent closing when doubleclicking on .. item */
+		if (RNA_boolean_get(exec_op->ptr, "need_active")) {
+			int i, active=0;
+			struct direntry *file;
+			
+			for (i=0; i<filelist_numfiles(sfile->files); i++) {
+				file = filelist_file(sfile->files, i);
+				if(file->flags & ACTIVE) {
+					active=1;
+				}
+			}
+			if (active == 0)
+				return OPERATOR_CANCELLED;
+		}
+		
 		sfile->op = NULL;
 		RNA_string_set(op->ptr, "filename", sfile->params->file);
 		BLI_strncpy(name, sfile->params->dir, sizeof(name));
@@ -637,6 +653,8 @@
 	/* api callbacks */
 	ot->exec= file_exec;
 	ot->poll= file_operator_poll; 
+	
+	RNA_def_boolean(ot->srna, "need_active", 0, "Need Active", "Only execute if there's an active selected file in the file list.");
 }
 
 
@@ -1094,9 +1112,11 @@
 void ED_operatormacros_file(void)
 {
 	wmOperatorType *ot;
+	wmOperatorTypeMacro *otmacro;
 	
 	ot= WM_operatortype_append_macro("FILE_OT_select_execute", "Select and Execute", OPTYPE_UNDO|OPTYPE_REGISTER);
 	WM_operatortype_macro_define(ot, "FILE_OT_select");
-	WM_operatortype_macro_define(ot, "FILE_OT_execute");
+	otmacro= WM_operatortype_macro_define(ot, "FILE_OT_execute");
+	RNA_boolean_set(otmacro->ptr, "need_active", 1);
 
 }





More information about the Bf-blender-cvs mailing list