unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
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.



  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).