/*
 * DWN - Desktop Window Manager
 * retoor <retoor@molodetz.nl>
 * Keyboard shortcut handling
 */

#ifndef DWN_KEYS_H
#define DWN_KEYS_H

#include "dwn.h"
#include <stdbool.h>
#include <X11/keysym.h>

#define MOD_ALT     Mod1Mask
#define MOD_CTRL    ControlMask
#define MOD_SHIFT   ShiftMask
#define MOD_SUPER   Mod4Mask

typedef void (*KeyCallback)(void);

typedef struct {
    unsigned int modifiers;
    KeySym keysym;
    KeyCallback callback;
    const char *description;
} KeyBinding;

void keys_init(void);
void keys_cleanup(void);
void keys_grab_all(void);
void keys_ungrab_all(void);

void keys_bind(unsigned int modifiers, KeySym keysym,
               KeyCallback callback, const char *description);
void keys_unbind(unsigned int modifiers, KeySym keysym);
void keys_clear_all(void);

void keys_handle_press(XKeyEvent *ev);
void keys_handle_release(XKeyEvent *ev);

void keys_setup_defaults(void);

void key_spawn_terminal(void);
void key_spawn_launcher(void);
void key_spawn_file_manager(void);
void key_spawn_browser(void);
void key_close_window(void);
void key_quit_dwn(void);
void key_cycle_layout(void);
void key_toggle_floating(void);
void key_toggle_fullscreen(void);
void key_toggle_maximize(void);
void key_toggle_minimize(void);
void key_focus_next(void);
void key_focus_prev(void);
void key_workspace_next(void);
void key_workspace_prev(void);
void key_workspace_1(void);
void key_workspace_2(void);
void key_workspace_3(void);
void key_workspace_4(void);
void key_workspace_5(void);
void key_workspace_6(void);
void key_workspace_7(void);
void key_workspace_8(void);
void key_workspace_9(void);
void key_move_to_workspace_1(void);
void key_move_to_workspace_2(void);
void key_move_to_workspace_3(void);
void key_move_to_workspace_4(void);
void key_move_to_workspace_5(void);
void key_move_to_workspace_6(void);
void key_move_to_workspace_7(void);
void key_move_to_workspace_8(void);
void key_move_to_workspace_9(void);
void key_increase_master(void);
void key_decrease_master(void);
void key_increase_master_count(void);
void key_decrease_master_count(void);
void key_toggle_ai(void);
void key_ai_command(void);
void key_show_shortcuts(void);
void key_start_tutorial(void);
void key_snap_left(void);
void key_snap_right(void);
void key_snap_up(void);
void key_snap_down(void);
void key_start_demo(void);
void key_show_desktop(void);
void key_move_to_workspace_prev(void);
void key_move_to_workspace_next(void);
void key_kill_all_clients(void);
void key_move_window_left(void);
void key_move_window_right(void);
void key_move_window_up(void);
void key_move_window_down(void);
void key_resize_window_left(void);
void key_resize_window_right(void);
void key_resize_window_up(void);
void key_resize_window_down(void);
void key_set_mark(void);
void key_goto_mark(void);

void tutorial_start(void);
void tutorial_stop(void);
void tutorial_next_step(void);
void tutorial_check_key(unsigned int modifiers, KeySym keysym);
bool tutorial_is_active(void);

#endif
