On Mon, Feb 25, 2013 at 3:26 AM, Bram Moolenaar <[email protected]> wrote:
>
> Brodie Rao wrote:
>
>> On Sun, Feb 24, 2013 at 12:40 PM, Bram Moolenaar <[email protected]> wrote:
>> >
>> > Brodie Rao wrote:
>> >
>> >> Support mouse wheel scrolling of inactive windows in the terminal
>> >
>> > Does this actually work for every type of terminal that supports the
>> > mouse wheel?  Or only for some of them?
>>
>> Reading check_termcode() in src/term.c, I find the following:
>>
>> - For FEAT_MOUSE_GPM, FEAT_SYSMOUSE, FEAT_MOUSE_XTERM, FEAT_MOUSE_SGR
>> and FEAT_MOUSE_URXVT, all mouse events come with the mouse's position.
>>
>> - For FEAT_MOUSE_DEC, FEAT_MOUSE_JSB, FEAT_MOUSE_NET, and
>> FEAT_MOUSE_PTERM, the mouse wheel is not supported, so mouse wheel
>> events will never be sent.
>>
>> - According to src/os_msdos.c, DOS_MOUSE also doesn't support the mouse 
>> wheel.
>>
>> I think that covers everything.
>
> OK.  I do think users will be surprised that the behavior changes.
> But it becomes more consistent with the GUI.
>
>> It's possible that there are some terminal emulators that don't set
>> the mouse position properly for mouse wheel events, but considering
>> all the protocols consider it a normal button press like any other
>> button, that seems unlikely.
>>
>> I did notice one issue in my patch that I'm not sure about: Is the
>> gui.in_use check necessary? If it's false, does Vim fall back to the
>> terminal, and if so, will it handle mouse events? If that's the case,
>> that check probably shouldn't be there.
>
> The Unix version of Vim has one binary that can run both in a terminal
> and as a GUI.  You can switch from terminal to GUI with the ":gui"
> command.  Thus we need a runtime check if it matters whether the GUI is
> running.

In this bit of code:

> diff --git a/src/edit.c b/src/edit.c
> --- a/src/edit.c
> +++ b/src/edit.c
> @@ -9139,9 +9139,13 @@ ins_mousescroll(dir)
>
>      tpos = curwin->w_cursor;
>
> -# if defined(FEAT_GUI) && defined(FEAT_WINDOWS)
> -    /* Currently the mouse coordinates are only known in the GUI. */
> -    if (gui.in_use && mouse_row >= 0 && mouse_col >= 0)
> +# ifdef FEAT_WINDOWS
> +    if (
> +# ifdef FEAT_GUI
> +            gui.in_use &&
> +# endif
> +            mouse_row >= 0 && mouse_col >= 0
> +            )
>      {
>         int row, col;

(and in the same check in src/normal.c)

I don't think the "gui.in_use" check should be here. mouse_row and
mouse_col will be set properly even if gui.in_use is false, and
mouse_find_win() and curwin should both work fine. If we did leave
that check, you wouldn't be able to scroll inactive windows in the
terminal with a GUI build that's running in the terminal.

I'll send an updated patch that drops those two checks.

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.


Raspunde prin e-mail lui