From: Ergus <spacibba@aol.com>
To: Eli Zaretskii <eliz@gnu.org>
Cc: emacs-devel@gnu.org
Subject: Re: Mouse information in xterm.
Date: Mon, 14 Sep 2020 20:13:11 +0200 [thread overview]
Message-ID: <20200914181311.fd56gqwn4ntytkqn@Ergus> (raw)
In-Reply-To: <83h7s09s98.fsf@gnu.org>
On Mon, Sep 14, 2020 at 08:34:43PM +0300, Eli Zaretskii wrote:
>> Date: Mon, 14 Sep 2020 18:27:10 +0200
>> From: Ergus <spacibba@aol.com>
>> Cc: emacs-devel@gnu.org
>>
>> The menu part is just how I observed the issue. The problem is somewhere
>> else; handle_one_term_event is never called (at least for me) either
>> when moving the cursor, or the mouse or clicking here and there. So the
>> variables last_mouse_x and last_mouse_y are not updated.
>>
>> So far I observe that handle_one_term_event is called in a single place
>> in the code, but the condition to enter the "if" around is never true at
>> least for me.
>>
>> I tried to create the x-dialog from the scratch buffer. The code works
>> as expected in gui, but in xterm I see this problem.
>>
>> I just tried this in xterm:
>>
>> (x-popup-dialog t '("Dialog" "Value1" "Value"))
>>
>> And the dialog appears either in (0,0) or in the center of the screen,
>> but not related with the mouse or cursor positions.
>>
>> There is another function that updated last_mouse_x and last_mouse_y,
>> but all it's code is commented.
>
>I'm sorry, I still don't understand what are the issues that bother
>you. Are you trying to pop up a menu from the minibuffer, as in the
>above x-popup-dialog call? And all the rest of your questions are
>just your attempt to understand why x-popup-dialog doesn't work as you
>expected? Or are you after something else?
>
>IOW, let me be blunt and ask why do you care what are last_mouse_x and
>last_mouse_y, and which code sets them?
Hi Eli:
When we call x-popup-dialog with t as the first parameter. The function
x_popup_menu_1 tries to get the cursor/mouse position calling
term_mouse_position. (As the documentation says)
The issue is that term_mouse_position always report (0,0) as the current
position independently of the cursor and mouse actual positions because
it just copies the values in last_mouse_x and last_mouse_y which are
zero because nobody updated them, see.
```
static void
term_mouse_position (struct frame **fp, int insist, Lisp_Object *bar_window,
enum scroll_bar_part *part, Lisp_Object *x,
Lisp_Object *y, Time *timeptr)
{
*fp = SELECTED_FRAME ();
(*fp)->mouse_moved = 0;
*bar_window = Qnil;
*part = scroll_bar_above_handle;
XSETINT (*x, last_mouse_x);
XSETINT (*y, last_mouse_y);
*timeptr = current_Time ();
}
```
I tried the code I sent you before in a normal buffer with C-x C-e and
it works as expected in gui. The problem is terminal specific because of
what I explain.
The only function that modifies those variable is:
```
static bool
term_mouse_movement (struct frame *frame, Gpm_Event *event)
{
/* Has the mouse moved off the glyph it was on at the last sighting? */
if (event->x != last_mouse_x || event->y != last_mouse_y)
{
frame->mouse_moved = 1;
note_mouse_highlight (frame, event->x, event->y);
/* Remember which glyph we're now on. */
last_mouse_x = event->x;
last_mouse_y = event->y;
return 1;
}
return 0;
}
```
which is called in this stack:
term_mouse_movement
handle_one_term_event
tty_read_avail_input
tty_read_avail_input has a condition
if (gpm_tty == tty)
that in my case always prevent to call handle_one_term_event. I tried
typing, moving the mouse, clicking, with all the buttons and the break
point never crosses the it.
So I am not sure when is supposed to be called handle_one_term_event to
update the position values.
The other function touching those variables should be term_mouse_moveto
in term.c but all it's internal code is commented.
It is called in set-mouse-position.
next prev parent reply other threads:[~2020-09-14 18:13 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20200914113816.562wa5cwqxdtwnmy.ref@Ergus>
2020-09-14 11:38 ` Mouse information in xterm Ergus
2020-09-14 15:23 ` Eli Zaretskii
2020-09-14 16:27 ` Ergus
2020-09-14 17:34 ` Eli Zaretskii
2020-09-14 18:13 ` Ergus [this message]
2020-09-14 18:56 ` Eli Zaretskii
2020-09-14 19:04 ` Ergus
2020-09-14 19:14 ` Eli Zaretskii
2020-09-14 19:45 ` Ergus
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200914181311.fd56gqwn4ntytkqn@Ergus \
--to=spacibba@aol.com \
--cc=eliz@gnu.org \
--cc=emacs-devel@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).