Implementation of keybindings for WListbox.
Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
Этот коммит содержится в:
родитель
2f62fadabb
Коммит
44d07b20ab
@ -337,6 +337,16 @@ InputWordRightHighlight = ctrl-shift-right
|
|||||||
InputBolHighlight = shift-home
|
InputBolHighlight = shift-home
|
||||||
InputEolHighlight = shift-end
|
InputEolHighlight = shift-end
|
||||||
|
|
||||||
|
[listbox]
|
||||||
|
ListboxMoveUp = up; ctrl-p
|
||||||
|
ListboxMoveDown = down; ctrl-n
|
||||||
|
ListboxMoveHome = home; alt-lt; a1
|
||||||
|
ListboxMoveEnd = end; alt-gt; c1
|
||||||
|
ListboxMovePgUp = pgup; alt-v
|
||||||
|
ListboxMovePgDn = pgdn; ctrl-v
|
||||||
|
ListboxDeleteItem = delete; d
|
||||||
|
ListboxDeleteAll = shift-delete; shift-d
|
||||||
|
|
||||||
[tree]
|
[tree]
|
||||||
TreeHelp = f1
|
TreeHelp = f1
|
||||||
TreeForget = f3
|
TreeForget = f3
|
||||||
|
@ -341,6 +341,16 @@ InputWordRightHighlight =
|
|||||||
InputBolHighlight =
|
InputBolHighlight =
|
||||||
InputEolHighlight =
|
InputEolHighlight =
|
||||||
|
|
||||||
|
[listbox]
|
||||||
|
ListboxMoveUp = up; ctrl-p
|
||||||
|
ListboxMoveDown = down; ctrl-n
|
||||||
|
ListboxMoveHome = home; alt-lt; a1
|
||||||
|
ListboxMoveEnd = end; alt-gt; c1
|
||||||
|
ListboxMovePgUp = pgup; alt-v
|
||||||
|
ListboxMovePgDn = pgdn; ctrl-v
|
||||||
|
ListboxDeleteItem = delete; d
|
||||||
|
ListboxDeleteAll = shift-delete; shift-d
|
||||||
|
|
||||||
[tree]
|
[tree]
|
||||||
TreeHelp = f1
|
TreeHelp = f1
|
||||||
TreeForget = f3
|
TreeForget = f3
|
||||||
|
19
src/cmddef.h
19
src/cmddef.h
@ -219,7 +219,7 @@
|
|||||||
#define CK_StartExtMap1 2021
|
#define CK_StartExtMap1 2021
|
||||||
#define CK_StartExtMap2 2022
|
#define CK_StartExtMap2 2022
|
||||||
|
|
||||||
/* Dialog */
|
/* dialog */
|
||||||
#define CK_DialogOK 3001
|
#define CK_DialogOK 3001
|
||||||
#define CK_DialogCancel 3002
|
#define CK_DialogCancel 3002
|
||||||
#define CK_DialogPrevItem 3003
|
#define CK_DialogPrevItem 3003
|
||||||
@ -228,7 +228,7 @@
|
|||||||
#define CK_DialogSuspend 3006
|
#define CK_DialogSuspend 3006
|
||||||
#define CK_DialogRefresh 3007
|
#define CK_DialogRefresh 3007
|
||||||
|
|
||||||
/* text fields*/
|
/* text fields */
|
||||||
#define CK_InputBol 4001
|
#define CK_InputBol 4001
|
||||||
#define CK_InputEol 4002
|
#define CK_InputEol 4002
|
||||||
#define CK_InputMoveLeft 4003
|
#define CK_InputMoveLeft 4003
|
||||||
@ -254,7 +254,6 @@
|
|||||||
#define CK_InputComplete 4024
|
#define CK_InputComplete 4024
|
||||||
#define CK_InputPaste 4025
|
#define CK_InputPaste 4025
|
||||||
#define CK_InputClearLine 4026
|
#define CK_InputClearLine 4026
|
||||||
|
|
||||||
#define CK_InputLeftHighlight 4027
|
#define CK_InputLeftHighlight 4027
|
||||||
#define CK_InputRightHighlight 4028
|
#define CK_InputRightHighlight 4028
|
||||||
#define CK_InputWordLeftHighlight 4029
|
#define CK_InputWordLeftHighlight 4029
|
||||||
@ -262,7 +261,17 @@
|
|||||||
#define CK_InputBolHighlight 4031
|
#define CK_InputBolHighlight 4031
|
||||||
#define CK_InputEolHighlight 4032
|
#define CK_InputEolHighlight 4032
|
||||||
|
|
||||||
/* Viewer */
|
/* listbox */
|
||||||
|
#define CK_ListboxMoveUp 4500
|
||||||
|
#define CK_ListboxMoveDown 4501
|
||||||
|
#define CK_ListboxMoveHome 4502
|
||||||
|
#define CK_ListboxMoveEnd 4503
|
||||||
|
#define CK_ListboxMovePgUp 4504
|
||||||
|
#define CK_ListboxMovePgDn 4505
|
||||||
|
#define CK_ListboxDeleteItem 4506
|
||||||
|
#define CK_ListboxDeleteAll 4507
|
||||||
|
|
||||||
|
/* viewer */
|
||||||
#define CK_ViewHelp 5001
|
#define CK_ViewHelp 5001
|
||||||
#define CK_ViewToggleWrapMode 5002
|
#define CK_ViewToggleWrapMode 5002
|
||||||
#define CK_ViewToggleHexEditMode 5003
|
#define CK_ViewToggleHexEditMode 5003
|
||||||
@ -291,7 +300,7 @@
|
|||||||
#define CK_ViewToggleRuler 5026
|
#define CK_ViewToggleRuler 5026
|
||||||
#define CK_ViewToggleHexNavMode 5027
|
#define CK_ViewToggleHexNavMode 5027
|
||||||
|
|
||||||
/* Tree */
|
/* tree */
|
||||||
#define CK_TreeHelp 6001
|
#define CK_TreeHelp 6001
|
||||||
#define CK_TreeForget 6003
|
#define CK_TreeForget 6003
|
||||||
#define CK_TreeToggleNav 6004
|
#define CK_TreeToggleNav 6004
|
||||||
|
@ -58,6 +58,7 @@ GArray *viewer_keymap = NULL;
|
|||||||
GArray *viewer_hex_keymap = NULL;
|
GArray *viewer_hex_keymap = NULL;
|
||||||
GArray *panel_keymap = NULL;
|
GArray *panel_keymap = NULL;
|
||||||
GArray *input_keymap = NULL;
|
GArray *input_keymap = NULL;
|
||||||
|
GArray *listbox_keymap = NULL;
|
||||||
GArray *tree_keymap = NULL;
|
GArray *tree_keymap = NULL;
|
||||||
GArray *help_keymap = NULL;
|
GArray *help_keymap = NULL;
|
||||||
GArray *dialog_keymap = NULL;
|
GArray *dialog_keymap = NULL;
|
||||||
@ -72,6 +73,7 @@ const global_keymap_t *main_map;
|
|||||||
const global_keymap_t *main_x_map;
|
const global_keymap_t *main_x_map;
|
||||||
const global_keymap_t *panel_map;
|
const global_keymap_t *panel_map;
|
||||||
const global_keymap_t *input_map;
|
const global_keymap_t *input_map;
|
||||||
|
const global_keymap_t *listbox_map;
|
||||||
const global_keymap_t *tree_map;
|
const global_keymap_t *tree_map;
|
||||||
const global_keymap_t *help_map;
|
const global_keymap_t *help_map;
|
||||||
const global_keymap_t *dialog_map;
|
const global_keymap_t *dialog_map;
|
||||||
@ -483,11 +485,21 @@ static name_keymap_t command_names[] = {
|
|||||||
{ "InputXPaste", CK_InputPaste },
|
{ "InputXPaste", CK_InputPaste },
|
||||||
{ "InputClearLine", CK_InputClearLine },
|
{ "InputClearLine", CK_InputClearLine },
|
||||||
{ "InputLeftHighlight", CK_InputLeftHighlight },
|
{ "InputLeftHighlight", CK_InputLeftHighlight },
|
||||||
{ "InputRightHighlight", CK_InputRightHighlight},
|
{ "InputRightHighlight", CK_InputRightHighlight },
|
||||||
{ "InputWordLeftHighlight", CK_InputWordLeftHighlight},
|
{ "InputWordLeftHighlight", CK_InputWordLeftHighlight },
|
||||||
{ "InputWordRightHighlight", CK_InputWordRightHighlight},
|
{ "InputWordRightHighlight", CK_InputWordRightHighlight },
|
||||||
{ "InputBolHighlight", CK_InputBolHighlight},
|
{ "InputBolHighlight", CK_InputBolHighlight },
|
||||||
{ "InputEolHighlight", CK_InputEolHighlight},
|
{ "InputEolHighlight", CK_InputEolHighlight },
|
||||||
|
|
||||||
|
/* listbox */
|
||||||
|
{ "ListboxMoveUp", CK_ListboxMoveUp },
|
||||||
|
{ "ListboxMoveDown", CK_ListboxMoveDown },
|
||||||
|
{ "ListboxMoveHome", CK_ListboxMoveHome },
|
||||||
|
{ "ListboxMoveEnd", CK_ListboxMoveEnd },
|
||||||
|
{ "ListboxMovePgUp", CK_ListboxMovePgUp },
|
||||||
|
{ "ListboxMovePgDn", CK_ListboxMovePgDn },
|
||||||
|
{ "ListboxDeleteItem", CK_ListboxDeleteItem },
|
||||||
|
{ "ListboxDeleteAll", CK_ListboxDeleteAll },
|
||||||
|
|
||||||
/* common */
|
/* common */
|
||||||
{ "ExtMap1", CK_StartExtMap1 },
|
{ "ExtMap1", CK_StartExtMap1 },
|
||||||
@ -504,6 +516,7 @@ static name_keymap_t command_names[] = {
|
|||||||
{ "DialogSuspend", CK_DialogSuspend },
|
{ "DialogSuspend", CK_DialogSuspend },
|
||||||
{ "DialogRefresh", CK_DialogRefresh },
|
{ "DialogRefresh", CK_DialogRefresh },
|
||||||
|
|
||||||
|
#ifdef USE_DIFF_VIEW
|
||||||
/* diff viewer */
|
/* diff viewer */
|
||||||
{ "DiffDisplaySymbols", CK_DiffDisplaySymbols},
|
{ "DiffDisplaySymbols", CK_DiffDisplaySymbols},
|
||||||
{ "DiffDisplayNumbers", CK_DiffDisplayNumbers},
|
{ "DiffDisplayNumbers", CK_DiffDisplayNumbers},
|
||||||
@ -541,6 +554,7 @@ static name_keymap_t command_names[] = {
|
|||||||
{ "DiffMergeCurrentHunk", CK_DiffMergeCurrentHunk},
|
{ "DiffMergeCurrentHunk", CK_DiffMergeCurrentHunk},
|
||||||
{ "DiffSave", CK_DiffSave},
|
{ "DiffSave", CK_DiffSave},
|
||||||
{ "DiffOptions", CK_DiffOptions},
|
{ "DiffOptions", CK_DiffOptions},
|
||||||
|
#endif
|
||||||
|
|
||||||
{ NULL, CK_Ignore_Key }
|
{ NULL, CK_Ignore_Key }
|
||||||
};
|
};
|
||||||
@ -871,7 +885,7 @@ const global_keymap_t default_help_keymap[] = {
|
|||||||
{ 0, CK_Ignore_Key, "" }
|
{ 0, CK_Ignore_Key, "" }
|
||||||
};
|
};
|
||||||
|
|
||||||
/* screen.c */
|
/* panel */
|
||||||
const global_keymap_t default_panel_keymap[] = {
|
const global_keymap_t default_panel_keymap[] = {
|
||||||
{ ALT ('o'), CK_PanelChdirOtherPanel, "M-o" },
|
{ ALT ('o'), CK_PanelChdirOtherPanel, "M-o" },
|
||||||
{ ALT ('l'), CK_PanelChdirToReadlink, "M-l" },
|
{ ALT ('l'), CK_PanelChdirToReadlink, "M-l" },
|
||||||
@ -1033,6 +1047,30 @@ const global_keymap_t default_input_keymap[] = {
|
|||||||
{ 0, CK_Ignore_Key, "" }
|
{ 0, CK_Ignore_Key, "" }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const global_keymap_t default_listbox_keymap[] = {
|
||||||
|
{ KEY_UP, CK_ListboxMoveUp, "Up" },
|
||||||
|
{ XCTRL ('p'), CK_ListboxMoveUp, "C-p" },
|
||||||
|
{ KEY_DOWN, CK_ListboxMoveDown, "Down" },
|
||||||
|
{ XCTRL ('n'), CK_ListboxMoveDown, "C-n" },
|
||||||
|
{ KEY_HOME, CK_ListboxMoveHome, "Home" },
|
||||||
|
{ ALT ('<'), CK_ListboxMoveHome, "M-<" },
|
||||||
|
{ KEY_A1, CK_ListboxMoveHome, "A1" },
|
||||||
|
{ KEY_END, CK_ListboxMoveEnd, "End" },
|
||||||
|
{ ALT ('>'), CK_ListboxMoveEnd, "M->" },
|
||||||
|
{ KEY_C1, CK_ListboxMoveEnd, "C1" },
|
||||||
|
{ KEY_PPAGE, CK_ListboxMovePgUp, "PgUp" },
|
||||||
|
{ ALT ('v'), CK_ListboxMovePgUp, "M-v" },
|
||||||
|
{ KEY_NPAGE, CK_ListboxMovePgDn, "PgDn" },
|
||||||
|
{ XCTRL ('v'), CK_ListboxMovePgDn, "C-v" },
|
||||||
|
{ KEY_DC, CK_ListboxDeleteItem, "Delete" },
|
||||||
|
{ 'd', CK_ListboxDeleteItem, "d" },
|
||||||
|
{ KEY_M_SHIFT | KEY_DC, CK_ListboxDeleteAll, "S-Delete" },
|
||||||
|
{ 'D', CK_ListboxDeleteAll, "D" },
|
||||||
|
|
||||||
|
{ 0, CK_Ignore_Key, "" }
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef USE_DIFF_VIEW
|
||||||
/* diff viewer */
|
/* diff viewer */
|
||||||
const global_keymap_t default_diff_keymap[] = {
|
const global_keymap_t default_diff_keymap[] = {
|
||||||
|
|
||||||
@ -1081,6 +1119,7 @@ const global_keymap_t default_diff_keymap[] = {
|
|||||||
|
|
||||||
{ 0, CK_Ignore_Key, "" }
|
{ 0, CK_Ignore_Key, "" }
|
||||||
};
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
static int
|
static int
|
||||||
name_keymap_comparator (const void *p1, const void *p2)
|
name_keymap_comparator (const void *p1, const void *p2)
|
||||||
|
@ -43,6 +43,7 @@ extern GArray *main_keymap;
|
|||||||
extern GArray *main_x_keymap;
|
extern GArray *main_x_keymap;
|
||||||
extern GArray *panel_keymap;
|
extern GArray *panel_keymap;
|
||||||
extern GArray *input_keymap;
|
extern GArray *input_keymap;
|
||||||
|
extern GArray *listbox_keymap;
|
||||||
extern GArray *tree_keymap;
|
extern GArray *tree_keymap;
|
||||||
extern GArray *help_keymap;
|
extern GArray *help_keymap;
|
||||||
extern GArray *dialog_keymap;
|
extern GArray *dialog_keymap;
|
||||||
@ -54,6 +55,7 @@ extern const global_keymap_t *main_map;
|
|||||||
extern const global_keymap_t *main_x_map;
|
extern const global_keymap_t *main_x_map;
|
||||||
extern const global_keymap_t *panel_map;
|
extern const global_keymap_t *panel_map;
|
||||||
extern const global_keymap_t *input_map;
|
extern const global_keymap_t *input_map;
|
||||||
|
extern const global_keymap_t *listbox_map;
|
||||||
extern const global_keymap_t *tree_map;
|
extern const global_keymap_t *tree_map;
|
||||||
extern const global_keymap_t *help_map;
|
extern const global_keymap_t *help_map;
|
||||||
extern const global_keymap_t *dialog_map;
|
extern const global_keymap_t *dialog_map;
|
||||||
@ -76,6 +78,7 @@ extern const global_keymap_t default_panel_keymap[];
|
|||||||
|
|
||||||
/* widget.c */
|
/* widget.c */
|
||||||
extern const global_keymap_t default_input_keymap[];
|
extern const global_keymap_t default_input_keymap[];
|
||||||
|
extern const global_keymap_t default_listbox_keymap[];
|
||||||
|
|
||||||
/* main.c */
|
/* main.c */
|
||||||
extern const global_keymap_t default_main_map[];
|
extern const global_keymap_t default_main_map[];
|
||||||
|
@ -1031,6 +1031,9 @@ load_keymap_defs (void)
|
|||||||
input_keymap = g_array_new (TRUE, FALSE, sizeof (global_keymap_t));
|
input_keymap = g_array_new (TRUE, FALSE, sizeof (global_keymap_t));
|
||||||
load_keymap_from_section ("input", input_keymap, mc_global_keymap);
|
load_keymap_from_section ("input", input_keymap, mc_global_keymap);
|
||||||
|
|
||||||
|
listbox_keymap = g_array_new (TRUE, FALSE, sizeof (global_keymap_t));
|
||||||
|
load_keymap_from_section ("listbox", listbox_keymap, mc_global_keymap);
|
||||||
|
|
||||||
tree_keymap = g_array_new (TRUE, FALSE, sizeof (global_keymap_t));
|
tree_keymap = g_array_new (TRUE, FALSE, sizeof (global_keymap_t));
|
||||||
load_keymap_from_section ("tree", tree_keymap, mc_global_keymap);
|
load_keymap_from_section ("tree", tree_keymap, mc_global_keymap);
|
||||||
|
|
||||||
@ -1063,6 +1066,10 @@ load_keymap_defs (void)
|
|||||||
if (input_keymap && input_keymap->len > 0)
|
if (input_keymap && input_keymap->len > 0)
|
||||||
input_map = (global_keymap_t *) input_keymap->data;
|
input_map = (global_keymap_t *) input_keymap->data;
|
||||||
|
|
||||||
|
listbox_map = default_listbox_keymap;
|
||||||
|
if (listbox_keymap && listbox_keymap->len > 0)
|
||||||
|
listbox_map = (global_keymap_t *) listbox_keymap->data;
|
||||||
|
|
||||||
tree_map = default_tree_keymap;
|
tree_map = default_tree_keymap;
|
||||||
if (tree_keymap && tree_keymap->len > 0)
|
if (tree_keymap && tree_keymap->len > 0)
|
||||||
tree_map = (global_keymap_t *) tree_keymap->data;
|
tree_map = (global_keymap_t *) tree_keymap->data;
|
||||||
@ -1104,6 +1111,8 @@ free_keymap_defs (void)
|
|||||||
g_array_free (panel_keymap, TRUE);
|
g_array_free (panel_keymap, TRUE);
|
||||||
if (input_keymap != NULL)
|
if (input_keymap != NULL)
|
||||||
g_array_free (input_keymap, TRUE);
|
g_array_free (input_keymap, TRUE);
|
||||||
|
if (listbox_keymap != NULL)
|
||||||
|
g_array_free (listbox_keymap, TRUE);
|
||||||
if (tree_keymap != NULL)
|
if (tree_keymap != NULL)
|
||||||
g_array_free (tree_keymap, TRUE);
|
g_array_free (tree_keymap, TRUE);
|
||||||
if (help_keymap != NULL)
|
if (help_keymap != NULL)
|
||||||
|
140
src/widget.c
140
src/widget.c
@ -2220,7 +2220,7 @@ handle_char (WInput * in, int key)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (input_map[i].command == 0)
|
if (input_map[i].command == CK_Ignore_Key)
|
||||||
{
|
{
|
||||||
if (key > 255)
|
if (key > 255)
|
||||||
return MSG_NOT_HANDLED;
|
return MSG_NOT_HANDLED;
|
||||||
@ -2649,13 +2649,65 @@ listbox_back (WListbox * l)
|
|||||||
listbox_select_entry (l, l->pos - 1);
|
listbox_select_entry (l, l->pos - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static cb_ret_t
|
||||||
|
listbox_execute_cmd (WListbox * l, unsigned long command)
|
||||||
|
{
|
||||||
|
cb_ret_t ret = MSG_HANDLED;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
switch (command)
|
||||||
|
{
|
||||||
|
case CK_ListboxMoveUp:
|
||||||
|
listbox_back (l);
|
||||||
|
break;
|
||||||
|
case CK_ListboxMoveDown:
|
||||||
|
listbox_fwd (l);
|
||||||
|
break;
|
||||||
|
case CK_ListboxMoveHome:
|
||||||
|
listbox_select_first (l);
|
||||||
|
break;
|
||||||
|
case CK_ListboxMoveEnd:
|
||||||
|
listbox_select_last (l);
|
||||||
|
break;
|
||||||
|
case CK_ListboxMovePgUp:
|
||||||
|
for (i = 0; (i < l->widget.lines - 1) && (l->pos > 0); i++)
|
||||||
|
listbox_back (l);
|
||||||
|
break;
|
||||||
|
case CK_ListboxMovePgDn:
|
||||||
|
for (i = 0; (i < l->widget.lines - 1) && (l->pos < l->count - 1); i++)
|
||||||
|
listbox_fwd (l);
|
||||||
|
break;
|
||||||
|
case CK_ListboxDeleteItem:
|
||||||
|
if (l->deletable)
|
||||||
|
{
|
||||||
|
gboolean is_last = (l->pos + 1 >= l->count);
|
||||||
|
gboolean is_more = (l->top + l->widget.lines >= l->count);
|
||||||
|
|
||||||
|
listbox_remove_current (l);
|
||||||
|
if ((l->top > 0) && (is_last || is_more))
|
||||||
|
l->top--;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case CK_ListboxDeleteAll:
|
||||||
|
if (l->deletable && confirm_history_cleanup
|
||||||
|
/* TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix */
|
||||||
|
&& (query_dialog (Q_ ("DialogTitle|History cleanup"),
|
||||||
|
_("Do you want clean this history?"),
|
||||||
|
D_ERROR, 2, _("&Yes"), _("&No")) == 0))
|
||||||
|
listbox_remove_list (l);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
ret = MSG_NOT_HANDLED;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
/* Return MSG_HANDLED if we want a redraw */
|
/* Return MSG_HANDLED if we want a redraw */
|
||||||
static cb_ret_t
|
static cb_ret_t
|
||||||
listbox_key (WListbox * l, int key)
|
listbox_key (WListbox * l, int key)
|
||||||
{
|
{
|
||||||
int i;
|
unsigned long command;
|
||||||
|
|
||||||
cb_ret_t j = MSG_NOT_HANDLED;
|
|
||||||
|
|
||||||
if (l->list == NULL)
|
if (l->list == NULL)
|
||||||
return MSG_NOT_HANDLED;
|
return MSG_NOT_HANDLED;
|
||||||
@ -2673,79 +2725,10 @@ listbox_key (WListbox * l, int key)
|
|||||||
return MSG_HANDLED;
|
return MSG_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (key)
|
command = lookup_keymap_command (listbox_map, key);
|
||||||
{
|
if (command == CK_Ignore_Key)
|
||||||
case KEY_HOME:
|
return MSG_NOT_HANDLED;
|
||||||
case KEY_A1:
|
return listbox_execute_cmd (l, command);
|
||||||
case ALT ('<'):
|
|
||||||
listbox_select_first (l);
|
|
||||||
return MSG_HANDLED;
|
|
||||||
|
|
||||||
case KEY_END:
|
|
||||||
case KEY_C1:
|
|
||||||
case ALT ('>'):
|
|
||||||
listbox_select_last (l);
|
|
||||||
return MSG_HANDLED;
|
|
||||||
|
|
||||||
case XCTRL ('p'):
|
|
||||||
case KEY_UP:
|
|
||||||
listbox_back (l);
|
|
||||||
return MSG_HANDLED;
|
|
||||||
|
|
||||||
case XCTRL ('n'):
|
|
||||||
case KEY_DOWN:
|
|
||||||
listbox_fwd (l);
|
|
||||||
return MSG_HANDLED;
|
|
||||||
|
|
||||||
case KEY_NPAGE:
|
|
||||||
case XCTRL ('v'):
|
|
||||||
for (i = 0; (i < l->widget.lines - 1) && (l->pos < l->count - 1); i++)
|
|
||||||
{
|
|
||||||
listbox_fwd (l);
|
|
||||||
j = MSG_HANDLED;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case KEY_PPAGE:
|
|
||||||
case ALT ('v'):
|
|
||||||
for (i = 0; (i < l->widget.lines - 1) && (l->pos > 0); i++)
|
|
||||||
{
|
|
||||||
listbox_back (l);
|
|
||||||
j = MSG_HANDLED;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case KEY_DC:
|
|
||||||
case 'd':
|
|
||||||
if (l->deletable)
|
|
||||||
{
|
|
||||||
gboolean is_last = (l->pos + 1 >= l->count);
|
|
||||||
gboolean is_more = (l->top + l->widget.lines >= l->count);
|
|
||||||
|
|
||||||
listbox_remove_current (l);
|
|
||||||
if ((l->top > 0) && (is_last || is_more))
|
|
||||||
l->top--;
|
|
||||||
}
|
|
||||||
return MSG_HANDLED;
|
|
||||||
|
|
||||||
case (KEY_M_SHIFT | KEY_DC):
|
|
||||||
case 'D':
|
|
||||||
if (l->deletable && confirm_history_cleanup
|
|
||||||
/* TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix */
|
|
||||||
&& (query_dialog (Q_ ("DialogTitle|History cleanup"),
|
|
||||||
_("Do you want clean this history?"),
|
|
||||||
D_ERROR, 2, _("&Yes"), _("&No")) == 0))
|
|
||||||
{
|
|
||||||
listbox_remove_list (l);
|
|
||||||
j = MSG_HANDLED;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return j;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
@ -2800,6 +2783,9 @@ listbox_callback (Widget * w, widget_msg_t msg, int parm)
|
|||||||
}
|
}
|
||||||
return ret_code;
|
return ret_code;
|
||||||
|
|
||||||
|
case WIDGET_COMMAND:
|
||||||
|
return listbox_execute_cmd (l, parm);
|
||||||
|
|
||||||
case WIDGET_CURSOR:
|
case WIDGET_CURSOR:
|
||||||
widget_move (&l->widget, l->cursor_y, 0);
|
widget_move (&l->widget, l->cursor_y, 0);
|
||||||
h->callback (h, w, DLG_ACTION, l->pos, NULL);
|
h->callback (h, w, DLG_ACTION, l->pos, NULL);
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user