[evolution] Composer - Don't block selection-changed handlers if they are already blocked
- From: Tomas Popela <tpopela src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution] Composer - Don't block selection-changed handlers if they are already blocked
- Date: Tue, 14 Apr 2015 13:47:39 +0000 (UTC)
commit a98974c433839a9e43992eb6a4e64e0f55d3ecaa
Author: Tomas Popela <tpopela redhat com>
Date: Tue Apr 14 15:46:19 2015 +0200
Composer - Don't block selection-changed handlers if they are already blocked
e-util/e-html-editor-selection.c | 34 +++++++++++++++++++++++-----------
e-util/e-html-editor-view.c | 12 ++++++++++--
2 files changed, 33 insertions(+), 13 deletions(-)
---
diff --git a/e-util/e-html-editor-selection.c b/e-util/e-html-editor-selection.c
index b8d1cc7..a8cf1fd 100644
--- a/e-util/e-html-editor-selection.c
+++ b/e-util/e-html-editor-selection.c
@@ -51,6 +51,7 @@ struct _EHTMLEditorSelectionPrivate {
GWeakRef html_editor_view;
gulong selection_changed_handler_id;
+ gboolean selection_changed_callbacks_blocked;
gchar *text;
@@ -265,26 +266,35 @@ html_editor_selection_selection_changed_cb (WebKitWebView *web_view,
void
e_html_editor_selection_block_selection_changed (EHTMLEditorSelection *selection)
{
- EHTMLEditorView *view;
+ g_return_if_fail (E_IS_HTML_EDITOR_SELECTION (selection));
- view = e_html_editor_selection_ref_html_editor_view (selection);
- g_signal_handlers_block_by_func (
- view, html_editor_selection_selection_changed_cb, selection);
- g_object_unref (view);
+ if (!selection->priv->selection_changed_callbacks_blocked) {
+ EHTMLEditorView *view;
+
+ view = e_html_editor_selection_ref_html_editor_view (selection);
+ g_signal_handlers_block_by_func (
+ view, html_editor_selection_selection_changed_cb, selection);
+ g_object_unref (view);
+ selection->priv->selection_changed_callbacks_blocked = TRUE;
+ }
}
void
e_html_editor_selection_unblock_selection_changed (EHTMLEditorSelection *selection)
{
- EHTMLEditorView *view;
+ g_return_if_fail (E_IS_HTML_EDITOR_SELECTION (selection));
- view = e_html_editor_selection_ref_html_editor_view (selection);
- g_signal_handlers_unblock_by_func (
- view, html_editor_selection_selection_changed_cb, selection);
+ if (selection->priv->selection_changed_callbacks_blocked) {
+ EHTMLEditorView *view;
- html_editor_selection_selection_changed_cb (WEBKIT_WEB_VIEW (view), selection);
+ view = e_html_editor_selection_ref_html_editor_view (selection);
+ g_signal_handlers_unblock_by_func (
+ view, html_editor_selection_selection_changed_cb, selection);
+ g_object_unref (view);
+ selection->priv->selection_changed_callbacks_blocked = FALSE;
- g_object_unref (view);
+ html_editor_selection_selection_changed_cb (WEBKIT_WEB_VIEW (view), selection);
+ }
}
static void
@@ -855,6 +865,8 @@ e_html_editor_selection_init (EHTMLEditorSelection *selection)
selection->priv->word_wrap_length =
g_settings_get_int (g_settings, "composer-word-wrap-length");
g_object_unref (g_settings);
+
+ selection->priv->selection_changed_callbacks_blocked = FALSE;
}
gint
diff --git a/e-util/e-html-editor-view.c b/e-util/e-html-editor-view.c
index 05d2d3d..fb4a5eb 100644
--- a/e-util/e-html-editor-view.c
+++ b/e-util/e-html-editor-view.c
@@ -105,6 +105,7 @@ struct _EHTMLEditorViewPrivate {
gboolean dont_save_history_in_body_input;
gboolean im_input_in_progress;
gboolean style_change_callbacks_blocked;
+ gboolean selection_changed_callbacks_blocked;
GHashTable *old_settings;
@@ -426,14 +427,20 @@ static void
block_selection_changed_callbacks (EHTMLEditorView *view)
{
e_html_editor_selection_block_selection_changed (view->priv->selection);
- g_signal_handlers_block_by_func (view, html_editor_view_selection_changed_cb, NULL);
+ if (!view->priv->selection_changed_callbacks_blocked) {
+ g_signal_handlers_block_by_func (view, html_editor_view_selection_changed_cb, NULL);
+ view->priv->selection_changed_callbacks_blocked = TRUE;
+ }
}
static void
unblock_selection_changed_callbacks (EHTMLEditorView *view)
{
e_html_editor_selection_unblock_selection_changed (view->priv->selection);
- g_signal_handlers_unblock_by_func (view, html_editor_view_selection_changed_cb, NULL);
+ if (view->priv->selection_changed_callbacks_blocked) {
+ g_signal_handlers_unblock_by_func (view, html_editor_view_selection_changed_cb, NULL);
+ view->priv->selection_changed_callbacks_blocked = FALSE;
+ }
}
static gboolean
@@ -9670,6 +9677,7 @@ e_html_editor_view_init (EHTMLEditorView *view)
view->priv->undo_redo_in_progress = FALSE;
view->priv->dont_save_history_in_body_input = FALSE;
view->priv->style_change_callbacks_blocked = FALSE;
+ view->priv->selection_changed_callbacks_blocked = FALSE;
view->priv->spell_check_on_scroll_event_source_id = 0;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]