[gnumeric] for Weng Xuetian: Fix interaction with ibus & fcitx. [#684511]
- From: Andreas J. Guelzow <guelzow src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnumeric] for Weng Xuetian: Fix interaction with ibus & fcitx. [#684511]
- Date: Sun, 23 Sep 2012 02:00:20 +0000 (UTC)
commit 8207af3f8d4064eb2b3591f671661812dd2345d0
Author: Weng Xuetian <wengxt gmail com>
Date: Sat Sep 22 19:58:07 2012 -0600
for Weng Xuetian: Fix interaction with ibus & fcitx. [#684511]
2012-09-22 Andreas J. Guelzow <aguelzow pyrshep ca>
for Weng Xuetian
* src/gnm-pane-impl.h: change IM fields of _GnmPane
* src/gnm-pane.c (gnm_pane_key_press): skip im_block_edit_start
(gnm_pane_focus_in): ditto
(gnm_pane_realize): ditto
(gnm_pane_unrealize): ditto
(cb_gnm_pane_preedit_start): new
(cb_gnm_pane_preedit_end): new
(cb_gnm_pane_preedit_changed): check im_preedit_started
(gnm_pane_dispose): disconnect cb_gnm_pane_preedit_*
(gnm_pane_init): connect cb_gnm_pane_preedit_*
ChangeLog | 14 ++++++++++++++
NEWS | 4 ++++
src/gnm-pane-impl.h | 3 +--
src/gnm-pane.c | 47 +++++++++++++++++++++++++++--------------------
4 files changed, 46 insertions(+), 22 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index b5962ae..266ce0d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2012-09-22 Andreas J. Guelzow <aguelzow pyrshep ca>
+ for Weng Xuetian
+
+ * src/gnm-pane-impl.h: change IM fields of _GnmPane
+ * src/gnm-pane.c (gnm_pane_key_press): skip im_block_edit_start
+ (gnm_pane_focus_in): ditto
+ (gnm_pane_realize): ditto
+ (gnm_pane_unrealize): ditto
+ (cb_gnm_pane_preedit_start): new
+ (cb_gnm_pane_preedit_end): new
+ (cb_gnm_pane_preedit_changed): check im_preedit_started
+ (gnm_pane_dispose): disconnect cb_gnm_pane_preedit_*
+ (gnm_pane_init): connect cb_gnm_pane_preedit_*
+
2012-09-19 Jean Brefort <jean brefort normalesup org>
* src/graph.c (gnm_go_data_vector_load_len),
diff --git a/NEWS b/NEWS
index 5134bd5..7d6585a 100644
--- a/NEWS
+++ b/NEWS
@@ -2,9 +2,13 @@ Gnumeric 1.11.7
Andreas:
* Fix ODF export of conditional styles including data styles. [#683739]
+
Jean:
* Fixed indentation in cell format dialog. [#683576]
+Weng Xuetian
+ * Fix interaction with ibus & fcitx. [#684511]
+
--------------------------------------------------------------------------
Gnumeric 1.11.6
diff --git a/src/gnm-pane-impl.h b/src/gnm-pane-impl.h
index 66edb13..8ad733e 100644
--- a/src/gnm-pane-impl.h
+++ b/src/gnm-pane-impl.h
@@ -34,8 +34,7 @@ struct _GnmPane {
gboolean sliding_adjacent_h, sliding_adjacent_v;
/* IM */
- guint im_block_edit_start :1; /* see gnm_pane_key_press for details */
- guint im_first_focus :1; /* see gnm_pane_init for details */
+ guint im_preedit_started :1;
guint preedit_length;
GtkIMContext *im_context;
PangoAttrList *preedit_attrs;
diff --git a/src/gnm-pane.c b/src/gnm-pane.c
index 67eb71a..8b6c2c9 100644
--- a/src/gnm-pane.c
+++ b/src/gnm-pane.c
@@ -604,12 +604,7 @@ gnm_pane_key_press (GtkWidget *widget, GdkEventKey *event)
if (gtk_im_context_filter_keypress (pane->im_context, event))
return TRUE;
- /* in gtk-2.8 something changed. gtk_im_context_reset started
- * triggering a pre-edit-changed. We'd end up start and finishing an
- * empty edit every time the cursor moved */
- pane->im_block_edit_start = TRUE;
gtk_im_context_reset (pane->im_context);
- pane->im_block_edit_start = FALSE;
if (gnm_pane_key_mode_sheet (pane, event, allow_rangesel))
return TRUE;
@@ -645,17 +640,8 @@ gnm_pane_key_release (GtkWidget *widget, GdkEventKey *event)
static gint
gnm_pane_focus_in (GtkWidget *widget, GdkEventFocus *event)
{
- /* The first call to focus-in was sometimes the first thing to init the
- * imcontext. In which case the im_context_focus_in would fire a
- * preedit-changed, and we would start editing. */
GnmPane *pane = GNM_PANE (widget);
- if (pane->im_first_focus)
- pane->im_block_edit_start = TRUE;
gtk_im_context_focus_in (GNM_PANE (widget)->im_context);
- if (pane->im_first_focus) {
- pane->im_first_focus = FALSE;
- pane->im_block_edit_start = FALSE;
- }
return (*GTK_WIDGET_CLASS (parent_klass)->focus_in_event) (widget, event);
}
@@ -672,7 +658,6 @@ gnm_pane_realize (GtkWidget *w)
{
GtkStyleContext *ctxt;
GdkRGBA rgba;
- GNM_PANE (w)->im_block_edit_start = FALSE;
if (GTK_WIDGET_CLASS (parent_klass)->realize)
(*GTK_WIDGET_CLASS (parent_klass)->realize) (w);
@@ -698,7 +683,6 @@ gnm_pane_unrealize (GtkWidget *widget)
g_return_if_fail (pane != NULL);
if (pane->im_context) {
- pane->im_block_edit_start = TRUE;
gtk_im_context_set_client_window (pane->im_context, NULL);
}
@@ -752,6 +736,15 @@ cb_gnm_pane_commit (GtkIMContext *context, char const *str, GnmPane *pane)
}
static void
+cb_gnm_pane_preedit_start (GtkIMContext *context, GnmPane *pane)
+{
+ WBCGtk *wbcg = pane->simple.scg->wbcg;
+ pane->im_preedit_started = TRUE;
+ if (!wbcg_is_editing (wbcg))
+ wbcg_edit_start (wbcg, TRUE, TRUE);
+}
+
+static void
cb_gnm_pane_preedit_changed (GtkIMContext *context, GnmPane *pane)
{
gchar *preedit_string;
@@ -759,14 +752,15 @@ cb_gnm_pane_preedit_changed (GtkIMContext *context, GnmPane *pane)
int cursor_pos;
WBCGtk *wbcg = pane->simple.scg->wbcg;
GtkEditable *editable = gnm_pane_get_editable (pane);
+ if (!pane->im_preedit_started)
+ return;
tmp_pos = gtk_editable_get_position (editable);
if (pane->preedit_attrs)
pango_attr_list_unref (pane->preedit_attrs);
gtk_im_context_get_preedit_string (pane->im_context, &preedit_string, &pane->preedit_attrs, &cursor_pos);
- if (!pane->im_block_edit_start &&
- !wbcg_is_editing (wbcg) && !wbcg_edit_start (wbcg, TRUE, TRUE)) {
+ if (!wbcg_is_editing (wbcg) && !wbcg_edit_start (wbcg, FALSE, TRUE)) {
gtk_im_context_reset (pane->im_context);
pane->preedit_length = 0;
if (pane->preedit_attrs)
@@ -785,6 +779,12 @@ cb_gnm_pane_preedit_changed (GtkIMContext *context, GnmPane *pane)
g_free (preedit_string);
}
+static void
+cb_gnm_pane_preedit_end (GtkIMContext *context, GnmPane *pane)
+{
+ pane->im_preedit_started = FALSE;
+}
+
static gboolean
cb_gnm_pane_retrieve_surrounding (GtkIMContext *context, GnmPane *pane)
{
@@ -866,8 +866,12 @@ gnm_pane_dispose (GObject *obj)
g_signal_handlers_disconnect_by_func
(imc, cb_gnm_pane_commit, pane);
g_signal_handlers_disconnect_by_func
+ (imc, cb_gnm_pane_preedit_start, pane);
+ g_signal_handlers_disconnect_by_func
(imc, cb_gnm_pane_preedit_changed, pane);
g_signal_handlers_disconnect_by_func
+ (imc, cb_gnm_pane_preedit_end, pane);
+ g_signal_handlers_disconnect_by_func
(imc, cb_gnm_pane_retrieve_surrounding, pane);
g_signal_handlers_disconnect_by_func
(imc, cb_gnm_pane_delete_surrounding, pane);
@@ -940,16 +944,19 @@ gnm_pane_init (GnmPane *pane)
pane->im_context = gtk_im_multicontext_new ();
pane->preedit_length = 0;
pane->preedit_attrs = NULL;
- pane->im_block_edit_start = FALSE;
- pane->im_first_focus = TRUE;
+ pane->im_preedit_started = FALSE;
gtk_widget_set_can_focus (GTK_WIDGET (canvas), TRUE);
gtk_widget_set_can_default (GTK_WIDGET (canvas), TRUE);
g_signal_connect (G_OBJECT (pane->im_context), "commit",
G_CALLBACK (cb_gnm_pane_commit), pane);
+ g_signal_connect (G_OBJECT (pane->im_context), "preedit_start",
+ G_CALLBACK (cb_gnm_pane_preedit_start), pane);
g_signal_connect (G_OBJECT (pane->im_context), "preedit_changed",
G_CALLBACK (cb_gnm_pane_preedit_changed), pane);
+ g_signal_connect (G_OBJECT (pane->im_context), "preedit_end",
+ G_CALLBACK (cb_gnm_pane_preedit_end), pane);
g_signal_connect (G_OBJECT (pane->im_context), "retrieve_surrounding",
G_CALLBACK (cb_gnm_pane_retrieve_surrounding),
pane);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]