* Mouse information in xterm.
[not found] <20200914113816.562wa5cwqxdtwnmy.ref@Ergus>
@ 2020-09-14 11:38 ` Ergus
2020-09-14 15:23 ` Eli Zaretskii
0 siblings, 1 reply; 9+ messages in thread
From: Ergus @ 2020-09-14 11:38 UTC (permalink / raw)
To: emacs-devel
Hi I have a question that I am not sure if this is a bug or a feature.
I have been playing with x-popup-menu today and I noticed that in
terminal, when we pass t as the first parameter the popup appears in
position (0, 0) which is wrong.
I debugged the C code and it seems that this position is expected to be
computed in x_popup_menu_1 calling:
mouse_position_hook which is a pointer to term_mouse_position and the
vales are taken there from last_mouse_x and last_mouse_y.
The issue is that those values are updated only in term_mouse_movement
which is called in handle_one_term_event but that function never
triggers my gdb.
Is this somehow intended and a limitation of the terminal interface??
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Mouse information in xterm.
2020-09-14 11:38 ` Mouse information in xterm Ergus
@ 2020-09-14 15:23 ` Eli Zaretskii
2020-09-14 16:27 ` Ergus
0 siblings, 1 reply; 9+ messages in thread
From: Eli Zaretskii @ 2020-09-14 15:23 UTC (permalink / raw)
To: Ergus; +Cc: emacs-devel
> Date: Mon, 14 Sep 2020 13:38:16 +0200
> From: Ergus <spacibba@aol.com>
>
> I have been playing with x-popup-menu today and I noticed that in
> terminal, when we pass t as the first parameter the popup appears in
> position (0, 0) which is wrong.
>
> I debugged the C code and it seems that this position is expected to be
> computed in x_popup_menu_1 calling:
>
> mouse_position_hook which is a pointer to term_mouse_position and the
> vales are taken there from last_mouse_x and last_mouse_y.
>
> The issue is that those values are updated only in term_mouse_movement
> which is called in handle_one_term_event but that function never
> triggers my gdb.
>
> Is this somehow intended and a limitation of the terminal interface??
It's hard to answer your questions, because you didn't describe what
you tried to do. For starters, did you invoke and navigate the menus
with a mouse or with a keyboard?
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Mouse information in xterm.
2020-09-14 15:23 ` Eli Zaretskii
@ 2020-09-14 16:27 ` Ergus
2020-09-14 17:34 ` Eli Zaretskii
0 siblings, 1 reply; 9+ messages in thread
From: Ergus @ 2020-09-14 16:27 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: emacs-devel
On Mon, Sep 14, 2020 at 06:23:25PM +0300, Eli Zaretskii wrote:
>> Date: Mon, 14 Sep 2020 13:38:16 +0200
>> From: Ergus <spacibba@aol.com>
>>
>> I have been playing with x-popup-menu today and I noticed that in
>> terminal, when we pass t as the first parameter the popup appears in
>> position (0, 0) which is wrong.
>>
>> I debugged the C code and it seems that this position is expected to be
>> computed in x_popup_menu_1 calling:
>>
>> mouse_position_hook which is a pointer to term_mouse_position and the
>> vales are taken there from last_mouse_x and last_mouse_y.
>>
>> The issue is that those values are updated only in term_mouse_movement
>> which is called in handle_one_term_event but that function never
>> triggers my gdb.
>>
>> Is this somehow intended and a limitation of the terminal interface??
>
>It's hard to answer your questions, because you didn't describe what
>you tried to do. For starters, did you invoke and navigate the menus
>with a mouse or with a keyboard?
>
Hi Eli:
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.
Best,
Ergus
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Mouse information in xterm.
2020-09-14 16:27 ` Ergus
@ 2020-09-14 17:34 ` Eli Zaretskii
2020-09-14 18:13 ` Ergus
0 siblings, 1 reply; 9+ messages in thread
From: Eli Zaretskii @ 2020-09-14 17:34 UTC (permalink / raw)
To: Ergus; +Cc: emacs-devel
> 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?
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Mouse information in xterm.
2020-09-14 17:34 ` Eli Zaretskii
@ 2020-09-14 18:13 ` Ergus
2020-09-14 18:56 ` Eli Zaretskii
0 siblings, 1 reply; 9+ messages in thread
From: Ergus @ 2020-09-14 18:13 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: emacs-devel
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.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Mouse information in xterm.
2020-09-14 18:13 ` Ergus
@ 2020-09-14 18:56 ` Eli Zaretskii
2020-09-14 19:04 ` Ergus
0 siblings, 1 reply; 9+ messages in thread
From: Eli Zaretskii @ 2020-09-14 18:56 UTC (permalink / raw)
To: Ergus; +Cc: emacs-devel
> Date: Mon, 14 Sep 2020 20:13:11 +0200
> From: Ergus <spacibba@aol.com>
> Cc: emacs-devel@gnu.org
>
> 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.
last_mouse_x and last_mouse_y will change only if you use GPM mouse on
the terminal. Otherwise, these variables will remain zero on
GNU/Linux. So what you see is expected unless you use GPM (do you?).
The doc string of x-popup-dialog says that if POSITION is t, then the
dialog appears at the center of the selected frame. So what you see
is exactly what the documentation says, and I don't understand what is
the problem you are trying to solve, or why POSITION being t is
important to you, or where you expected or wanted the dialog to pop up
or why there. Please elaborate, as I feel we are talking past each
other.
I see the same on a GUI frame, btw, so I also don't understand what
"works as expected in gui" for you.
What am I missing?
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Mouse information in xterm.
2020-09-14 18:56 ` Eli Zaretskii
@ 2020-09-14 19:04 ` Ergus
2020-09-14 19:14 ` Eli Zaretskii
0 siblings, 1 reply; 9+ messages in thread
From: Ergus @ 2020-09-14 19:04 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: emacs-devel
On Mon, Sep 14, 2020 at 09:56:37PM +0300, Eli Zaretskii wrote:
>> Date: Mon, 14 Sep 2020 20:13:11 +0200
>> From: Ergus <spacibba@aol.com>
>> Cc: emacs-devel@gnu.org
>>
>> 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.
>
>last_mouse_x and last_mouse_y will change only if you use GPM mouse on
>the terminal. Otherwise, these variables will remain zero on
>GNU/Linux. So what you see is expected unless you use GPM (do you?).
>
>The doc string of x-popup-dialog says that if POSITION is t, then the
>dialog appears at the center of the selected frame. So what you see
>is exactly what the documentation says, and I don't understand what is
>the problem you are trying to solve, or why POSITION being t is
>important to you, or where you expected or wanted the dialog to pop up
>or why there. Please elaborate, as I feel we are talking past each
>other.
>
>I see the same on a GUI frame, btw, so I also don't understand what
>"works as expected in gui" for you.
>
>What am I missing?
>
x-popup-menu manual says:
If position is t, it means to use the current mouse position (or the
top-left corner of the frame if the mouse is not available on a text
terminal)
The part of "if the mouse is not available on a text terminal" then
doesn't apply to xterm with xterm-mouse-mode?
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Mouse information in xterm.
2020-09-14 19:04 ` Ergus
@ 2020-09-14 19:14 ` Eli Zaretskii
2020-09-14 19:45 ` Ergus
0 siblings, 1 reply; 9+ messages in thread
From: Eli Zaretskii @ 2020-09-14 19:14 UTC (permalink / raw)
To: Ergus; +Cc: emacs-devel
> Date: Mon, 14 Sep 2020 21:04:53 +0200
> From: Ergus <spacibba@aol.com>
> Cc: emacs-devel@gnu.org
>
> On Mon, Sep 14, 2020 at 09:56:37PM +0300, Eli Zaretskii wrote:
> >> Date: Mon, 14 Sep 2020 20:13:11 +0200
> >> From: Ergus <spacibba@aol.com>
> >> Cc: emacs-devel@gnu.org
> >>
> >> 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.
> >
> >last_mouse_x and last_mouse_y will change only if you use GPM mouse on
> >the terminal. Otherwise, these variables will remain zero on
> >GNU/Linux. So what you see is expected unless you use GPM (do you?).
> >
> >The doc string of x-popup-dialog says that if POSITION is t, then the
> >dialog appears at the center of the selected frame. So what you see
> >is exactly what the documentation says, and I don't understand what is
> >the problem you are trying to solve, or why POSITION being t is
> >important to you, or where you expected or wanted the dialog to pop up
> >or why there. Please elaborate, as I feel we are talking past each
> >other.
> >
> >I see the same on a GUI frame, btw, so I also don't understand what
> >"works as expected in gui" for you.
> >
> >What am I missing?
> >
> x-popup-menu manual says:
Are we talking about x-popup-menu or x-popup-dialog? You talked about
the latter in all your messages.
So I'm still confused...
> The part of "if the mouse is not available on a text terminal" then
> doesn't apply to xterm with xterm-mouse-mode?
Indeed, it doesn't. Because AFAIK no one has yet adapted the TTY
menus and dialogs to xterm-mouse-mode.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Mouse information in xterm.
2020-09-14 19:14 ` Eli Zaretskii
@ 2020-09-14 19:45 ` Ergus
0 siblings, 0 replies; 9+ messages in thread
From: Ergus @ 2020-09-14 19:45 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: emacs-devel
On September 14, 2020 9:14:15 PM GMT+02:00, Eli Zaretskii <eliz@gnu.org> wrote:
>> Date: Mon, 14 Sep 2020 21:04:53 +0200
>> From: Ergus <spacibba@aol.com>
>> Cc: emacs-devel@gnu.org
>>
>> On Mon, Sep 14, 2020 at 09:56:37PM +0300, Eli Zaretskii wrote:
>> >> Date: Mon, 14 Sep 2020 20:13:11 +0200
>> >> From: Ergus <spacibba@aol.com>
>> >> Cc: emacs-devel@gnu.org
>> >>
>> >> 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.
>> >
>> >last_mouse_x and last_mouse_y will change only if you use GPM mouse
>on
>> >the terminal. Otherwise, these variables will remain zero on
>> >GNU/Linux. So what you see is expected unless you use GPM (do
>you?).
>> >
>> >The doc string of x-popup-dialog says that if POSITION is t, then
>the
>> >dialog appears at the center of the selected frame. So what you see
>> >is exactly what the documentation says, and I don't understand what
>is
>> >the problem you are trying to solve, or why POSITION being t is
>> >important to you, or where you expected or wanted the dialog to pop
>up
>> >or why there. Please elaborate, as I feel we are talking past each
>> >other.
>> >
>> >I see the same on a GUI frame, btw, so I also don't understand what
>> >"works as expected in gui" for you.
>> >
>> >What am I missing?
>> >
>> x-popup-menu manual says:
>
>Are we talking about x-popup-menu or x-popup-dialog? You talked about
>the latter in all your messages.
>
>So I'm still confused...
>
Sorry I confused them in the mail because in the backend is the same code. The issue is also the same. But its my fault.
>> The part of "if the mouse is not available on a text terminal" then
>> doesn't apply to xterm with xterm-mouse-mode?
>
>Indeed, it doesn't. Because AFAIK no one has yet adapted the TTY
>menus and dialogs to xterm-mouse-mode.
Ohh, bad news.
--
Sent from my Android device with K-9 Mail. Please excuse my brevity.
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2020-09-14 19:45 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[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
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
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).