qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 45/67] ui/vc: remove kby_put_keysym() and update function cal


From: Marc-André Lureau
Subject: Re: [PATCH 45/67] ui/vc: remove kby_put_keysym() and update function calls
Date: Mon, 4 Sep 2023 16:42:14 +0400

Hi

On Thu, Aug 31, 2023 at 12:59 AM Akihiko Odaki <akihiko.odaki@daynix.com> wrote:
>
> On 2023/08/30 18:38, marcandre.lureau@redhat.com wrote:
> > From: Marc-André Lureau <marcandre.lureau@redhat.com>
> >
> > The function calls to `kbd_put_keysym` have been updated to now call
> > `kbd_put_keysym_console` with a NULL console parameter.
> >
> > Like most console functions, NULL argument is now for the active console.
> >
> > This will allow to rename the text console functions in a consistent manner.
> >
> > Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> > ---
> >   include/ui/console.h |  1 -
> >   ui/console.c         | 14 ++++++------
> >   ui/curses.c          |  2 +-
> >   ui/vnc.c             | 54 ++++++++++++++++++++++----------------------
> >   ui/cocoa.m           |  2 +-
> >   5 files changed, 36 insertions(+), 37 deletions(-)
> >
> > diff --git a/include/ui/console.h b/include/ui/console.h
> > index 1ccd432b4d..9c362f0e87 100644
> > --- a/include/ui/console.h
> > +++ b/include/ui/console.h
> > @@ -115,7 +115,6 @@ bool qemu_mouse_set(int index, Error **errp);
> >   void kbd_put_keysym_console(QemuTextConsole *s, int keysym);
> >   bool kbd_put_qcode_console(QemuTextConsole *s, int qcode, bool ctrl);
> >   void kbd_put_string_console(QemuTextConsole *s, const char *str, int len);
> > -void kbd_put_keysym(int keysym);
> >
> >   /* Touch devices */
> >   typedef struct touch_slot {
> > diff --git a/ui/console.c b/ui/console.c
> > index a98adbb1b2..6068e02928 100644
> > --- a/ui/console.c
> > +++ b/ui/console.c
> > @@ -1141,6 +1141,13 @@ void kbd_put_keysym_console(QemuTextConsole *s, int 
> > keysym)
> >       int c;
> >       uint32_t num_free;
> >
> > +    if (!s) {
> > +        if (!QEMU_IS_TEXT_CONSOLE(active_console)) {
> > +            return;
> > +        }
> > +        s = QEMU_TEXT_CONSOLE(active_console);
> > +    }
> > +
> >       switch(keysym) {
> >       case QEMU_KEY_CTRL_UP:
> >           console_scroll(s, -1);
> > @@ -1231,13 +1238,6 @@ void kbd_put_string_console(QemuTextConsole *s, 
> > const char *str, int len)
> >       }
> >   }
> >
> > -void kbd_put_keysym(int keysym)
> > -{
> > -    if (QEMU_IS_TEXT_CONSOLE(active_console)) {
> > -        kbd_put_keysym_console(QEMU_TEXT_CONSOLE(active_console), keysym);
> > -    }
> > -}
> > -
> >   static void text_console_invalidate(void *opaque)
> >   {
> >       QemuTextConsole *s = QEMU_TEXT_CONSOLE(opaque);
> > diff --git a/ui/curses.c b/ui/curses.c
> > index de962faa7c..4ddbbae7cd 100644
> > --- a/ui/curses.c
> > +++ b/ui/curses.c
> > @@ -400,7 +400,7 @@ static void curses_refresh(DisplayChangeListener *dcl)
> >               if (keysym == -1)
> >                   keysym = chr;
> >
> > -            kbd_put_keysym(keysym);
> > +            kbd_put_keysym_console(NULL, keysym);
> >           }
> >       }
> >   }
> > diff --git a/ui/vnc.c b/ui/vnc.c
> > index 92964dcc0c..1fa4456744 100644
> > --- a/ui/vnc.c
> > +++ b/ui/vnc.c
> > @@ -1945,88 +1945,88 @@ static void do_key_event(VncState *vs, int down, 
> > int keycode, int sym)
> >               case 0xb8:                          /* Right ALT */
> >                   break;
> >               case 0xc8:
> > -                kbd_put_keysym(QEMU_KEY_UP);
> > +                kbd_put_keysym_console(NULL, QEMU_KEY_UP);
>
> vs->vd->dcl.con should be used instead. There may be VNC connections for
> consoles other than the "active console" and in such a case
> vs->vd->dcl.con != NULL. Unfortunately it seems that ui/vnc is very
> buggy in such a situation.
>

That's not how the console & VNC server code works. VNC server will
send the key event to the hw anyway. But if the active_console is
text/vc, then it also sends (some) of the key events to it. There is
no "per-client" console either, the console switch is global
(console_select()).

Anyway, this patch is quite systematic. Further complicated changes
should be done later. please ack/r-b

thanks



-- 
Marc-André Lureau



reply via email to

[Prev in Thread] Current Thread [Next in Thread]