Bool MyTriggerNotifyHandler (IMTriggerNotifyStruct * call_data) { if (call_data->flag == 0) { /* Mainwindow always shows wrong input status, so fix it here */ CurrentIC = (IC *) FindIC (call_data->icid); connect_id = call_data->connect_id; SetConnectID (call_data->connect_id, IS_CHN); icidSetIMState(call_data->icid, IS_CHN); EnterChineseMode (False); if (!bUseDBus) DrawMainWindow (); } SetTrackPos( (IMChangeICStruct *)call_data ); if (bShowInputWindowTriggering && !bCorner) { DisplayInputWindow (); #ifdef _ENABLE_TRAY if (!bUseDBus) DrawTrayWindow (ACTIVE_ICON, 0, 0, TRAY_ICON_HEIGHT, TRAY_ICON_WIDTH ); #endif } else return False; return True; }
void SetTrackPos(IMChangeICStruct * call_data) { if (CurrentIC == NULL) return; if (CurrentIC != (IC *) FindIC (call_data->icid)) return; if (bTrackCursor) { int i; Window window; XICAttribute *pre_attr = ((IMChangeICStruct *) call_data)->preedit_attr; for (i = 0; i < (int) ((IMChangeICStruct *) call_data)->preedit_attr_num; i++, pre_attr++) { if (!strcmp (XNSpotLocation, pre_attr->name)) { if (CurrentIC->focus_win) XTranslateCoordinates (dpy, CurrentIC->focus_win, RootWindow (dpy, iScreen), (*(XPoint *) pre_attr->value).x, (*(XPoint *) pre_attr->value).y, &iClientCursorX, &iClientCursorY, &window); else if (CurrentIC->client_win) XTranslateCoordinates (dpy, CurrentIC->client_win, RootWindow (dpy, iScreen), (*(XPoint *) pre_attr->value).x, (*(XPoint *) pre_attr->value).y, &iClientCursorX, &iClientCursorY, &window); else return; ConnectIDSetTrackCursor (call_data->connect_id, True); } } } MoveInputWindow(call_data->connect_id); }
int xim_hime_FocusOut(IMChangeFocusStruct *call_data) { IC *ic = FindIC(call_data->icid); ClientState *cs = &ic->cs; hime_FocusOut(cs); return True; }
int xim_hime_FocusIn(IMChangeFocusStruct *call_data) { IC *ic = FindIC(call_data->icid); ClientState *cs = &ic->cs; connect_id = call_data->connect_id; if (ic) { hime_FocusIn(cs); load_IC(ic); } #if DEBUG dbg("xim_hime_FocusIn %d\n", call_data->icid); #endif return True; }
Bool MyCreateICHandler (IMChangeICStruct * call_data) { CreateIC (call_data); if (!CurrentIC) { CurrentIC = (IC *) FindIC (call_data->icid); connect_id = call_data->connect_id; } #ifdef _ENABLE_DBUS if (bUseDBus) updatePropertyByConnectID(connect_id); #endif CreateICID(call_data); return True; }
Bool MyDestroyICHandler (IMChangeICStruct * call_data) { if (CurrentIC == (IC *) FindIC (call_data->icid)) { CloseInputWindow(); if (!bUseDBus) XUnmapWindow (dpy, VKWindow); } DestroyIC (call_data); DestroyICID(call_data->icid); #ifdef _ENABLE_DBUS if (bUseDBus) { strcpy(logo_prop.label, "Fcitx"); updateProperty(&logo_prop); } #endif return True; }
Bool MySetFocusHandler (IMChangeFocusStruct * call_data) { CurrentIC = (IC *) FindIC (call_data->icid); connect_id = call_data->connect_id; if (ConnectIDGetState (connect_id) != IS_CLOSED) { if (icidGetIMState(call_data->icid) == IS_CLOSED) IMPreeditStart (ims, (XPointer) call_data); EnterChineseMode (lastConnectID == connect_id); if (!bUseDBus) DrawMainWindow (); if (ConnectIDGetState (connect_id) == IS_CHN) { if (bVK) DisplayVKWindow (); } else { XUnmapWindow (dpy, inputWindow); if (!bUseDBus) XUnmapWindow (dpy, VKWindow); } } else { if (icidGetIMState(call_data->icid) != IS_CLOSED) IMPreeditEnd (ims, (XPointer) call_data); CloseInputWindow(); if (!bUseDBus) { XUnmapWindow (dpy, VKWindow); #ifdef _ENABLE_TRAY DrawTrayWindow (INACTIVE_ICON, 0, 0, TRAY_ICON_HEIGHT, TRAY_ICON_WIDTH ); #endif if (hideMainWindow == HM_SHOW) { DisplayMainWindow (); DrawMainWindow (); } else XUnmapWindow (dpy, mainWindow); } #ifdef _ENABLE_DBUS else updatePropertyByConnectID(connect_id); #endif icidSetIMState(call_data->icid, ConnectIDGetState (connect_id)); lastConnectID = connect_id; //When application gets the focus, re-record the time. bStartRecordType = False; iHZInputed = 0; if (ConnectIDGetTrackCursor (connect_id) && bTrackCursor) { position * pos = ConnectIDGetPos(connect_id); if (pos) { iClientCursorX = pos->x; iClientCursorY = pos->y; if (!bUseDBus) XMoveWindow (dpy, inputWindow, iClientCursorX, iClientCursorY); #ifdef _ENABLE_DBUS else KIMUpdateSpotLocation(iClientCursorX, iClientCursorY); #endif } } #ifdef _ENABLE_DBUS if (bUseDBus) registerProperties(); #endif } return True; }