Crossfire Client, Branches  R11627
GTK-V2 client keybinding functions.

Functions

void bind_key (char *params)
 
static void configure_keys (uint32 keysym)
 
void draw_keybindings (GtkWidget *keylist)
 
void draw_prompt (const char *str)
 
static char * get_key_info (Key_Entry *key, int save_mode)
 
void gtk_command_history (int direction)
 
void gtk_complete_command (void)
 
static void init_default_keybindings (void)
 
static void insert_key (uint32 keysym, int flags, const char *command)
 
void keyfunc (GtkWidget *widget, GdkEventKey *event, GtkWidget *window)
 
void keyrelfunc (GtkWidget *widget, GdkEventKey *event, GtkWidget *window)
 
void keys_init (GtkWidget *window_root)
 
void on_entry_commands_activate (GtkEntry *entry, gpointer user_data)
 
static void parse_key (char key, uint32 keysym)
 
static void parse_key_release (uint32 ks)
 
static void parse_keybind_line (char *buf, int line, int standard)
 
static void save_individual_key (FILE *fp, Key_Entry *key, KeyCode kc)
 
static void save_keys (void)
 
static void show_keys (int allbindings)
 
void unbind_key (const char *params)
 
static void unbind_usage (void)
 
void x_set_echo (void)
 

Detailed Description

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 879 of file keys.c.

References altkeysym, bind_buf, bind_flags, bind_keysym, commandkeysym, completekeysym, Configure_Keys, cpl, draw_info(), firekeysym, Player_Struct::input_state, KEYF_ALT, KEYF_EDIT, KEYF_FIRE, KEYF_META, KEYF_MODIFIERS, KEYF_NORMAL, KEYF_RUN, MAX_BUF, metakeysym, NDI_BLACK, NDI_RED, nextkeysym, prevkeysym, and runkeysym.

+ Here is the call graph for this function:

void draw_keybindings ( GtkWidget *  keylist)

Output the current list of keybindings to the message pane.

Parameters
keylist

Definition at line 1497 of file keys.c.

References buffers, Keys::command, Keys::flags, KEYF_EDIT, KEYF_FIRE, KEYF_MODIFIERS, KEYF_NORMAL, KEYF_RUN, KEYF_STANDARD, KEYHASH, Keys::keysym, MAX_BUF, and Keys::next.

Referenced by configdialog().

+ Here is the caller graph for this function:

void draw_prompt ( const char *  str)

Draws a prompt. Don't deal with popups for the time being.

Parameters
str

Definition at line 1566 of file keys.c.

References draw_info(), entry_commands, and NDI_WHITE.

+ Here is the call graph for this function:

static char* get_key_info ( Key_Entry key,
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 755 of file keys.c.

References bind_buf, Keys::command, Keys::flags, KEYF_ALT, KEYF_EDIT, KEYF_FIRE, KEYF_META, KEYF_MODIFIERS, KEYF_NORMAL, KEYF_RUN, KEYF_STANDARD, Keys::keysym, and MAX_BUF.

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

+ 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 1577 of file keys.c.

References Command_Mode, cpl, cur_history_position, entry_commands, entrytext, 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 1617 of file keys.c.

References complete_command(), entry_commands, and entrytext.

Referenced by keyfunc().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void init_default_keybindings ( void  )
static

Initialize the standard keybindings as specified in the def-keys.h file. This code is common to both x11 and gdk client

Definition at line 379 of file keys.c.

References def_keys, MAX_BUF, and parse_keybind_line().

Referenced by keys_init().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void insert_key ( uint32  keysym,
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 177 of file keys.c.

References Keys::command, Keys::direction, directions, Keys::flags, KEYHASH, Keys::keysym, Keys::next, and strdup_local().

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

+ 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 1351 of file keys.c.

References cancelkeysym, Command_Mode, completekeysym, CONFIG_POPUPS, Configure_Keys, configure_keys(), cpl, csocket, csocket_fd, disconnect(), entry_commands, entrytext, ClientSocket::fd, 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, reset_map(), run_label, Player_Struct::run_on, send_reply(), stop_fire(), stop_run(), text, updatelock, and use_config.

Referenced by create_windows(), and main().

+ 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 1336 of file keys.c.

References entry_commands, entrytext, parse_key_release(), and updatelock.

Referenced by create_windows(), and main().

+ 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 1640 of file keys.c.

References 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(), treeview_look, TRUE, 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_release ( uint32  ks)
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 600 of file keys.c.

References clear_fire(), cpl, fire_label, and Player_Struct::fire_on.

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,
int  standard 
)
static

This function is common to both gdk and x11 client

Parameters
buf
line
standardSet (1) or clear (0) the KEYF_STANDARD flag for the binding.

Definition at line 219 of file keys.c.

References altkeysym, bind_buf, commandkeysym, completekeysym, firekeysym, Keys::flags, insert_key(), KEYF_ALT, KEYF_EDIT, KEYF_FIRE, KEYF_META, KEYF_NORMAL, KEYF_RUN, KEYF_STANDARD, Keys::keysym, LOG(), LOG_WARNING, metakeysym, nextkeysym, prevkeysym, and runkeysym.

Referenced by init_default_keybindings(), and keys_init().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void save_individual_key ( FILE *  fp,
Key_Entry key,
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 1040 of file keys.c.

References get_key_info(), and Keys::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.

Todo:
Fix the per-character keys file support that is under #if 0.

Definition at line 1056 of file keys.c.

References altkeysym, commandkeysym, completekeysym, cpl, draw_info(), firekeysym, KEYHASH, LOG(), LOG_WARNING, make_path_to_file(), MAX_BUF, metakeysym, Player_Struct::name, NDI_BLACK, nextkeysym, prevkeysym, runkeysym, and save_individual_key().

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

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void show_keys ( int  allbindings)
static

Shows all the keybindings.

Parameters
allbindingsAlso shows the standard (default) keybindings.

Definition at line 815 of file keys.c.

References altkeysym, commandkeysym, completekeysym, draw_info(), firekeysym, Keys::flags, get_key_info(), KEYF_STANDARD, KEYHASH, MAX_BUF, metakeysym, NDI_BLACK, Keys::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)
Parameters
params

Definition at line 1256 of file keys.c.

References Keys::command, draw_info(), Keys::flags, get_key_info(), KEYF_STANDARD, KEYHASH, LOG(), LOG_ERROR, MAX_BUF, NDI_BLACK, Keys::next, save_keys(), show_keys(), and unbind_usage().

+ Here is the call graph for this function:

static void unbind_usage ( void  )
static

Show help for the unbind command in the message pane.

Definition at line 1244 of file keys.c.

References draw_info(), 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 1556 of file keys.c.

References cpl, entry_commands, and Player_Struct::no_echo.