From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from sonic313-20.consmr.mail.ir2.yahoo.com (sonic313-20.consmr.mail.ir2.yahoo.com [77.238.179.187]) by sourceware.org (Postfix) with ESMTPS id E8208385802D for ; Sat, 29 May 2021 14:27:10 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org E8208385802D X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1622298429; bh=Bf9yHlh0e8iTOjXzWlNXpbI+g2jd0BLdcZFDwYG7fPW=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=RsnvfU7GnLaj5zGLNv2HVagml1fV0aED0i7b8bhCpKlZwKwIjtltcZ9RgXqeE6jLwZGyqjlTFeZXFeYNr12BKQsdMpnW3zlV4vHAvuJMd1vwvma4anGS62yw+9IrkWhc4tnnJpgLIJ9a7KV4lIs63WYaMtvAbOxYUztwxXWbyFpuBB7BGOdqR4zOxzcdGPD8CkNhdLqD7yd2EWbErnbF/R7hOKYppt/IvGWMkv/wDb1mdOXAu7XA+FmzNfbC7kdoDSfD+5eqG+5MnOHXsdQ+P5pHc0sYyPOir0k0jviILMdFlteU3vBNzZx07ufIjn9KwJntK3VX8nkxNCsaIsHxGg== X-YMail-OSG: wla0cMkVM1lcYorfQ0HB_H4I_u4iFJRxXBz37Utcpj0ODc4izFyudjB7nf.icDw 54VExd2qmkc61AQmpMW1qnTiqwElcUDHEbNJ_iUlw4RAmPwbfF3OUCHmpDv.tIFHfcyMQgPOy9cl _YwDah6tE26oF0AbfOzffIOGhOEm8kZMU94Nt3M3y7J_FzrROgXuLWarZgdYJETl51JAihvX.qok lQEs2p6GEKBC1S8ExMrv1F0AEP4c3aButrVXPLrkButJ4Zb7Lhxqb3suxrWCvGVGEsKygZPd4i2y PM2X8nH1_69CAkJkxFhw66Izd1GYVzEtJn_5H3wPTCCWQMF7L7pdxka3Bpud3nB9HG2ApyIbWNaN GXDY7eRxkvSw5T_y__lzH3kT1Fnv2I1q.g2fhTf_b_5byqMTNFMtkv1.N32yc7ghVG9KZnMPU_VA ZGGrtyQ.hWLzdFJmnvcZk4RuXwdaLOzSlRLj7qcpoxjOKVU_snUUIGCdZIu.D90Qny3xrFBva5PO Q9nN31F5b.78PNHfatclp4pu.GTkK7mzR_G93Za_YN_m9DHWUqTh2aI8JqB.Jd5801nA99Ppf.x5 EoV86H5TXn6bGcf0hk0TDf93d1ybSPe2xwXEj9qCexen2DgB9OsEiLJbK0xbbxgx8NBXonDxs6M1 LT.H3ZsmVewLXZdMrsYYcek3Keb9UculARnut9tfbDbnIY6911fbDzD78ZZlyHLREEw4bLZnfnlW ldXutJwtVxmmnqcr0ebhHsED64KJIZqnyhjxjfS0qHapuMhhe7r8Uvy2xfmwo9AIQdqicjws4aTo zp9I42LCrfYl6mZE2qZ1HEolX6rr5.VXzXr2e4TrXV9B7NnFQcBrRD0Jpkwc71VJl3yHcsqBpTF1 V8jiTOfoVbpjtdZEd_VFwbwED9wlDr7cbiiypVpbcaXRy31Zl7zpSzp8uvDUgOS..HH1pme6022h pr1.RtaMl2QuRLxzOt34zE4dwEFg0CU5.SgOVtq8rmBne0mx.voC6gWZGWW3LnK074tstONc8CN_ O2KPCNUHiWD6Gf1WxnrbHDF3NB1.7zN5S4LCT6DKvy1bF5BRuYgD9eP54mehesb5C0SmVSsqUcmu fjhgu1BT6oXgXurE6GjtrUOIZp_nsPZvAV6Ina5ncoX3F6MG2AxQlTslLU8yAsyX9336IqUBlMyP L4VPi.Jz4MmDbMatzAPS44EfjHGr3NZb_qc_y9hw4ey71ZlR._VnzJW92P1icoogazeWjtqR7PL3 xqFZMMbs6VmQpd_NQTMfqgv87Vjja2eG3fULl9t03T2398XYazidvcvZI9ld4u4I7exjmLnPwRuE EVOOwYF1Ku7pW3BZuXqJ80RYyLFBrqBqiVcm2D2M17P_rVyvtn8i7MzKuHZlBjRLOblNFGp1Nb6g HD7wGK3.2UoH25bwyoojK_.rb2_05P1NEnuzCWQ.8_CQZBsmHD5CSGaWXLWdAXZwAF4tA_.C9SHk cbRLXjmTzFb8K4SDhwT2Sm3sxuQ9QvcB6agbmSmRs0yomhPZlyIP8Gxzqxuobrw.rsisWBNHGUlZ nOICKBwykDutKKzLuePgzI2xjhIBJXTlL9JBSF3iZMbjl2HLdAzfYVj.XyV5pE9mHNOqswQi_Bkp NL0boeyNq1lunqWW9RB2DdzjIWpBlVe.KdZXfQiMaMLG_7OBNtBeIuc8GV9j1__EY.ySyp.3AvBa kxhfveBTGnqHeRAtpphthEg7FDowX_rBBHaQLeWkEa_WOwSpn4MKTNGF876Qh4lL3Umfn64Di7.Q fBGko8lJVI6.Kj6c_7cs09mLra7k_3DsrlLq5hgM3idjI7cXqKZJ5GgOaQkWqz4MwwKtuwc9hOT4 8hXDB95xjS_Tr4TXSPh4oAImBWiTO0MwbWGkY8ppALAshitSgoI31p_n0xmESq3u6DKbkLPVZcff lXOP8m3Y28fsZA0MB3ArsfXdEDPv9ix.TGxqpipPjpuFrdQ8kfnFp1yYWo26TCZ8ZoqLzGqU0KWy FsFBHlz2oJIETmlQ_U93S83mhkO5gImgdJqLKLLl2SImyRiny0TrVqezNrj44qwaoxleJ9GeLOT5 4qIDjmBaVbyPBqRepeO7900cCMYtdqKI48o7vzZY4o.9X5ozw5rE4g3I8h_fKzXNywKBU8uSjk5J MIacMK3Mg3ir9Efzn0ZzKcxRNc8dGn74teB4F0mUSbtoYDug6ofYROa80DRwQSYL77Kk18oqkqKj 3jXqFsQntpbY.fQ1iwo0jYbdOtf8qEcWq195bQ9FAQd9YwxQM1uzA2PBn.XGvHFTCw5zNQngxxQo g5pp8k_yYpVbe16zpHSNAi15.89y5u35siy7l2z.vNHOydiFCFPcmbI_fQU7ZXVTTtCaW4kkB_Dl e.TV4SZiJtZa9_wakXs3NmhAJWGKZ6ucGlTuG091.Y9KkUiqZm52lehsDrH4IaA-- X-Sonic-MF: Received: from sonic.gate.mail.ne1.yahoo.com by sonic313.consmr.mail.ir2.yahoo.com with HTTP; Sat, 29 May 2021 14:27:09 +0000 Received: by kubenode529.mail-prod1.omega.ir2.yahoo.com (VZM Hermes SMTP Server) with ESMTPA ID 5e355b07dc4307ae558d1b8ceace0e12; Sat, 29 May 2021 14:27:07 +0000 (UTC) From: Hannes Domani To: gdb-patches@sourceware.org Subject: [PATCHv2 1/2] Initial TUI mouse support Date: Sat, 29 May 2021 16:26:35 +0200 Message-Id: <20210529142636.11432-1-ssbssa@yahoo.de> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Antivirus: Avast (VPS 210529-0, 05/29/2021), Outbound message X-Antivirus-Status: Clean References: <20210529142636.11432-1-ssbssa.ref@yahoo.de> X-Spam-Status: No, score=-10.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 29 May 2021 14:27:12 -0000 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. 2021-05-29 Hannes Domani * 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. --- Should there be a configure option for this at build time? I don't know if the mousemask/getmouse functions are available for all curses variants, so I would imagine an option --enable-mouse: - yes -> error if getmouse can't be linked - no -> just disable - auto -> enable if getmouse can be linked v2: - Added ChangeLog. --- gdb/ser-mingw.c | 5 +++++ gdb/tui/tui-data.h | 5 +++++ gdb/tui/tui-io.c | 32 ++++++++++++++++++++++++++++++++ gdb/tui/tui.c | 2 ++ 4 files changed, 44 insertions(+) diff --git a/gdb/ser-mingw.c b/gdb/ser-mingw.c index 043bb50b577..2bad51310f6 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 b4d788dd0a4..74a8b78395b 100644 --- a/gdb/tui/tui-data.h +++ b/gdb/tui/tui-data.h @@ -137,6 +137,11 @@ struct tui_win_info return true; } + /* Called for each mouse click inside this window. */ + 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 a2be4d4353e..7787789f0c7 100644 --- a/gdb/tui/tui-io.c +++ b/gdb/tui/tui-io.c @@ -33,6 +33,7 @@ #include "tui/tui-wingeneral.h" #include "tui/tui-file.h" #include "tui/tui-out.h" +#include "tui/tui-source.h" #include "ui-out.h" #include "cli-out.h" #include @@ -639,6 +640,7 @@ tui_redisplay_readline (void) static void tui_prep_terminal (int notused1) { + mousemask (ALL_MOUSE_EVENTS, NULL); } /* Readline callback to restore the terminal. It is called once each @@ -646,6 +648,7 @@ tui_prep_terminal (int notused1) static void tui_deprep_terminal (void) { + mousemask (0, NULL); } #ifdef TUI_USE_PIPE_FOR_READLINE @@ -978,6 +981,35 @@ tui_dispatch_ctrl_char (unsigned int ch) case KEY_LEFT: win_info->right_scroll (1); break; + 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) + || (mev.bstate & BUTTON2_CLICKED) + || (mev.bstate & BUTTON3_CLICKED)) + { + int button = (mev.bstate & BUTTON1_CLICKED) ? 1 + : (mev.bstate & BUTTON2_CLICKED) ? 2 + : 3; + wi->click (mev.x - wi->x - 1, mev.y - wi->y - 1, button); + } +#ifdef BUTTON5_PRESSED + else if (mev.bstate & BUTTON4_PRESSED) + wi->backward_scroll (3); + else if (mev.bstate & BUTTON5_PRESSED) + wi->forward_scroll (3); +#endif + break; + } + } + break; case '\f': break; default: diff --git a/gdb/tui/tui.c b/gdb/tui/tui.c index af92b2a8042..a2654a2e5a4 100644 --- a/gdb/tui/tui.c +++ b/gdb/tui/tui.c @@ -508,6 +508,8 @@ tui_disable (void) rl_startup_hook = 0; rl_already_prompted = 0; + mousemask (0, NULL); + /* Leave curses and restore previous gdb terminal setting. */ endwin (); -- 2.31.1