On Tue, Dec 11, 2012 at 05:23:55PM +0100, Daniel Martin wrote: > From: Daniel Martin <[email protected]> > > 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 <[email protected]>
Acked-by: Peter Hutterer <[email protected]> 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 > > _______________________________________________ > [email protected]: X.Org development > Archives: http://lists.x.org/archives/xorg-devel > Info: http://lists.x.org/mailman/listinfo/xorg-devel > _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
