libsmfm is a glib2-based library implementing core file manager facilities and UIs.
libsmfm was initially forked from libfm in 2013. libfm is the core library of pcmanfm file manager originally developed and maintained by PCMan, LStranger et al.
This is the first public release. The version numbering follows the original source code, so that this release is 1.2.0, as 1.1.0 was the latest libfm release before the fork made.
Release Highlights:
- The source code is splitted into two git repositories, one for libsmfm-core and one for libsmfm-gtk. This is done to simplify tracking dependencies when packaging software.
- Much attention is paid to performance improvements when navigating directories with enormous amount of files or having poor IO performance (HDD, FUSE, etc). In particular:
- Internal implementation of FmFileInfo is reworked to allow concurent access from different threads whenever possible, and synchronization on mutexes added in various places as well.
- IO operations, not strictly required right in the moment, are deferred in time and performed either asynchronously in a separate thread or on-demand. This affects stat() syscalls, MIME-type recognition and icon loading.
- Some properties of FmFileInfo objects, which calculation may be a CPU-bound task, are also calculated on-demand.
- Incremental multi-step update is implemented for folder model internal container as well as for folder view item layout. This reduces UI friezes and improves application response during file system search operations or opening folders containing tens or hundreds of thousands files.
- Calculating the text label metrics may be a CPU-bound bootleneck on low-end or embedded hardware, or when dealing with hundreds of thousands of items - even on middle-end machines. Folder view relayout logic is now able to switch to the rough positioning of items, and then perform precise positioning in the background. This code path is activated automatically depending on the time spent in the item layout code.
- Layout cache is implemented for FmCellRendererText items.
- A number of improvements and fixes in File Properties dialog.
- Various bugfixes in file search engine and UI.
- Porting to GTK3 is no longer a goal. Being a part of SDE project, libsmfm primarily targets GTK2. GTK3 support code is still partially in the tree, but not even tested for building. It may be removed in the future versions. At the moment it is not entirely clear whether SDE will be ported to GTK3.
Performance improvements:
- Implementation of FmFileInfo significantly reworked, and parallelization of tasks added, as described in the section Release Highlights above.
- FmFileInfo: Speed up
fm_file_info_is_directory()
for native paths. - FmFileInfo: Check for special folder path only when a path is actually a native directory.
- FmDirListJob: Use POSIX APIs (not glib wrappers) to read directory entries for native paths.
- FmMimeType: Implement fast content type guessing for executables.
- FmMimeType: Add preallocated type objects for varoius
inode/*
types.
Enhancements:
- FmNavHistory: Add option to delete duplicate items.
- FmNavHistory: Add option remove_parent to make Recently Visited listing more compact.
- FmPlacesModel: Add links to "My Computer" and the root "File System" to the places model.
API changes:
- Add functions
fm_version_major()
,fm_version_minor()
,fm_version_micro()
,fm_check_version()
. - Add function:
fm_get_mime_types_for_file_info_list()
. - FmNavHistory:
fm_nav_history_chdir()
now returnsFALSE
if the path is same as in the current history item; andTRUE
otherwise. Previously this function was declared as returning void. - FmFileInfo: Add:
fm_file_info_get_ctime()
fm_file_info_new_from_native_file()
fm_file_info_new_from_path_unfilled()
fm_file_info_is_directory()
as a synonym forfm_file_info_is_dir()
fm_file_info_is_backup()
- FmFileInfo: Rename:
fm_file_info_set_from_gfileinfo()
tofm_file_info_fill_from_gfileinfo()
fm_file_info_set_from_native_file()
tofm_file_info_fill_from_native_file()
- FmFileInfo: Delete unused enumeration FmFileInfoFlag.
- FmFileInfo: Delete
fm_file_info_new_from_menu_cache_item()
andfm_file_info_set_from_menu_cache_item()
. - Move
fm_file_info_list_*
functions fromfm-file-info.[hc]
to a separate set of filesfm-file-info-list.[hc]
. - Move
fm_path_list_*
functions fromfm-path.[hc]
to a separate set of filesfm-path-list.[hc]
. - FmList: Add functions
fm_list_push_head_uniq()
andfm_list_push_tail_uniq()
. - FmList: Add field
item_compare
toFmListFuncs
. - Add new class FmSymbol for immutable refcounted strings with optimized comparator.
- FmIcon can now be loaded with FmThumbnailLoader.
- Add support of reporting status for FmJob and FmFolder.
- FmFolder: emit
content-changed
from the handler of job'sfiles-found
signal. - FmPath: Delete deprecated
fm_path_new_for_display_name()
.
Bugfixes and stability improvements:
- FmMimeType: Fix handling broken links in
fm_mime_type_from_native_file()
. - Fix possible segfault in
fm_mime_type_unref()
,fm_mime_type_ref()
by allowing mime_type argument beingNULL
. - FMPath: Remove unneeded
g_uri_escape_string()
infm_path_new_for_str()
. - Search engine: fix interrupt of recursive scanning when a folder matches search condition.
- Search engine: do not match folders if search condition contains min_size or max_size.
- Search engine: query G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE for matching of mime type.
- Search engine: interpret backslash in mime type as slash.
- Search engine: do not interrupt search on permission denied error.
fm-thumbnail-loader.c
: Fix crash ingenerate_thumbnails_with_builtin()
.fm-thumbnail-loader.c
: Don't use exif thumbnails when generating thumbnails of type LARGE since the size of embedded thumbnails may be insufficient. Keep reading image orintation from exif data.fm-thumbnail-loader.c
: Fix swapped orientations 6 (270 degrees) and 8 (90 degrees) for exif thumbnails.fm-file-launcher.c
: Fix handling of shortcuts infm_launch_files()
.fm-job.c
: protect modification ofthread_pool
with a lock.fm-job.c
:fm_job_emit_error()
: abort a job without calling signal handler iferr == NULL
. Signal handlers expecterr
is always valid.fm-vfs-search.c
: Fix null pointer dereference on parsing malformed search URI.- Fix criticals about unset GIO attributes produced by GLib >= 2.77.
Experimental features:
- Proof-of-concept implementation of file name highlighting.
Changes in configuration options and variables:
- Add
libsmfm.conf
option[places]places_computer
. - Add
libsmfm.conf
option[places]places_root
. - Add
libsmfm.conf
option[hacks]deferred_mime_type_loading
. - Add
libsmfm.conf
option[hacks]exo_icon_view_pixbuf_hack
. - Add
libsmfm.conf
option[hacks]exo_icon_draw_rectangle_around_selected_item
. - Add
libsmfm.conf
option[ui]highlight_file_names
. - Add
libsmfm.conf
option[ui]app_list_smart_grouping
.
Building:
- Fix build with
-j
. - Fix out of tree build.
- Fix build with recent GCC versions. (Missing
extern
specifier.) - Add support of automake 1.14.
- Add support of automake 1.15.
- Build with
--disable-static
by default. - glib2 version requirements increased from 2.22 to 2.32.
- Delete
xml-purge.c
. - Add make targets
cppcheck
andcppcheck-inconclusive
to run Cppcheck static analysis tool.
Performance improvements:
- Significant performance improvements in folder model handling and folder rendering logic, as described in the section Release Highlights above.
- FmStandardView: Optimize invertion of selection.
- Reduce flickering of folder view on model change by delaying expose event.
Enhancements:
- File Properties Dialog:
- Disable permission controls when the user is not file owner or root.
- Display ctime.
- Change labels for time fields to be in line with most other file managers:
- ctime - "Created/Metadata Updated" (new)
- mtime - "Modified" (previously: Last Modification)
- atime - "Accessed" (previously: Last Access)
- Add detailed tooltips for ctime, mtime, atime fields.
- Improvements in displaying properties of multiple files:
- Display common parent folder for multiple files.
- Display ctime, mtime, atime intevals.
- Do not display exact file size in the parentheses, if rough file size renders to the same value.
- Display MIME type (in addition to human-readable description).
- Make the dialog resizable.
- If file name and display name differ, show both.
- Display file icon and file name in the dialog title.
- Allow editing associations for "inode/directory" from GUI. If
inode/directory
associated to a wrong application, various 3rd party applications can be affected (even struuman-desktop is affected), and there is absolutely no way to fix the things from GUI, since we have the appropriate controls disabled in the Properties dialog. So we do allow setting file associations for any mime types, including folders. - Fixed incorrect selection of default application in "Open with" combo box.
fm_app_chooser_combo_box_setup()
now explicitly callsg_app_info_get_default_for_type()
and doesn't confuse "default" and "last used" application for a given mime type.
- FmFolderView: Changed hotkey bindings:
<Menu>
or<Shift>F10
- open context menu for selected files.<Ctrl><Menu>
or<Ctrl><F10>
- open context menu for the current folder.
- FmFolderView: Modified
<Alt><Enter>
behavior. Now, when no files are selected, it opens the the current folder properties dialog. - FmStandardView: Hide icons when icon size is 0.
- FmStandardView: Various improvements in item layout (fine-tuned padding etc).
- FmStandardView: Always load thumbnails in Thumbnail View Mode.
- FmPlacesView: Hide icons when icon size is 0.
- Various code refactorings and rewriting a number of functions in more readable way.
- Search Dialog: Set "Find" button as default in Search dialog.
- Search Dialog: Allow items "Places to Search" to by reorderable by drag-n-drop.
- More user friendly file delete confirmation dialog
- Display the selected file name or number of multiple selected files in the dialog.
- Display the message that permanent deletion cannot be undone.
- FmFileMenu:
- Display "Rename" in a separate section, not in the one where "Add Bookmark" and addtional menu items are located.
- Applications listed in "Open With" menu can now be "smart grouped" when
[ui]app_list_smart_grouping
is enabled.
Bugfixes and stability improvements:
- FmFolderView:
<Ctrl><Insert>
should be Copy and<Shift><Insert>
should be Paste. They were switched places. - File Properties Dialog: Fix incorrect assumption in commit a7e371a1e90a0bc27264c10c5fe84021590d0855 "Don't show permissions tab if that info isn't available at all".
- FmFolderView: Fix segfault when calling
get_custom_menu_callbacks()
. - Search Dialog: Fix "Smaller than" condition.
- Search Dialog: Fix "Documents" condition.
- Fix segfault in
on_mount_action_finished()
. fm_pixbuf_from_icon()
: fall back to gtk stock icons if themed icon loading failed:gtk-home
foruser-home
gtk-directory
forfolder
ordirectory
gtk-file
for other icon names
- Fix popup menu positioning on multimonitor configurations.
API changes:
fm-file-menu.h
: Add functionfm_get_gtk_file_menu_for_string()
.- Add header
fm-app-utils.h
with function:fm_app_utils_get_app_categories()
. - FmFolderView: Add functions:
fm_folder_view_show_popup()
fm_folder_view_show_popup_for_selected_files()
fm_folder_view_get_popup_for_selected_files()
- FmFolderModel: Add functions:
fm_folder_model_get_n_visible_items()
fm_folder_model_get_n_hidden_items()
fm_folder_model_get_n_incoming_items()
- FmFolderModel: Add signal
filtering-changed
.
Experimental features:
- Implement pattern matching in folder-model and add GUI to input pattern in folder-view.
Building:
- Fix out of tree build.
- Add support of automake 1.14.
- Add support of automake 1.15.
- Build with
--disable-static
by default. - Build with
--disable-actions
by default. - Delete
xml-purge.c
. - Add make targets
cppcheck
andcppcheck-inconclusive
to run Cppcheck static analysis tool.