Branch: refs/heads/master Author: Enrico Tröger enrico.troeger@uvena.de Committer: Enrico Tröger enrico.troeger@uvena.de Date: Sat, 01 Jun 2013 10:19:39 UTC Commit: 8678093e7b5d142c074a1d7fe6beeb03ce6b5f61 https://github.com/geany/geany-plugins/commit/8678093e7b5d142c074a1d7fe6beeb...
Log Message: ----------- Limit the display of diff output to 16 KB to not freeze the UI while rendering
This should workaround the long-standing bug that the commit dialog freezes Geany when the diff output is very large. Now, if the output exceeds 16 KB, a short message is displayed instead suggesting to open the diff for review in Geany directly.
Modified Paths: -------------- geanyvc/src/geanyvc.c geanyvc/src/geanyvc.h
Modified: geanyvc/src/geanyvc.c 27 files changed, 20 insertions(+), 7 deletions(-) =================================================================== @@ -1075,7 +1075,7 @@ enum }
static void -set_diff_buff(GtkTextBuffer * buffer, const gchar * txt) +set_diff_buff(GtkWidget * textview, GtkTextBuffer * buffer, const gchar * txt) { GtkTextIter start, end; GtkTextMark *mark; @@ -1083,6 +1083,19 @@ enum const gchar *tagname = ""; const gchar *c, *p = txt;
+ if (strlen(txt) > COMMIT_DIFF_MAXLENGTH) + { + gtk_text_buffer_set_text(buffer, + _("The resulting differences cannot be displayed because " + "the changes are too big to display here and would slow down the UI significantly." + "\n\n" + "To view the differences, cancel this dialog and open the differences " + "in Geany directly by using the GeanyVC menu (Base Dirrectory -> Diff)."), -1); + gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(textview), GTK_WRAP_WORD); + return; + } + gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(textview), GTK_WRAP_NONE); + gtk_text_buffer_set_text(buffer, txt, -1);
gtk_text_buffer_get_start_iter(buffer, &start); @@ -1152,7 +1165,7 @@ enum gchar *diff; GtkWidget *diffView = ui_lookup_widget(GTK_WIDGET(treeview), "textDiff"); diff = get_commit_diff(GTK_TREE_VIEW(treeview)); - set_diff_buff(gtk_text_view_get_buffer(GTK_TEXT_VIEW(diffView)), diff); + set_diff_buff(diffView, gtk_text_view_get_buffer(GTK_TEXT_VIEW(diffView)), diff); g_free(diff); }
@@ -1523,7 +1536,7 @@ static void commit_tree_selection_changed_cb(GtkTreeSelection *sel, GtkTextView gtk_text_buffer_create_tag(diffbuf, "invisible", "invisible", TRUE, NULL);
- set_diff_buff(diffbuf, diff); + set_diff_buff(diffView, diffbuf, diff);
if (set_maximize_commit_dialog) { @@ -1748,7 +1761,7 @@ static void commit_tree_selection_changed_cb(GtkTreeSelection *sel, GtkTextView gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets.cb_confirm_add)); set_maximize_commit_dialog = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets.cb_max_commit)); - + set_external_diff = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets.cb_external_diff));
@@ -1879,7 +1892,7 @@ static void commit_tree_selection_changed_cb(GtkTreeSelection *sel, GtkTextView "inside tools menu or directly inside Geany's menubar." "Will take in account after next start of GeanyVC")); gtk_button_set_focus_on_click(GTK_BUTTON(widgets.cb_attach_to_menubar), FALSE); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widgets.cb_attach_to_menubar), + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widgets.cb_attach_to_menubar), set_menubar_entry); gtk_box_pack_start(GTK_BOX(vbox), widgets.cb_attach_to_menubar, TRUE, FALSE, 2);
@@ -2241,7 +2254,7 @@ static void commit_tree_selection_changed_cb(GtkTreeSelection *sel, GtkTextView GtkWidget *menu_vc_file = NULL; GtkWidget *menu_vc_dir = NULL; GtkWidget *menu_vc_basedir = NULL; - + config_file = g_strconcat(geany->app->configdir, G_DIR_SEPARATOR_S, "plugins", G_DIR_SEPARATOR_S, "VC", G_DIR_SEPARATOR_S, "VC.conf", NULL); @@ -2253,7 +2266,7 @@ static void commit_tree_selection_changed_cb(GtkTreeSelection *sel, GtkTextView if (set_menubar_entry == TRUE) { GtkMenuShell *menubar; - + menubar = GTK_MENU_SHELL( ui_lookup_widget(geany->main_widgets->window, "menubar1"));
Modified: geanyvc/src/geanyvc.h 2 files changed, 2 insertions(+), 0 deletions(-) =================================================================== @@ -52,6 +52,8 @@ enum VC_COMMAND_STARTDIR_FILE };
+#define COMMIT_DIFF_MAXLENGTH 16384 + #define FLAG_RELOAD (1<<0) #define FLAG_FORCE_ASK (1<<1) #define FLAG_FILE (1<<2)
-------------- This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).