Merge pull request #1039 from techee/highlight_fix2
Fix inconsistent typename highlighting updating. Closes #1020, #1022.
This commit is contained in:
commit
d95111d4cd
@ -510,11 +510,10 @@ static gint document_get_new_idx(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void queue_colourise(GeanyDocument *doc, gboolean full_colourise)
|
static void queue_colourise(GeanyDocument *doc)
|
||||||
{
|
{
|
||||||
/* make sure we don't override previously set full_colourise=TRUE by FALSE */
|
if (doc->priv->colourise_needed)
|
||||||
if (!doc->priv->colourise_needed || !doc->priv->full_colourise)
|
return;
|
||||||
doc->priv->full_colourise = full_colourise;
|
|
||||||
|
|
||||||
/* Colourise the editor before it is next drawn */
|
/* Colourise the editor before it is next drawn */
|
||||||
doc->priv->colourise_needed = TRUE;
|
doc->priv->colourise_needed = TRUE;
|
||||||
@ -1398,7 +1397,7 @@ GeanyDocument *document_open_file_full(GeanyDocument *doc, const gchar *filename
|
|||||||
/* add the text to the ScintillaObject */
|
/* add the text to the ScintillaObject */
|
||||||
sci_set_readonly(doc->editor->sci, FALSE); /* to allow replacing text */
|
sci_set_readonly(doc->editor->sci, FALSE); /* to allow replacing text */
|
||||||
sci_set_text(doc->editor->sci, filedata.data); /* NULL terminated data */
|
sci_set_text(doc->editor->sci, filedata.data); /* NULL terminated data */
|
||||||
queue_colourise(doc, TRUE); /* Ensure the document gets colourised. */
|
queue_colourise(doc); /* Ensure the document gets colourised. */
|
||||||
|
|
||||||
/* detect & set line endings */
|
/* detect & set line endings */
|
||||||
editor_mode = utils_get_line_endings(filedata.data, filedata.len);
|
editor_mode = utils_get_line_endings(filedata.data, filedata.len);
|
||||||
@ -2751,10 +2750,17 @@ void document_highlight_tags(GeanyDocument *doc)
|
|||||||
keywords_str = symbols_find_typenames_as_string(doc->file_type->lang, FALSE);
|
keywords_str = symbols_find_typenames_as_string(doc->file_type->lang, FALSE);
|
||||||
if (keywords_str)
|
if (keywords_str)
|
||||||
{
|
{
|
||||||
|
guint hash;
|
||||||
|
|
||||||
keywords = g_string_free(keywords_str, FALSE);
|
keywords = g_string_free(keywords_str, FALSE);
|
||||||
sci_set_keywords(doc->editor->sci, keyword_idx, keywords);
|
hash = g_str_hash(keywords);
|
||||||
|
if (hash != doc->priv->keyword_hash)
|
||||||
|
{
|
||||||
|
sci_set_keywords(doc->editor->sci, keyword_idx, keywords);
|
||||||
|
queue_colourise(doc); /* force re-highlighting the entire document */
|
||||||
|
doc->priv->keyword_hash = hash;
|
||||||
|
}
|
||||||
g_free(keywords);
|
g_free(keywords);
|
||||||
queue_colourise(doc, FALSE); /* re-highlight the visible area */
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2815,7 +2821,7 @@ static void document_load_config(GeanyDocument *doc, GeanyFiletype *type,
|
|||||||
highlighting_set_styles(doc->editor->sci, type);
|
highlighting_set_styles(doc->editor->sci, type);
|
||||||
editor_set_indentation_guides(doc->editor);
|
editor_set_indentation_guides(doc->editor);
|
||||||
build_menu_update(doc);
|
build_menu_update(doc);
|
||||||
queue_colourise(doc, TRUE);
|
queue_colourise(doc);
|
||||||
if (type->priv->symbol_list_sort_mode == SYMBOLS_SORT_USE_PREVIOUS)
|
if (type->priv->symbol_list_sort_mode == SYMBOLS_SORT_USE_PREVIOUS)
|
||||||
doc->priv->symbol_list_sort_mode = interface_prefs.symbols_sort_mode;
|
doc->priv->symbol_list_sort_mode = interface_prefs.symbols_sort_mode;
|
||||||
else
|
else
|
||||||
|
@ -90,7 +90,7 @@ typedef struct GeanyDocumentPrivate
|
|||||||
/* Used so Undo/Redo works for encoding changes. */
|
/* Used so Undo/Redo works for encoding changes. */
|
||||||
FileEncoding saved_encoding;
|
FileEncoding saved_encoding;
|
||||||
gboolean colourise_needed; /* use document.c:queue_colourise() instead */
|
gboolean colourise_needed; /* use document.c:queue_colourise() instead */
|
||||||
gboolean full_colourise;
|
guint keyword_hash; /* hash of keyword string used for typename colourisation */
|
||||||
gint line_count; /* Number of lines in the document. */
|
gint line_count; /* Number of lines in the document. */
|
||||||
gint symbol_list_sort_mode;
|
gint symbol_list_sort_mode;
|
||||||
/* indicates whether a file is on a remote filesystem, works only with GIO/GVfs */
|
/* indicates whether a file is on a remote filesystem, works only with GIO/GVfs */
|
||||||
|
26
src/editor.c
26
src/editor.c
@ -4760,28 +4760,12 @@ static gboolean editor_check_colourise(GeanyEditor *editor)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
doc->priv->colourise_needed = FALSE;
|
doc->priv->colourise_needed = FALSE;
|
||||||
|
sci_colourise(editor->sci, 0, -1);
|
||||||
|
|
||||||
if (doc->priv->full_colourise)
|
/* now that the current document is colourised, fold points are now accurate,
|
||||||
{
|
* so force an update of the current function/tag. */
|
||||||
sci_colourise(editor->sci, 0, -1);
|
symbols_get_current_function(NULL, NULL);
|
||||||
|
ui_update_statusbar(NULL, -1);
|
||||||
/* now that the current document is colourised, fold points are now accurate,
|
|
||||||
* so force an update of the current function/tag. */
|
|
||||||
symbols_get_current_function(NULL, NULL);
|
|
||||||
ui_update_statusbar(NULL, -1);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
gint start_line, end_line, start, end;
|
|
||||||
|
|
||||||
start_line = SSM(doc->editor->sci, SCI_GETFIRSTVISIBLELINE, 0, 0);
|
|
||||||
end_line = start_line + SSM(editor->sci, SCI_LINESONSCREEN, 0, 0);
|
|
||||||
start_line = SSM(editor->sci, SCI_DOCLINEFROMVISIBLE, start_line, 0);
|
|
||||||
end_line = SSM(editor->sci, SCI_DOCLINEFROMVISIBLE, end_line, 0);
|
|
||||||
start = sci_get_position_from_line(editor->sci, start_line);
|
|
||||||
end = sci_get_line_end_position(editor->sci, end_line);
|
|
||||||
sci_colourise(editor->sci, start, end);
|
|
||||||
}
|
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user