Updating the parent may lead to performance issues if an object have
too many parents since they are updated recursively.
Parent objects are still updated when saving the file.
git-svn-id: https://geany.svn.sourceforge.net/svnroot/geany/trunk@5642 ea778897-0a13-0410-b9d1-a72fbfd435f5
Fix the sidebar popup menu to properly use the currently selected item
rather than the previous one.
Also change the hack used for the selection to be updated in the input
handlers (key and mouse button) to call the GtkTreeView's handler
manually rather than doing the actual job in IDLE callbacks for the
TreeView's handler to have run.
This prevents from having several different handlers but removes the
need to work in IDLE time and then possible have a lag, as well as
simplifying the code.
git-svn-id: https://geany.svn.sourceforge.net/svnroot/geany/trunk@5630 ea778897-0a13-0410-b9d1-a72fbfd435f5
G_(UN)?LIKELY() should be only used on whole conditional expressions,
and only if the branching is very highly predictable, not if it is only
more probable.
These macros should be used with care because a wrong prediction may
be a lot worst than what a good prediction can give.
git-svn-id: https://geany.svn.sourceforge.net/svnroot/geany/trunk@5625 ea778897-0a13-0410-b9d1-a72fbfd435f5
document.c: In function ‘apply_forced_indent_settings’:
document.c:1008: warning: enumeration value ‘GEANY_FILETYPES_NONE’ not handled in switch
...
git-svn-id: https://geany.svn.sourceforge.net/svnroot/geany/trunk@5614 ea778897-0a13-0410-b9d1-a72fbfd435f5
This makes documents created or set to a filetype with forced indent
setting (Makefile, F77) to have the correct setting right away.
git-svn-id: https://geany.svn.sourceforge.net/svnroot/geany/trunk@5611 ea778897-0a13-0410-b9d1-a72fbfd435f5
* Don't use strlen(..) > 0 or == 0, simply check the first character
against 0;
* Fix a return without a value (my bad in last commit);
* Fix storing a literal in a non-const string.
git-svn-id: https://geany.svn.sourceforge.net/svnroot/geany/trunk@5610 ea778897-0a13-0410-b9d1-a72fbfd435f5
Adds the new function encodings_convert_to_utf8_auto(). This makes easy
to convert file data to UTF-8 in a high-level fashion, with BOM support
and everything.
git-svn-id: https://geany.svn.sourceforge.net/svnroot/geany/trunk@5606 ea778897-0a13-0410-b9d1-a72fbfd435f5
Now simply insert elements in sorted order rather than sorting the
list at a later point: it's simpler, cleaner and probably faster.
git-svn-id: https://geany.svn.sourceforge.net/svnroot/geany/trunk@5591 ea778897-0a13-0410-b9d1-a72fbfd435f5
This is for better performances since appending to a list means walking
it to find the last element to append to. When the list ordering
matters, simply reverse the list after prepengins.
git-svn-id: https://geany.svn.sourceforge.net/svnroot/geany/trunk@5586 ea778897-0a13-0410-b9d1-a72fbfd435f5
This avoids wrong sorting, and then wrong display in the symbols list,
if a parent tag is on the same line than its children, and one of it's
children would be sorted before alphabetically (closes#3193982).
git-svn-id: https://geany.svn.sourceforge.net/svnroot/geany/trunk@5580 ea778897-0a13-0410-b9d1-a72fbfd435f5
Rather than walking the whole tree for each tag to find a possibly
corresponding row, use a hash table as cache.
This is a very significant improvement on large files with many tags,
reducing for example to about 170ms an update that took more than 18s
before.
Also fix merging of tags with same name and scope (probably unlikely to
exist in real-world files, but the tagmanager extract them correctly
and they used to display correctly too).
git-svn-id: https://geany.svn.sourceforge.net/svnroot/geany/trunk@5567 ea778897-0a13-0410-b9d1-a72fbfd435f5
The main advantages of not clearing and rebuilding the whole list is
that it doesn't loose the folding and selection (as far as the selected
row(s) still exist after the update, of course), and it reduces
flickering upon update.
The current implementation works in 3-steps:
1) mark all rows as invalid;
2) insert/update the rows, according to the new tag list, marking them
as valid;
3) remove all rows that are still invalid.
This walks (rows) the first time, (tags*rows) the second and (rows) the
third. This also uses an extra column to store the row's validity.
A (probably) better implementation would be to:
1) walk the current rows, updating them if necessary, or removing them;
2) add the remaining tags that weren't there before.
This is probably faster in theory (and probably also in practice), but
it needs to refactor a lot the code to easily update *or* create a row,
what the current code does not provide.
Basically this is would be a two-pass update, walking (rows*tags) in
the first pass, and only the remaining non-added tags in the second.
git-svn-id: https://geany.svn.sourceforge.net/svnroot/geany/trunk@5562 ea778897-0a13-0410-b9d1-a72fbfd435f5
It is a boxed type but uses reference counting behind the scene. This
allow for example the tag store to make sure the tags it holds are
always valid.
git-svn-id: https://geany.svn.sourceforge.net/svnroot/geany/trunk@5560 ea778897-0a13-0410-b9d1-a72fbfd435f5
Enabled by default, using a minimal delay of 250ms between two updates.
Also add a preference to configure this in Geany's UI, under
Preferences -> Editor -> Completion.
git-svn-id: https://geany.svn.sourceforge.net/svnroot/geany/trunk@5557 ea778897-0a13-0410-b9d1-a72fbfd435f5