ephyr: Add -resizeable option

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@secunet.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
Daniel Martin 2012-12-11 17:23:55 +01:00 committed by Peter Hutterer
parent f9198e278b
commit 3aac7a59dc
3 changed files with 28 additions and 11 deletions

View File

@ -56,6 +56,7 @@ typedef struct _EphyrInputPrivate {
} EphyrKbdPrivate, EphyrPointerPrivate; } EphyrKbdPrivate, EphyrPointerPrivate;
Bool EphyrWantGrayScale = 0; Bool EphyrWantGrayScale = 0;
Bool EphyrWantResize = 0;
Bool Bool
ephyrInitialize(KdCardInfo * card, EphyrPriv * priv) ephyrInitialize(KdCardInfo * card, EphyrPriv * priv)

View File

@ -31,6 +31,7 @@
extern Window EphyrPreExistingHostWin; extern Window EphyrPreExistingHostWin;
extern Bool EphyrWantGrayScale; extern Bool EphyrWantGrayScale;
extern Bool EphyrWantResize;
extern Bool kdHasPointer; extern Bool kdHasPointer;
extern Bool kdHasKbd; extern Bool kdHasKbd;
@ -116,6 +117,7 @@ ddxUseMsg(void)
ErrorF("-host-cursor Re-use exisiting X host server cursor\n"); ErrorF("-host-cursor Re-use exisiting X host server cursor\n");
ErrorF("-fullscreen Attempt to run Xephyr fullscreen\n"); ErrorF("-fullscreen Attempt to run Xephyr fullscreen\n");
ErrorF("-grayscale Simulate 8bit grayscale\n"); ErrorF("-grayscale Simulate 8bit grayscale\n");
ErrorF("-resizeable Make Xephyr windows resizeable\n");
ErrorF ErrorF
("-fakexa Simulate acceleration using software rendering\n"); ("-fakexa Simulate acceleration using software rendering\n");
ErrorF("-verbosity <level> Set log verbosity level\n"); ErrorF("-verbosity <level> Set log verbosity level\n");
@ -210,6 +212,10 @@ ddxProcessArgument(int argc, char **argv, int i)
EphyrWantGrayScale = 1; EphyrWantGrayScale = 1;
return 1; return 1;
} }
else if (!strcmp(argv[i], "-resizeable")) {
EphyrWantResize = 1;
return 1;
}
else if (!strcmp(argv[i], "-fakexa")) { else if (!strcmp(argv[i], "-fakexa")) {
ephyrFuncs.initAccel = ephyrDrawInit; ephyrFuncs.initAccel = ephyrDrawInit;
ephyrFuncs.enableAccel = ephyrDrawEnable; ephyrFuncs.enableAccel = ephyrDrawEnable;

View File

@ -117,6 +117,8 @@ extern EphyrKeySyms ephyrKeySyms;
extern int monitorResolution; extern int monitorResolution;
extern Bool EphyrWantResize;
char *ephyrResName = NULL; char *ephyrResName = NULL;
int ephyrResNameFromCmd = 0; int ephyrResNameFromCmd = 0;
char *ephyrTitle = NULL; char *ephyrTitle = NULL;
@ -697,7 +699,7 @@ hostx_screen_init(EphyrScreenInfo screen,
XResizeWindow(HostX.dpy, host_screen->win, width, height); XResizeWindow(HostX.dpy, host_screen->win, width, height);
/* Ask the WM to keep our size static */ /* 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 = XAllocSizeHints();
size_hints->max_width = size_hints->min_width = width; size_hints->max_width = size_hints->min_width = width;
size_hints->max_height = size_hints->min_height = height; size_hints->max_height = size_hints->min_height = height;
@ -1012,19 +1014,27 @@ hostx_get_event(EphyrHostXEvent * ev)
case ConfigureNotify: case ConfigureNotify:
{ {
struct EphyrHostScreen *host_screen = struct EphyrHostScreen *host_screen;
host_screen_from_window(xev.xconfigure.window);
if (host_screen && host_screen->win_pre_existing != None) { /* event compression as for Expose events, cause
ev->type = EPHYR_EV_CONFIGURE; * we don't want to resize the framebuffer for
ev->data.configure.width = xev.xconfigure.width; * every single change */
ev->data.configure.height = xev.xconfigure.height; while (XCheckTypedWindowEvent(HostX.dpy, xev.xconfigure.window,
ev->data.configure.window = xev.xconfigure.window; ConfigureNotify, &xev));
ev->data.configure.screen = host_screen->mynum; host_screen = host_screen_from_window(xev.xconfigure.window);
return 1;
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: default:
break; break;