From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id yCPpHCTyuGB1HgAAWB0awg (envelope-from ) for ; Thu, 03 Jun 2021 11:15:48 -0400 Received: by simark.ca (Postfix, from userid 112) id 675E61F163; Thu, 3 Jun 2021 11:15:48 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-1.1 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,MAILING_LIST_MULTI,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.2 Received: from sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id 687C21E01F for ; Thu, 3 Jun 2021 11:15:47 -0400 (EDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id E1EEF398E409 for ; Thu, 3 Jun 2021 15:15:46 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E1EEF398E409 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1622733346; bh=RDCfTcmki9hVEh6djFhHumtoR8owlz5zzsK8idKStHE=; h=To:Subject:Date:References:List-Id:List-Unsubscribe:List-Archive: List-Post:List-Help:List-Subscribe:From:Reply-To:From; b=J0Q/jmcgp0n5jGCoQjYLmH8XTcYeJiZ09OwETwdZnufldvZo/yVRew/pviHmKK27D qfCJuFOpVxBjCiA9nAufbBsVoY8ocnYWVYycogJ5FcZKymBP0tE9w0JCC9dETTbTJj qFMCy+LBPiZGG7zyEYapimC2BfYPp5JLQUw0wkmM= Received: from sonic307-54.consmr.mail.ir2.yahoo.com (sonic307-54.consmr.mail.ir2.yahoo.com [87.248.110.31]) by sourceware.org (Postfix) with ESMTPS id 4C154383803B for ; Thu, 3 Jun 2021 15:15:18 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 4C154383803B X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1622733317; bh=b7/OEkG2u42/hZV4CEtz6BvEuWmjvfvtXy1yvQ43b67=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=nFzjzy/e+FlhxBVn+lVzZAbtLya8Sso0wZQGyWkyjdI1ZLJ5T9YQZngH2VPJyIbYGb4AlH/bniQ4QLayb3xUcZqGZMgq8uaSDNN4959hsmom/9lKPBP0D3U9gq+3dx5GiS+v9QnfU1Fwn7OWZaPLfe2gPKg/ZtmC2+mV+Zul1aOcGD9fRwp9jNnmNdJIMbO+6pSmBapJNs/IQQeovBhemUrj/ebRdoO24kZYZXHp2upqc9jWAGqHhXnG1KAu0GKIUyW2pQc7twuZpM6hzS0/7aaTP2a0x8S39tmbS6Qoru2pWpdDOgyK2r2jSmvcLtT1g4t8ArFAJtZyup5kYpx0Gw== X-YMail-OSG: ZdcuxS4VM1nt34m916Er2daOfjGgIAnEFF5uDdGjxctISM7vlfdINfuqBo_jlrD 2egk_qtXBef4Vl_GxV0byupFVN7dP24ffAJJjCq1wTr2AOWEdMKyRZRPZ_qik6aIa7TY_QUjBt7w D_Nj3DY_ASeORvB8DIk3NWx_u6tKjDKHajFSCK.12xvA7IUArWyNuh_3knofy8J0KnhPxgDfiL0Q EonjCLCqWansqu_GH19m9EL4NWhGMXzMpcUV9AUc9d29zx.0fPnZvxp2gZYETfvQmVOCOQ6g6wUu O70oopsdrKMZCytxOElMh03RX1y5Pw1jO2vmoHVxrBxJ1fdnGwKbCdFQbg6vky_Tl.QwgOZ9c1_. 0uYFOLyRYHRUTn9wdsS8hufJMvXbU9jgZYD1XnsfA5WDOUPLhmJnRNgda07fIdmbcgjrlFILCKqL o.ygzN2EZssf7EMvOX5E5g50MZt2Sxb5zVrH.Mv7DoJ.dKT55FapchCEndFMboUb6UjCyaCwQk8F Cw0Wg5E_9_9qbKjP4U45nAIKtDR_NuX3CwtVG0o6UYxc8UTEvZgOiZjmeHIDeFTG0SiqQl_VYUDe e_Y2.Xuptx.ld4wce.6tXxfNs9jvIWWNFs5pGt_9AjRmMce3Ptdht5enSMHrUP2b_UD6DdiFE2Ga vUm1nY5mzv0p06qNuwH_vO3RhIGng9OSBIPMSmWGUkHGZs_iyGp2U89Ic22HPD9_ALE7bxkiaEru awydME7pvSdqDyQCd9Pw7UuiBwfQgH7N_6vhU2wUPYngQBxoNLb45lLEOxicC6OAf_EdmDr93OXl imhGfefe_UW8HkmxEjODWjnmqc.GsDQ.ILgwYn7wo3E3Q5eUtHv7dSr_67dCjHamtyHFisFdurRK aOZrWEaPUaoEhH2LTlnwwPXBaecT68.kP5F2tS9Ov7Pu6YqL9QQiLE4T00C7BFuYDx5NDT8pgCUS hXw.FVuQ2RPvUVqHFc_vFp5lRyEGb2tobzojJKuRB1Ce2Fyk1MwpsBgaG8gzach_Ca.c2gA.mEAl CQmIM3xm7S61DI.zWc2hGAnfibLsz0zbYo1srYgaMpPRgHUylOlS.BGhvnh7P7S7p7Cbw0UoLZGX RGIRPwwnZZgV3rSZPXlInPaQmkxNdT4At1SevvdCVZBtVyk_dXz7LVoE4WQ5iTV8ce19f2CZ8suB PNTgL2J8FQHz3XajIBEMROOgNMktO0MFRHKySudP3wBEQra40oqqYEpXfLL7MzmvrDd94Fx7VnJF HC2i.hJKk1H5UjrY0j5lWfkI.hwqEyfXPmvXjsTK7r3L72y.L9y4WosmJrltNnXmYFJv1cWyHL2b IKgBhMCiKtKSzyB5hvtzsJZKoM71PwoM3ekdAowusATcNV2e28w2Khi9EyiU7j15FQZV9yy0KTkz yeB5fot1u3ngQwWPo71cEU_fR7Fod7tJ7z1HfoI85CYRHGr3pOewJGO7nc8hH_zBef6TKPA6F74. CzdUpC4Kiv4TiUX3rw2IpLnI9koxcuWDFIPShEOx8v0HbXpLy.mBwD1zrYP2HMUD1J5NOCCDK527 5D4.3vHhDLL0jGawgkCYx0Waw9KUkTCgIrUixs7X8mvdNP.vVvVZ6G4._66BnAwB1hKFkg7t3TBD GJersXhaUE_TsKc0nZV1N6xU92p7PUpaUNAr4xXlCQYJbk1jbdI7hO7cdeC0egFnz85seCNAGuXe 7ppy.OM88k6u8F6D_rLH_vuVAMqarCSqBV23IXjUYAR6HPvpbruLuyHg.xzkullxY34pLmjLYdYC c3vvM6o0DtJUQS3Db3OpovWgU.HqSUrmgoB7i5fZ7QIDEsrvBJ7Ru06H.nklmyho3cqbItdM8iac sghrMr1RjfmN2cYFyvrB4.bD5vcWQKyoNSUDhA5DfqERyh6JYXqXkQDkQKGxc8CFgXHXSyIXFsa6 oom6lO1mKHLjt6vc20m4zmKYNyfp0t465gY2_iKbBvcWlquZwzBsp4SdjLxkQRVl3a0uPHcc7P2l 8h_FCbtSIz4A4cdFv7oG6vsjhXdfXav9jlUJzUBVhHfXsW9OWmMEO0.Hlx5HaAdyELHe0Gpo46RT K6BocZ51UfeiIdHvjwvHVSZc51fZjAU2L.ORf1oW6OCv8rWi_3E5qpmOphNY8B7e_KDvQNI7Dgrl wQKmoriedEvhKxhjQBqlVUB5sDL8ohk2pYxgZZoqBWknZ6GCvDQPf1EGiFOhKlmtIHoHzDBKl41w m8d7EdJjlSdQGz4Wb.Su9UWtFI5y_2hO_b1bl9sIBSxX1CtCGUodH1lztSUtG3gSNRnQl3ZNbVhk PEjwucHefkMJZQhrBCkyMqRTDkhdMQ0PnNTSCgc2IX_jjrihwIe18sWXEYoT.1PMKu3rTXPMSTS9 ne5S1D0K70zjgmA_5sL4iIu6QOq0bWZ0fVRwOIFVHsJc0EZE_YPLTTYI- X-Sonic-MF: Received: from sonic.gate.mail.ne1.yahoo.com by sonic307.consmr.mail.ir2.yahoo.com with HTTP; Thu, 3 Jun 2021 15:15:17 +0000 Received: by kubenode530.mail-prod1.omega.ir2.yahoo.com (VZM Hermes SMTP Server) with ESMTPA ID e49758f1e681ad0055a0fc348493a9bd; Thu, 03 Jun 2021 15:15:14 +0000 (UTC) To: gdb-patches@sourceware.org Subject: [PATCHv3 1/2] Initial TUI mouse support Date: Thu, 3 Jun 2021 17:14:52 +0200 Message-Id: <20210603151453.15248-1-ssbssa@yahoo.de> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit References: <20210603151453.15248-1-ssbssa.ref@yahoo.de> 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: , From: Hannes Domani via Gdb-patches Reply-To: Hannes Domani Errors-To: gdb-patches-bounces+public-inbox=simark.ca@sourceware.org Sender: "Gdb-patches" 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-06-03 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. --- v2: - Added ChangeLog. v3: - Use NCURSES_MOUSE_VERSION to check if mouse functions are available. - Mention possible mouse_button values in click function. - Remove useless #include "tui/tui-source.h" - Fix code style issues. --- gdb/ser-mingw.c | 5 +++++ gdb/tui/tui-data.h | 7 +++++++ gdb/tui/tui-io.c | 37 +++++++++++++++++++++++++++++++++++++ gdb/tui/tui.c | 4 ++++ 4 files changed, 53 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..9fa39fa58f3 100644 --- a/gdb/tui/tui-data.h +++ b/gdb/tui/tui-data.h @@ -137,6 +137,13 @@ struct tui_win_info 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 a2be4d4353e..7df0e2f1bd3 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 af92b2a8042..529fc62c9ac 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 (); -- 2.31.1