On Mon, 5 Dec 2016 14:50:37 +0100 Giulio Camuffo <[email protected]> wrote:
> A compositor may want to control the vt switching, for example to > ensure to have a lock screen before it. To enable that add a vfunc > that will be called when CTRL+ALT+FN is pressed. The default behavior > is to do the switching, but the user can change it by using the new > weston_compositor_set_vt_switcher() function, so that it can delay the > switching to later, by calling weston_compositor_activate_vt(). > > Signed-off-by: Giulio Camuffo <[email protected]> > --- > > v3: removed leftover include, fix wrong name in documentation > > Makefile.am | 2 +- > libweston/compositor.c | 18 ++++++++++++++++++ > libweston/compositor.h | 39 +++++++++++++++++++++++++++++++++++++++ > libweston/launcher-impl.h | 1 + > libweston/launcher-util.c | 6 +++++- > 5 files changed, 64 insertions(+), 2 deletions(-) > > diff --git a/Makefile.am b/Makefile.am > index 2219e3d..1a13b85 100644 > --- a/Makefile.am > +++ b/Makefile.am > @@ -74,7 +74,7 @@ libweston_@LIBWESTON_MAJOR@_la_CPPFLAGS = $(AM_CPPFLAGS) > -DIN_WESTON > libweston_@LIBWESTON_MAJOR@_la_CFLAGS = $(AM_CFLAGS) $(COMPOSITOR_CFLAGS) > $(LIBUNWIND_CFLAGS) > libweston_@LIBWESTON_MAJOR@_la_LIBADD = $(COMPOSITOR_LIBS) $(LIBUNWIND_LIBS) > \ > $(DLOPEN_LIBS) -lm $(CLOCK_GETTIME_LIBS) \ > - $(LIBINPUT_BACKEND_LIBS) libshared.la > + $(LIBINPUT_BACKEND_LIBS) libshared.la libsession-helper.la > libweston_@LIBWESTON_MAJOR@_la_LDFLAGS = -version-info $(LT_VERSION_INFO) > > libweston_@LIBWESTON_MAJOR@_la_SOURCES = \ Hi, it is the last moment before the beta release, and while minor features would be fine to land, I hesitate mostly because of making libweston.so directly depend on libdrm, logind and dbus if support for them is enabled on build. OTOH this patch also adds public API, so I think those two combined maybe it's better to postpone merging this to the next cycle. Another thought is that instead of having weston_compositor_activate_vt() and weston_compositor_set_vt_switcher() as libweston API it could be an extension API advertized by libsession-helper.la through the plugin registry. Then there is no need to call libsession-helper from libweston core, avoiding the dependencies. That's what the plugin registry is for: offering e.g. backend-specific services. Then it is also obvious to the compositor whether the feature is even supposed to work. If that sounds good to you, I would be more at ease. If not, then I suppose we'll just merge this the next cycle. Thanks, pq > diff --git a/libweston/compositor.c b/libweston/compositor.c > index 6457858..6e44c72 100644 > --- a/libweston/compositor.c > +++ b/libweston/compositor.c > @@ -55,6 +55,8 @@ > > #include "compositor.h" > #include "viewporter-server-protocol.h" > +#include "launcher-impl.h" > +#include "launcher-util.h" > #include "presentation-time-server-protocol.h" > #include "shared/helpers.h" > #include "shared/os-compatibility.h" > @@ -4922,6 +4924,22 @@ compositor_bind(struct wl_client *client, > } > > WL_EXPORT int > +weston_compositor_activate_vt(struct weston_compositor *compositor, int vt) > +{ > + if (compositor->launcher) > + return weston_launcher_activate_vt(compositor->launcher, vt); > + return -1; > +} > + > +WL_EXPORT void > +weston_compositor_set_vt_switcher(struct weston_compositor *compositor, > + weston_compositor_vt_switcher_func_t switcher) > +{ > + if (compositor->launcher) > + compositor->launcher->vt_switcher = switcher; > +} > + > +WL_EXPORT int > weston_environment_get_fd(const char *env) > { > char *e; > diff --git a/libweston/compositor.h b/libweston/compositor.h > index ce3d9ab..114d618 100644 > --- a/libweston/compositor.h > +++ b/libweston/compositor.h > @@ -1447,6 +1447,45 @@ void > weston_compositor_set_default_pointer_grab(struct weston_compositor > *compositor, > const struct weston_pointer_grab_interface *interface); > > +/** > + * Request a vt switch for the compositor. > + * > + * This will only work if the compositor is running as the owner of > + * the session. > + * > + * \param compositor The compositor instance. > + * \param vt The vt to switch to. > + * > + * Returns 0 on success, -1 otherwise. > + * > + * \sa weston_compositor_set_vt_switcher > + */ > +int > +weston_compositor_activate_vt(struct weston_compositor *compositor, int vt); > + > +typedef void (*weston_compositor_vt_switcher_func_t)( > + struct weston_compositor *compositor, int vt); > +/** > + * Set the vt switcher for the compositor. > + * > + * If the compositor is the owner of the session, the CTRL+ALT+FN key > + * combinations will trigger a vt switch. The default behavior is to do > + * the switching immediately, but some compositors may want to make sure to > + * e.g. draw a lock screen before doing the switch. > + * This function allows to register a custom vt switcher so that the actual > + * vt switch can be controlled by calling \a weston_compositor_activate_vt. > + * > + * \param compositor The compositor instance. > + * \param switcher The vt switcher function, which will be called when a > + * CTRL+ALT+FN key combination is pressed, carrying the > + * requested vt. > + * > + * \sa weston_compositor_activate_vt > + */ > +void > +weston_compositor_set_vt_switcher(struct weston_compositor *compositor, > + weston_compositor_vt_switcher_func_t > switcher); > + > int > weston_environment_get_fd(const char *env); > > diff --git a/libweston/launcher-impl.h b/libweston/launcher-impl.h > index 8d09025..8ba1673 100644 > --- a/libweston/launcher-impl.h > +++ b/libweston/launcher-impl.h > @@ -40,6 +40,7 @@ struct launcher_interface { > > struct weston_launcher { > struct launcher_interface *iface; > + weston_compositor_vt_switcher_func_t vt_switcher; > }; > > extern struct launcher_interface launcher_logind_iface; > diff --git a/libweston/launcher-util.c b/libweston/launcher-util.c > index 2b828be..5845cf3 100644 > --- a/libweston/launcher-util.c > +++ b/libweston/launcher-util.c > @@ -100,11 +100,15 @@ switch_vt_binding(struct weston_keyboard *keyboard, > struct weston_compositor *compositor = data; > struct weston_launcher *launcher = compositor->launcher; > int vt = key - KEY_F1 + 1; > + weston_compositor_vt_switcher_func_t switcher = launcher->vt_switcher; > > if (vt == launcher->iface->get_vt(launcher)) > return; > > - weston_launcher_activate_vt(launcher, vt); > + if (switcher) > + launcher->vt_switcher(compositor, vt); > + else > + weston_launcher_activate_vt(launcher, vt); > } > > WL_EXPORT void
pgptHH4NmEYzE.pgp
Description: OpenPGP digital signature
_______________________________________________ wayland-devel mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/wayland-devel
