Example #1
0
File: IC.c Project: CarterTsai/hime
void load_IC(IC *rec)
{
   ClientState *cs = &rec->cs;
   Window win = cs->client_win;

   if (win == focus_win && !current_CS) {
     current_CS = cs;
     save_CS_temp_to_current();
   }

   if (win == focus_win) {
     if (cs->im_state == HIME_STATE_DISABLED)
       hide_in_win(cs);
     else
     if (cs->im_state != HIME_STATE_DISABLED)
       show_in_win(cs);
   }

   if (cs->input_style & InputStyleOnSpot) {
     if (cs->im_state != HIME_STATE_DISABLED)
       move_IC_in_win(cs);
   } else
   if (cs->input_style & InputStyleOverSpot) {
     if (cs->im_state != HIME_STATE_DISABLED)
       move_IC_in_win(cs);
   } else
   if (cs->input_style & InputStyleRoot) {
     move_IC_in_win(cs);
   }
}
Example #2
0
File: eve.c Project: Tetralet/hime
void update_in_win_pos()
{
  check_CS();

//  dbg("update_in_win_pos %x %d\n", current_CS, current_CS->input_style);

  if (current_CS->input_style == InputStyleRoot) {
    Window r_root, r_child;
    int winx, winy, rootx, rooty;
    u_int mask;

    XQueryPointer(dpy, root, &r_root, &r_child, &rootx, &rooty, &winx, &winy, &mask);

    winx++; winy++;

    Window inpwin = current_CS->client_win;
#if 0
    dbg("update_in_win_pos\n");
#endif
    if (inpwin) {
      int tx, ty;
      Window ow;

      XTranslateCoordinates(dpy, root, inpwin, winx, winy, &tx, &ty, &ow);

      current_CS->spot_location.x = tx;
      current_CS->spot_location.y = ty;
    }
    move_in_win(current_CS, winx, winy);
  } else {
    move_IC_in_win(current_CS);
  }
}
Example #3
0
int hime_FocusIn(ClientState *cs)
{
//  dbg("hime_FocusIn\n");
  Window win = cs->client_win;

#if UNIX && 0
  if (skip_window(win))
    return FALSE;
#endif

  reset_current_in_win_xy();

  if (cs) {
    Window win = cs->client_win;

    if (focus_win != win) {
#if 1
      hime_reset();
#endif
      hide_in_win(current_CS);
      focus_win = win;
    }
  }

  current_CS = cs;
  save_CS_temp_to_current();

//  dbg("current_CS %x %d %d\n", cs, cs->im_state, current_CS->im_state);

  if (win == focus_win) {
    if (cs->im_state != HIME_STATE_DISABLED) {
      show_in_win(cs);
      move_IC_in_win(cs);
    } else
      hide_in_win(cs);
  }

  if (inmd[cs->in_method].selkey)
    set_wselkey(inmd[cs->in_method].selkey);
  else {
    set_wselkey(pho_selkey);
    gtab_set_win1_cb();
    tsin_set_win1_cb();
  }

  update_win_kbm();
#if TRAY_ENABLED
  disp_tray_icon();
#endif
#if 0
  dbg_time("hime_FocusIn %x %x\n",cs, current_CS);
#endif
  return True;
}
Example #4
0
File: eve.cpp Project: gogonkt/gcin
int gcin_FocusIn(ClientState *cs)
{
  Window win = cs->client_win;

  gcin_reset();
#if UNIX
  if (skip_window(win))
    return FALSE;
#endif

  reset_current_in_win_xy();

  if (cs) {
    Window win = cs->client_win;

    if (focus_win != win) {
      hide_in_win(current_CS);
      focus_win = win;
    }
  }

  current_CS = cs;

//  dbg("current_CS %x %d %d\n", cs, cs->im_state, current_CS->im_state);

  if (win == focus_win) {
    if (cs->im_state != GCIN_STATE_DISABLED) {
      show_in_win(cs);
      move_IC_in_win(cs);
#if 0
      set_win_status_inmd(inmd[cs->in_method].cname);
#endif
    } else
      hide_in_win(cs);
  }

  update_win_kbm();
#if TRAY_ENABLED
  disp_tray_icon();
#endif
#if 0
  dbg_time("gcin_FocusIn %x %x\n",cs, current_CS);
#endif
  return True;
}
Example #5
0
File: IC.c Project: CarterTsai/hime
static void
StoreIC(IC *rec, IMChangeICStruct *call_data)
{
        ClientState *cs = &rec->cs;
	XICAttribute *ic_attr = call_data->ic_attr;
	XICAttribute *pre_attr = call_data->preedit_attr;
	XICAttribute *sts_attr = call_data->status_attr;
	register int i;

	if (!current_CS) {
          current_CS = cs;
          save_CS_temp_to_current();
        }
#if DEBUG && 0
        dbg(".... StoreIC\n");
#endif
	for (i = 0; i < (int)call_data->ic_attr_num; i++, ic_attr++) {
		if (Is (XNInputStyle, ic_attr)) {
                    INT32 input_style = *(INT32*)ic_attr->value;

                    if (input_style & XIMPreeditCallbacks) {
                      cs->input_style = InputStyleOnSpot;
                    } else
                    if (input_style & XIMPreeditPosition) {
                      cs->input_style = InputStyleOverSpot;
                    } else
                    if (input_style & XIMPreeditNothing) {
                        cs->input_style = InputStyleRoot;
                    }
		}

		else if (Is (XNClientWindow, ic_attr)) {
                    rec->cs.client_win = *(Window*)ic_attr->value;
#if DEBUG
		    dbg("rec->client_win %x\n", cs->client_win);
#endif
		}
		else if (Is (XNFocusWindow, ic_attr)) {
                    rec->focus_win = *(Window*)ic_attr->value;
                }
		else
		    fprintf(stderr, "Unknown attr: %s a\n", ic_attr->name);
	}

	for (i = 0; i < (int)call_data->preedit_attr_num; i++, pre_attr++) {
		if (Is (XNArea, pre_attr)) {
                    rec->pre_attr.area = *(XRectangle*)pre_attr->value;
#if DEBUG
                   dbg("pre_attr->value: %d %d\n", rec->pre_attr.area.x, rec->pre_attr.area.y);
#endif
                }
		else if (Is (XNAreaNeeded, pre_attr))
		    rec->pre_attr.area_needed = *(XRectangle*)pre_attr->value;

		else if (Is (XNSpotLocation, pre_attr)) {
                    cs->spot_location = *(XPoint*)pre_attr->value;
                    move_IC_in_win(cs);
                }
		else if (Is (XNColormap, pre_attr))
		    rec->pre_attr.cmap = *(Colormap*)pre_attr->value;

		else if (Is (XNStdColormap, pre_attr))
		    rec->pre_attr.cmap = *(Colormap*)pre_attr->value;

		else if (Is (XNForeground, pre_attr))
		    rec->pre_attr.foreground = *(CARD32*)pre_attr->value;

		else if (Is (XNBackground, pre_attr))
		    rec->pre_attr.background = *(CARD32*)pre_attr->value;

		else if (Is (XNBackgroundPixmap, pre_attr))
		    rec->pre_attr.bg_pixmap = *(Pixmap*)pre_attr->value;

		else if (Is (XNFontSet, pre_attr)) {
			int str_length = strlen((char *)pre_attr->value);

			if (rec->pre_attr.base_font != NULL) {
				if (Is (rec->pre_attr.base_font, pre_attr))
					continue;
				XFree(rec->pre_attr.base_font);
			}
			rec->pre_attr.base_font = (char *)malloc(str_length + 1);
			strcpy(rec->pre_attr.base_font, (char *)pre_attr->value);

		} else if (Is (XNLineSpace, pre_attr))
			    rec->pre_attr.line_space = *(CARD32*)pre_attr->value;

		else if (Is (XNCursor, pre_attr))
		    rec->pre_attr.cursor = *(Cursor*)pre_attr->value;

		else
		    fprintf(stderr, "Unknown attr: %s b\n", pre_attr->name);
	}


	for (i = 0; i < (int)call_data->status_attr_num; i++, sts_attr++) {
                if (Is (XNArea, sts_attr)) {
		    rec->sts_attr.area = *(XRectangle*)sts_attr->value;
                }
                else if (Is (XNAreaNeeded, sts_attr)) {
		    rec->sts_attr.area_needed = *(XRectangle*)sts_attr->value;
                }
                else if (Is (XNColormap, sts_attr)) {
		    rec->sts_attr.cmap = *(Colormap*)sts_attr->value;
                }
                else if (Is (XNStdColormap, sts_attr)) {
		    rec->sts_attr.cmap = *(Colormap*)sts_attr->value;
		}
                else if (Is (XNForeground, sts_attr)) {
		    rec->sts_attr.foreground = *(CARD32*)sts_attr->value;
                }
		else if (Is (XNBackground, sts_attr))
		    rec->sts_attr.background = *(CARD32*)sts_attr->value;

		else if (Is (XNBackgroundPixmap, sts_attr))
		    rec->sts_attr.bg_pixmap = *(Pixmap*)sts_attr->value;

                else if (Is (XNFontSet, sts_attr)) {
			int str_length = strlen((char *)sts_attr->value);

			if (rec->sts_attr.base_font != NULL) {
				if (Is (rec->sts_attr.base_font, sts_attr))
					continue;
				XFree(rec->sts_attr.base_font);
			}
			rec->sts_attr.base_font = (char *)malloc(str_length + 1);
			strcpy(rec->sts_attr.base_font, (char *)sts_attr->value);
                } else if (Is (XNLineSpace, sts_attr)) {
			    rec->sts_attr.line_space= *(CARD32*)sts_attr->value;
                }
		else if (Is (XNCursor, sts_attr))
		    rec->sts_attr.cursor = *(Cursor*)sts_attr->value;

		else
		    fprintf(stderr, "Unknown attr: %s c\n", ic_attr->name);
	}

	load_IC(rec);
#if DEBUG && 0
        dbg("exit StoreIC\n");
#endif
}