Crossfire Client, Trunk  R20507
Modules | Enumerator | Variables
GTK-V2 client keybinding functions.
Collaboration diagram for GTK-V2 client keybinding functions.:

Modules

 GTK-V2 client keybinding window functions.
 EndOf GtkV2KeyBinding.
 

Variables

char * keybind::command
 Command string bound to a key. More...
 
gint8 keybind::direction
 -1 non-direction key, else >= 0. More...
 
guint8 keybind::flags
 KEYF_* flags set for the record. More...
 
guint32 keybind::keysym
 Key this binding record is for. More...
 
struct keybindkeybind::next
 

key_entry struct

EndOf Bind Log

A keybinding hash record structure.

static struct keybindkeybind_find (guint32 keysym, unsigned int flags, int scope)
 Find a keybinding for keysym. More...
 
static int keybind_insert (guint32 keysym, unsigned int flags, const char *command)
 Updates the keys array with the keybinding that is passed. More...
 
static int keybind_remove (struct keybind *entry)
 
static void keybind_free (struct keybind **entry)
 
static void parse_keybind_line (char *buf, int line, unsigned int scope_flag)
 This function is common to both gdk and x11 client. More...
 
static void init_default_keybindings ()
 Load pre-compiled built-in default keybindings. More...
 
static int parse_keys_file (char *filename, unsigned int scope_flag)
 Opens a file and loads the keybinds contained in it. More...
 
void keybindings_init (const char *character_name)
 Reads in the keybindings, and initializes special values. More...
 
void keys_init (GtkWidget *window_root)
 One-time initialization of windows and signals for the keybindings dialog. More...
 
static void parse_key_release (guint32 keysym)
 The only things we actually care about is the run and fire keys. More...
 
static void parse_key (char key, guint32 keysym)
 Parses a keypress. More...
 
static void get_key_modchars (struct keybind *kb, int save_mode, char *buf)
 
static char * get_key_info (struct keybind *kb, int save_mode)
 
static void show_keys (void)
 Shows all the keybindings. More...
 
void bind_key (char *params)
 Implements the "bind" command when entered as a text command. More...
 
static void save_individual_key (FILE *fp, struct keybind *kb, KeyCode kc)
 A recursive function that saves all the entries for a particular entry. More...
 
static void save_keys (void)
 Saves the keybindings into the user's .crossfire/keys file. More...
 
static void configure_keys (guint32 keysym)
 
static void unbind_usage (void)
 Show help for the unbind command in the message pane. More...
 
void unbind_key (const char *params)
 
void focusoutfunc (GtkWidget *widget, GdkEventKey *event, GtkWidget *window)
 When the main window looses its focus, act as if all keys have been released. More...
 
void keyrelfunc (GtkWidget *widget, GdkEventKey *event, GtkWidget *window)
 GTK callback function used to handle client key release events. More...
 
void keyfunc (GtkWidget *widget, GdkEventKey *event, GtkWidget *window)
 GTK Callback function used to handle client key press events. More...
 
void x_set_echo (void)
 
void draw_prompt (const char *str)
 Draws a prompt. More...
 
void gtk_command_history (int direction)
 Deals with command history. More...
 
void gtk_complete_command (void)
 Executes when the TAB key is pressed while the command input box has focus to give hints on what commands begin with the text already entered to this point. More...
 
void on_entry_commands_activate (GtkEntry *entry, gpointer user_data)
 Used to process keyboard input whenever the player types commands into the command entry box. More...
 
#define EKEYBIND_NOMEM   1
 

Detailed Description

Macro Definition Documentation

#define EKEYBIND_NOMEM   1

Definition at line 174 of file keys.c.

Referenced by keybind_insert().

Function Documentation

void bind_key ( char *  params)

Implements the "bind" command when entered as a text command.

It parses the command options, records the command to bind, then prompts the user to press a key to bind. It also shows help for the bind command if the player types bind with no parameters.

Parameters
paramsIf null, show bind command help in the message pane.

Definition at line 1076 of file keys.c.

References altkeysym, bind_buf, bind_flags, bind_keysym, commandkeysym, completekeysym, Configure_Keys, cpl, draw_ext_info(), firekeysym, Player_Struct::input_state, KEYF_ANY, KEYF_EDIT, KEYF_R_GLOBAL, MAX_BUF, metakeysym, MSG_TYPE_CLIENT, MSG_TYPE_CLIENT_ERROR, MSG_TYPE_CLIENT_NOTICE, MSG_TYPE_CLIENT_QUERY, NDI_BLACK, NDI_RED, nextkeysym, prevkeysym, and runkeysym.

Here is the call graph for this function:

static void configure_keys ( guint32  keysym)
static
void draw_prompt ( const char *  str)

Draws a prompt.

Don't deal with popups for the time being.

Parameters
str

Definition at line 1695 of file keys.c.

References draw_ext_info(), entry_commands, MSG_TYPE_CLIENT, MSG_TYPE_CLIENT_QUERY, and NDI_WHITE.

Referenced by handle_query().

Here is the call graph for this function:

Here is the caller graph for this function:

void focusoutfunc ( GtkWidget *  widget,
GdkEventKey *  event,
GtkWidget *  window 
)

When the main window looses its focus, act as if all keys have been released.

Definition at line 1513 of file keys.c.

References Player_Struct::alt_on, clear_fire(), clear_run(), CONFIG_ECHO, cpl, draw_ext_info(), fire_label, Player_Struct::fire_on, Player_Struct::meta_on, MSG_TYPE_CLIENT, MSG_TYPE_CLIENT_NOTICE, NDI_BLACK, run_label, Player_Struct::run_on, and use_config.

Referenced by init_ui().

Here is the call graph for this function:

Here is the caller graph for this function:

static char* get_key_info ( struct keybind kb,
int  save_mode 
)
static
Parameters
key
save_modeIf true, it means that the format used for saving the information is used, instead of the usual format for displaying the information in a friendly manner.
Returns
A character string describing the key.

Definition at line 975 of file keys.c.

References bind_buf, keybind::command, get_key_modchars(), keybind::keysym, and MAX_BUF.

Referenced by save_individual_key(), show_keys(), and unbind_key().

Here is the call graph for this function:

Here is the caller graph for this function:

static void get_key_modchars ( struct keybind kb,
int  save_mode,
char *  buf 
)
static

Definition at line 937 of file keys.c.

References keybind::flags, KEYF_ANY, KEYF_EDIT, KEYF_MOD_ALT, KEYF_MOD_CTRL, KEYF_MOD_MASK, KEYF_MOD_META, and KEYF_MOD_SHIFT.

Referenced by get_key_info(), and keybind_overwrite_confirm().

Here is the caller graph for this function:

void gtk_command_history ( int  direction)

Deals with command history.

Parameters
directionIf 0, we are going backwards, if 1, we are moving forward.

Definition at line 1705 of file keys.c.

References Command_Mode, cpl, cur_history_position, entry_commands, history, Player_Struct::input_state, MAX_HISTORY, and scroll_history_position.

Referenced by keyfunc().

Here is the caller graph for this function:

void gtk_complete_command ( void  )

Executes when the TAB key is pressed while the command input box has focus to give hints on what commands begin with the text already entered to this point.

It is almost like tab completion, except for the completion. The TAB key is also known by GDK_Tab, completekey, or completekeysym.

Definition at line 1752 of file keys.c.

References complete_command(), and entry_commands.

Referenced by keyfunc().

Here is the call graph for this function:

Here is the caller graph for this function:

static void init_default_keybindings ( )
static

Load pre-compiled built-in default keybindings.

Definition at line 489 of file keys.c.

References KEYF_R_GLOBAL, LOG(), LOG_DEBUG, and parse_keybind_line().

Referenced by keybindings_init().

Here is the call graph for this function:

Here is the caller graph for this function:

static struct keybind* keybind_find ( guint32  keysym,
unsigned int  flags,
int  scope 
)
static

Find a keybinding for keysym.

Make it possible to match a specific keysym-and-key-modifier combo (useful in game play), or to match keysym regardless of modifier.

Parameters
flagsIf flags has got KEYF_ANY set, the keybinding's own flags are ignored and any match is returned. If a keybinding matching keysym which has got KEYF_ANY set is found, the flags param is ignored and the binding is returned. Otherwise, return only bindings with matching modifier flags.
scopeDetermines which scope to search for the binding. 0 meaning char scope, non zero meaning global scope.

Definition at line 192 of file keys.c.

References keybind::flags, KEYF_ANY, KEYF_MOD_MASK, KEYHASH, keybind::keysym, and keybind::next.

Referenced by configure_keys(), keybind_insert(), on_keybinding_button_bind_clicked(), parse_key(), and toggle_keybind_scope().

Here is the caller graph for this function:

static void keybind_free ( struct keybind **  entry)
static

Definition at line 295 of file keys.c.

Referenced by keybind_insert(), on_keybinding_button_remove_clicked(), on_keybinding_button_update_clicked(), toggle_keybind_scope(), and unbind_key().

Here is the caller graph for this function:

static int keybind_insert ( guint32  keysym,
unsigned int  flags,
const char *  command 
)
static

Updates the keys array with the keybinding that is passed.

It allocates memory for the array entry, then uses strdup_local() to allocate memory for the command being bound. This function is common to both gdk and x11 client.

Parameters
keysymA key to bind.
flagsState that the keyboard is in.
commandA command to bind to the key specified in keysym.

Definition at line 221 of file keys.c.

References keybind::command, directions, EKEYBIND_NOMEM, keybind::flags, keybind_find(), keybind_free(), keybind_remove(), KEYF_R_GLOBAL, KEYHASH, keybind::keysym, LOG(), LOG_DEBUG, and keybind::next.

Referenced by configure_keys(), on_keybinding_button_bind_clicked(), on_keybinding_button_update_clicked(), parse_keybind_line(), and toggle_keybind_scope().

Here is the call graph for this function:

Here is the caller graph for this function:

static int keybind_remove ( struct keybind entry)
static
void keybindings_init ( const char *  character_name)

Reads in the keybindings, and initializes special values.

Called from main() as part of the client start up. The function is common to both the x11 and gdk clients.

Definition at line 534 of file keys.c.

References altkeysym, BIG_BUF, cancelkeysym, commandkeysym, completekeysym, config_dir, cpl, csocket, firekeysym, history, init_default_keybindings(), keybind_remove(), KEYF_R_CHAR, KEYF_R_GLOBAL, KEYHASH, MAX_HISTORY, metakeysym, Player_Struct::name, nextkeysym, parse_keys_file(), prevkeysym, runkeysym, and ClientSocket::servername.

Referenced by new_player(), send_create_player_to_server(), and toggle_keybind_scope().

Here is the call graph for this function:

Here is the caller graph for this function:

void keyfunc ( GtkWidget *  widget,
GdkEventKey *  event,
GtkWidget *  window 
)

GTK Callback function used to handle client key press events.

Parameters
widget
eventGDK Key Press Event
window

Definition at line 1556 of file keys.c.

References cancelkeysym, client_disconnect(), Command_Mode, completekeysym, CONFIG_POPUPS, Configure_Keys, configure_keys(), cpl, entry_commands, fire_label, Player_Struct::fire_on, gtk_command_history(), gtk_complete_command(), Player_Struct::input_state, LOG(), LOG_ERROR, Metaserver_Select, nextkeysym, parse_key(), Playing, prevkeysym, Reply_Many, Reply_One, run_label, Player_Struct::run_on, send_reply(), stop_fire(), stop_run(), and use_config.

Referenced by init_ui().

Here is the call graph for this function:

Here is the caller graph for this function:

void keyrelfunc ( GtkWidget *  widget,
GdkEventKey *  event,
GtkWidget *  window 
)

GTK callback function used to handle client key release events.

Parameters
widget
eventGDK Key Release Event
window

Definition at line 1542 of file keys.c.

References entry_commands, and parse_key_release().

Referenced by init_ui().

Here is the call graph for this function:

Here is the caller graph for this function:

void keys_init ( GtkWidget *  window_root)
void on_entry_commands_activate ( GtkEntry *  entry,
gpointer  user_data 
)

Used to process keyboard input whenever the player types commands into the command entry box.

Parameters
entry
user_data

Definition at line 1773 of file keys.c.

References CONFIG_POPUPS, Player_Struct::count, cpl, cur_history_position, extended_command(), history, Player_Struct::input_state, Player_Struct::input_text, MAX_COMMAND_LEN, MAX_HISTORY, Metaserver_Select, Playing, Reply_Many, Reply_One, scroll_history_position, send_reply(), spinbutton_count, treeview_look, and use_config.

Referenced by keys_init().

Here is the call graph for this function:

Here is the caller graph for this function:

static void parse_key ( char  key,
guint32  keysym 
)
static
static void parse_key_release ( guint32  keysym)
static

The only things we actually care about is the run and fire keys.

Other key releases are not important. If it is the release of a run or fire key, we tell the client to stop firing or running. In some cases, it is possible that we actually are not running or firing, and in such cases, the server will just ignore the command.

This code is used by gdk and x11 client, but has a fair number of ifdefs to get the right behavior.

Parameters
ks

Definition at line 775 of file keys.c.

References Player_Struct::alt_on, altkeysym, clear_fire(), clear_run(), CONFIG_ECHO, cpl, draw_ext_info(), fire_label, Player_Struct::fire_on, firekeysym, Player_Struct::meta_on, metakeysym, MSG_TYPE_CLIENT, MSG_TYPE_CLIENT_NOTICE, NDI_BLACK, run_label, Player_Struct::run_on, runkeysym, and use_config.

Referenced by keyrelfunc().

Here is the call graph for this function:

Here is the caller graph for this function:

static void parse_keybind_line ( char *  buf,
int  line,
unsigned int  scope_flag 
)
static

This function is common to both gdk and x11 client.

Parameters
buf
line
scope_flagKEYF_R_GLOBAL or KEYF_R_CHAR determining scope.

Definition at line 309 of file keys.c.

References altkeysym, bind_buf, commandkeysym, completekeysym, firekeysym, keybind::flags, keybind_insert(), KEYF_ANY, KEYF_EDIT, KEYF_MOD_ALT, KEYF_MOD_CTRL, KEYF_MOD_META, KEYF_MOD_SHIFT, keybind::keysym, LOG(), LOG_WARNING, metakeysym, nextkeysym, prevkeysym, and runkeysym.

Referenced by init_default_keybindings(), and parse_keys_file().

Here is the call graph for this function:

Here is the caller graph for this function:

static int parse_keys_file ( char *  filename,
unsigned int  scope_flag 
)
static

Opens a file and loads the keybinds contained in it.

Parameters
filenameName of the file to open.
scope_flagThe scope this bindings should be loaded with. Should be one of KEYF_R_GLOBAL or KEYF_R_CHAR. Every binding in the file will have the same scope.

Definition at line 506 of file keys.c.

References BIG_BUF, KEYF_R_GLOBAL, LOG(), LOG_DEBUG, and parse_keybind_line().

Referenced by keybindings_init().

Here is the call graph for this function:

Here is the caller graph for this function:

static void save_individual_key ( FILE *  fp,
struct keybind kb,
KeyCode  kc 
)
static

A recursive function that saves all the entries for a particular entry.

We save the first element first, and then go through and save the rest of the elements. In this way, the ordering of the key entries in the file remains the same.

Parameters
fpPointer to an open file for writing key bind settings into.
keyPointer of a key hash record to save to the key bind file. During recursion, key takes the value key->next, and then returns when it becomes a NULL pointer.
kc

Definition at line 1244 of file keys.c.

References get_key_info(), and keybind::next.

Referenced by save_keys().

Here is the call graph for this function:

Here is the caller graph for this function:

static void save_keys ( void  )
static

Saves the keybindings into the user's .crossfire/keys file.

The output file is opened, then the special shift/modifier keys are written first. Next, the entire key hash is traversed and the contents of each slot is dumped to the file, and the output file is closed. Success or failure is reported to the message pane.

Definition at line 1258 of file keys.c.

References altkeysym, completekeysym, config_dir, cpl, csocket, draw_ext_info(), firekeysym, KEYHASH, LOG(), LOG_INFO, LOG_WARNING, make_path_to_file(), MAX_BUF, metakeysym, MSG_TYPE_CLIENT, MSG_TYPE_CLIENT_CONFIG, MSG_TYPE_CLIENT_ERROR, Player_Struct::name, NDI_BLACK, nextkeysym, prevkeysym, runkeysym, save_individual_key(), and ClientSocket::servername.

Referenced by configure_keys(), on_keybinding_button_bind_clicked(), on_keybinding_button_remove_clicked(), on_keybinding_button_update_clicked(), toggle_keybind_scope(), and unbind_key().

Here is the call graph for this function:

Here is the caller graph for this function:

static void show_keys ( void  )
static

Shows all the keybindings.

Parameters
allbindingsAlso shows the standard (default) keybindings.

Definition at line 1012 of file keys.c.

References altkeysym, commandkeysym, completekeysym, draw_ext_info(), firekeysym, get_key_info(), KEYHASH, MAX_BUF, metakeysym, MSG_TYPE_CLIENT, MSG_TYPE_CLIENT_NOTICE, NDI_BLACK, keybind::next, nextkeysym, prevkeysym, and runkeysym.

Referenced by unbind_key().

Here is the call graph for this function:

Here is the caller graph for this function:

void unbind_key ( const char *  params)
static void unbind_usage ( void  )
static

Show help for the unbind command in the message pane.

Definition at line 1441 of file keys.c.

References draw_ext_info(), MSG_TYPE_CLIENT, MSG_TYPE_CLIENT_NOTICE, and NDI_BLACK.

Referenced by unbind_key().

Here is the call graph for this function:

Here is the caller graph for this function:

void x_set_echo ( void  )

Definition at line 1686 of file keys.c.

References cpl, entry_commands, and Player_Struct::no_echo.

Referenced by handle_query(), and send_reply().

Here is the caller graph for this function:

Variable Documentation

char* keybind::command
gint8 keybind::direction

-1 non-direction key, else >= 0.

Definition at line 102 of file keys.c.

Referenced by parse_key().

guint8 keybind::flags
guint32 keybind::keysym
struct keybind* keybind::next