fluxbox/src/Keys.hh

120 lines
3.7 KiB
C++
Raw Normal View History

// Keys.hh for Fluxbox - an X11 Window manager
2005-01-24 18:34:57 +00:00
// Copyright (c) 2001 - 2003 Henrik Kinnunen (fluxgen at fluxbox dot org)
2001-12-11 20:47:02 +00:00
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
// and/or sell copies of the Software, and to permit persons to whom the
// Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
2002-02-17 19:00:24 +00:00
#ifndef KEYS_HH
#define KEYS_HH
2001-12-11 20:47:02 +00:00
2003-12-16 23:36:06 +00:00
#include "FbTk/NotCopyable.hh"
#include "FbTk/AutoReloadHelper.hh"
2003-02-28 23:37:41 +00:00
2008-01-02 08:31:18 +00:00
#include <X11/Xlib.h>
2007-12-30 15:32:53 +00:00
#include <string>
#include <map>
2008-02-11 18:17:45 +00:00
class WinClient;
2007-12-30 15:32:53 +00:00
namespace FbTk {
class EventHandler;
}
2003-02-28 23:37:41 +00:00
class Keys:private FbTk::NotCopyable {
2001-12-11 20:47:02 +00:00
public:
2007-02-09 18:13:01 +00:00
// contexts for events
// it's ok if there is overlap; it will be worked out in t_key::find()
// eventHandlers should submit bitwise-or of contexts the event happened in
enum {
GLOBAL = 0x01,
ON_DESKTOP = 0x02,
ON_TOOLBAR = 0x04,
ON_ICONBUTTON = 0x08,
ON_TITLEBAR = 0x10,
ON_WINDOW = 0x20,
ON_TAB = 0x40,
ON_SLIT = 0x80
// and so on...
};
2007-10-13 21:51:37 +00:00
/// constructor
explicit Keys();
2002-12-01 13:42:15 +00:00
/// destructor
~Keys();
2003-12-20 17:37:57 +00:00
/// bind a key action from a string
/// @return false on failure
bool addBinding(const std::string &binding);
2002-12-01 13:42:15 +00:00
/**
do action from XKeyEvent; return false if not bound to anything
2002-12-01 13:42:15 +00:00
*/
2007-12-09 20:47:41 +00:00
bool doAction(int type, unsigned int mods, unsigned int key, int context,
2008-02-11 18:17:45 +00:00
WinClient *current = 0, Time time = 0);
2007-10-13 21:51:37 +00:00
/// register a window so that proper keys/buttons get grabbed on it
void registerWindow(Window win, FbTk::EventHandler &handler, int context);
2007-10-13 21:51:37 +00:00
/// unregister window
void unregisterWindow(Window win);
2003-12-20 17:37:57 +00:00
const std::string& filename() const { return m_filename; }
2002-12-01 13:42:15 +00:00
/**
Reload configuration from filename
@return true on success, else false
*/
void reconfigure();
void keyMode(const std::string& keyMode);
2001-12-11 20:47:02 +00:00
private:
class t_key; // helper class to build a 'keytree'
typedef std::map<std::string, t_key *> keyspace_t;
typedef std::map<Window, int> WindowMap;
typedef std::map<Window, FbTk::EventHandler*> HandlerMap;
2002-12-01 13:42:15 +00:00
void deleteTree();
void grabKey(unsigned int key, unsigned int mod);
void ungrabKeys();
2007-10-13 21:51:37 +00:00
void grabButton(unsigned int button, unsigned int mod, int context);
2007-02-09 18:13:01 +00:00
void ungrabButtons();
2007-10-13 21:51:37 +00:00
void grabWindow(Window win);
2006-04-11 19:22:24 +00:00
/**
Load configuration from file
*/
void reload();
// Load default keybindings for when there are errors loading the keys file
2007-09-30 11:35:20 +00:00
void loadDefaults();
void setKeyMode(t_key *keyMode);
2002-08-04 15:55:13 +00:00
// member variables
std::string m_filename;
FbTk::AutoReloadHelper m_reloader;
t_key *m_keylist;
keyspace_t m_map;
// former doAction static var, we need to access it from deleteTree
t_key *next_key;
2007-10-13 21:51:37 +00:00
WindowMap m_window_map;
HandlerMap m_handler_map;
2001-12-11 20:47:02 +00:00
};
2003-08-19 16:19:28 +00:00
#endif // KEYS_HH