Problem was in fact slightly wider, File space was nearly not taking into account library navigation case and its 'virtual' directoris, except in a few places. Add a wrapper around BLI_is_dir that also check for lib paths, and used it in ED_file_change_dir(), such that we now always check path is a valid directory - in the filebrowser context, not filesytem context. ;)
65 lines
1.9 KiB
C
65 lines
1.9 KiB
C
/*
|
|
* ***** BEGIN GPL LICENSE BLOCK *****
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software Foundation,
|
|
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*
|
|
* Contributor(s): none yet.
|
|
*
|
|
* ***** END GPL LICENSE BLOCK *****
|
|
*/
|
|
|
|
/** \file blender/editors/space_file/file_utils.c
|
|
* \ingroup spfile
|
|
*/
|
|
|
|
#include "BLI_rect.h"
|
|
#include "BLI_fileops.h"
|
|
|
|
#include "BLO_readfile.h"
|
|
|
|
#include "BKE_context.h"
|
|
|
|
#include "ED_screen.h"
|
|
#include "ED_fileselect.h"
|
|
|
|
#include "WM_types.h"
|
|
|
|
#include "file_intern.h"
|
|
|
|
|
|
void file_tile_boundbox(const ARegion *ar, FileLayout *layout, const int file, rcti *r_bounds)
|
|
{
|
|
int xmin, ymax;
|
|
|
|
ED_fileselect_layout_tilepos(layout, file, &xmin, &ymax);
|
|
ymax = (int)ar->v2d.tot.ymax - ymax; /* real, view space ymax */
|
|
BLI_rcti_init(r_bounds, xmin, xmin + layout->tile_w + layout->tile_border_x,
|
|
ymax - layout->tile_h - layout->tile_border_y, ymax);
|
|
}
|
|
|
|
/* Cannot directly use BLI_is_dir in libloading context... */
|
|
bool file_is_dir(struct SpaceFile *sfile, const char *path)
|
|
{
|
|
if (sfile->params->type == FILE_LOADLIB) {
|
|
char tdir[FILE_MAX_LIBEXTRA];
|
|
char *name;
|
|
if (BLO_library_path_explode(sfile->params->dir, tdir, NULL, &name) && BLI_is_file(tdir)) {
|
|
/* .blend file itself and group are considered as directories, not final datablock names. */
|
|
return name ? false : true;
|
|
}
|
|
}
|
|
return BLI_is_dir(path);
|
|
}
|