[PATCH 1/3] compositor-{drm, fbdev, rpi}: Make VT switching configurable

Derek Foreman derekf at osg.samsung.com
Mon Jan 11 09:58:45 PST 2016


On 11/01/16 09:41 AM, Bob Ham wrote:
> Add a new boolean weston.ini option, "vt-switching" to enable or
> disable Ctrl-Alt-Fn key combinations.
> 
> Signed-off-by: Bob Ham <bob.ham at collabora.com>
> ---
>  Makefile.am             |  4 +++-
>  man/weston.ini.man      |  6 ++++++
>  src/compositor-drm.c    | 16 ++--------------
>  src/compositor-fbdev.c  | 18 +++---------------
>  src/compositor-rpi.c    | 17 ++---------------
>  src/compositor.h        |  2 ++
>  src/launcher-bindings.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++
>  src/launcher-bindings.h | 26 ++++++++++++++++++++++++++
>  src/main.c              |  5 +++++
>  9 files changed, 98 insertions(+), 45 deletions(-)
>  create mode 100644 src/launcher-bindings.c
>  create mode 100644 src/launcher-bindings.h
> 
> diff --git a/Makefile.am b/Makefile.am
> index cbb3b57..18f3801 100644
> --- a/Makefile.am
> +++ b/Makefile.am
> @@ -145,7 +145,9 @@ libsession_helper_la_SOURCES =			\
>  	src/launcher-impl.h			\
>  	src/weston-launch.h			\
>  	src/launcher-weston-launch.c		\
> -	src/launcher-direct.c
> +	src/launcher-direct.c			\
> +	src/launcher-bindings.c			\
> +	src/launcher-bindings.h
>  libsession_helper_la_CFLAGS = $(AM_CFLAGS) $(LIBDRM_CFLAGS) $(PIXMAN_CFLAGS) $(COMPOSITOR_CFLAGS)
>  libsession_helper_la_LIBADD = $(LIBDRM_LIBS)
>  
> diff --git a/man/weston.ini.man b/man/weston.ini.man
> index a9b6026..4f97c4d 100644
> --- a/man/weston.ini.man
> +++ b/man/weston.ini.man
> @@ -455,6 +455,12 @@ sets the default state of the numlock on weston startup for the backends which
>  support it.
>  .RE
>  .RE
> +.TP 7
> +.BI "vt-switching=" "true"
> +Whether to allow the use of Ctrl+Alt+Fn key combinations to switch away from
> +the compositor's virtual console.
> +.RE
> +.RE
>  .SH "TERMINAL SECTION"
>  Contains settings for the weston terminal application (weston-terminal). It
>  allows to customize the font and shell of the command line interface.
> diff --git a/src/compositor-drm.c b/src/compositor-drm.c
> index ea6f3cd..8663cf3 100644
> --- a/src/compositor-drm.c
> +++ b/src/compositor-drm.c
> @@ -54,6 +54,7 @@
>  #include "pixman-renderer.h"
>  #include "libinput-seat.h"
>  #include "launcher-util.h"
> +#include "launcher-bindings.h"
>  #include "vaapi-recorder.h"
>  #include "presentation_timing-server-protocol.h"
>  #include "linux-dmabuf.h"
> @@ -2815,15 +2816,6 @@ session_notify(struct wl_listener *listener, void *data)
>  	};
>  }
>  
> -static void
> -switch_vt_binding(struct weston_keyboard *keyboard, uint32_t time,
> -		  uint32_t key, void *data)
> -{
> -	struct weston_compositor *compositor = data;
> -
> -	weston_launcher_activate_vt(compositor->launcher, key - KEY_F1 + 1);
> -}
> -
>  /*
>   * Find primary GPU
>   * Some systems may have multiple DRM devices attached to a single seat. This
> @@ -3076,7 +3068,6 @@ drm_backend_create(struct weston_compositor *compositor,
>  	struct udev_device *drm_device;
>  	struct wl_event_loop *loop;
>  	const char *path;
> -	uint32_t key;
>  
>  	weston_log("initializing drm backend\n");
>  
> @@ -3152,10 +3143,7 @@ drm_backend_create(struct weston_compositor *compositor,
>  
>  	b->prev_state = WESTON_COMPOSITOR_ACTIVE;
>  
> -	for (key = KEY_F1; key < KEY_F9; key++)
> -		weston_compositor_add_key_binding(compositor, key,
> -						  MODIFIER_CTRL | MODIFIER_ALT,
> -						  switch_vt_binding, compositor);
> +	weston_setup_vt_switch_bindings(compositor);
>  
>  	wl_list_init(&b->sprite_list);
>  	create_sprites(b);
> diff --git a/src/compositor-fbdev.c b/src/compositor-fbdev.c
> index f7782d8..2f486b9 100644
> --- a/src/compositor-fbdev.c
> +++ b/src/compositor-fbdev.c
> @@ -45,6 +45,7 @@
>  #include "shared/helpers.h"
>  #include "compositor.h"
>  #include "launcher-util.h"
> +#include "launcher-bindings.h"
>  #include "pixman-renderer.h"
>  #include "libinput-seat.h"
>  #include "gl-renderer.h"
> @@ -741,15 +742,6 @@ fbdev_restore(struct weston_compositor *compositor)
>  	weston_launcher_restore(compositor->launcher);
>  }
>  
> -static void
> -switch_vt_binding(struct weston_keyboard *keyboard, uint32_t time,
> -		  uint32_t key, void *data)
> -{
> -	struct weston_compositor *compositor = data;
> -
> -	weston_launcher_activate_vt(compositor->launcher, key - KEY_F1 + 1);
> -}
> -
>  static struct fbdev_backend *
>  fbdev_backend_create(struct weston_compositor *compositor, int *argc, char *argv[],
>                       struct weston_config *config,
> @@ -757,7 +749,6 @@ fbdev_backend_create(struct weston_compositor *compositor, int *argc, char *argv
>  {
>  	struct fbdev_backend *backend;
>  	const char *seat_id = default_seat;
> -	uint32_t key;
>  
>  	weston_log("initializing fbdev backend\n");
>  
> @@ -794,11 +785,8 @@ fbdev_backend_create(struct weston_compositor *compositor, int *argc, char *argv
>  	backend->prev_state = WESTON_COMPOSITOR_ACTIVE;
>  	backend->use_pixman = !param->use_gl;
>  
> -	for (key = KEY_F1; key < KEY_F9; key++)
> -		weston_compositor_add_key_binding(compositor, key,
> -		                                  MODIFIER_CTRL | MODIFIER_ALT,
> -		                                  switch_vt_binding,
> -		                                  compositor);
> +	weston_setup_vt_switch_bindings(compositor);
> +
>  	if (backend->use_pixman) {
>  		if (pixman_renderer_init(compositor) < 0)
>  			goto out_launcher;
> diff --git a/src/compositor-rpi.c b/src/compositor-rpi.c
> index 4d7ea7b..64bd6bc 100644
> --- a/src/compositor-rpi.c
> +++ b/src/compositor-rpi.c
> @@ -37,7 +37,6 @@
>  #include <fcntl.h>
>  #include <unistd.h>
>  
> -#include <linux/input.h>
>  #include <libudev.h>
>  
>  #ifdef HAVE_BCM_HOST
> @@ -50,6 +49,7 @@
>  #include "compositor.h"
>  #include "rpi-renderer.h"
>  #include "launcher-util.h"
> +#include "launcher-bindings.h"
>  #include "libinput-seat.h"
>  #include "presentation_timing-server-protocol.h"
>  
> @@ -448,15 +448,6 @@ rpi_restore(struct weston_compositor *compositor)
>  	weston_launcher_restore(compositor->launcher);
>  }
>  
> -static void
> -switch_vt_binding(struct weston_keyboard *keyboard, uint32_t time,
> -		  uint32_t key, void *data)
> -{
> -	struct weston_compositor *compositor = data;
> -
> -	weston_launcher_activate_vt(compositor->launcher, key - KEY_F1 + 1);
> -}
> -
>  struct rpi_parameters {
>  	int tty;
>  	struct rpi_renderer_parameters renderer;
> @@ -468,7 +459,6 @@ rpi_backend_create(struct weston_compositor *compositor,
>  		   struct rpi_parameters *param)
>  {
>  	struct rpi_backend *backend;
> -	uint32_t key;
>  
>  	weston_log("initializing Raspberry Pi backend\n");
>  
> @@ -506,10 +496,7 @@ rpi_backend_create(struct weston_compositor *compositor,
>  	weston_log("Dispmanx planes are %s buffered.\n",
>  		   backend->single_buffer ? "single" : "double");
>  
> -	for (key = KEY_F1; key < KEY_F9; key++)
> -		weston_compositor_add_key_binding(compositor, key,
> -						  MODIFIER_CTRL | MODIFIER_ALT,
> -						  switch_vt_binding, compositor);
> +	weston_setup_vt_switch_bindings(compositor);
>  
>  	/*
>  	 * bcm_host_init() creates threads.
> diff --git a/src/compositor.h b/src/compositor.h
> index 2848674..130b258 100644
> --- a/src/compositor.h
> +++ b/src/compositor.h
> @@ -751,6 +751,8 @@ struct weston_compositor {
>  	int32_t kb_repeat_rate;
>  	int32_t kb_repeat_delay;
>  
> +	bool vt_switching;
> +
>  	clockid_t presentation_clock;
>  	int32_t repaint_msec;
>  
> diff --git a/src/launcher-bindings.c b/src/launcher-bindings.c
> new file mode 100644
> index 0000000..39941a3
> --- /dev/null
> +++ b/src/launcher-bindings.c
> @@ -0,0 +1,49 @@
> +/*
> + * Copyright (c) 2016 General Electric Company.
> + *
> + * Permission to use, copy, modify, distribute, and sell this software and
> + * its documentation for any purpose is hereby granted without fee, provided
> + * that the above copyright notice appear in all copies and that both that
> + * copyright notice and this permission notice appear in supporting
> + * documentation, and that the name of the copyright holders not be used in
> + * advertising or publicity pertaining to distribution of the software
> + * without specific, written prior permission.  The copyright holders make
> + * no representations about the suitability of this software for any
> + * purpose.  It is provided "as is" without express or implied warranty.
> + *
> + * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
> + * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
> + * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
> + * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
> + * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
> + * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
> + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
> + */
> +
> +#include <linux/input.h>
> +
> +#include "launcher-bindings.h"
> +#include "launcher-util.h"
> +
> +static void
> +switch_vt_binding(struct weston_seat *seat, uint32_t time, uint32_t key, void *data)
> +{
> +	struct weston_compositor *compositor = data;
> +
> +	weston_launcher_activate_vt(compositor->launcher, key - KEY_F1 + 1);
> +}
> +
> +WL_EXPORT void
> +weston_setup_vt_switch_bindings(struct weston_compositor *compositor)
> +{
> +	uint32_t key;
> +
> +	if (compositor->vt_switching == false)
> +		return;
> +
> +	for (key = KEY_F1; key < KEY_F9; key++)
> +		weston_compositor_add_key_binding(compositor, key,
> +						  MODIFIER_CTRL | MODIFIER_ALT,
> +						  switch_vt_binding,
> +						  compositor);
> +}
> diff --git a/src/launcher-bindings.h b/src/launcher-bindings.h
> new file mode 100644
> index 0000000..597a425
> --- /dev/null
> +++ b/src/launcher-bindings.h
> @@ -0,0 +1,26 @@
> +/*
> + * Copyright (c) 2016 General Electric Company.
> + *
> + * Permission to use, copy, modify, distribute, and sell this software and
> + * its documentation for any purpose is hereby granted without fee, provided
> + * that the above copyright notice appear in all copies and that both that
> + * copyright notice and this permission notice appear in supporting
> + * documentation, and that the name of the copyright holders not be used in
> + * advertising or publicity pertaining to distribution of the software
> + * without specific, written prior permission.  The copyright holders make
> + * no representations about the suitability of this software for any
> + * purpose.  It is provided "as is" without express or implied warranty.
> + *
> + * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
> + * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
> + * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
> + * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
> + * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
> + * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
> + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
> + */
> +

Couldn't these just go into launcher-util?

If we really need new files, we should have protective ifdefs in the header.

That sorted and this is
Reviewed-by: Derek Foreman <derekf at osg.samsung.com>

> +#include "compositor.h"
> +
> +void
> +weston_setup_vt_switch_bindings(struct weston_compositor *compositor);
> diff --git a/src/main.c b/src/main.c
> index 6d2216f..1850fa6 100644
> --- a/src/main.c
> +++ b/src/main.c
> @@ -499,6 +499,7 @@ weston_compositor_init_config(struct weston_compositor *ec,
>  	struct xkb_rule_names xkb_names;
>  	struct weston_config_section *s;
>  	int repaint_msec;
> +	int vt_switching;
>  
>  	s = weston_config_get_section(config, "keyboard", NULL, NULL);
>  	weston_config_section_get_string(s, "keymap_rules",
> @@ -520,6 +521,10 @@ weston_compositor_init_config(struct weston_compositor *ec,
>  	weston_config_section_get_int(s, "repeat-delay",
>  				      &ec->kb_repeat_delay, 400);
>  
> +	weston_config_section_get_bool(s, "vt-switching",
> +				       &vt_switching, true);
> +	ec->vt_switching = vt_switching;
> +
>  	s = weston_config_get_section(config, "core", NULL, NULL);
>  	weston_config_section_get_int(s, "repaint-window", &repaint_msec,
>  				      ec->repaint_msec);
> 



More information about the wayland-devel mailing list