Revision: 3841 http://geany.svn.sourceforge.net/geany/?rev=3841&view=rev Author: ntrel Date: 2009-06-05 15:49:55 +0000 (Fri, 05 Jun 2009)
Log Message: ----------- Fix redrawing due to colourising just after the document is first drawn. Now colourising should happen before the first draw.
Modified Paths: -------------- trunk/ChangeLog trunk/src/editor.c
Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2009-06-05 15:45:44 UTC (rev 3840) +++ trunk/ChangeLog 2009-06-05 15:49:55 UTC (rev 3841) @@ -3,6 +3,9 @@ * src/toolbar.c: Set status bar text instead of showing a dialog when saving ui_toolbar.xml because the user might save several times. + * src/editor.c: + Fix redrawing due to colourising just after the document is first + drawn. Now colourising should happen before the first draw.
2009-06-05 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
Modified: trunk/src/editor.c =================================================================== --- trunk/src/editor.c 2009-06-05 15:45:44 UTC (rev 3840) +++ trunk/src/editor.c 2009-06-05 15:49:55 UTC (rev 3841) @@ -4210,29 +4210,47 @@ }
-static void editor_colourise(ScintillaObject *sci) +static gboolean editor_check_colourise(GeanyEditor *editor) { - sci_colourise(sci, 0, -1); + GeanyDocument *doc = editor->document;
+ if (!doc->priv->colourise_needed) + return FALSE; + + doc->priv->colourise_needed = FALSE; + sci_colourise(editor->sci, 0, -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); + + return TRUE; }
+/* We only want to colourise just before drawing, to save startup time and + * prevent unnecessary recolouring other documents after one is saved. + * Really we want a "draw" signal but there doesn't seem to be one (expose is too late, + * and "show" doesn't work). */ +static gboolean on_editor_focus_in(GtkWidget *widget, GdkEventFocus *event, gpointer user_data) +{ + GeanyEditor *editor = user_data; + + editor_check_colourise(editor); + return FALSE; +} + + +/* This is just to catch any uncolourised documents being drawn that didn't receive focus + * for some reason, maybe it's not necessary but just in case. */ static gboolean on_editor_expose_event(GtkWidget *widget, GdkEventExpose *event, gpointer user_data) { GeanyEditor *editor = user_data; - GeanyDocument *doc = editor->document;
- if (doc->priv->colourise_needed) - { - editor_colourise(editor->sci); - doc->priv->colourise_needed = FALSE; - } - return FALSE; /* propagate event */ + editor_check_colourise(editor); + return FALSE; }
@@ -4302,6 +4320,7 @@ g_signal_connect(sci, "button-press-event", G_CALLBACK(on_editor_button_press_event), editor); g_signal_connect(sci, "scroll-event", G_CALLBACK(on_editor_scroll_event), editor); g_signal_connect(sci, "motion-notify-event", G_CALLBACK(on_motion_event), NULL); + g_signal_connect(sci, "focus-in-event", G_CALLBACK(on_editor_focus_in), editor); g_signal_connect(sci, "expose-event", G_CALLBACK(on_editor_expose_event), editor); } return sci;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.