aboutsummaryrefslogtreecommitdiffstats
path: root/widgets
diff options
context:
space:
mode:
Diffstat (limited to 'widgets')
-rw-r--r--widgets/text/e-text.c40
-rw-r--r--widgets/text/e-text.h1
2 files changed, 17 insertions, 24 deletions
diff --git a/widgets/text/e-text.c b/widgets/text/e-text.c
index b80228021c..550089b076 100644
--- a/widgets/text/e-text.c
+++ b/widgets/text/e-text.c
@@ -961,12 +961,27 @@ e_text_set_property (GObject *object,
}
case PROP_IM_CONTEXT:
- if (text->im_context)
+ if (text->im_context) {
+ g_signal_handlers_disconnect_matched (text->im_context,
+ G_SIGNAL_MATCH_DATA,
+ 0, 0, NULL,
+ NULL, text);
g_object_unref (text->im_context);
+ }
text->im_context = g_value_get_object (value);
- if (text->im_context)
+
+ if (text->im_context) {
g_object_ref (text->im_context);
+ g_signal_connect (text->im_context, "commit",
+ G_CALLBACK (e_text_commit_cb), text);
+ g_signal_connect (text->im_context, "preedit_changed",
+ G_CALLBACK (e_text_preedit_changed_cb), text);
+ g_signal_connect (text->im_context, "retrieve_surrounding",
+ G_CALLBACK (e_text_retrieve_surrounding_cb), text);
+ g_signal_connect (text->im_context, "delete_surrounding",
+ G_CALLBACK (e_text_delete_surrounding_cb), text);
+ }
text->need_im_reset = FALSE;
break;
@@ -2179,29 +2194,9 @@ e_text_event (GnomeCanvasItem *item, GdkEvent *event)
GdkEventFocus *focus_event;
focus_event = (GdkEventFocus *) event;
if (focus_event->in) {
- if (text->im_context) {
- if (!text->im_context_signals_registered) {
- g_signal_connect (text->im_context, "commit",
- G_CALLBACK (e_text_commit_cb), text);
- g_signal_connect (text->im_context, "preedit_changed",
- G_CALLBACK (e_text_preedit_changed_cb), text);
- g_signal_connect (text->im_context, "retrieve_surrounding",
- G_CALLBACK (e_text_retrieve_surrounding_cb), text);
- g_signal_connect (text->im_context, "delete_surrounding",
- G_CALLBACK (e_text_delete_surrounding_cb), text);
- text->im_context_signals_registered = TRUE;
- }
- }
start_editing (text);
text->show_cursor = FALSE; /* so we'll redraw and the cursor will be shown */
} else {
- if (text->im_context) {
- g_signal_handlers_disconnect_matched (text->im_context,
- G_SIGNAL_MATCH_DATA,
- 0, 0, NULL,
- NULL, text);
- text->im_context_signals_registered = FALSE;
- }
e_text_stop_editing (text);
if (text->timeout_id) {
g_source_remove(text->timeout_id);
@@ -3761,7 +3756,6 @@ e_text_init (EText *text)
text->im_context = NULL;
text->need_im_reset = FALSE;
- text->im_context_signals_registered = FALSE;
text->handle_popup = FALSE;
diff --git a/widgets/text/e-text.h b/widgets/text/e-text.h
index 4eb3fa830b..a1096cd98b 100644
--- a/widgets/text/e-text.h
+++ b/widgets/text/e-text.h
@@ -212,7 +212,6 @@ struct _EText {
GtkIMContext *im_context;
gboolean need_im_reset;
- gboolean im_context_signals_registered;
gboolean handle_popup;
};