[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [57572] trunk/blender/source/blender/ editors: fix for filesel autocomplete, it had the annoying behavior if you entered in a non-existing name, of executing it and then asking to add the dir.
Campbell Barton
ideasman42 at gmail.com
Wed Jun 19 13:53:48 CEST 2013
Revision: 57572
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=57572
Author: campbellbarton
Date: 2013-06-19 11:53:48 +0000 (Wed, 19 Jun 2013)
Log Message:
-----------
fix for filesel autocomplete, it had the annoying behavior if you entered in a non-existing name, of executing it and then asking to add the dir.
Modified Paths:
--------------
trunk/blender/source/blender/editors/include/UI_interface.h
trunk/blender/source/blender/editors/interface/interface.c
trunk/blender/source/blender/editors/interface/interface_handlers.c
trunk/blender/source/blender/editors/interface/interface_intern.h
trunk/blender/source/blender/editors/interface/interface_regions.c
trunk/blender/source/blender/editors/space_file/file_intern.h
trunk/blender/source/blender/editors/space_file/filesel.c
Modified: trunk/blender/source/blender/editors/include/UI_interface.h
===================================================================
--- trunk/blender/source/blender/editors/include/UI_interface.h 2013-06-19 11:26:11 UTC (rev 57571)
+++ trunk/blender/source/blender/editors/include/UI_interface.h 2013-06-19 11:53:48 UTC (rev 57572)
@@ -304,7 +304,7 @@
typedef void (*uiButHandleFunc)(struct bContext *C, void *arg1, void *arg2);
typedef void (*uiButHandleRenameFunc)(struct bContext *C, void *arg, char *origstr);
typedef void (*uiButHandleNFunc)(struct bContext *C, void *argN, void *arg2);
-typedef void (*uiButCompleteFunc)(struct bContext *C, char *str, void *arg);
+typedef bool (*uiButCompleteFunc)(struct bContext *C, char *str, void *arg);
typedef void (*uiButSearchFunc)(const struct bContext *C, void *arg, const char *str, uiSearchItems *items);
typedef void (*uiBlockHandleFunc)(struct bContext *C, void *arg, int event);
@@ -644,7 +644,7 @@
AutoComplete *autocomplete_begin(const char *startname, size_t maxlen);
void autocomplete_do_name(AutoComplete *autocpl, const char *name);
-void autocomplete_end(AutoComplete *autocpl, char *autoname);
+bool autocomplete_end(AutoComplete *autocpl, char *autoname);
/* Panels
*
Modified: trunk/blender/source/blender/editors/interface/interface.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface.c 2013-06-19 11:26:11 UTC (rev 57571)
+++ trunk/blender/source/blender/editors/interface/interface.c 2013-06-19 11:53:48 UTC (rev 57572)
@@ -3086,16 +3086,21 @@
}
}
-void autocomplete_end(AutoComplete *autocpl, char *autoname)
+bool autocomplete_end(AutoComplete *autocpl, char *autoname)
{
- if (autocpl->truncate[0])
+ bool change = false;
+ if (autocpl->truncate[0]) {
BLI_strncpy(autoname, autocpl->truncate, autocpl->maxlen);
+ change = true;
+ }
else {
- if (autoname != autocpl->startname) /* don't copy a string over its self */
+ if (autoname != autocpl->startname) { /* don't copy a string over its self */
BLI_strncpy(autoname, autocpl->startname, autocpl->maxlen);
+ }
}
MEM_freeN(autocpl->truncate);
MEM_freeN(autocpl);
+ return change;
}
static void ui_check_but_and_iconize(uiBut *but, int icon)
Modified: trunk/blender/source/blender/editors/interface/interface_handlers.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_handlers.c 2013-06-19 11:26:11 UTC (rev 57571)
+++ trunk/blender/source/blender/editors/interface/interface_handlers.c 2013-06-19 11:53:48 UTC (rev 57572)
@@ -1828,20 +1828,19 @@
static bool ui_textedit_autocomplete(bContext *C, uiBut *but, uiHandleButtonData *data)
{
char *str;
- /* TODO, should return false if it cant autocomp. */
- bool changed = true;
+ bool change = true;
str = data->str;
if (data->searchbox)
- ui_searchbox_autocomplete(C, data->searchbox, but, data->str);
+ change = ui_searchbox_autocomplete(C, data->searchbox, but, data->str);
else
- but->autocomplete_func(C, str, but->autofunc_arg);
+ change = but->autocomplete_func(C, str, but->autofunc_arg);
but->pos = strlen(str);
but->selsta = but->selend = but->pos;
- return changed;
+ return change;
}
/* mode for ui_textedit_copypaste() */
Modified: trunk/blender/source/blender/editors/interface/interface_intern.h
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_intern.h 2013-06-19 11:26:11 UTC (rev 57571)
+++ trunk/blender/source/blender/editors/interface/interface_intern.h 2013-06-19 11:53:48 UTC (rev 57572)
@@ -471,7 +471,7 @@
bool ui_searchbox_inside(struct ARegion *ar, int x, int y);
int ui_searchbox_find_index(struct ARegion *ar, const char *name);
void ui_searchbox_update(struct bContext *C, struct ARegion *ar, uiBut *but, const bool reset);
-void ui_searchbox_autocomplete(struct bContext *C, struct ARegion *ar, uiBut *but, char *str);
+bool ui_searchbox_autocomplete(struct bContext *C, struct ARegion *ar, uiBut *but, char *str);
void ui_searchbox_event(struct bContext *C, struct ARegion *ar, uiBut *but, const struct wmEvent *event);
bool ui_searchbox_apply(uiBut *but, struct ARegion *ar);
void ui_searchbox_free(struct bContext *C, struct ARegion *ar);
Modified: trunk/blender/source/blender/editors/interface/interface_regions.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_regions.c 2013-06-19 11:26:11 UTC (rev 57571)
+++ trunk/blender/source/blender/editors/interface/interface_regions.c 2013-06-19 11:53:48 UTC (rev 57572)
@@ -1039,18 +1039,20 @@
ED_region_tag_redraw(ar);
}
-void ui_searchbox_autocomplete(bContext *C, ARegion *ar, uiBut *but, char *str)
+bool ui_searchbox_autocomplete(bContext *C, ARegion *ar, uiBut *but, char *str)
{
uiSearchboxData *data = ar->regiondata;
+ bool changed = false;
if (str[0]) {
data->items.autocpl = autocomplete_begin(str, ui_get_but_string_max_length(but));
but->search_func(C, but->search_arg, but->editstr, &data->items);
- autocomplete_end(data->items.autocpl, str);
+ changed = autocomplete_end(data->items.autocpl, str);
data->items.autocpl = NULL;
}
+ return changed;
}
static void ui_searchbox_region_draw_cb(const bContext *UNUSED(C), ARegion *ar)
Modified: trunk/blender/source/blender/editors/space_file/file_intern.h
===================================================================
--- trunk/blender/source/blender/editors/space_file/file_intern.h 2013-06-19 11:26:11 UTC (rev 57571)
+++ trunk/blender/source/blender/editors/space_file/file_intern.h 2013-06-19 11:53:48 UTC (rev 57572)
@@ -105,8 +105,8 @@
float file_font_pointsize(void);
void file_change_dir(bContext *C, int checkdir);
int file_select_match(struct SpaceFile *sfile, const char *pattern, char *matched_file);
-void autocomplete_directory(struct bContext *C, char *str, void *arg_v);
-void autocomplete_file(struct bContext *C, char *str, void *arg_v);
+bool autocomplete_directory(struct bContext *C, char *str, void *arg_v);
+bool autocomplete_file(struct bContext *C, char *str, void *arg_v);
/* file_panels.c */
void file_panels_register(struct ARegionType *art);
Modified: trunk/blender/source/blender/editors/space_file/filesel.c
===================================================================
--- trunk/blender/source/blender/editors/space_file/filesel.c 2013-06-19 11:26:11 UTC (rev 57571)
+++ trunk/blender/source/blender/editors/space_file/filesel.c 2013-06-19 11:53:48 UTC (rev 57572)
@@ -638,9 +638,10 @@
return match;
}
-void autocomplete_directory(struct bContext *C, char *str, void *UNUSED(arg_v))
+bool autocomplete_directory(struct bContext *C, char *str, void *UNUSED(arg_v))
{
SpaceFile *sfile = CTX_wm_space_file(C);
+ bool change = false;
/* search if str matches the beginning of name */
if (str[0] && sfile->files) {
@@ -675,20 +676,25 @@
}
closedir(dir);
- autocomplete_end(autocpl, str);
- if (BLI_exists(str)) {
- BLI_add_slash(str);
+ change = autocomplete_end(autocpl, str);
+ if (change) {
+ if (BLI_exists(str)) {
+ BLI_add_slash(str);
+ }
+ else {
+ BLI_strncpy(sfile->params->dir, str, sizeof(sfile->params->dir));
+ }
}
- else {
- BLI_strncpy(sfile->params->dir, str, sizeof(sfile->params->dir));
- }
}
}
+
+ return change;
}
-void autocomplete_file(struct bContext *C, char *str, void *UNUSED(arg_v))
+bool autocomplete_file(struct bContext *C, char *str, void *UNUSED(arg_v))
{
SpaceFile *sfile = CTX_wm_space_file(C);
+ bool change = false;
/* search if str matches the beginning of name */
if (str[0] && sfile->files) {
@@ -702,8 +708,9 @@
autocomplete_do_name(autocpl, file->relname);
}
}
- autocomplete_end(autocpl, str);
+ change = autocomplete_end(autocpl, str);
}
+ return change;
}
void ED_fileselect_clear(struct wmWindowManager *wm, struct SpaceFile *sfile)
More information about the Bf-blender-cvs
mailing list