[PATCH] ephyr: Add -resizeable option
Peter Hutterer
peter.hutterer at who-t.net
Wed Dec 12 22:10:51 PST 2012
On Tue, Dec 11, 2012 at 05:23:55PM +0100, Daniel Martin wrote:
> From: Daniel Martin <daniel.martin at secunet.com>
>
> With this option passed, ephyr windows can be resized like normal
> windows on the fly, without the need of an explicit parent window.
>
> Signed-off-by: Daniel Martin <daniel.martin at secunet.com>
Acked-by: Peter Hutterer <peter.hutterer at who-t.net>
Cheers,
Peter
> ---
> hw/kdrive/ephyr/ephyr.c | 1 +
> hw/kdrive/ephyr/ephyrinit.c | 6 ++++++
> hw/kdrive/ephyr/hostx.c | 34 ++++++++++++++++++++++------------
> 3 files changed, 29 insertions(+), 12 deletions(-)
>
> diff --git a/hw/kdrive/ephyr/ephyr.c b/hw/kdrive/ephyr/ephyr.c
> index e6520d0..f32e432 100644
> --- a/hw/kdrive/ephyr/ephyr.c
> +++ b/hw/kdrive/ephyr/ephyr.c
> @@ -56,6 +56,7 @@ typedef struct _EphyrInputPrivate {
> } EphyrKbdPrivate, EphyrPointerPrivate;
>
> Bool EphyrWantGrayScale = 0;
> +Bool EphyrWantResize = 0;
>
> Bool
> ephyrInitialize(KdCardInfo * card, EphyrPriv * priv)
> diff --git a/hw/kdrive/ephyr/ephyrinit.c b/hw/kdrive/ephyr/ephyrinit.c
> index 5e2eb67..adacac9 100644
> --- a/hw/kdrive/ephyr/ephyrinit.c
> +++ b/hw/kdrive/ephyr/ephyrinit.c
> @@ -31,6 +31,7 @@
>
> extern Window EphyrPreExistingHostWin;
> extern Bool EphyrWantGrayScale;
> +extern Bool EphyrWantResize;
> extern Bool kdHasPointer;
> extern Bool kdHasKbd;
>
> @@ -116,6 +117,7 @@ ddxUseMsg(void)
> ErrorF("-host-cursor Re-use exisiting X host server cursor\n");
> ErrorF("-fullscreen Attempt to run Xephyr fullscreen\n");
> ErrorF("-grayscale Simulate 8bit grayscale\n");
> + ErrorF("-resizeable Make Xephyr windows resizeable\n");
> ErrorF
> ("-fakexa Simulate acceleration using software rendering\n");
> ErrorF("-verbosity <level> Set log verbosity level\n");
> @@ -210,6 +212,10 @@ ddxProcessArgument(int argc, char **argv, int i)
> EphyrWantGrayScale = 1;
> return 1;
> }
> + else if (!strcmp(argv[i], "-resizeable")) {
> + EphyrWantResize = 1;
> + return 1;
> + }
> else if (!strcmp(argv[i], "-fakexa")) {
> ephyrFuncs.initAccel = ephyrDrawInit;
> ephyrFuncs.enableAccel = ephyrDrawEnable;
> diff --git a/hw/kdrive/ephyr/hostx.c b/hw/kdrive/ephyr/hostx.c
> index 157ac36..54cd2af 100644
> --- a/hw/kdrive/ephyr/hostx.c
> +++ b/hw/kdrive/ephyr/hostx.c
> @@ -117,6 +117,8 @@ extern EphyrKeySyms ephyrKeySyms;
>
> extern int monitorResolution;
>
> +extern Bool EphyrWantResize;
> +
> char *ephyrResName = NULL;
> int ephyrResNameFromCmd = 0;
> char *ephyrTitle = NULL;
> @@ -697,7 +699,7 @@ hostx_screen_init(EphyrScreenInfo screen,
> XResizeWindow(HostX.dpy, host_screen->win, width, height);
>
> /* Ask the WM to keep our size static */
> - if (host_screen->win_pre_existing == None) {
> + if (host_screen->win_pre_existing == None && !EphyrWantResize) {
> size_hints = XAllocSizeHints();
> size_hints->max_width = size_hints->min_width = width;
> size_hints->max_height = size_hints->min_height = height;
> @@ -1011,19 +1013,27 @@ hostx_get_event(EphyrHostXEvent * ev)
>
> case ConfigureNotify:
> {
> - struct EphyrHostScreen *host_screen =
> - host_screen_from_window(xev.xconfigure.window);
> -
> - if (host_screen && host_screen->win_pre_existing != None) {
> - ev->type = EPHYR_EV_CONFIGURE;
> - ev->data.configure.width = xev.xconfigure.width;
> - ev->data.configure.height = xev.xconfigure.height;
> - ev->data.configure.window = xev.xconfigure.window;
> - ev->data.configure.screen = host_screen->mynum;
> - return 1;
> + struct EphyrHostScreen *host_screen;
> +
> + /* event compression as for Expose events, cause
> + * we don't want to resize the framebuffer for
> + * every single change */
> + while (XCheckTypedWindowEvent(HostX.dpy, xev.xconfigure.window,
> + ConfigureNotify, &xev));
> + host_screen = host_screen_from_window(xev.xconfigure.window);
> +
> + if (!host_screen ||
> + (host_screen->win_pre_existing == None && !EphyrWantResize)) {
> + return 0;
> }
>
> - return 0;
> + ev->type = EPHYR_EV_CONFIGURE;
> + ev->data.configure.width = xev.xconfigure.width;
> + ev->data.configure.height = xev.xconfigure.height;
> + ev->data.configure.window = xev.xconfigure.window;
> + ev->data.configure.screen = host_screen->mynum;
> +
> + return 1;
> }
> default:
> break;
> --
> 1.7.9.5
>
> _______________________________________________
> xorg-devel at lists.x.org: X.Org development
> Archives: http://lists.x.org/archives/xorg-devel
> Info: http://lists.x.org/mailman/listinfo/xorg-devel
>
More information about the xorg-devel
mailing list