static void ibus_unikey_engine_focus_in(IBusEngine* engine) { unikey = (IBusUnikeyEngine*)engine; UnikeySetInputMethod(unikey->im); UnikeySetOutputCharset(unikey->oc); UnikeySetOptions(&unikey->ukopt); ibus_engine_register_properties(engine, unikey->prop_list); parent_class->focus_in(engine); }
static void ibus_unikey_engine_focus_in(IBusEngine* engine) { unikey = (IBusUnikeyEngine*)engine; if (unikey->last_load_config < config_time) { ibus_unikey_engine_load_config(unikey); ibus_unikey_engine_create_property_list(unikey); } UnikeySetInputMethod(unikey->im); UnikeySetOutputCharset(unikey->oc); UnikeySetOptions(&unikey->ukopt); ibus_engine_register_properties(engine, unikey->prop_list); parent_class->focus_in(engine); }
//----------------------------------------- // based on code contributed by pclouds //----------------------------------------- static GdkFilterReturn gtk_im_context_vn_event_filter (GdkXEvent *xevent, GdkEvent *event, gpointer data) { XPropertyEvent *ev = (XPropertyEvent*)xevent; long v; GdkWindow *gdkroot = gdk_get_default_root_window(); Window root = GDK_WINDOW_XID(gdkroot); if (!ev || ev->type != PropertyNotify || ev->window != root) return GDK_FILTER_CONTINUE; if (ev->atom == AIMCharset) { v = UkGetPropValue(ev->atom, VKC_UTF8); GlobalOpt.charset = SyncToUnikeyCharset(v); UnikeySetOutputCharset(GlobalOpt.charset); /* if (UkMacroLoaded) UkUpdateMacroTable(GlobalOpt.charset); */ return GDK_FILTER_REMOVE; } else if (ev->atom == AIMMethod) { fixSyncToUnikeyMethod(); if (GlobalOpt.enabled) UnikeySetInputMethod(GlobalOpt.inputMethod); return GDK_FILTER_REMOVE; } else if (ev->atom == AIMUsing) { //dont' need this return GDK_FILTER_REMOVE; } else if (ev->atom == AGUIVisible) { UkGUIVisible = UkGetPropValue(AGUIVisible, 0); } return GDK_FILTER_CONTINUE; }
static void ibus_unikey_engine_property_activate(IBusEngine* engine, const gchar* prop_name, guint prop_state) { IBusProperty* prop; IBusText* label; guint i, j; unikey = (IBusUnikeyEngine*)engine; // input method active if (strncmp(prop_name, CONFIG_INPUTMETHOD, strlen(CONFIG_INPUTMETHOD)) == 0) { for (i=0; i<NUM_INPUTMETHOD; i++) { if (strcmp(prop_name + strlen(CONFIG_INPUTMETHOD)+1, Unikey_IMNames[i]) == 0) { unikey->im = Unikey_IM[i]; // update label for (j=0; j<unikey->prop_list->properties->len; j++) { prop = ibus_prop_list_get(unikey->prop_list, j); if (prop==NULL) return; else if (strcmp(ibus_property_get_key(prop), CONFIG_INPUTMETHOD) == 0) { label = ibus_text_new_from_static_string(Unikey_IMNames[i]); ibus_property_set_label(prop, label); break; } } // end update label // update property state for (j=0; j<unikey->menu_im->properties->len; j++) { prop = ibus_prop_list_get(unikey->menu_im, j); if (prop==NULL) return; else if (strcmp(ibus_property_get_key(prop), prop_name)==0) ibus_property_set_state(prop, PROP_STATE_CHECKED); else ibus_property_set_state(prop, PROP_STATE_UNCHECKED); } // end update property state break; } } } // end input method active // output charset active else if (strncmp(prop_name, CONFIG_OUTPUTCHARSET, strlen(CONFIG_OUTPUTCHARSET)) == 0) { for (i=0; i<NUM_OUTPUTCHARSET; i++) { if (strcmp(prop_name+strlen(CONFIG_OUTPUTCHARSET)+1, Unikey_OCNames[i]) == 0) { unikey->oc = Unikey_OC[i]; // update label for (j=0; j<unikey->prop_list->properties->len; j++) { prop = ibus_prop_list_get(unikey->prop_list, j); if (prop==NULL) return; else if (strcmp(ibus_property_get_key(prop), CONFIG_OUTPUTCHARSET)==0) { label = ibus_text_new_from_static_string(Unikey_OCNames[i]); ibus_property_set_label(prop, label); break; } } // end update label // update property state for (j=0; j<unikey->menu_oc->properties->len; j++) { prop = ibus_prop_list_get(unikey->menu_oc, j); if (prop==NULL) return; else if (strcmp(ibus_property_get_key(prop), prop_name) == 0) ibus_property_set_state(prop, PROP_STATE_CHECKED); else ibus_property_set_state(prop, PROP_STATE_UNCHECKED); } // end update property state break; } } } // end output charset active // spellcheck active else if (strcmp(prop_name, CONFIG_SPELLCHECK) == 0) { unikey->ukopt.spellCheckEnabled = !unikey->ukopt.spellCheckEnabled; // update state for (j = 0; j < unikey->menu_opt->properties->len ; j++) { prop = ibus_prop_list_get(unikey->menu_opt, j); if (prop == NULL) return; else if (strcmp(ibus_property_get_key(prop), CONFIG_SPELLCHECK) == 0) { ibus_property_set_state(prop, (unikey->ukopt.spellCheckEnabled == 1)? PROP_STATE_CHECKED:PROP_STATE_UNCHECKED); break; } } // end update state } // end spellcheck active // MacroEnabled active else if (strcmp(prop_name, CONFIG_MACROENABLED) == 0) { unikey->ukopt.macroEnabled = !unikey->ukopt.macroEnabled; // update state for (j = 0; j < unikey->menu_opt->properties->len ; j++) { prop = ibus_prop_list_get(unikey->menu_opt, j); if (prop == NULL) return; else if (strcmp(ibus_property_get_key(prop), CONFIG_MACROENABLED) == 0) { ibus_property_set_state(prop, (unikey->ukopt.macroEnabled == 1)? PROP_STATE_CHECKED:PROP_STATE_UNCHECKED); break; } } // end update state } // end MacroEnabled active // MouseCapture active else if (strcmp(prop_name, CONFIG_MOUSECAPTURE) == 0) { unikey->mouse_capture = !unikey->mouse_capture; // update state for (j = 0; j < unikey->menu_opt->properties->len ; j++) { prop = ibus_prop_list_get(unikey->menu_opt, j); if (prop == NULL) return; else if (strcmp(ibus_property_get_key(prop), CONFIG_MOUSECAPTURE) == 0) { ibus_property_set_state(prop, (unikey->mouse_capture == 1)? PROP_STATE_CHECKED:PROP_STATE_UNCHECKED); break; } } // end update state } // end MouseCapture active // if Run setup else if (strcmp(prop_name, "RunSetupGUI") == 0) { system(LIBEXECDIR "/ibus-setup-unikey &"); } // END Run setup ibus_unikey_engine_reset(engine); UnikeySetInputMethod(unikey->im); UnikeySetOutputCharset(unikey->oc); UnikeySetOptions(&unikey->ukopt); }