void sendkey(void *s,int press_and_release,int toggled){ symbol_x11 *sym=(symbol_x11 *)s; KeyCode modifier; KeySym modifier_sym; assert(dpy); kbio.lastsent=sym->keycode; ungrabkeys(); XFlush(dpy); uk_log("send keysym 0x%x keycode %i %s modifier=%i", (unsigned int)sym->ks, (int)sym->keycode, XKeysymToString(sym->ks), sym->modifier); XTestFakeKeyEvent(dpy,sym->keycode,1,CurrentTime); XFlush(dpy); XTestFakeKeyEvent(dpy,sym->keycode,0,CurrentTime+100); XFlush(dpy); XFlush(dpy); grabkeys(); }
void x11_hotkeys::set_comb(const std::string& val) { if (comb==val) return; unsigned int modifier=0; KeySym key=0; std::string::size_type pos=std::string::npos; do { std::string::size_type prev_pos=pos; pos=val.find('+', pos+1); std::string cur; if (pos!=std::string::npos) cur.assign(val, prev_pos+1, pos-prev_pos-1); else cur.assign(val, prev_pos+1, val.length()-prev_pos-1); if (cur=="Ctrl") { modifier|=ControlMask; } else if (cur=="Alt") { modifier|=Mod1Mask; } else if (cur=="Shift") { modifier|=ShiftMask; } else if (cur=="Win") { modifier|=Mod4Mask; } else { key=XStringToKeysym(cur.c_str()); } } while (pos!=std::string::npos); comb=val; pressed=false; grab_key.key.sym=0; if (key!=0) { ungrabkeys(); grab_key.type=SYM; grab_key.event_type=PRESS; grab_key.key.sym=key; grab_key.modifier=modifier; grab_keys(display, &grab_key, 1); } else def_hot_keys->set_comb(val); }
x11_hotkeys::~x11_hotkeys() { ungrabkeys(); }