From 35be190a96f0063d70b7fe1ae6cb85c30ed972a3 Mon Sep 17 00:00:00 2001 From: iovar Date: Thu, 15 Nov 2007 11:29:15 +0000 Subject: Makefile.am: added poll_events.c(removed poll_damage.c) parseargs.c: added parsing for pause and stop shortcut recordmydesktop.c : shortcuts related code changes rmdthreads.c: added a hack to end the poll_events thread, since it now runs regardless of whether full-shots is specified. shortcuts.c: new method RegisterShortcuts. git-svn-id: https://recordmydesktop.svn.sourceforge.net/svnroot/recordmydesktop/trunk@435 f606c939-3180-4ac9-a4b8-4b8779d57d0a --- recordmydesktop/src/shortcuts.c | 153 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 153 insertions(+) (limited to 'recordmydesktop/src/shortcuts.c') diff --git a/recordmydesktop/src/shortcuts.c b/recordmydesktop/src/shortcuts.c index e69de29..f86fa1a 100644 --- a/recordmydesktop/src/shortcuts.c +++ b/recordmydesktop/src/shortcuts.c @@ -0,0 +1,153 @@ +/****************************************************************************** +* recordMyDesktop * +******************************************************************************* +* * +* Copyright (C) 2006,2007 John Varouhakis * +* * +* * +* This program is free software; you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation; either version 2 of 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 of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +* GNU General Public License for more details. * +* * +* You should have received a copy of the GNU General Public License * +* along with this program; if not, write to the Free Software * +* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * +* * +* * +* * +* For further information contact me at johnvarouhakis@gmail.com * +******************************************************************************/ + + +#ifdef HAVE_CONFIG_H + #include +#endif + +#include +#include +#include +#include +#include +#include +#include + +int RegisterShortcut(Display *dpy, + Window root, + const char *shortcut, + HotKey *hotkey){ + + int keycode=0, + i, j ; + KeySym key=0; + unsigned int modifier_mask=0, + numlock_mask=0; + char *keystr=NULL; + XModifierKeymap *modmap; + + if(strstr(shortcut,"Shift")) + modifier_mask = modifier_mask|ShiftMask; + if(strstr(shortcut,"Control")) + modifier_mask = modifier_mask|ControlMask; + if(strstr(shortcut,"Mod1")) + modifier_mask = modifier_mask|Mod1Mask; + if(strstr(shortcut,"Mod2")) + modifier_mask = modifier_mask|Mod2Mask; + if(strstr(shortcut,"Mod3")) + modifier_mask = modifier_mask|Mod3Mask; + if(strstr(shortcut,"Mod4")) + modifier_mask = modifier_mask|Mod4Mask; + if(strstr(shortcut,"Mod5")) + modifier_mask = modifier_mask|Mod5Mask; + + //we register the shortcut on the root + //window, which means on every keypress event, + //so I think it's neccessary to have at least one + //modifier. + if(modifier_mask == 0) + return 1; + if((keystr=rindex(shortcut,'+'))!=NULL){ + keystr++; + if((key=XStringToKeysym(keystr))==NoSymbol) + return 1; + else + keycode=XKeysymToKeycode(dpy,key); + } + else + return 1; + + + /* Key grabbing stuff taken from tilda who took it from yeahconsole + * who took it from evilwm */ + + modmap = XGetModifierMapping(dpy); + for(i=0;i<8;i++){ + for(j=0;jmax_keypermod;j++){ + if(modmap->modifiermap[i*modmap->max_keypermod+j]== + XKeysymToKeycode(dpy,XK_Num_Lock)) + numlock_mask=(1<modnum=0; + hotkey->key=keycode; + + XGrabKey(dpy, + keycode, + modifier_mask, + root, + True, + GrabModeAsync, + GrabModeAsync); + hotkey->mask[0]=modifier_mask; + hotkey->modnum++; + + XGrabKey(dpy, + keycode, + LockMask | modifier_mask, + root, + True, + GrabModeAsync, + GrabModeAsync); + hotkey->mask[1]=LockMask | modifier_mask; + hotkey->modnum++; + + if(numlock_mask){ + + XGrabKey(dpy, + keycode, + numlock_mask | modifier_mask, + root, + True, + GrabModeAsync, + GrabModeAsync); + hotkey->mask[2]=numlock_mask | modifier_mask; + hotkey->modnum++; + + XGrabKey(dpy, + keycode, + numlock_mask | LockMask | modifier_mask, + root, + True, + GrabModeAsync, + GrabModeAsync); + hotkey->mask[3]=numlock_mask | LockMask | modifier_mask; + hotkey->modnum++; + + } + + return 0; + +} + + + + + + -- cgit v1.2.1