亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? xserverdesktop.cc

?? Informix Table extraction queries have been optimized
?? CC
?? 第 1 頁 / 共 3 頁
字號:
class ModifierState {public:  ModifierState(DeviceIntPtr dev_, int modIndex_)    : dev(dev_), modIndex(modIndex_), nKeys(0), keys(0), pressed(false)  {  }  ~ModifierState() {    for (int i = 0; i < nKeys; i++)      generateXKeyEvent(keys[i], !pressed);    delete [] keys;  }  void press() {    KeyClassPtr keyc = dev->key;    if (!(keyc->state & (1<<modIndex))) {      tempKeyEvent(keyc->modifierKeyMap[modIndex * keyc->maxKeysPerModifier],                   true);      pressed = true;    }  }  void release() {    KeyClassPtr keyc = dev->key;    if (keyc->state & (1<<modIndex)) {      for (int k = 0; k < keyc->maxKeysPerModifier; k++) {        int keycode          = keyc->modifierKeyMap[modIndex * keyc->maxKeysPerModifier + k];        if (keycode && IS_PRESSED(keyc, keycode))          tempKeyEvent(keycode, false);      }    }  }private:  void tempKeyEvent(int keycode, bool down) {    if (keycode) {      if (!keys) keys = new int[dev->key->maxKeysPerModifier];      keys[nKeys++] = keycode;      generateXKeyEvent(keycode, down);    }  }  void generateXKeyEvent(int keycode, bool down) {    xEvent ev;    ev.u.u.type = down ? KeyPress : KeyRelease;    ev.u.u.detail = keycode;    ev.u.keyButtonPointer.time = GetTimeInMillis();    (*dev->c_public.processInputProc)(&ev, dev, 1);    vlog.debug("fake keycode %d %s", keycode, down ? "down" : "up");  }  DeviceIntPtr dev;  int modIndex;  int nKeys;  int* keys;  bool pressed;};// altKeysym is a table of alternative keysyms which have the same meaning.struct altKeysym_t {  KeySym a, b;};altKeysym_t altKeysym[] = {  { XK_Shift_L,        XK_Shift_R },  { XK_Control_L,      XK_Control_R },  { XK_Meta_L,         XK_Meta_R },  { XK_Alt_L,          XK_Alt_R },  { XK_Super_L,        XK_Super_R },  { XK_Hyper_L,        XK_Hyper_R },  { XK_KP_Space,       XK_space },  { XK_KP_Tab,         XK_Tab },  { XK_KP_Enter,       XK_Return },  { XK_KP_F1,          XK_F1 },  { XK_KP_F2,          XK_F2 },  { XK_KP_F3,          XK_F3 },  { XK_KP_F4,          XK_F4 },  { XK_KP_Home,        XK_Home },  { XK_KP_Left,        XK_Left },  { XK_KP_Up,          XK_Up },  { XK_KP_Right,       XK_Right },  { XK_KP_Down,        XK_Down },  { XK_KP_Page_Up,     XK_Page_Up },  { XK_KP_Page_Down,   XK_Page_Down },  { XK_KP_End,         XK_End },  { XK_KP_Begin,       XK_Begin },  { XK_KP_Insert,      XK_Insert },  { XK_KP_Delete,      XK_Delete },  { XK_KP_Equal,       XK_equal },  { XK_KP_Multiply,    XK_asterisk },  { XK_KP_Add,         XK_plus },  { XK_KP_Separator,   XK_comma },  { XK_KP_Subtract,    XK_minus },  { XK_KP_Decimal,     XK_period },  { XK_KP_Divide,      XK_slash },  { XK_KP_0,           XK_0 },  { XK_KP_1,           XK_1 },  { XK_KP_2,           XK_2 },  { XK_KP_3,           XK_3 },  { XK_KP_4,           XK_4 },  { XK_KP_5,           XK_5 },  { XK_KP_6,           XK_6 },  { XK_KP_7,           XK_7 },  { XK_KP_8,           XK_8 },  { XK_KP_9,           XK_9 },};// keyEvent() - work out the best keycode corresponding to the keysym sent by// the viewer.  This is non-trivial because we can't assume much about the// local keyboard layout.  We must also find out which column of the keyboard// mapping the keysym is in, and alter the shift state appropriately.  Column 0// means both shift and "mode_switch" (AltGr) must be released, column 1 means// shift must be pressed and mode_switch released, column 2 means shift must be// released and mode_switch pressed, and column 3 means both shift and// mode_switch must be pressed.void XserverDesktop::keyEvent(rdr::U32 keysym, bool down){  if (keysym == XK_Caps_Lock) {    vlog.debug("Ignoring caps lock");    return;  }  DeviceIntPtr dev = (DeviceIntPtr)LookupKeyboardDevice();  KeyClassPtr keyc = dev->key;  KeySymsPtr keymap = &keyc->curKeySyms;  // find which modifier Mode_switch is on.  int modeSwitchMapIndex = 0;  for (int i = 3; i < 8; i++) {    for (int k = 0; k < keyc->maxKeysPerModifier; k++) {      int keycode = keyc->modifierKeyMap[i * keyc->maxKeysPerModifier + k];      for (int j = 0; j < keymap->mapWidth; j++) {        if (keycode != 0 &&            keymap->map[(keycode - keymap->minKeyCode)                        * keymap->mapWidth + j] == XK_Mode_switch)        {          modeSwitchMapIndex = i;          break;        }      }    }  }  int col = 0;  if (keyc->state & (1<<ShiftMapIndex)) col |= 1;  if (modeSwitchMapIndex && (keyc->state & (1<<modeSwitchMapIndex))) col |= 2;  int kc = KeysymToKeycode(keymap, keysym, &col);  // Sort out the "shifted Tab" mess.  If we are sent a shifted Tab, generate a  // local shifted Tab regardless of what the "shifted Tab" keysym is on the  // local keyboard (it might be Tab, ISO_Left_Tab or HP's private BackTab  // keysym, and quite possibly some others too).  We never get ISO_Left_Tab  // here because it's already been translated in VNCSConnectionST.  if (keysym == XK_Tab && (keyc->state & (1<<ShiftMapIndex)))    col |= 1;  if (kc == 0) {    // Not a direct match in the local keyboard mapping.  Check for alternative    // keysyms with the same meaning.    for (int i = 0; i < sizeof(altKeysym) / sizeof(altKeysym_t); i++) {      if (keysym == altKeysym[i].a)        kc = KeysymToKeycode(keymap, altKeysym[i].b, &col);      else if (keysym == altKeysym[i].b)        kc = KeysymToKeycode(keymap, altKeysym[i].a, &col);      if (kc) break;    }  }  if (kc == 0) {    // Last resort - dynamically add a new key to the keyboard mapping.    for (kc = keymap->maxKeyCode; kc >= keymap->minKeyCode; kc--) {      if (!keymap->map[(kc - keymap->minKeyCode) * keymap->mapWidth]) {        keymap->map[(kc - keymap->minKeyCode) * keymap->mapWidth] = keysym;        col = 0;        SendMappingNotify(MappingKeyboard, kc, 1, serverClient);        vlog.info("Added unknown keysym 0x%x to keycode %d",keysym,kc);        break;      }    }    if (kc < keymap->minKeyCode) {      vlog.info("Keyboard mapping full - ignoring unknown keysym 0x%x",keysym);      return;    }  }  // See if it's a modifier key.  If so, then don't do any auto-repeat, because  // the X server will translate each press into a release followed by a press.  for (int i = 0; i < 8; i++) {    for (int k = 0; k < keyc->maxKeysPerModifier; k++) {      if (kc == keyc->modifierKeyMap[i * keyc->maxKeysPerModifier + k] &&          IS_PRESSED(keyc,kc) && down)        return;    }  }  ModifierState shift(dev, ShiftMapIndex);  ModifierState modeSwitch(dev, modeSwitchMapIndex);  if (down) {    if (col & 1)      shift.press();    else      shift.release();    if (modeSwitchMapIndex) {      if (col & 2)        modeSwitch.press();      else        modeSwitch.release();    }  }  vlog.debug("keycode %d %s", kc, down ? "down" : "up");  xEvent ev;  ev.u.u.type = down ? KeyPress : KeyRelease;  ev.u.u.detail = kc;  ev.u.keyButtonPointer.time = GetTimeInMillis();  (*dev->c_public.processInputProc)(&ev, dev, 1);}void XConvertCase(KeySym sym, KeySym *lower, KeySym *upper){    *lower = sym;    *upper = sym;    switch(sym >> 8) {    case 0: /* Latin 1 */	if ((sym >= XK_A) && (sym <= XK_Z))	    *lower += (XK_a - XK_A);	else if ((sym >= XK_a) && (sym <= XK_z))	    *upper -= (XK_a - XK_A);	else if ((sym >= XK_Agrave) && (sym <= XK_Odiaeresis))	    *lower += (XK_agrave - XK_Agrave);	else if ((sym >= XK_agrave) && (sym <= XK_odiaeresis))	    *upper -= (XK_agrave - XK_Agrave);	else if ((sym >= XK_Ooblique) && (sym <= XK_Thorn))	    *lower += (XK_oslash - XK_Ooblique);	else if ((sym >= XK_oslash) && (sym <= XK_thorn))	    *upper -= (XK_oslash - XK_Ooblique);	break;    case 1: /* Latin 2 */	/* Assume the KeySym is a legal value (ignore discontinuities) */	if (sym == XK_Aogonek)	    *lower = XK_aogonek;	else if (sym >= XK_Lstroke && sym <= XK_Sacute)	    *lower += (XK_lstroke - XK_Lstroke);	else if (sym >= XK_Scaron && sym <= XK_Zacute)	    *lower += (XK_scaron - XK_Scaron);	else if (sym >= XK_Zcaron && sym <= XK_Zabovedot)	    *lower += (XK_zcaron - XK_Zcaron);	else if (sym == XK_aogonek)	    *upper = XK_Aogonek;	else if (sym >= XK_lstroke && sym <= XK_sacute)	    *upper -= (XK_lstroke - XK_Lstroke);	else if (sym >= XK_scaron && sym <= XK_zacute)	    *upper -= (XK_scaron - XK_Scaron);	else if (sym >= XK_zcaron && sym <= XK_zabovedot)	    *upper -= (XK_zcaron - XK_Zcaron);	else if (sym >= XK_Racute && sym <= XK_Tcedilla)	    *lower += (XK_racute - XK_Racute);	else if (sym >= XK_racute && sym <= XK_tcedilla)	    *upper -= (XK_racute - XK_Racute);	break;    case 2: /* Latin 3 */	/* Assume the KeySym is a legal value (ignore discontinuities) */	if (sym >= XK_Hstroke && sym <= XK_Hcircumflex)	    *lower += (XK_hstroke - XK_Hstroke);	else if (sym >= XK_Gbreve && sym <= XK_Jcircumflex)	    *lower += (XK_gbreve - XK_Gbreve);	else if (sym >= XK_hstroke && sym <= XK_hcircumflex)	    *upper -= (XK_hstroke - XK_Hstroke);	else if (sym >= XK_gbreve && sym <= XK_jcircumflex)	    *upper -= (XK_gbreve - XK_Gbreve);	else if (sym >= XK_Cabovedot && sym <= XK_Scircumflex)	    *lower += (XK_cabovedot - XK_Cabovedot);	else if (sym >= XK_cabovedot && sym <= XK_scircumflex)	    *upper -= (XK_cabovedot - XK_Cabovedot);	break;    case 3: /* Latin 4 */	/* Assume the KeySym is a legal value (ignore discontinuities) */	if (sym >= XK_Rcedilla && sym <= XK_Tslash)	    *lower += (XK_rcedilla - XK_Rcedilla);	else if (sym >= XK_rcedilla && sym <= XK_tslash)	    *upper -= (XK_rcedilla - XK_Rcedilla);	else if (sym == XK_ENG)	    *lower = XK_eng;	else if (sym == XK_eng)	    *upper = XK_ENG;	else if (sym >= XK_Amacron && sym <= XK_Umacron)	    *lower += (XK_amacron - XK_Amacron);	else if (sym >= XK_amacron && sym <= XK_umacron)	    *upper -= (XK_amacron - XK_Amacron);	break;    case 6: /* Cyrillic */	/* Assume the KeySym is a legal value (ignore discontinuities) */	if (sym >= XK_Serbian_DJE && sym <= XK_Serbian_DZE)	    *lower -= (XK_Serbian_DJE - XK_Serbian_dje);	else if (sym >= XK_Serbian_dje && sym <= XK_Serbian_dze)	    *upper += (XK_Serbian_DJE - XK_Serbian_dje);	else if (sym >= XK_Cyrillic_YU && sym <= XK_Cyrillic_HARDSIGN)	    *lower -= (XK_Cyrillic_YU - XK_Cyrillic_yu);	else if (sym >= XK_Cyrillic_yu && sym <= XK_Cyrillic_hardsign)	    *upper += (XK_Cyrillic_YU - XK_Cyrillic_yu);        break;    case 7: /* Greek */	/* Assume the KeySym is a legal value (ignore discontinuities) */	if (sym >= XK_Greek_ALPHAaccent && sym <= XK_Greek_OMEGAaccent)	    *lower += (XK_Greek_alphaaccent - XK_Greek_ALPHAaccent);	else if (sym >= XK_Greek_alphaaccent && sym <= XK_Greek_omegaaccent &&		 sym != XK_Greek_iotaaccentdieresis &&		 sym != XK_Greek_upsilonaccentdieresis)	    *upper -= (XK_Greek_alphaaccent - XK_Greek_ALPHAaccent);	else if (sym >= XK_Greek_ALPHA && sym <= XK_Greek_OMEGA)	    *lower += (XK_Greek_alpha - XK_Greek_ALPHA);	else if (sym >= XK_Greek_alpha && sym <= XK_Greek_omega &&		 sym != XK_Greek_finalsmallsigma)	    *upper -= (XK_Greek_alpha - XK_Greek_ALPHA);        break;    }}static KeySym KeyCodetoKeySym(KeySymsPtr keymap, int keycode, int col){  register int per = keymap->mapWidth;  register KeySym *syms;  KeySym lsym, usym;  if ((col < 0) || ((col >= per) && (col > 3)) ||      (keycode < keymap->minKeyCode) || (keycode > keymap->maxKeyCode))    return NoSymbol;  syms = &keymap->map[(keycode - keymap->minKeyCode) * per];  if (col < 4) {    if (col > 1) {      while ((per > 2) && (syms[per - 1] == NoSymbol))        per--;      if (per < 3)        col -= 2;    }    if ((per <= (col|1)) || (syms[col|1] == NoSymbol)) {      XConvertCase(syms[col&~1], &lsym, &usym);      if (!(col & 1))        return lsym;      // I'm commenting out this logic because it's incorrect even though it      // was copied from the Xlib sources.  The X protocol book quite clearly      // states that where a group consists of element 1 being a non-alphabetic      // keysym and element 2 being NoSymbol that you treat the second element      // as being the same as the first.  This also tallies with the behaviour      // produced by the installed Xlib on my linux box (I believe this is      // because it uses some XKB code rather than the original Xlib code -      // compare XKBBind.c with KeyBind.c in lib/X11).      // else if (usym == lsym)      //   return NoSymbol;      else        return usym;    }  }  return syms[col];}// KeysymToKeycode() - find the keycode and column corresponding to the given// keysym.  The value of col passed in should be the column determined from the// current shift state.  If the keysym can be found in that column we prefer// that to finding it in a different column (which would require fake events to// alter the shift state).static KeyCode KeysymToKeycode(KeySymsPtr keymap, KeySym ks, int* col){  register int i, j;  j = *col;  for (i = keymap->minKeyCode; i <= keymap->maxKeyCode; i++) {    if (KeyCodetoKeySym(keymap, i, j) == ks)      return i;  }  for (j = 0; j < keymap->mapWidth; j++) {    for (i = keymap->minKeyCode; i <= keymap->maxKeyCode; i++) {      if (KeyCodetoKeySym(keymap, i, j) == ks) {        *col = j;        return i;      }    }  }  return 0;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人午夜精品一区二区三区| 懂色av中文字幕一区二区三区| 在线免费观看日韩欧美| 久久精品国产第一区二区三区| 国产人久久人人人人爽| 色欲综合视频天天天| 国模一区二区三区白浆| 亚洲成人免费看| 国产精品视频第一区| 56国语精品自产拍在线观看| 成人永久免费视频| 蜜臀av性久久久久蜜臀aⅴ| 国产精品灌醉下药二区| 精品成人私密视频| 91精品国产乱码久久蜜臀| 色综合视频在线观看| 国产一区二区不卡在线| 日韩国产在线观看一区| 亚洲三级在线播放| 中文av一区二区| 久久久噜噜噜久久中文字幕色伊伊| 欧美日韩情趣电影| 一本大道久久精品懂色aⅴ| 国产成人在线免费观看| 久久精品国产色蜜蜜麻豆| 亚洲6080在线| 一区二区三区免费观看| 国产精品视频你懂的| 精品国产1区二区| 欧美一区二区视频免费观看| 91久久精品午夜一区二区| 91视频免费播放| av午夜精品一区二区三区| 成人综合婷婷国产精品久久蜜臀| 另类小说综合欧美亚洲| 蜜桃一区二区三区在线观看| 三级欧美在线一区| 亚洲成人av资源| 天堂午夜影视日韩欧美一区二区| 亚洲午夜精品一区二区三区他趣| 亚洲精品久久久蜜桃| 中文字幕国产一区| 国产精品成人免费| 国产偷国产偷精品高清尤物| 97久久超碰精品国产| 日韩av电影一区| 亚洲男人都懂的| 欧美精品一区在线观看| 成人av网在线| 国产自产2019最新不卡| 亚洲一区中文在线| 欧美国产一区视频在线观看| 日韩欧美高清在线| 日本精品一级二级| 99久久er热在这里只有精品66| 免费高清在线一区| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美激情艳妇裸体舞| 26uuu欧美| 在线观看91视频| 欧美写真视频网站| 另类小说视频一区二区| 91精品一区二区三区久久久久久| www.亚洲精品| 欧美综合亚洲图片综合区| 亚洲国产精品高清| 风间由美性色一区二区三区| 日本一区二区高清| 国产精品国产精品国产专区不蜜 | 欧美性大战久久久久久久蜜臀| 在线观看日产精品| 欧美福利视频导航| 日韩精品在线网站| 国产日韩欧美高清| 色综合久久天天综合网| 成人av集中营| 成人一区二区视频| 精品视频一区三区九区| 在线播放/欧美激情| 日韩一区二区三区视频在线观看| 7777精品伊人久久久大香线蕉超级流畅| 色吧成人激情小说| 欧美日韩一级二级三级| 日韩欧美国产精品一区| 久久蜜桃香蕉精品一区二区三区| 久久影院午夜片一区| 亚洲视频中文字幕| 美女mm1313爽爽久久久蜜臀| 国产中文字幕精品| 色哟哟精品一区| 精品嫩草影院久久| 亚洲乱码一区二区三区在线观看| 亚洲图片欧美综合| 国产成人精品免费视频网站| 欧美系列在线观看| 国产三级精品三级在线专区| 亚洲高清免费观看高清完整版在线观看| 首页综合国产亚洲丝袜| 波多野结衣中文字幕一区 | 日韩一卡二卡三卡四卡| 久久精品日产第一区二区三区高清版 | 色综合久久综合网| 日韩精品一二三| www.亚洲在线| 欧美日韩大陆在线| 久久久久久99精品| 天天综合色天天| 色综合久久综合网欧美综合网| 精品久久久久久久久久久久久久久 | 中文字幕一区在线观看视频| 狠狠色狠狠色综合系列| 欧美精品三级在线观看| 亚洲美女视频一区| 大胆亚洲人体视频| 精品日韩一区二区三区免费视频| 香蕉久久夜色精品国产使用方法| 91污片在线观看| 综合婷婷亚洲小说| 不卡视频一二三四| 一区精品在线播放| av亚洲精华国产精华精华| 国产精品情趣视频| 99久久国产综合精品女不卡| 国产精品乱码妇女bbbb| 粉嫩aⅴ一区二区三区四区五区| 国产午夜亚洲精品午夜鲁丝片| 久久电影网站中文字幕| 精品国产乱码久久久久久久| 蜜臀99久久精品久久久久久软件| 日韩精品中文字幕在线不卡尤物| 日韩中文字幕区一区有砖一区 | 一区二区中文字幕在线| 国产精品456露脸| 亚洲国产一区在线观看| 6080日韩午夜伦伦午夜伦| 成人免费高清视频| 中文字幕免费在线观看视频一区| 日韩国产欧美三级| 欧美一级日韩不卡播放免费| 日韩在线卡一卡二| 亚洲午夜视频在线观看| 日本不卡一区二区| 精品一区二区国语对白| 久久国内精品自在自线400部| 欧美精品在线一区二区| 首页综合国产亚洲丝袜| 91精品国产综合久久蜜臀| 午夜久久久影院| 欧美欧美午夜aⅴ在线观看| 午夜视黄欧洲亚洲| 欧美一卡二卡在线| 另类小说综合欧美亚洲| 久久色视频免费观看| 国产精品毛片a∨一区二区三区| 色偷偷一区二区三区| 国产尤物一区二区在线| 亚洲福利视频一区二区| 中文字幕一区二区三区色视频| 在线91免费看| 91视频.com| 国产白丝网站精品污在线入口| 亚洲风情在线资源站| 国产精品久久久久久久久晋中 | 亚洲色图视频网站| 精品少妇一区二区三区日产乱码 | 自拍偷拍亚洲综合| 日韩欧美一级片| 91精品国产综合久久精品app | 91精品综合久久久久久| 国产精品一区二区视频| 日本美女一区二区三区视频| 洋洋成人永久网站入口| 中文字幕日韩av资源站| 亚洲美女一区二区三区| 国产精品私人自拍| 一区二区欧美国产| 青草国产精品久久久久久| 蜜桃精品在线观看| 国产成人精品三级| 蜜桃久久av一区| 亚洲另类春色国产| 亚洲色图欧美激情| 成人欧美一区二区三区白人| 午夜精品影院在线观看| 91麻豆精品91久久久久久清纯| 日韩av高清在线观看| 国产午夜亚洲精品羞羞网站| 99精品在线观看视频| 婷婷久久综合九色综合伊人色| 精品久久久影院| 99久久精品国产毛片| 喷白浆一区二区| 亚洲欧美中日韩| 精品国产欧美一区二区| 91麻豆精东视频| 国产综合久久久久久鬼色 | 亚洲美女偷拍久久| 精品国产一区a| 欧美三日本三级三级在线播放| 亚洲图片欧美色图|