mirror of
https://github.com/MidnightCommander/mc
synced 2025-01-03 18:14:25 +03:00
Ticket #3569: various fixups in WListbox engine.
Ticket #3562: Listbox should fire MSG_ACTION on mouse clicks too. Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
This commit is contained in:
parent
b4c550e23e
commit
aa693fb0c3
@ -386,6 +386,39 @@ listbox_append_item (WListbox * l, WLEntry * e, listbox_append_t pos)
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
|
||||
/* Call this whenever the user changes the selected item. */
|
||||
static void
|
||||
listbox_on_change (WListbox * l)
|
||||
{
|
||||
listbox_draw (l, TRUE);
|
||||
send_message (WIDGET (l)->owner, l, MSG_ACTION, l->pos, NULL);
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
|
||||
static void
|
||||
listbox_run_hotkey (WListbox * l, int pos)
|
||||
{
|
||||
WDialog *h = WIDGET (l)->owner;
|
||||
int action;
|
||||
|
||||
listbox_select_entry (l, pos);
|
||||
listbox_on_change (l);
|
||||
|
||||
if (l->callback != NULL)
|
||||
action = l->callback (l);
|
||||
else
|
||||
action = LISTBOX_DONE;
|
||||
|
||||
if (action == LISTBOX_DONE)
|
||||
{
|
||||
h->ret_value = B_ENTER;
|
||||
dlg_stop (h);
|
||||
}
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
|
||||
static inline void
|
||||
listbox_destroy (WListbox * l)
|
||||
{
|
||||
@ -398,7 +431,6 @@ static cb_ret_t
|
||||
listbox_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
|
||||
{
|
||||
WListbox *l = LISTBOX (w);
|
||||
WDialog *h = w->owner;
|
||||
cb_ret_t ret_code;
|
||||
|
||||
switch (msg)
|
||||
@ -408,25 +440,13 @@ listbox_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void
|
||||
|
||||
case MSG_HOTKEY:
|
||||
{
|
||||
int pos, action;
|
||||
int pos;
|
||||
|
||||
pos = listbox_check_hotkey (l, parm);
|
||||
if (pos < 0)
|
||||
return MSG_NOT_HANDLED;
|
||||
|
||||
listbox_select_entry (l, pos);
|
||||
send_message (h, w, MSG_ACTION, l->pos, NULL);
|
||||
|
||||
if (l->callback != NULL)
|
||||
action = l->callback (l);
|
||||
else
|
||||
action = LISTBOX_DONE;
|
||||
|
||||
if (action == LISTBOX_DONE)
|
||||
{
|
||||
h->ret_value = B_ENTER;
|
||||
dlg_stop (h);
|
||||
}
|
||||
listbox_run_hotkey (l, pos);
|
||||
|
||||
return MSG_HANDLED;
|
||||
}
|
||||
@ -434,10 +454,7 @@ listbox_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void
|
||||
case MSG_KEY:
|
||||
ret_code = listbox_key (l, parm);
|
||||
if (ret_code != MSG_NOT_HANDLED)
|
||||
{
|
||||
listbox_draw (l, TRUE);
|
||||
send_message (h, w, MSG_ACTION, l->pos, NULL);
|
||||
}
|
||||
listbox_on_change (l);
|
||||
return ret_code;
|
||||
|
||||
case MSG_ACTION:
|
||||
@ -445,7 +462,6 @@ listbox_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void
|
||||
|
||||
case MSG_CURSOR:
|
||||
widget_move (l, l->cursor_y, 0);
|
||||
send_message (h, w, MSG_ACTION, l->pos, NULL);
|
||||
return MSG_HANDLED;
|
||||
|
||||
case MSG_FOCUS:
|
||||
@ -507,7 +523,7 @@ listbox_event (Gpm_Event * event, void *data)
|
||||
else
|
||||
listbox_select_entry (l, listbox_y_pos (l, local.y - 1));
|
||||
|
||||
listbox_draw (l, TRUE);
|
||||
listbox_on_change (l);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -515,22 +531,10 @@ listbox_event (Gpm_Event * event, void *data)
|
||||
if ((event->type & (GPM_DOUBLE | GPM_UP)) == (GPM_UP | GPM_DOUBLE))
|
||||
{
|
||||
Gpm_Event local;
|
||||
int action;
|
||||
|
||||
local = mouse_get_local (event, w);
|
||||
dlg_select_widget (l);
|
||||
listbox_select_entry (l, listbox_y_pos (l, local.y - 1));
|
||||
|
||||
if (l->callback != NULL)
|
||||
action = l->callback (l);
|
||||
else
|
||||
action = LISTBOX_DONE;
|
||||
|
||||
if (action == LISTBOX_DONE)
|
||||
{
|
||||
w->owner->ret_value = B_ENTER;
|
||||
dlg_stop (w->owner);
|
||||
}
|
||||
listbox_run_hotkey (l, listbox_y_pos (l, local.y - 1));
|
||||
}
|
||||
|
||||
return MOU_NORMAL;
|
||||
|
Loading…
Reference in New Issue
Block a user