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