2
* Copyright 2010-2011, Sikuli.org
3
* Released under the MIT License.
6
package org.sikuli.script.internal.hotkey;
8
import java.lang.reflect.*;
10
import java.awt.event.*;
12
import java.io.IOException;
14
import org.sikuli.script.Debug;
15
import org.sikuli.script.HotkeyListener;
16
import org.sikuli.script.HotkeyEvent;
18
import jxgrabkey.HotkeyConflictException;
19
import jxgrabkey.JXGrabKey;
21
public class LinuxHotkeyManager extends HotkeyManager {
24
System.loadLibrary("JXGrabKey");
27
Debug.error("Can't load native lib JXGrabKey");
34
HotkeyListener listener;
36
public HotkeyData(int key_, int mod_, HotkeyListener l_){
43
class MyHotkeyHandler implements jxgrabkey.HotkeyListener{
44
public void onHotkey(int id){
45
Debug.log(4, "Hotkey pressed");
46
HotkeyData data = _idCallbackMap.get(id);
47
HotkeyEvent e = new HotkeyEvent(data.key, data.modifiers);
48
data.listener.invokeHotkeyPressed(e);
52
private Map<Integer, HotkeyData> _idCallbackMap = new HashMap<Integer,HotkeyData >();
53
private int _gHotkeyId = 1;
55
public boolean _addHotkey(int keyCode, int modifiers, HotkeyListener listener){
56
JXGrabKey grabKey = JXGrabKey.getInstance();
59
grabKey.addHotkeyListener(new MyHotkeyHandler());
62
_removeHotkey(keyCode, modifiers);
63
int id = _gHotkeyId++;
64
HotkeyData data = new HotkeyData(keyCode, modifiers, listener);
65
_idCallbackMap.put(id, data);
68
//JXGrabKey.setDebugOutput(true);
69
grabKey.registerAwtHotkey(id, modifiers, keyCode);
70
}catch(HotkeyConflictException e){
71
Debug.error("Hot key conflicts");
77
public boolean _removeHotkey(int keyCode, int modifiers){
78
for( Map.Entry<Integer, HotkeyData> entry : _idCallbackMap.entrySet() ){
79
HotkeyData data = entry.getValue();
80
if(data.key == keyCode && data.modifiers == modifiers){
81
JXGrabKey grabKey = JXGrabKey.getInstance();
82
int id = entry.getKey();
83
grabKey.unregisterHotKey(id);
84
_idCallbackMap.remove(id);
92
public void cleanUp(){
93
JXGrabKey grabKey = JXGrabKey.getInstance();
94
for( Map.Entry<Integer, HotkeyData> entry : _idCallbackMap.entrySet() ){
95
int id = entry.getKey();
96
grabKey.unregisterHotKey(id);
99
_idCallbackMap.clear();
100
grabKey.getInstance().cleanUp();