[geany/geany-plugins] 0ecdc4: Update bookmark list also on any line changes in the document
Enrico Tröger
git-noreply at xxxxx
Sun Sep 20 20:21:27 UTC 2015
Branch: refs/heads/master
Author: Enrico Tröger <enrico.troeger at uvena.de>
Committer: Enrico Tröger <enrico.troeger at uvena.de>
Date: Sun, 20 Sep 2015 20:21:27 UTC
Commit: 0ecdc4253a5c2d3032a9d8c5e2b26a645d7b0b3e
https://github.com/geany/geany-plugins/commit/0ecdc4253a5c2d3032a9d8c5e2b26a645d7b0b3e
Log Message:
-----------
Update bookmark list also on any line changes in the document
In addition to updating the bookmark list on document notebook tab change
and adding/removing line markers, also rebuild the bookmark list
when the text in the document changes with lines added or deleted.
Should fix SF bugs #129 and #39.
Modified Paths:
--------------
addons/src/ao_bookmarklist.c
Modified: addons/src/ao_bookmarklist.c
32 lines changed, 21 insertions(+), 11 deletions(-)
===================================================================
@@ -69,7 +69,7 @@ struct _AoBookmarkListPrivate
typedef struct
{
AoBookmarkList *bm;
- GeanyDocument *document;
+ guint document_id;
} AoBookmarkListRefreshContainer;
enum
@@ -416,11 +416,12 @@ static gboolean update_bookmark_list_delayed(gpointer data)
AoBookmarkListRefreshContainer *container = data;
AoBookmarkList *bm = container->bm;
AoBookmarkListPrivate *priv = AO_BOOKMARK_LIST_GET_PRIVATE(bm);
- GeanyDocument *doc = container->document;
- ScintillaObject *sci = doc->editor->sci;
+ GeanyDocument *doc = document_find_by_id(container->document_id);
- if (priv->enable_bookmarklist && DOC_VALID(doc))
+ if (priv->enable_bookmarklist && doc != NULL)
{
+ ScintillaObject *sci = doc->editor->sci;
+
gtk_list_store_clear(priv->store);
while ((line_nr = scintilla_send_message(sci, SCI_MARKERNEXT, line_nr, mask)) != -1)
{
@@ -438,11 +439,13 @@ static gboolean update_bookmark_list_delayed(gpointer data)
void ao_bookmark_list_update(AoBookmarkList *bm, GeanyDocument *doc)
{
AoBookmarkListPrivate *priv = AO_BOOKMARK_LIST_GET_PRIVATE(bm);
+
if (priv->refresh_idle_source_id == 0)
{
AoBookmarkListRefreshContainer *container = g_new0(AoBookmarkListRefreshContainer, 1);
+
container->bm = bm;
- container->document = doc;
+ container->document_id = doc->id;
priv->refresh_idle_source_id = plugin_idle_add(
geany_plugin,
update_bookmark_list_delayed,
@@ -455,16 +458,23 @@ void ao_bookmark_list_update_marker(AoBookmarkList *bm, GeanyEditor *editor, SCN
{
AoBookmarkListPrivate *priv = AO_BOOKMARK_LIST_GET_PRIVATE(bm);
- if (priv->enable_bookmarklist &&
- nt->nmhdr.code == SCN_MODIFIED && nt->modificationType == SC_MOD_CHANGEMARKER)
+ if (priv->enable_bookmarklist && nt->nmhdr.code == SCN_MODIFIED)
{
- if (sci_is_marker_set_at_line(editor->sci, nt->line, 1))
+ if (nt->modificationType == SC_MOD_CHANGEMARKER)
{
- add_line(bm, editor->sci, nt->line);
+ if (sci_is_marker_set_at_line(editor->sci, nt->line, 1))
+ {
+ add_line(bm, editor->sci, nt->line);
+ }
+ else
+ {
+ delete_line(bm, nt->line);
+ }
}
- else
+ else if (nt->linesAdded != 0)
{
- delete_line(bm, nt->line);
+ /* if any lines changed, refresh the whole list as we refer line numbers */
+ ao_bookmark_list_update(bm, editor->document);
}
}
}
--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).
More information about the Plugins-Commits
mailing list