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

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

?? keyevent.c

?? Linux環境下手寫輸入程序。手寫輸入
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*cellwriter -- a character recognition input methodCopyright (C) 2007 Michael Levin <risujin@risujin.org>This program is free software; you can redistribute it and/ormodify it under the terms of the GNU General Public Licenseas published by the Free Software Foundation; either version 2of the License, or (at your option) any later version.This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See theGNU General Public License for more details.You should have received a copy of the GNU General Public Licensealong with this program; if not, write to the Free SoftwareFoundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.*/#include "common.h"#include "keys.h"#include <string.h>#include <stdlib.h>#include <X11/X.h>#include <X11/Xlib.h>#include <X11/keysym.h>#include <X11/extensions/XTest.h>#include <gdk/gdkx.h>/* Define this to always overwrite an unused KeyCode to send any KeySym *//* #define ALWAYS_OVERWRITE *//* Define this to print key events without actually generating them *//* #define DEBUG_KEY_EVENTS *//*        X11 KeyCodes*/enum {        KEY_TAKEN = 0,   /* Has KeySyms, cannot be overwritten */        KEY_BAD,         /* Manually marked as unusable */        KEY_USABLE,      /* Has no KeySyms, can be overwritten */        KEY_ALLOCATED,   /* Normally usable, but currently allocated */        /* Values greater than this represent multiple allocations */};static char usable[256], pressed[256];static int key_min, key_max, key_offset, key_codes;static KeySym *keysyms = NULL;static XModifierKeymap *modmap = NULL;/* Bad keycodes: Despite having no KeySym entries, certain KeyCodes will   generate special KeySyms even if their KeySym entries have been overwritten.   For instance, KeyCode 204 attempts to eject the CD-ROM even if there is no   CD-ROM device present! KeyCode 229 will launch GNOME file search even if   there is no search button on the physical keyboard. There is no programatic   way around this but to keep a list of commonly used "bad" KeyCodes. */void bad_keycodes_read(void){        int keycode;        while (!profile_sync_int(&keycode)) {                if (keycode < key_min || keycode > key_max) {                        g_warning("Cannot block bad keycode %d, out of range",                                  keycode);                        continue;                }                usable[keycode] = KEY_BAD;        }}void bad_keycodes_write(void){        int i;        profile_write("bad_keycodes");        for (i = key_min; i < key_max; i++)                if (usable[i] == KEY_BAD)                        profile_write(va(" %d", i));        profile_write("\n");}#ifdef DEBUG_KEY_EVENTSstatic void press_keycode(KeyCode k)/* Just logs the key-down event */{        g_debug("KeyCode %d down", k);}static void release_keycode(KeyCode k)/* Just logs the key-up event */{        g_debug("KeyCode %d up", k);}#elsestatic void press_keycode(KeyCode k)/* Called from various places to generate a key-down event */{        if (k >= key_min && k <= key_max)                XTestFakeKeyEvent(GDK_DISPLAY(), k, True, 1);}static void release_keycode(KeyCode k)/* Called from various places to generate a key-up event */{        if (k >= key_min && k <= key_max)                XTestFakeKeyEvent(GDK_DISPLAY(), k, False, 1);}#endifstatic void type_keycode(KeyCode k)/* Key-down + key-up */{        press_keycode(k);        release_keycode(k);}static void setup_usable(void)/* Find unused slots in the key mapping */{        int i, found;        /* Find all free keys */        memset(usable, 0, sizeof (usable));        for (i = key_min, found = 0; i <= key_max; i++) {                int j;                for (j = 0; j < key_codes &&                     keysyms[(i - key_min) * key_codes + j] == NoSymbol; j++);                if (j < key_codes) {                        usable[i] = KEY_TAKEN;                        continue;                }                usable[i] = KEY_USABLE;                found++;        }        key_offset = 0;        /* If we haven't found a usable key, it's probably because we have           already ran once and used them all up without setting them back */        if (!found) {                usable[key_max - key_min - 1] = KEY_USABLE;                g_warning("Found no usable KeyCodes, restart the X server!");        } else                g_debug("Found %d usable KeyCodes", found);}static void cleanup_usable(void)/* Clear all the usable KeyCodes or we won't have any when we run again! */{        int i, bad, unused = 0, freed;        for (i = 0, freed = 0, bad = 0; i <= key_max; i++)                if (usable[i] >= KEY_USABLE) {                        int j, kc_used = FALSE;                        for (j = 0; j < key_codes; j++) {                                int index = (i - key_min) * key_codes + j;                                if (keysyms[index] != NoSymbol)                                        kc_used = TRUE;                                keysyms[index] = NoSymbol;                        }                        if (kc_used)                                freed++;                        else                                unused++;                } else if (usable[i] == KEY_BAD)                        bad++;        if (freed) {                XChangeKeyboardMapping(GDK_DISPLAY(), key_min, key_codes,                                       keysyms, key_max - key_min + 1);                XFlush(GDK_DISPLAY());        }        g_debug("Free'd %d KeyCode(s), %d unused, %d marked bad",                freed, unused, bad);}static void release_held_keys(void)/* Release all held keys that were not pressed by us */{        int i;        char keys[32];        XQueryKeymap(GDK_DISPLAY(), keys);        for (i = 0; i < 32; i++) {                int j;                for (j = 0; j < 8; j++) {                        KeyCode keycode;                        keycode = i * 8 + j;                        if (keys[i] & (1 << j) && !pressed[keycode]) {                                g_debug("Released held KeyCode %d", keycode);                                release_keycode(keycode);                        }                }        }}/*        Key Events*/int key_overwrites = 0, key_recycles = 0,    key_shifted = 0, key_num_locked = FALSE, key_caps_locked = FALSE,    key_disable_overwrite = FALSE;static int alt_mask, num_lock_mask, meta_mask;static KeyEvent ke_shift, ke_enter, ke_num_lock, ke_caps_lock;static void reset_keyboard(void)/* In order to reliably predict key event behavior we need to be able to   reset the keyboard modifier and pressed state */{        Window root, child;        int root_x, root_y, win_x, win_y;        unsigned int mask;        release_held_keys();        XQueryPointer(GDK_DISPLAY(), GDK_WINDOW_XWINDOW(GDK_ROOT_PARENT()),                      &root, &child, &root_x, &root_y, &win_x, &win_y, &mask);        if (mask & LockMask)                type_keycode(ke_caps_lock.keycode);        if (mask & num_lock_mask)                type_keycode(ke_num_lock.keycode);}static int is_modifier(unsigned int keysym)/* Returns TRUE for KeySyms that are tracked internally */{        switch (keysym) {        case XK_Shift_L:        case XK_Shift_R:        case XK_Num_Lock:        case XK_Caps_Lock:                return TRUE;        default:                return FALSE;        }}static void key_event_allocate(KeyEvent *key_event, unsigned int keysym)/* Either finds the KeyCode associated with the given keysym or overwrites   a usable one to generate it */{        int i, start;        /* Invalid KeySym */        if (!keysym) {                key_event->keycode = -1;                key_event->keysym = 0;                return;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品天干天干在观线| 欧美视频在线观看一区| 日韩中文字幕亚洲一区二区va在线| 亚洲国产精品ⅴa在线观看| 精品88久久久久88久久久| 日韩欧美一区二区在线视频| 制服丝袜亚洲网站| 在线成人免费视频| 欧美一区二区三区四区视频| 制服.丝袜.亚洲.中文.综合| 欧美精品在欧美一区二区少妇| 欧美性大战久久久久久久蜜臀| 欧洲亚洲精品在线| 欧美日韩mp4| 久久精品国产免费| 成人午夜看片网址| 成人午夜电影久久影院| 成人综合激情网| 一本色道亚洲精品aⅴ| 91精品福利视频| 91精品国产综合久久福利| 欧美一级在线观看| 国产性做久久久久久| 久久久久青草大香线综合精品| 国产精品久久久久四虎| 日韩伦理av电影| 香蕉加勒比综合久久 | 日韩avvvv在线播放| 青娱乐精品视频在线| 久久99精品久久久久久| 99久久夜色精品国产网站| 色综合天天综合网天天狠天天| 欧美三级在线播放| 欧洲亚洲国产日韩| 欧美日韩国产综合一区二区| 精品国产一区a| 亚洲欧美日韩国产另类专区 | 欧美日韩中文字幕一区二区| 欧美不卡一区二区三区| 日韩毛片一二三区| 精品一区二区三区在线视频| 欧洲精品一区二区| 国产日韩欧美不卡| 视频一区二区中文字幕| av电影在线观看完整版一区二区| 欧美日韩国产天堂| 最新中文字幕一区二区三区 | 国产亚洲一区二区在线观看| 亚洲综合在线免费观看| 韩国欧美国产1区| 色香色香欲天天天影视综合网| 日韩一区二区三区视频在线| 亚洲人快播电影网| 国产电影精品久久禁18| 欧美一区二区三区公司| 一区二区三区蜜桃网| 国产九色sp调教91| 日韩欧美高清一区| 日韩精品电影在线| 欧美在线观看一二区| 国产精品丝袜在线| 国产麻豆日韩欧美久久| 欧美精品123区| 性感美女久久精品| 欧美三级电影在线观看| 亚洲人成7777| www.亚洲国产| 亚洲国产精品精华液2区45| 激情久久五月天| 精品理论电影在线观看| 日产精品久久久久久久性色| 欧美精品视频www在线观看| 一级女性全黄久久生活片免费| 91在线你懂得| 亚洲欧美自拍偷拍| 91性感美女视频| 亚洲色图都市小说| 日本韩国一区二区三区视频| 亚洲视频精选在线| 成人天堂资源www在线| 久久精品网站免费观看| 国产91露脸合集magnet| 欧美激情一区二区三区四区 | 亚洲一区二区av电影| 欧美少妇一区二区| 一区二区三区在线观看国产| 欧美国产激情二区三区| 精品久久久久一区二区国产| 欧美久久久久久久久久| 在线播放国产精品二区一二区四区| 成人毛片在线观看| 91丨porny丨首页| 日本伊人午夜精品| 成+人+亚洲+综合天堂| 成人免费在线观看入口| 91视频观看免费| 亚洲不卡av一区二区三区| 777午夜精品免费视频| 麻豆精品一区二区综合av| 久久香蕉国产线看观看99| 波波电影院一区二区三区| 国产精品国产自产拍高清av| 欧美性猛交xxxx乱大交退制版| 天天射综合影视| 国产精品视频免费看| 色天天综合色天天久久| 久久av资源网| 日韩理论在线观看| 欧美一区二区三区视频在线观看| 国产一区久久久| 亚洲一区二区影院| 久久久91精品国产一区二区精品| 91女神在线视频| 久久精品二区亚洲w码| 中文字幕一区二区三区色视频 | 久久久亚洲综合| 在线一区二区三区做爰视频网站| 日韩激情视频在线观看| 久久人人97超碰com| 不卡影院免费观看| 免费观看一级特黄欧美大片| 国产欧美精品区一区二区三区| 欧美色图第一页| 成人亚洲一区二区一| 天堂一区二区在线| 亚洲日本一区二区| 久久久精品tv| 日韩亚洲欧美一区二区三区| 色综合亚洲欧洲| 国产精品亚洲视频| 精品无人码麻豆乱码1区2区| 一区二区高清视频在线观看| 国产亚洲1区2区3区| 欧美日韩一区精品| 色综合欧美在线| 不卡一二三区首页| 国产精品资源在线观看| 秋霞电影网一区二区| 日韩中文字幕不卡| 五月婷婷综合网| 亚洲图片有声小说| 一区二区三区高清在线| 国产精品国产馆在线真实露脸| 日韩一级大片在线观看| 日韩欧美在线综合网| 在线播放中文字幕一区| 欧美日韩日本视频| 欧美特级限制片免费在线观看| 99精品热视频| 99久久精品免费看| 色综合天天做天天爱| 91免费视频大全| 欧美亚洲综合色| 欧美亚洲综合色| 欧美日韩国产一区二区三区地区| 99这里只有精品| 91麻豆免费看片| 99国产精品一区| 在线亚洲+欧美+日本专区| 91亚洲资源网| 91黄色激情网站| 3d动漫精品啪啪| 亚洲精品一区二区三区香蕉| 欧美电影免费观看高清完整版在线观看 | 日韩欧美激情四射| 日韩欧美国产一二三区| 日韩免费观看高清完整版| 精品国产第一区二区三区观看体验 | 日韩欧美你懂的| 精品国产免费久久| 国产精品三级在线观看| 中文字幕人成不卡一区| 亚洲最大色网站| 亚洲一级不卡视频| 免费在线观看一区二区三区| 全国精品久久少妇| 成人一区二区三区视频在线观看| 国产成人精品一区二区三区四区| 国产在线视频一区二区| 国产夫妻精品视频| 成人av网站免费| 99精品黄色片免费大全| 欧美精品少妇一区二区三区| 成人免费视频视频| 国产91丝袜在线播放| 成人福利在线看| 成人av影院在线| 亚洲午夜久久久久久久久电影网| 欧美一区二区三区在线看| 91免费观看视频| 欧美mv日韩mv国产| 精品粉嫩aⅴ一区二区三区四区| 精品免费日韩av| 久久网这里都是精品| 日韩理论在线观看| 亚洲成在线观看| 麻豆久久一区二区| 色av成人天堂桃色av| 4hu四虎永久在线影院成人| 国产午夜精品久久久久久久|