Update to 1.3.0.20100329-1.

This commit is contained in:
Daiki Ueno 2010-08-03 16:23:10 +09:00
parent b21a0554c4
commit ee858c370b
7 changed files with 163 additions and 986 deletions

1
.gitignore vendored
View File

@ -1 +1,2 @@
ibus-hangul-1.2.0.20100102.tar.gz
ibus-hangul-1.3.0.20100329.tar.gz

View File

@ -1,27 +0,0 @@
diff -urN ibus-hangul-1.1.0.20090328.orig/src/engine.c ibus-hangul-1.1.0.20090328/src/engine.c
--- ibus-hangul-1.1.0.20090328.orig/src/engine.c 2009-04-06 16:21:46.663081165 -0400
+++ ibus-hangul-1.1.0.20090328/src/engine.c 2009-04-06 16:50:00.163321101 -0400
@@ -384,19 +384,19 @@
ibus_hangul_engine_commit_current_candidate (hangul);
ibus_hangul_engine_close_lookup_table (hangul);
- } else if (keyval == IBUS_Left) {
+ } else if (keyval == IBUS_Up) {
ibus_lookup_table_cursor_up (hangul->table);
ibus_hangul_engine_update_lookup_table (hangul);
ibus_hangul_engine_update_auxiliary_text (hangul);
- } else if (keyval == IBUS_Right) {
+ } else if (keyval == IBUS_Down) {
ibus_lookup_table_cursor_down (hangul->table);
ibus_hangul_engine_update_lookup_table (hangul);
ibus_hangul_engine_update_auxiliary_text (hangul);
- } else if (keyval == IBUS_Up) {
+ } else if (keyval == IBUS_Left) {
ibus_lookup_table_page_up (hangul->table);
ibus_hangul_engine_update_lookup_table (hangul);
ibus_hangul_engine_update_auxiliary_text (hangul);
- } else if (keyval == IBUS_Down) {
+ } else if (keyval == IBUS_Right) {
ibus_lookup_table_page_down (hangul->table);
ibus_hangul_engine_update_lookup_table (hangul);
ibus_hangul_engine_update_auxiliary_text (hangul);

View File

@ -1,12 +0,0 @@
diff -urN ibus-hangul-1.1.0.20090328.orig/src/engine.c ibus-hangul-1.1.0.20090328/src/engine.c
--- ibus-hangul-1.1.0.20090328.orig/src/engine.c 2009-03-26 01:50:18.000000000 -0400
+++ ibus-hangul-1.1.0.20090328/src/engine.c 2009-04-06 16:20:44.935321507 -0400
@@ -450,7 +450,7 @@
if (keyval == IBUS_Shift_L || keyval == IBUS_Shift_R)
return FALSE;
- if (keyval == IBUS_F9 || keyval == IBUS_Hangul_Hanja) {
+ if (keyval == IBUS_F9 || keyval == IBUS_Hangul_Hanja || keyval == IBUS_Control_R) {
ibus_hangul_engine_toggle_lookup_table (hangul);
return TRUE;
}

154
ibus-hangul-HEAD.patch Normal file
View File

@ -0,0 +1,154 @@
diff --git a/src/engine.c b/src/engine.c
index 2fffad0..95a4a62 100644
--- a/src/engine.c
+++ b/src/engine.c
@@ -89,6 +89,12 @@ static void ibus_hangul_engine_property_hide
const gchar *prop_name);
#endif
+static void ibus_hangul_engine_candidate_clicked
+ (IBusEngine *engine,
+ guint index,
+ guint button,
+ guint state);
+
static void ibus_hangul_engine_flush (IBusHangulEngine *hangul);
static void ibus_hangul_engine_update_preedit_text
(IBusHangulEngine *hangul);
@@ -234,6 +240,8 @@ ibus_hangul_engine_class_init (IBusHangulEngineClass *klass)
engine_class->cursor_down = ibus_hangul_engine_cursor_down;
engine_class->property_activate = ibus_hangul_engine_property_activate;
+
+ engine_class->candidate_clicked = ibus_hangul_engine_candidate_clicked;
}
static void
@@ -342,6 +350,11 @@ ibus_hangul_engine_update_preedit_text (IBusHangulEngine *hangul)
ustring_append_ucs4 (preedit, hic_preedit, -1);
if (ustring_length(preedit) > 0) {
+ IBusPreeditFocusMode preedit_option = IBUS_ENGINE_PREEDIT_COMMIT;
+
+ if (hangul->hanja_list != NULL)
+ preedit_option = IBUS_ENGINE_PREEDIT_CLEAR;
+
text = ibus_text_new_from_ucs4 ((gunichar*)preedit->data);
// ibus-hangul's internal preedit string
ibus_text_append_attribute (text, IBUS_ATTR_TYPE_UNDERLINE,
@@ -356,7 +369,7 @@ ibus_hangul_engine_update_preedit_text (IBusHangulEngine *hangul)
text,
ibus_text_get_length (text),
TRUE,
- IBUS_ENGINE_PREEDIT_COMMIT);
+ preedit_option);
} else {
text = ibus_text_new_from_static_string ("");
ibus_engine_update_preedit_text ((IBusEngine *)hangul, text, 0, FALSE);
@@ -492,6 +505,9 @@ ibus_hangul_engine_update_lookup_table (IBusHangulEngine *hangul)
ibus_hangul_engine_update_hanja_list (hangul);
if (hangul->hanja_list != NULL) {
+ // We should redraw preedit text with IBUS_ENGINE_PREEDIT_CLEAR option
+ // here to prevent committing it on focus out event incidentally.
+ ibus_hangul_engine_update_preedit_text (hangul);
ibus_hangul_engine_apply_hanja_list (hangul);
} else {
ibus_hangul_engine_hide_lookup_table (hangul);
@@ -505,6 +521,12 @@ ibus_hangul_engine_process_candidate_key_event (IBusHangulEngine *hangul,
{
if (keyval == IBUS_Escape) {
ibus_hangul_engine_hide_lookup_table (hangul);
+ // When the lookup table is poped up, preedit string is
+ // updated with IBUS_ENGINE_PREEDIT_CLEAR option.
+ // So, when focus is out, the preedit text will not be committed.
+ // To prevent this problem, we have to update preedit text here
+ // with IBUS_ENGINE_PREEDIT_COMMIT option.
+ ibus_hangul_engine_update_preedit_text (hangul);
return TRUE;
} else if (keyval == IBUS_Return) {
ibus_hangul_engine_commit_current_candidate (hangul);
@@ -740,17 +762,16 @@ ibus_hangul_engine_flush (IBusHangulEngine *hangul)
ustring_append_ucs4 (hangul->preedit, str, -1);
- if (ustring_length (hangul->preedit) == 0)
- return;
+ if (ustring_length (hangul->preedit) != 0) {
+ str = ustring_begin (hangul->preedit);
+ text = ibus_text_new_from_ucs4 (str);
- str = ustring_begin (hangul->preedit);
- text = ibus_text_new_from_ucs4 (str);
+ ibus_engine_commit_text ((IBusEngine *) hangul, text);
- ibus_engine_hide_preedit_text ((IBusEngine *) hangul);
- // Use ibus_engine_update_preedit_text_with_mode instead.
- //ibus_engine_commit_text ((IBusEngine *) hangul, text);
+ ustring_clear(hangul->preedit);
+ }
- ustring_clear(hangul->preedit);
+ ibus_hangul_engine_update_preedit_text (hangul);
}
static void
@@ -766,6 +787,8 @@ ibus_hangul_engine_focus_in (IBusEngine *engine)
ibus_engine_register_properties (engine, hangul->prop_list);
+ ibus_hangul_engine_update_preedit_text (hangul);
+
if (hangul->hanja_list != NULL) {
ibus_hangul_engine_update_lookup_table_ui (hangul);
}
@@ -779,7 +802,11 @@ ibus_hangul_engine_focus_out (IBusEngine *engine)
IBusHangulEngine *hangul = (IBusHangulEngine *) engine;
if (hangul->hanja_list == NULL) {
- ibus_hangul_engine_flush (hangul);
+ // ibus-hangul uses
+ // ibus_engine_update_preedit_text_with_mode() function which makes
+ // the preedit string committed automatically when the focus is out.
+ // So we don't need to commit the preedit here.
+ hangul_ic_reset (hangul->context);
} else {
ibus_engine_hide_lookup_table (engine);
ibus_engine_hide_auxiliary_text (engine);
@@ -794,9 +821,6 @@ ibus_hangul_engine_reset (IBusEngine *engine)
IBusHangulEngine *hangul = (IBusHangulEngine *) engine;
ibus_hangul_engine_flush (hangul);
- if (hangul->hanja_list != NULL) {
- ibus_hangul_engine_hide_lookup_table (hangul);
- }
parent_class->reset (engine);
}
@@ -972,3 +996,26 @@ key_event_list_match(GArray* list, guint keyval, guint modifiers)
return FALSE;
}
+
+static void
+ibus_hangul_engine_candidate_clicked (IBusEngine *engine,
+ guint index,
+ guint button,
+ guint state)
+{
+ IBusHangulEngine *hangul = (IBusHangulEngine *) engine;
+ if (hangul == NULL)
+ return;
+
+ if (hangul->table == NULL)
+ return;
+
+ ibus_lookup_table_set_cursor_pos (hangul->table, index);
+ ibus_hangul_engine_commit_current_candidate (hangul);
+
+ if (hangul->hanja_mode) {
+ ibus_hangul_engine_update_lookup_table (hangul);
+ } else {
+ ibus_hangul_engine_hide_lookup_table (hangul);
+ }
+}

View File

@ -1,939 +0,0 @@
diff --git a/src/engine.c b/src/engine.c
index e4a4495..903016a 100644
--- a/src/engine.c
+++ b/src/engine.c
@@ -17,7 +17,7 @@ typedef struct _IBusHangulEngine IBusHangulEngine;
typedef struct _IBusHangulEngineClass IBusHangulEngineClass;
struct _IBusHangulEngine {
- IBusEngine parent;
+ IBusEngine parent;
/* members */
HangulInputContext *context;
@@ -33,7 +33,7 @@ struct _IBusHangulEngine {
};
struct _IBusHangulEngineClass {
- IBusEngineClass parent;
+ IBusEngineClass parent;
};
struct KeyEvent {
@@ -42,15 +42,17 @@ struct KeyEvent {
};
/* functions prototype */
-static void ibus_hangul_engine_class_init (IBusHangulEngineClass *klass);
-static void ibus_hangul_engine_init (IBusHangulEngine *hangul);
+static void ibus_hangul_engine_class_init
+ (IBusHangulEngineClass *klass);
+static void ibus_hangul_engine_init (IBusHangulEngine *hangul);
static GObject*
- ibus_hangul_engine_constructor (GType type,
+ ibus_hangul_engine_constructor
+ (GType type,
guint n_construct_params,
GObjectConstructParam *construct_params);
-static void ibus_hangul_engine_destroy (IBusHangulEngine *hangul);
+static void ibus_hangul_engine_destroy (IBusHangulEngine *hangul);
static gboolean
- ibus_hangul_engine_process_key_event
+ ibus_hangul_engine_process_key_event
(IBusEngine *engine,
guint keyval,
guint keycode,
@@ -80,10 +82,10 @@ static void ibus_hangul_engine_property_activate
guint prop_state);
#if 0
static void ibus_hangul_engine_property_show
- (IBusEngine *engine,
+ (IBusEngine *engine,
const gchar *prop_name);
static void ibus_hangul_engine_property_hide
- (IBusEngine *engine,
+ (IBusEngine *engine,
const gchar *prop_name);
#endif
@@ -92,21 +94,23 @@ static void ibus_hangul_engine_update_preedit_text
(IBusHangulEngine *hangul);
static void ibus_hangul_engine_update_lookup_table
- (IBusHangulEngine *hangul);
+ (IBusHangulEngine *hangul);
static void ibus_config_value_changed (IBusConfig *config,
const gchar *section,
const gchar *name,
GValue *value,
gpointer user_data);
-static void lookup_table_set_visible (IBusLookupTable *table,
- gboolean flag);
-static gboolean lookup_table_is_visible (IBusLookupTable *table);
+static void lookup_table_set_visible (IBusLookupTable *table,
+ gboolean flag);
+static gboolean lookup_table_is_visible
+ (IBusLookupTable *table);
-static void key_event_list_set (GArray* list, const char* str);
-static gboolean key_event_list_match (GArray* list,
- guint keyval,
- guint modifiers);
+static void key_event_list_set (GArray *list,
+ const gchar *str);
+static gboolean key_event_list_match (GArray *list,
+ guint keyval,
+ guint modifiers);
static IBusEngineClass *parent_class = NULL;
static HanjaTable *hanja_table = NULL;
@@ -119,28 +123,28 @@ static int lookup_table_orientation = 0;
GType
ibus_hangul_engine_get_type (void)
{
- static GType type = 0;
-
- static const GTypeInfo type_info = {
- sizeof (IBusHangulEngineClass),
- (GBaseInitFunc) NULL,
- (GBaseFinalizeFunc) NULL,
- (GClassInitFunc) ibus_hangul_engine_class_init,
- NULL,
- NULL,
- sizeof (IBusHangulEngine),
- 0,
- (GInstanceInitFunc) ibus_hangul_engine_init,
- };
-
- if (type == 0) {
- type = g_type_register_static (IBUS_TYPE_ENGINE,
- "IBusHangulEngine",
- &type_info,
- (GTypeFlags) 0);
- }
+ static GType type = 0;
+
+ static const GTypeInfo type_info = {
+ sizeof (IBusHangulEngineClass),
+ (GBaseInitFunc) NULL,
+ (GBaseFinalizeFunc) NULL,
+ (GClassInitFunc) ibus_hangul_engine_class_init,
+ NULL,
+ NULL,
+ sizeof (IBusHangulEngine),
+ 0,
+ (GInstanceInitFunc) ibus_hangul_engine_init,
+ };
+
+ if (type == 0) {
+ type = g_type_register_static (IBUS_TYPE_ENGINE,
+ "IBusHangulEngine",
+ &type_info,
+ (GTypeFlags) 0);
+ }
- return type;
+ return type;
}
void
@@ -154,6 +158,8 @@ ibus_hangul_init (IBusBus *bus)
symbol_table = hanja_table_load (IBUSHANGUL_DATADIR "/data/symbol.txt");
config = ibus_bus_get_config (bus);
+ if (config)
+ g_object_ref_sink (config);
hangul_keyboard = g_string_new_len ("2", 8);
res = ibus_config_get_value (config, "engine/Hangul",
@@ -161,7 +167,7 @@ ibus_hangul_init (IBusBus *bus)
if (res) {
const gchar* str = g_value_get_string (&value);
g_string_assign (hangul_keyboard, str);
- g_value_unset(&value);
+ g_value_unset(&value);
}
hanja_keys = g_array_sized_new(FALSE, TRUE, sizeof(struct KeyEvent), 4);
@@ -169,18 +175,18 @@ ibus_hangul_init (IBusBus *bus)
"HanjaKeys", &value);
if (res) {
const gchar* str = g_value_get_string (&value);
- key_event_list_set(hanja_keys, str);
- g_value_unset(&value);
+ key_event_list_set(hanja_keys, str);
+ g_value_unset(&value);
} else {
- struct KeyEvent ev;
+ struct KeyEvent ev;
- ev.keyval = IBUS_Hangul_Hanja;
- ev.modifiers = 0;
- g_array_append_val(hanja_keys, ev);
+ ev.keyval = IBUS_Hangul_Hanja;
+ ev.modifiers = 0;
+ g_array_append_val(hanja_keys, ev);
- ev.keyval = IBUS_F9;
- ev.modifiers = 0;
- g_array_append_val(hanja_keys, ev);
+ ev.keyval = IBUS_F9;
+ ev.modifiers = 0;
+ g_array_append_val(hanja_keys, ev);
}
}
@@ -204,13 +210,13 @@ static void
ibus_hangul_engine_class_init (IBusHangulEngineClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
- IBusObjectClass *ibus_object_class = IBUS_OBJECT_CLASS (klass);
- IBusEngineClass *engine_class = IBUS_ENGINE_CLASS (klass);
+ IBusObjectClass *ibus_object_class = IBUS_OBJECT_CLASS (klass);
+ IBusEngineClass *engine_class = IBUS_ENGINE_CLASS (klass);
- parent_class = (IBusEngineClass *) g_type_class_peek_parent (klass);
+ parent_class = (IBusEngineClass *) g_type_class_peek_parent (klass);
object_class->constructor = ibus_hangul_engine_constructor;
- ibus_object_class->destroy = (IBusObjectDestroyFunc) ibus_hangul_engine_destroy;
+ ibus_object_class->destroy = (IBusObjectDestroyFunc) ibus_hangul_engine_destroy;
engine_class->process_key_event = ibus_hangul_engine_process_key_event;
@@ -244,17 +250,17 @@ ibus_hangul_engine_init (IBusHangulEngine *hangul)
hangul->hanja_mode = FALSE;
hangul->prop_list = ibus_prop_list_new ();
+ g_object_ref_sink (hangul->prop_list);
label = ibus_text_new_from_string (_("Hanja lock"));
tooltip = ibus_text_new_from_string (_("Enable/Disable Hanja mode"));
prop = ibus_property_new ("hanja_mode",
PROP_TYPE_TOGGLE,
label,
- NULL,
+ NULL,
tooltip,
TRUE, TRUE, PROP_STATE_UNCHECKED, NULL);
- g_object_unref (label);
- g_object_unref (tooltip);
+ g_object_ref_sink (prop);
ibus_prop_list_append (hangul->prop_list, prop);
hangul->prop_hanja_mode = prop;
@@ -263,18 +269,16 @@ ibus_hangul_engine_init (IBusHangulEngine *hangul)
prop = ibus_property_new ("setup",
PROP_TYPE_NORMAL,
label,
- "gtk-preferences",
+ "gtk-preferences",
tooltip,
TRUE, TRUE, PROP_STATE_UNCHECKED, NULL);
- g_object_unref (label);
- g_object_unref (tooltip);
ibus_prop_list_append (hangul->prop_list, prop);
- g_object_unref (prop);
hangul->table = ibus_lookup_table_new (9, 0, TRUE, FALSE);
+ g_object_ref_sink (hangul->table);
g_signal_connect (config, "value-changed",
- G_CALLBACK(ibus_config_value_changed), hangul);
+ G_CALLBACK(ibus_config_value_changed), hangul);
}
static GObject*
@@ -315,7 +319,7 @@ ibus_hangul_engine_destroy (IBusHangulEngine *hangul)
hangul->context = NULL;
}
- IBUS_OBJECT_CLASS (parent_class)->destroy ((IBusObject *)hangul);
+ IBUS_OBJECT_CLASS (parent_class)->destroy ((IBusObject *)hangul);
}
static void
@@ -339,24 +343,22 @@ ibus_hangul_engine_update_preedit_text (IBusHangulEngine *hangul)
if (ustring_length(preedit) > 0) {
text = ibus_text_new_from_ucs4 ((gunichar*)preedit->data);
- // ibus-hangul's internal preedit string
+ // ibus-hangul's internal preedit string
ibus_text_append_attribute (text, IBUS_ATTR_TYPE_UNDERLINE,
- IBUS_ATTR_UNDERLINE_SINGLE, 0, preedit_len);
- // Preedit string from libhangul context.
- // This is currently composing syllable.
+ IBUS_ATTR_UNDERLINE_SINGLE, 0, preedit_len);
+ // Preedit string from libhangul context.
+ // This is currently composing syllable.
ibus_text_append_attribute (text, IBUS_ATTR_TYPE_FOREGROUND,
- 0x00ffffff, preedit_len, -1);
- ibus_text_append_attribute (text, IBUS_ATTR_TYPE_BACKGROUND,
- 0x00000000, preedit_len, -1);
+ 0x00ffffff, preedit_len, -1);
+ ibus_text_append_attribute (text, IBUS_ATTR_TYPE_BACKGROUND,
+ 0x00000000, preedit_len, -1);
ibus_engine_update_preedit_text ((IBusEngine *)hangul,
text,
ibus_text_get_length (text),
TRUE);
- g_object_unref (text);
} else {
text = ibus_text_new_from_static_string ("");
ibus_engine_update_preedit_text ((IBusEngine *)hangul, text, 0, FALSE);
- g_object_unref (text);
}
ustring_delete(preedit);
@@ -375,7 +377,6 @@ ibus_hangul_engine_update_lookup_table_ui (IBusHangulEngine *hangul)
text = ibus_text_new_from_string (comment);
ibus_engine_update_auxiliary_text ((IBusEngine *)hangul, text, TRUE);
- g_object_unref (text);
// update lookup table
ibus_engine_update_lookup_table ((IBusEngine *)hangul, hangul->table, TRUE);
@@ -403,13 +404,12 @@ ibus_hangul_engine_commit_current_candidate (IBusHangulEngine *hangul)
len = MIN(key_len, preedit_len);
ustring_erase (hangul->preedit, 0, len);
if (key_len > preedit_len)
- hangul_ic_reset (hangul->context);
+ hangul_ic_reset (hangul->context);
ibus_hangul_engine_update_preedit_text (hangul);
text = ibus_text_new_from_string (value);
ibus_engine_commit_text ((IBusEngine *)hangul, text);
- g_object_unref (text);
}
static void
@@ -420,8 +420,8 @@ ibus_hangul_engine_update_hanja_list (IBusHangulEngine *hangul)
UString* preedit;
if (hangul->hanja_list != NULL) {
- hanja_list_delete (hangul->hanja_list);
- hangul->hanja_list = NULL;
+ hanja_list_delete (hangul->hanja_list);
+ hangul->hanja_list = NULL;
}
hic_preedit = hangul_ic_get_preedit_string (hangul->context);
@@ -429,14 +429,14 @@ ibus_hangul_engine_update_hanja_list (IBusHangulEngine *hangul)
preedit = ustring_dup (hangul->preedit);
ustring_append_ucs4 (preedit, hic_preedit, -1);
if (ustring_length(preedit) > 0) {
- utf8 = ustring_to_utf8 (preedit, -1);
- if (utf8 != NULL) {
- if (symbol_table != NULL)
- hangul->hanja_list = hanja_table_match_prefix (symbol_table, utf8);
- if (hangul->hanja_list == NULL)
- hangul->hanja_list = hanja_table_match_prefix (hanja_table, utf8);
- g_free (utf8);
- }
+ utf8 = ustring_to_utf8 (preedit, -1);
+ if (utf8 != NULL) {
+ if (symbol_table != NULL)
+ hangul->hanja_list = hanja_table_match_prefix (symbol_table, utf8);
+ if (hangul->hanja_list == NULL)
+ hangul->hanja_list = hanja_table_match_prefix (hanja_table, utf8);
+ g_free (utf8);
+ }
}
ustring_delete (preedit);
@@ -448,20 +448,19 @@ ibus_hangul_engine_apply_hanja_list (IBusHangulEngine *hangul)
{
HanjaList* list = hangul->hanja_list;
if (list != NULL) {
- int i, n;
- n = hanja_list_get_size (list);
-
- ibus_lookup_table_clear (hangul->table);
- for (i = 0; i < n; i++) {
- const char* value = hanja_list_get_nth_value (list, i);
- IBusText* text = ibus_text_new_from_string (value);
- ibus_lookup_table_append_candidate (hangul->table, text);
- g_object_unref (text);
- }
-
- ibus_lookup_table_set_cursor_pos (hangul->table, 0);
- ibus_hangul_engine_update_lookup_table_ui (hangul);
- lookup_table_set_visible (hangul->table, TRUE);
+ int i, n;
+ n = hanja_list_get_size (list);
+
+ ibus_lookup_table_clear (hangul->table);
+ for (i = 0; i < n; i++) {
+ const char* value = hanja_list_get_nth_value (list, i);
+ IBusText* text = ibus_text_new_from_string (value);
+ ibus_lookup_table_append_candidate (hangul->table, text);
+ }
+
+ ibus_lookup_table_set_cursor_pos (hangul->table, 0);
+ ibus_hangul_engine_update_lookup_table_ui (hangul);
+ lookup_table_set_visible (hangul->table, TRUE);
}
}
@@ -475,14 +474,14 @@ ibus_hangul_engine_hide_lookup_table (IBusHangulEngine *hangul)
// is not visible results wrong behavior. So I have to check
// whether the table is visible or not before to hide.
if (is_visible) {
- ibus_engine_hide_lookup_table ((IBusEngine *)hangul);
- ibus_engine_hide_auxiliary_text ((IBusEngine *)hangul);
- lookup_table_set_visible (hangul->table, FALSE);
+ ibus_engine_hide_lookup_table ((IBusEngine *)hangul);
+ ibus_engine_hide_auxiliary_text ((IBusEngine *)hangul);
+ lookup_table_set_visible (hangul->table, FALSE);
}
if (hangul->hanja_list != NULL) {
- hanja_list_delete (hangul->hanja_list);
- hangul->hanja_list = NULL;
+ hanja_list_delete (hangul->hanja_list);
+ hangul->hanja_list = NULL;
}
}
@@ -505,126 +504,126 @@ ibus_hangul_engine_process_candidate_key_event (IBusHangulEngine *hangul,
{
if (keyval == IBUS_Escape) {
ibus_hangul_engine_hide_lookup_table (hangul);
- return TRUE;
+ return TRUE;
} else if (keyval == IBUS_Return) {
- ibus_hangul_engine_commit_current_candidate (hangul);
-
- if (hangul->hanja_mode) {
- ibus_hangul_engine_update_lookup_table (hangul);
- } else {
- ibus_hangul_engine_hide_lookup_table (hangul);
- }
- return TRUE;
+ ibus_hangul_engine_commit_current_candidate (hangul);
+
+ if (hangul->hanja_mode) {
+ ibus_hangul_engine_update_lookup_table (hangul);
+ } else {
+ ibus_hangul_engine_hide_lookup_table (hangul);
+ }
+ return TRUE;
} else if (keyval >= IBUS_1 && keyval <= IBUS_9) {
- guint page_no;
- guint page_size;
- guint cursor_pos;
+ guint page_no;
+ guint page_size;
+ guint cursor_pos;
- page_size = ibus_lookup_table_get_page_size (hangul->table);
- cursor_pos = ibus_lookup_table_get_cursor_pos (hangul->table);
- page_no = cursor_pos / page_size;
+ page_size = ibus_lookup_table_get_page_size (hangul->table);
+ cursor_pos = ibus_lookup_table_get_cursor_pos (hangul->table);
+ page_no = cursor_pos / page_size;
- cursor_pos = page_no * page_size + (keyval - IBUS_1);
- ibus_lookup_table_set_cursor_pos (hangul->table, cursor_pos);
+ cursor_pos = page_no * page_size + (keyval - IBUS_1);
+ ibus_lookup_table_set_cursor_pos (hangul->table, cursor_pos);
- ibus_hangul_engine_commit_current_candidate (hangul);
+ ibus_hangul_engine_commit_current_candidate (hangul);
- if (hangul->hanja_mode) {
- ibus_hangul_engine_update_lookup_table (hangul);
- } else {
- ibus_hangul_engine_hide_lookup_table (hangul);
- }
- return TRUE;
+ if (hangul->hanja_mode) {
+ ibus_hangul_engine_update_lookup_table (hangul);
+ } else {
+ ibus_hangul_engine_hide_lookup_table (hangul);
+ }
+ return TRUE;
} else if (keyval == IBUS_Page_Up) {
- ibus_lookup_table_page_up (hangul->table);
- ibus_hangul_engine_update_lookup_table_ui (hangul);
- return TRUE;
+ ibus_lookup_table_page_up (hangul->table);
+ ibus_hangul_engine_update_lookup_table_ui (hangul);
+ return TRUE;
} else if (keyval == IBUS_Page_Down) {
- ibus_lookup_table_page_down (hangul->table);
- ibus_hangul_engine_update_lookup_table_ui (hangul);
- return TRUE;
+ ibus_lookup_table_page_down (hangul->table);
+ ibus_hangul_engine_update_lookup_table_ui (hangul);
+ return TRUE;
} else {
- if (lookup_table_orientation == 0) {
- // horizontal
- if (keyval == IBUS_Left) {
- ibus_lookup_table_cursor_up (hangul->table);
- ibus_hangul_engine_update_lookup_table_ui (hangul);
- return TRUE;
- } else if (keyval == IBUS_Right) {
- ibus_lookup_table_cursor_down (hangul->table);
- ibus_hangul_engine_update_lookup_table_ui (hangul);
- return TRUE;
- } else if (keyval == IBUS_Up) {
- ibus_lookup_table_page_up (hangul->table);
- ibus_hangul_engine_update_lookup_table_ui (hangul);
- return TRUE;
- } else if (keyval == IBUS_Down) {
- ibus_lookup_table_page_down (hangul->table);
- ibus_hangul_engine_update_lookup_table_ui (hangul);
- return TRUE;
- }
- } else {
- // vertical
- if (keyval == IBUS_Left) {
- ibus_lookup_table_page_up (hangul->table);
- ibus_hangul_engine_update_lookup_table_ui (hangul);
- return TRUE;
- } else if (keyval == IBUS_Right) {
- ibus_lookup_table_page_down (hangul->table);
- ibus_hangul_engine_update_lookup_table_ui (hangul);
- return TRUE;
- } else if (keyval == IBUS_Up) {
- ibus_lookup_table_cursor_up (hangul->table);
- ibus_hangul_engine_update_lookup_table_ui (hangul);
- return TRUE;
- } else if (keyval == IBUS_Down) {
- ibus_lookup_table_cursor_down (hangul->table);
- ibus_hangul_engine_update_lookup_table_ui (hangul);
- return TRUE;
- }
- }
+ if (lookup_table_orientation == 0) {
+ // horizontal
+ if (keyval == IBUS_Left) {
+ ibus_lookup_table_cursor_up (hangul->table);
+ ibus_hangul_engine_update_lookup_table_ui (hangul);
+ return TRUE;
+ } else if (keyval == IBUS_Right) {
+ ibus_lookup_table_cursor_down (hangul->table);
+ ibus_hangul_engine_update_lookup_table_ui (hangul);
+ return TRUE;
+ } else if (keyval == IBUS_Up) {
+ ibus_lookup_table_page_up (hangul->table);
+ ibus_hangul_engine_update_lookup_table_ui (hangul);
+ return TRUE;
+ } else if (keyval == IBUS_Down) {
+ ibus_lookup_table_page_down (hangul->table);
+ ibus_hangul_engine_update_lookup_table_ui (hangul);
+ return TRUE;
+ }
+ } else {
+ // vertical
+ if (keyval == IBUS_Left) {
+ ibus_lookup_table_page_up (hangul->table);
+ ibus_hangul_engine_update_lookup_table_ui (hangul);
+ return TRUE;
+ } else if (keyval == IBUS_Right) {
+ ibus_lookup_table_page_down (hangul->table);
+ ibus_hangul_engine_update_lookup_table_ui (hangul);
+ return TRUE;
+ } else if (keyval == IBUS_Up) {
+ ibus_lookup_table_cursor_up (hangul->table);
+ ibus_hangul_engine_update_lookup_table_ui (hangul);
+ return TRUE;
+ } else if (keyval == IBUS_Down) {
+ ibus_lookup_table_cursor_down (hangul->table);
+ ibus_hangul_engine_update_lookup_table_ui (hangul);
+ return TRUE;
+ }
+ }
}
if (!hangul->hanja_mode) {
- if (lookup_table_orientation == 0) {
- // horizontal
- if (keyval == IBUS_h) {
- ibus_lookup_table_cursor_up (hangul->table);
- ibus_hangul_engine_update_lookup_table_ui (hangul);
- return TRUE;
- } else if (keyval == IBUS_l) {
- ibus_lookup_table_cursor_down (hangul->table);
- ibus_hangul_engine_update_lookup_table_ui (hangul);
- return TRUE;
- } else if (keyval == IBUS_k) {
- ibus_lookup_table_page_up (hangul->table);
- ibus_hangul_engine_update_lookup_table_ui (hangul);
- return TRUE;
- } else if (keyval == IBUS_j) {
- ibus_lookup_table_page_down (hangul->table);
- ibus_hangul_engine_update_lookup_table_ui (hangul);
- return TRUE;
- }
- } else {
- // vertical
- if (keyval == IBUS_h) {
- ibus_lookup_table_page_up (hangul->table);
- ibus_hangul_engine_update_lookup_table_ui (hangul);
- return TRUE;
- } else if (keyval == IBUS_l) {
- ibus_lookup_table_page_down (hangul->table);
- ibus_hangul_engine_update_lookup_table_ui (hangul);
- return TRUE;
- } else if (keyval == IBUS_k) {
- ibus_lookup_table_cursor_up (hangul->table);
- ibus_hangul_engine_update_lookup_table_ui (hangul);
- return TRUE;
- } else if (keyval == IBUS_j) {
- ibus_lookup_table_cursor_down (hangul->table);
- ibus_hangul_engine_update_lookup_table_ui (hangul);
- return TRUE;
- }
- }
+ if (lookup_table_orientation == 0) {
+ // horizontal
+ if (keyval == IBUS_h) {
+ ibus_lookup_table_cursor_up (hangul->table);
+ ibus_hangul_engine_update_lookup_table_ui (hangul);
+ return TRUE;
+ } else if (keyval == IBUS_l) {
+ ibus_lookup_table_cursor_down (hangul->table);
+ ibus_hangul_engine_update_lookup_table_ui (hangul);
+ return TRUE;
+ } else if (keyval == IBUS_k) {
+ ibus_lookup_table_page_up (hangul->table);
+ ibus_hangul_engine_update_lookup_table_ui (hangul);
+ return TRUE;
+ } else if (keyval == IBUS_j) {
+ ibus_lookup_table_page_down (hangul->table);
+ ibus_hangul_engine_update_lookup_table_ui (hangul);
+ return TRUE;
+ }
+ } else {
+ // vertical
+ if (keyval == IBUS_h) {
+ ibus_lookup_table_page_up (hangul->table);
+ ibus_hangul_engine_update_lookup_table_ui (hangul);
+ return TRUE;
+ } else if (keyval == IBUS_l) {
+ ibus_lookup_table_page_down (hangul->table);
+ ibus_hangul_engine_update_lookup_table_ui (hangul);
+ return TRUE;
+ } else if (keyval == IBUS_k) {
+ ibus_lookup_table_cursor_up (hangul->table);
+ ibus_hangul_engine_update_lookup_table_ui (hangul);
+ return TRUE;
+ } else if (keyval == IBUS_j) {
+ ibus_lookup_table_cursor_down (hangul->table);
+ ibus_hangul_engine_update_lookup_table_ui (hangul);
+ return TRUE;
+ }
+ }
}
return FALSE;
@@ -653,75 +652,73 @@ ibus_hangul_engine_process_key_event (IBusEngine *engine,
return FALSE;
if (key_event_list_match(hanja_keys, keyval, modifiers)) {
- if (hangul->hanja_list == NULL) {
- ibus_hangul_engine_update_lookup_table (hangul);
- } else {
- ibus_hangul_engine_hide_lookup_table (hangul);
- }
- return TRUE;
+ if (hangul->hanja_list == NULL) {
+ ibus_hangul_engine_update_lookup_table (hangul);
+ } else {
+ ibus_hangul_engine_hide_lookup_table (hangul);
+ }
+ return TRUE;
}
if (modifiers & (IBUS_CONTROL_MASK | IBUS_MOD1_MASK))
return FALSE;
if (hangul->hanja_list != NULL) {
- retval = ibus_hangul_engine_process_candidate_key_event (hangul,
- keyval, modifiers);
- if (hangul->hanja_mode) {
- if (retval)
- return TRUE;
- } else {
- return TRUE;
- }
+ retval = ibus_hangul_engine_process_candidate_key_event (hangul,
+ keyval, modifiers);
+ if (hangul->hanja_mode) {
+ if (retval)
+ return TRUE;
+ } else {
+ return TRUE;
+ }
}
if (keyval == IBUS_BackSpace) {
retval = hangul_ic_backspace (hangul->context);
} else {
- // ignore capslock
- if (modifiers & IBUS_LOCK_MASK) {
- if (keyval >= 'A' && keyval <= 'z') {
- if (isupper(keyval))
- keyval = tolower(keyval);
- else
- keyval = toupper(keyval);
- }
- }
+ // ignore capslock
+ if (modifiers & IBUS_LOCK_MASK) {
+ if (keyval >= 'A' && keyval <= 'z') {
+ if (isupper(keyval))
+ keyval = tolower(keyval);
+ else
+ keyval = toupper(keyval);
+ }
+ }
retval = hangul_ic_process (hangul->context, keyval);
}
str = hangul_ic_get_commit_string (hangul->context);
if (hangul->hanja_mode) {
- const ucschar* hic_preedit;
-
- hic_preedit = hangul_ic_get_preedit_string (hangul->context);
- if (hic_preedit != NULL && hic_preedit[0] != 0) {
- ustring_append_ucs4 (hangul->preedit, str, -1);
- } else {
- IBusText *text;
- const ucschar* preedit;
-
- ustring_append_ucs4 (hangul->preedit, str, -1);
- if (ustring_length (hangul->preedit) > 0) {
- preedit = ustring_begin (hangul->preedit);
- text = ibus_text_new_from_ucs4 ((gunichar*)preedit);
- ibus_engine_commit_text (engine, text);
- g_object_unref (text);
- }
- ustring_clear (hangul->preedit);
- }
+ const ucschar* hic_preedit;
+
+ hic_preedit = hangul_ic_get_preedit_string (hangul->context);
+ if (hic_preedit != NULL && hic_preedit[0] != 0) {
+ ustring_append_ucs4 (hangul->preedit, str, -1);
+ } else {
+ IBusText *text;
+ const ucschar* preedit;
+
+ ustring_append_ucs4 (hangul->preedit, str, -1);
+ if (ustring_length (hangul->preedit) > 0) {
+ preedit = ustring_begin (hangul->preedit);
+ text = ibus_text_new_from_ucs4 ((gunichar*)preedit);
+ ibus_engine_commit_text (engine, text);
+ }
+ ustring_clear (hangul->preedit);
+ }
} else {
- if (str != NULL && str[0] != 0) {
- IBusText *text = ibus_text_new_from_ucs4 (str);
- ibus_engine_commit_text (engine, text);
- g_object_unref (text);
- }
+ if (str != NULL && str[0] != 0) {
+ IBusText *text = ibus_text_new_from_ucs4 (str);
+ ibus_engine_commit_text (engine, text);
+ }
}
ibus_hangul_engine_update_preedit_text (hangul);
if (hangul->hanja_mode) {
- ibus_hangul_engine_update_lookup_table (hangul);
+ ibus_hangul_engine_update_lookup_table (hangul);
}
if (!retval)
@@ -751,8 +748,6 @@ ibus_hangul_engine_flush (IBusHangulEngine *hangul)
ibus_engine_hide_preedit_text ((IBusEngine *) hangul);
ibus_engine_commit_text ((IBusEngine *) hangul, text);
- g_object_unref (text);
-
ustring_clear(hangul->preedit);
}
@@ -762,9 +757,9 @@ ibus_hangul_engine_focus_in (IBusEngine *engine)
IBusHangulEngine *hangul = (IBusHangulEngine *) engine;
if (hangul->hanja_mode) {
- hangul->prop_hanja_mode->state = PROP_STATE_CHECKED;
+ hangul->prop_hanja_mode->state = PROP_STATE_CHECKED;
} else {
- hangul->prop_hanja_mode->state = PROP_STATE_UNCHECKED;
+ hangul->prop_hanja_mode->state = PROP_STATE_UNCHECKED;
}
ibus_engine_register_properties (engine, hangul->prop_list);
@@ -782,10 +777,10 @@ ibus_hangul_engine_focus_out (IBusEngine *engine)
IBusHangulEngine *hangul = (IBusHangulEngine *) engine;
if (hangul->hanja_list == NULL) {
- ibus_hangul_engine_flush (hangul);
+ ibus_hangul_engine_flush (hangul);
} else {
- ibus_engine_hide_lookup_table (engine);
- ibus_engine_hide_auxiliary_text (engine);
+ ibus_engine_hide_lookup_table (engine);
+ ibus_engine_hide_auxiliary_text (engine);
}
parent_class->focus_out ((IBusEngine *) hangul);
@@ -834,8 +829,8 @@ ibus_hangul_engine_cursor_up (IBusEngine *engine)
IBusHangulEngine *hangul = (IBusHangulEngine *) engine;
if (hangul->hanja_list != NULL) {
- ibus_lookup_table_cursor_up (hangul->table);
- ibus_hangul_engine_update_lookup_table_ui (hangul);
+ ibus_lookup_table_cursor_up (hangul->table);
+ ibus_hangul_engine_update_lookup_table_ui (hangul);
}
parent_class->cursor_up (engine);
@@ -847,8 +842,8 @@ ibus_hangul_engine_cursor_down (IBusEngine *engine)
IBusHangulEngine *hangul = (IBusHangulEngine *) engine;
if (hangul->hanja_list != NULL) {
- ibus_lookup_table_cursor_down (hangul->table);
- ibus_hangul_engine_update_lookup_table_ui (hangul);
+ ibus_lookup_table_cursor_down (hangul->table);
+ ibus_hangul_engine_update_lookup_table_ui (hangul);
}
parent_class->cursor_down (engine);
@@ -862,31 +857,31 @@ ibus_hangul_engine_property_activate (IBusEngine *engine,
if (strcmp(prop_name, "setup") == 0) {
GError *error = NULL;
gchar *argv[2] = { NULL, };
- gchar *path;
- const char* libexecdir;
+ gchar *path;
+ const char* libexecdir;
- libexecdir = g_getenv("LIBEXECDIR");
- if (libexecdir == NULL)
- libexecdir = LIBEXECDIR;
+ libexecdir = g_getenv("LIBEXECDIR");
+ if (libexecdir == NULL)
+ libexecdir = LIBEXECDIR;
- path = g_build_filename(libexecdir, "ibus-setup-hangul", NULL);
- argv[0] = path;
- argv[1] = NULL;
+ path = g_build_filename(libexecdir, "ibus-setup-hangul", NULL);
+ argv[0] = path;
+ argv[1] = NULL;
g_spawn_async (NULL, argv, NULL, 0, NULL, NULL, NULL, &error);
- g_free(path);
+ g_free(path);
} else if (strcmp(prop_name, "hanja_mode") == 0) {
- IBusHangulEngine *hangul = (IBusHangulEngine *) engine;
+ IBusHangulEngine *hangul = (IBusHangulEngine *) engine;
- hangul->hanja_mode = !hangul->hanja_mode;
- if (hangul->hanja_mode) {
- hangul->prop_hanja_mode->state = PROP_STATE_CHECKED;
- } else {
- hangul->prop_hanja_mode->state = PROP_STATE_UNCHECKED;
- }
+ hangul->hanja_mode = !hangul->hanja_mode;
+ if (hangul->hanja_mode) {
+ hangul->prop_hanja_mode->state = PROP_STATE_CHECKED;
+ } else {
+ hangul->prop_hanja_mode->state = PROP_STATE_UNCHECKED;
+ }
- ibus_engine_update_property (engine, hangul->prop_hanja_mode);
- ibus_hangul_engine_flush (hangul);
+ ibus_engine_update_property (engine, hangul->prop_hanja_mode);
+ ibus_hangul_engine_flush (hangul);
}
}
@@ -905,13 +900,13 @@ ibus_config_value_changed (IBusConfig *config,
g_string_assign (hangul_keyboard, str);
hangul_ic_select_keyboard (hangul->context, hangul_keyboard->str);
} else if (strcmp(name, "HanjaKeys") == 0) {
- const gchar* str = g_value_get_string (value);
- key_event_list_set(hanja_keys, str);
- }
+ const gchar* str = g_value_get_string (value);
+ key_event_list_set(hanja_keys, str);
+ }
} else if (strcmp(section, "panel") == 0) {
if (strcmp(name, "lookup_table_orientation") == 0) {
lookup_table_orientation = g_value_get_int (value);
- }
+ }
}
}
@@ -936,18 +931,18 @@ key_event_list_set (GArray* list, const char* str)
g_array_set_size(list, 0);
if (items != NULL) {
- int i;
- for (i = 0; items[i] != NULL; ++i) {
- guint keyval = 0;
- guint modifiers = 0;
- gboolean res;
- res = ibus_key_event_from_string(items[i], &keyval, &modifiers);
- if (res) {
- struct KeyEvent ev = { keyval, modifiers };
- g_array_append_val(list, ev);
- }
- }
- g_strfreev(items);
+ int i;
+ for (i = 0; items[i] != NULL; ++i) {
+ guint keyval = 0;
+ guint modifiers = 0;
+ gboolean res;
+ res = ibus_key_event_from_string(items[i], &keyval, &modifiers);
+ if (res) {
+ struct KeyEvent ev = { keyval, modifiers };
+ g_array_append_val(list, ev);
+ }
+ }
+ g_strfreev(items);
}
}
@@ -959,18 +954,18 @@ key_event_list_match(GArray* list, guint keyval, guint modifiers)
/* ignore capslock and numlock */
mask = IBUS_SHIFT_MASK |
- IBUS_CONTROL_MASK |
- IBUS_MOD1_MASK |
- IBUS_MOD3_MASK |
- IBUS_MOD4_MASK |
- IBUS_MOD5_MASK;
+ IBUS_CONTROL_MASK |
+ IBUS_MOD1_MASK |
+ IBUS_MOD3_MASK |
+ IBUS_MOD4_MASK |
+ IBUS_MOD5_MASK;
modifiers &= mask;
for (i = 0; i < list->len; ++i) {
- struct KeyEvent* ev = &g_array_index(list, struct KeyEvent, i);
- if (ev->keyval == keyval && ev->modifiers == modifiers) {
- return TRUE;
- }
+ struct KeyEvent* ev = &g_array_index(list, struct KeyEvent, i);
+ if (ev->keyval == keyval && ev->modifiers == modifiers) {
+ return TRUE;
+ }
}
return FALSE;

View File

@ -2,16 +2,14 @@
%define require_libhangul_version 0.0.10
Name: ibus-hangul
Version: 1.2.0.20100102
Version: 1.3.0.20100329
Release: 1%{?dist}
Summary: The Hangul engine for IBus input platform
License: GPLv2+
Group: System Environment/Libraries
URL: http://code.google.com/p/ibus/
Source0: http://ibus.googlecode.com/files/%{name}-%{version}.tar.gz
# Patch0: ibus-hangul-1.1.0.20090328-right-ctrl-hanja.patch
# Patch1: ibus-hangul-1.1.0.20090328-hanja-arrow-keys.patch
Patch2: ibus-hangul-phuang.patch
Patch0: ibus-hangul-HEAD.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
@ -31,9 +29,7 @@ libhangul.
%prep
%setup -q
# %patch0 -p1
# %patch1 -p1
%patch2 -p1
%patch0 -p1
%build
%configure --disable-static
@ -58,6 +54,10 @@ rm -rf $RPM_BUILD_ROOT
%{_datadir}/ibus/component/*
%changelog
* Tue Aug 3 2010 Daiki Ueno <dueno@redhat.com> - 1.3.0.20100329-1
- Update version to 1.3.0.20100329
- Add ibus-hangul-HEAD.patch to synch it with the git master
* Thu Feb 04 2010 Peng Huang <shawn.p.huang@gmail.com> - 1.2.0.20100102-1
- Update version to 1.2.0.20100102
- Add ibus-hangul-phuang.patch for ibus-1.2.99

View File

@ -1 +1 @@
604d3cda1dbdf0b6c7a30d768a72f1ed ibus-hangul-1.2.0.20100102.tar.gz
3464c98626685c8e23f6b0b580de2d08 ibus-hangul-1.3.0.20100329.tar.gz