return 0;
}
+static bool
+check_valid_ic (EcoreIMFContextISF * ic)
+{
+ if (ic && ic->impl && ic->ctx)
+ return true;
+ else
+ return false;
+}
+
static Eina_Bool
_key_down_cb (void *data, int type, void *event)
{
if (!ic->impl->preedit_started) {
ecore_imf_context_preedit_start_event_add (ic->ctx);
ecore_imf_context_event_callback_call (ic->ctx, ECORE_IMF_CALLBACK_PREEDIT_START, NULL);
- ic->impl->preedit_started = true;
+ if (check_valid_ic (ic))
+ ic->impl->preedit_started = true;
}
ecore_imf_context_preedit_changed_event_add (ic->ctx);
ecore_imf_context_event_callback_call (ic->ctx, ECORE_IMF_CALLBACK_PREEDIT_CHANGED, NULL);
if (wstr.length ()) {
ecore_imf_context_commit_event_add (ic->ctx, utf8_wcstombs (wstr).c_str ());
ecore_imf_context_event_callback_call (ic->ctx, ECORE_IMF_CALLBACK_COMMIT, (void *)utf8_wcstombs (wstr).c_str ());
+ if (!check_valid_ic (ic))
+ return;
}
}
_panel_client.prepare (ic->id);
if (!ic->impl->preedit_started) {
ecore_imf_context_preedit_start_event_add (_focused_ic->ctx);
ecore_imf_context_event_callback_call (_focused_ic->ctx, ECORE_IMF_CALLBACK_PREEDIT_START, NULL);
- ic->impl->preedit_started = true;
- ic->impl->need_commit_preedit = true;
+ if (check_valid_ic (ic)) {
+ ic->impl->preedit_started = true;
+ ic->impl->need_commit_preedit = true;
+ }
}
} else {
_panel_client.prepare (ic->id);
if (update_preedit && emit) {
ecore_imf_context_preedit_changed_event_add (ic->ctx);
ecore_imf_context_event_callback_call (ic->ctx, ECORE_IMF_CALLBACK_PREEDIT_CHANGED, NULL);
+ if (!check_valid_ic (ic))
+ return;
}
if (ic->impl->preedit_started) {
ecore_imf_context_preedit_end_event_add (ic->ctx);
ecore_imf_context_event_callback_call (ic->ctx, ECORE_IMF_CALLBACK_PREEDIT_END, NULL);
- ic->impl->preedit_started = false;
- ic->impl->need_commit_preedit = false;
+ if (check_valid_ic (ic)) {
+ ic->impl->preedit_started = false;
+ ic->impl->need_commit_preedit = false;
+ }
}
} else {
_panel_client.prepare (ic->id);
if (!ic->impl->preedit_started) {
ecore_imf_context_preedit_start_event_add (ic->ctx);
ecore_imf_context_event_callback_call (ic->ctx, ECORE_IMF_CALLBACK_PREEDIT_START, NULL);
+ if (!check_valid_ic (ic))
+ return;
+
ic->impl->preedit_started = true;
ic->impl->need_commit_preedit = true;
}
ic->impl->preedit_updating = true;
ecore_imf_context_preedit_changed_event_add (ic->ctx);
ecore_imf_context_event_callback_call (ic->ctx, ECORE_IMF_CALLBACK_PREEDIT_CHANGED, NULL);
- ic->impl->preedit_updating = false;
+ if (check_valid_ic (ic))
+ ic->impl->preedit_updating = false;
} else {
_panel_client.prepare (ic->id);
_panel_client.update_preedit_string (ic->id, str, attrs, caret);
if (ic->impl->use_preedit && ic->impl->preedit_string.length ()) {
ecore_imf_context_preedit_start_event_add (ic->ctx);
ecore_imf_context_event_callback_call (ic->ctx, ECORE_IMF_CALLBACK_PREEDIT_START, NULL);
+ if (!check_valid_ic (ic))
+ return;
+
ecore_imf_context_preedit_changed_event_add (ic->ctx);
ecore_imf_context_event_callback_call (ic->ctx, ECORE_IMF_CALLBACK_PREEDIT_CHANGED, NULL);
- ic->impl->preedit_started = true;
+
+ if (check_valid_ic (ic))
+ ic->impl->preedit_started = true;
}
}
}
if (ic->impl->use_preedit && ic->impl->preedit_string.length ()) {
ecore_imf_context_preedit_changed_event_add (ic->ctx);
ecore_imf_context_event_callback_call (ic->ctx, ECORE_IMF_CALLBACK_PREEDIT_CHANGED, NULL);
+ if (!check_valid_ic (ic))
+ return;
+
ecore_imf_context_preedit_end_event_add (ic->ctx);
ecore_imf_context_event_callback_call (ic->ctx, ECORE_IMF_CALLBACK_PREEDIT_END, NULL);
- ic->impl->preedit_started = false;
+
+ if (check_valid_ic (ic))
+ ic->impl->preedit_started = false;
}
}
}
static void
open_previous_factory (EcoreIMFContextISF *ic)
{
- if (ic == NULL)
+ if (!check_valid_ic (ic))
return;
SCIM_DEBUG_FRONTEND(2) << __FUNCTION__ << " context=" << ic->id << "\n";
open_specific_factory (EcoreIMFContextISF *ic,
const String &uuid)
{
- if (ic == NULL)
+ if (!check_valid_ic (ic))
return;
SCIM_DEBUG_FRONTEND(2) << __FUNCTION__ << " context=" << ic->id << "\n";
if (ic->impl->use_preedit && ic->impl->preedit_string.length ()) {
ecore_imf_context_preedit_changed_event_add (ic->ctx);
ecore_imf_context_event_callback_call (ic->ctx, ECORE_IMF_CALLBACK_PREEDIT_CHANGED, NULL);
+ if (!check_valid_ic (ic))
+ return;
+
ecore_imf_context_preedit_end_event_add (ic->ctx);
ecore_imf_context_event_callback_call (ic->ctx, ECORE_IMF_CALLBACK_PREEDIT_END, NULL);
- ic->impl->preedit_started = false;
+
+ if (check_valid_ic (ic))
+ ic->impl->preedit_started = false;
}
}
}
if (!ic->impl->preedit_started) {
ecore_imf_context_preedit_start_event_add (_focused_ic->ctx);
ecore_imf_context_event_callback_call (_focused_ic->ctx, ECORE_IMF_CALLBACK_PREEDIT_START, NULL);
- ic->impl->preedit_started = true;
+ if (check_valid_ic (ic))
+ ic->impl->preedit_started = true;
}
//if (ic->impl->preedit_string.length ())
// ecore_imf_context_preedit_changed_event_add (_focused_ic->ctx);
ecore_imf_context_preedit_changed_event_add (ic->ctx);
ecore_imf_context_event_callback_call (ic->ctx, ECORE_IMF_CALLBACK_PREEDIT_CHANGED, NULL);
}
- if (ic->impl->preedit_started) {
+ if (check_valid_ic (ic) && ic->impl->preedit_started) {
ecore_imf_context_preedit_end_event_add (ic->ctx);
ecore_imf_context_event_callback_call (ic->ctx, ECORE_IMF_CALLBACK_PREEDIT_END, NULL);
- ic->impl->preedit_started = false;
+ if (check_valid_ic (ic))
+ ic->impl->preedit_started = false;
}
} else {
_panel_client.hide_preedit_string (ic->id);
if (!ic->impl->preedit_started) {
ecore_imf_context_preedit_start_event_add (ic->ctx);
ecore_imf_context_event_callback_call (ic->ctx, ECORE_IMF_CALLBACK_PREEDIT_START, NULL);
+ if (!check_valid_ic (ic))
+ return;
+
ic->impl->preedit_started = true;
}
ecore_imf_context_preedit_changed_event_add (ic->ctx);
if (!ic->impl->preedit_started) {
ecore_imf_context_preedit_start_event_add (_focused_ic->ctx);
ecore_imf_context_event_callback_call (_focused_ic->ctx, ECORE_IMF_CALLBACK_PREEDIT_START, NULL);
+ if (!check_valid_ic (ic))
+ return;
+
ic->impl->preedit_started = true;
}
if (caret >= 0 && caret <= (int)str.length ())
ic->impl->preedit_updating = true;
ecore_imf_context_preedit_changed_event_add (ic->ctx);
ecore_imf_context_event_callback_call (ic->ctx, ECORE_IMF_CALLBACK_PREEDIT_CHANGED, NULL);
- ic->impl->preedit_updating = false;
+ if (check_valid_ic (ic))
+ ic->impl->preedit_updating = false;
} else {
_panel_client.update_preedit_string (ic->id, str, attrs, caret);
}