Le 24/11/2012 14:48, Evandro Borracini a écrit :
Hi Lex,
Thanks for your reply. In the original code, document_redo/undo_add() calls document_set_text_changed(doc, TRUE) so it's hardcoded with changed=TRUE and it would always call the ui updates even if we added an if (changed == TRUE)...
void document_set_text_changed(GeanyDocument *doc, gboolean changed) { g_return_if_fail(doc != NULL);
doc->changed = changed; if (! main_status.quitting) { ui_update_tab_status(doc); ui_save_buttons_toggle(changed); ui_set_window_title(doc); ui_update_statusbar(doc, -1); }
}
A solution might be to only do the updates if (doc->changed != changed). I didn't look at the interactions with the rest of Geany (nor test it actually), but looking at this I guess that changing it to:
void document_set_text_changed(GeanyDocument *doc, gboolean changed) { g_return_if_fail(doc != NULL);
if (doc->changed != changed && ! main_status.quitting) { doc->changed = changed; /* maybe this should also be called if * (main_status.quitting), but I'm not * sure it's necessary */ ui_update_tab_status(doc); ui_save_buttons_toggle(changed); ui_set_window_title(doc); ui_update_statusbar(doc, -1); } }
would work and fix the issue without changing the code much.
Cheers, Colomban
Interestingly, is that I still see updates in the sidebar, buttons, windows title and status bar after commenting out the call to document_set_text_changed() inside document_redo/undo_add(). So, I think it's called elsewhere.
I'll study the code a bit more to try to understand how the ui updates works.
Another interesting point is that only ui_update_tab_status(doc) creates a noticeable latency. The other functions: ui_save_buttons_toggle(changed), ui_set_window_title(doc), ui_update_statusbar(doc, -1) seem to be fast.