summaryrefslogtreecommitdiff
path: root/recordmydesktop/src/shortcuts.c
diff options
context:
space:
mode:
authoriovar <iovar@f606c939-3180-4ac9-a4b8-4b8779d57d0a>2007-11-15 11:29:15 +0000
committeriovar <iovar@f606c939-3180-4ac9-a4b8-4b8779d57d0a>2007-11-15 11:29:15 +0000
commit35be190a96f0063d70b7fe1ae6cb85c30ed972a3 (patch)
tree9b069178235068621e67cb6cf030c9327fb64a6c /recordmydesktop/src/shortcuts.c
parent73b30883a6046a316969c13751238180933876e9 (diff)
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
Diffstat (limited to 'recordmydesktop/src/shortcuts.c')
-rw-r--r--recordmydesktop/src/shortcuts.c153
1 files changed, 153 insertions, 0 deletions
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 <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <X11/Xlib.h>
+#include <X11/Xlibint.h>
+#include <X11/keysym.h>
+#include <rmdtypes.h>
+
+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;j<modmap->max_keypermod;j++){
+ if(modmap->modifiermap[i*modmap->max_keypermod+j]==
+ XKeysymToKeycode(dpy,XK_Num_Lock))
+ numlock_mask=(1<<i);
+ }
+ }
+ XFreeModifiermap(modmap);
+
+ hotkey->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;
+
+}
+
+
+
+
+
+
© All Rights Reserved