aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog9
-rw-r--r--gdb/ser-mingw.c5
-rw-r--r--gdb/tui/tui-data.h7
-rw-r--r--gdb/tui/tui-io.c37
-rw-r--r--gdb/tui/tui.c4
5 files changed, 62 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 1dd4d3e..fca6750 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -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>
PR python/27841
diff --git a/gdb/ser-mingw.c b/gdb/ser-mingw.c
index 043bb50..2bad513 100644
--- a/gdb/ser-mingw.c
+++ b/gdb/ser-mingw.c
@@ -599,6 +599,11 @@ console_select_thread (void *arg)
break;
}
}
+ else if (record.EventType == MOUSE_EVENT)
+ {
+ SetEvent (state->read_event);
+ break;
+ }
/* Otherwise discard it and wait again. */
ReadConsoleInput (h, &record, 1, &n_records);
diff --git a/gdb/tui/tui-data.h b/gdb/tui/tui-data.h
index b4d788d..9fa39fa 100644
--- a/gdb/tui/tui-data.h
+++ b/gdb/tui/tui-data.h
@@ -137,6 +137,13 @@ public:
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 ();
/* Window handle. */
diff --git a/gdb/tui/tui-io.c b/gdb/tui/tui-io.c
index a2be4d4..7df0e2f 100644
--- a/gdb/tui/tui-io.c
+++ b/gdb/tui/tui-io.c
@@ -639,6 +639,9 @@ tui_redisplay_readline (void)
static void
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
@@ -646,6 +649,9 @@ tui_prep_terminal (int notused1)
static void
tui_deprep_terminal (void)
{
+#ifdef NCURSES_MOUSE_VERSION
+ mousemask (0, NULL);
+#endif
}
#ifdef TUI_USE_PIPE_FOR_READLINE
@@ -978,6 +984,37 @@ tui_dispatch_ctrl_char (unsigned int ch)
case KEY_LEFT:
win_info->right_scroll (1);
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':
break;
default:
diff --git a/gdb/tui/tui.c b/gdb/tui/tui.c
index af92b2a..529fc62 100644
--- a/gdb/tui/tui.c
+++ b/gdb/tui/tui.c
@@ -508,6 +508,10 @@ tui_disable (void)
rl_startup_hook = 0;
rl_already_prompted = 0;
+#ifdef NCURSES_MOUSE_VERSION
+ mousemask (0, NULL);
+#endif
+
/* Leave curses and restore previous gdb terminal setting. */
endwin ();