mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-10-18 21:34:13 +08:00
Initial TUI mouse support
Implements an overridable tui_win_info::click method whose arguments are the mouse coordinates inside the specific window, and the mouse button clicked. And if the curses implementation supports 5 buttons, the 4th and 5th buttons are used for scrolling. gdb/ChangeLog: 2021-06-04 Hannes Domani <ssbssa@yahoo.de> * ser-mingw.c (console_select_thread): Handle MOUSE_EVENT. * tui/tui-data.h (struct tui_win_info): Add click function. * tui/tui-io.c (tui_prep_terminal): Enable mouse events. (tui_deprep_terminal): Disable mouse events. (tui_dispatch_ctrl_char): Handle KEY_MOUSE. * tui/tui.c (tui_disable): Disable mouse events.
This commit is contained in:
@ -1,3 +1,12 @@
|
|||||||
|
2021-06-04 Hannes Domani <ssbssa@yahoo.de>
|
||||||
|
|
||||||
|
* ser-mingw.c (console_select_thread): Handle MOUSE_EVENT.
|
||||||
|
* tui/tui-data.h (struct tui_win_info): Add click function.
|
||||||
|
* tui/tui-io.c (tui_prep_terminal): Enable mouse events.
|
||||||
|
(tui_deprep_terminal): Disable mouse events.
|
||||||
|
(tui_dispatch_ctrl_char): Handle KEY_MOUSE.
|
||||||
|
* tui/tui.c (tui_disable): Disable mouse events.
|
||||||
|
|
||||||
2021-06-03 Magne Hov <mhov@undo.io>
|
2021-06-03 Magne Hov <mhov@undo.io>
|
||||||
|
|
||||||
PR python/27841
|
PR python/27841
|
||||||
|
@ -599,6 +599,11 @@ console_select_thread (void *arg)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (record.EventType == MOUSE_EVENT)
|
||||||
|
{
|
||||||
|
SetEvent (state->read_event);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
/* Otherwise discard it and wait again. */
|
/* Otherwise discard it and wait again. */
|
||||||
ReadConsoleInput (h, &record, 1, &n_records);
|
ReadConsoleInput (h, &record, 1, &n_records);
|
||||||
|
@ -137,6 +137,13 @@ public:
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Called for each mouse click inside this window. Coordinates MOUSE_X
|
||||||
|
and MOUSE_Y are 0-based relative to the window, and MOUSE_BUTTON can
|
||||||
|
be 1 (left), 2 (middle), or 3 (right). */
|
||||||
|
virtual void click (int mouse_x, int mouse_y, int mouse_button)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
void check_and_display_highlight_if_needed ();
|
void check_and_display_highlight_if_needed ();
|
||||||
|
|
||||||
/* Window handle. */
|
/* Window handle. */
|
||||||
|
@ -639,6 +639,9 @@ tui_redisplay_readline (void)
|
|||||||
static void
|
static void
|
||||||
tui_prep_terminal (int notused1)
|
tui_prep_terminal (int notused1)
|
||||||
{
|
{
|
||||||
|
#ifdef NCURSES_MOUSE_VERSION
|
||||||
|
mousemask (ALL_MOUSE_EVENTS, NULL);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Readline callback to restore the terminal. It is called once each
|
/* Readline callback to restore the terminal. It is called once each
|
||||||
@ -646,6 +649,9 @@ tui_prep_terminal (int notused1)
|
|||||||
static void
|
static void
|
||||||
tui_deprep_terminal (void)
|
tui_deprep_terminal (void)
|
||||||
{
|
{
|
||||||
|
#ifdef NCURSES_MOUSE_VERSION
|
||||||
|
mousemask (0, NULL);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef TUI_USE_PIPE_FOR_READLINE
|
#ifdef TUI_USE_PIPE_FOR_READLINE
|
||||||
@ -978,6 +984,37 @@ tui_dispatch_ctrl_char (unsigned int ch)
|
|||||||
case KEY_LEFT:
|
case KEY_LEFT:
|
||||||
win_info->right_scroll (1);
|
win_info->right_scroll (1);
|
||||||
break;
|
break;
|
||||||
|
#ifdef NCURSES_MOUSE_VERSION
|
||||||
|
case KEY_MOUSE:
|
||||||
|
{
|
||||||
|
MEVENT mev;
|
||||||
|
if (getmouse (&mev) != OK)
|
||||||
|
break;
|
||||||
|
|
||||||
|
for (tui_win_info *wi : all_tui_windows ())
|
||||||
|
if (mev.x > wi->x && mev.x < wi->x + wi->width - 1
|
||||||
|
&& mev.y > wi->y && mev.y < wi->y + wi->height - 1)
|
||||||
|
{
|
||||||
|
if ((mev.bstate & BUTTON1_CLICKED) != 0
|
||||||
|
|| (mev.bstate & BUTTON2_CLICKED) != 0
|
||||||
|
|| (mev.bstate & BUTTON3_CLICKED) != 0)
|
||||||
|
{
|
||||||
|
int button = (mev.bstate & BUTTON1_CLICKED) != 0 ? 1
|
||||||
|
: ((mev.bstate & BUTTON2_CLICKED) != 0 ? 2
|
||||||
|
: 3);
|
||||||
|
wi->click (mev.x - wi->x - 1, mev.y - wi->y - 1, button);
|
||||||
|
}
|
||||||
|
#ifdef BUTTON5_PRESSED
|
||||||
|
else if ((mev.bstate & BUTTON4_PRESSED) != 0)
|
||||||
|
wi->backward_scroll (3);
|
||||||
|
else if ((mev.bstate & BUTTON5_PRESSED) != 0)
|
||||||
|
wi->forward_scroll (3);
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
case '\f':
|
case '\f':
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -508,6 +508,10 @@ tui_disable (void)
|
|||||||
rl_startup_hook = 0;
|
rl_startup_hook = 0;
|
||||||
rl_already_prompted = 0;
|
rl_already_prompted = 0;
|
||||||
|
|
||||||
|
#ifdef NCURSES_MOUSE_VERSION
|
||||||
|
mousemask (0, NULL);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Leave curses and restore previous gdb terminal setting. */
|
/* Leave curses and restore previous gdb terminal setting. */
|
||||||
endwin ();
|
endwin ();
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user