Add -resizeable option to Xephyr (#962572)
Fix crash on 24bpp host server (#518960)
This commit is contained in:
parent
3db0aea59f
commit
be419c191b
124
0001-ephyr-Add-resizeable-option.patch
Normal file
124
0001-ephyr-Add-resizeable-option.patch
Normal file
@ -0,0 +1,124 @@
|
||||
From 3aac7a59dc6ef2d8bbf46ba5d37acdf6013e9450 Mon Sep 17 00:00:00 2001
|
||||
From: Daniel Martin <daniel.martin@secunet.com>
|
||||
Date: Tue, 11 Dec 2012 17:23:55 +0100
|
||||
Subject: [PATCH] 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>
|
||||
---
|
||||
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 aed0285..c8642cb 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;
|
||||
@@ -1012,19 +1014,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.8.1.4
|
||||
|
78
0001-ephyr-Fix-crash-on-24bpp-host-framebuffer.patch
Normal file
78
0001-ephyr-Fix-crash-on-24bpp-host-framebuffer.patch
Normal file
@ -0,0 +1,78 @@
|
||||
From bd58ebe4cf3b0ce60f87fb26a3715f774dabd349 Mon Sep 17 00:00:00 2001
|
||||
From: Daniel Martin <consume.noise@gmail.com>
|
||||
Date: Thu, 20 Dec 2012 13:50:17 +0100
|
||||
Subject: [PATCH] ephyr: Fix crash on 24bpp host framebuffer
|
||||
|
||||
Use bytes_per_line and bits_per_pixel from the created XImage to fix
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=518960
|
||||
|
||||
Signed-off-by: Daniel Martin <consume.noise@gmail.com>
|
||||
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
---
|
||||
hw/kdrive/ephyr/ephyr.c | 6 ++----
|
||||
hw/kdrive/ephyr/hostx.c | 6 +++++-
|
||||
hw/kdrive/ephyr/hostx.h | 3 ++-
|
||||
3 files changed, 9 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/hw/kdrive/ephyr/ephyr.c b/hw/kdrive/ephyr/ephyr.c
|
||||
index f32e432..02d4970 100644
|
||||
--- a/hw/kdrive/ephyr/ephyr.c
|
||||
+++ b/hw/kdrive/ephyr/ephyr.c
|
||||
@@ -238,13 +238,11 @@ ephyrMapFramebuffer(KdScreenInfo * screen)
|
||||
KdComputePointerMatrix(&m, ephyrRandr, screen->width, screen->height);
|
||||
KdSetPointerMatrix(&m);
|
||||
|
||||
- priv->bytes_per_line =
|
||||
- ((screen->width * screen->fb.bitsPerPixel + 31) >> 5) << 2;
|
||||
-
|
||||
buffer_height = ephyrBufferHeight(screen);
|
||||
|
||||
priv->base =
|
||||
- hostx_screen_init(screen, screen->width, screen->height, buffer_height);
|
||||
+ hostx_screen_init(screen, screen->width, screen->height, buffer_height,
|
||||
+ &priv->bytes_per_line, &screen->fb.bitsPerPixel);
|
||||
|
||||
if ((scrpriv->randr & RR_Rotate_0) && !(scrpriv->randr & RR_Reflect_All)) {
|
||||
scrpriv->shadow = FALSE;
|
||||
diff --git a/hw/kdrive/ephyr/hostx.c b/hw/kdrive/ephyr/hostx.c
|
||||
index c8642cb..f2b458d 100644
|
||||
--- a/hw/kdrive/ephyr/hostx.c
|
||||
+++ b/hw/kdrive/ephyr/hostx.c
|
||||
@@ -619,7 +619,8 @@ hostx_set_cmap_entry(unsigned char idx,
|
||||
*/
|
||||
void *
|
||||
hostx_screen_init(EphyrScreenInfo screen,
|
||||
- int width, int height, int buffer_height)
|
||||
+ int width, int height, int buffer_height,
|
||||
+ int *bytes_per_line, int *bits_per_pixel)
|
||||
{
|
||||
int bitmap_pad;
|
||||
Bool shm_success = False;
|
||||
@@ -696,6 +697,9 @@ hostx_screen_init(EphyrScreenInfo screen,
|
||||
malloc(host_screen->ximg->bytes_per_line * buffer_height);
|
||||
}
|
||||
|
||||
+ *bytes_per_line = host_screen->ximg->bytes_per_line;
|
||||
+ *bits_per_pixel = host_screen->ximg->bits_per_pixel;
|
||||
+
|
||||
XResizeWindow(HostX.dpy, host_screen->win, width, height);
|
||||
|
||||
/* Ask the WM to keep our size static */
|
||||
diff --git a/hw/kdrive/ephyr/hostx.h b/hw/kdrive/ephyr/hostx.h
|
||||
index 31c4053..38b7b37 100644
|
||||
--- a/hw/kdrive/ephyr/hostx.h
|
||||
+++ b/hw/kdrive/ephyr/hostx.h
|
||||
@@ -193,7 +193,8 @@ hostx_set_cmap_entry(unsigned char idx,
|
||||
unsigned char r, unsigned char g, unsigned char b);
|
||||
|
||||
void *hostx_screen_init(EphyrScreenInfo screen,
|
||||
- int width, int height, int buffer_height);
|
||||
+ int width, int height, int buffer_height,
|
||||
+ int *bytes_per_line, int *bits_per_pixel);
|
||||
|
||||
void
|
||||
|
||||
--
|
||||
1.8.1.4
|
||||
|
@ -42,7 +42,7 @@
|
||||
Summary: X.Org X11 X server
|
||||
Name: xorg-x11-server
|
||||
Version: 1.14.1
|
||||
Release: 1%{?gitdate:.%{gitdate}}%{dist}
|
||||
Release: 2%{?gitdate:.%{gitdate}}%{dist}
|
||||
URL: http://www.x.org
|
||||
License: MIT
|
||||
Group: User Interface/X
|
||||
@ -109,6 +109,12 @@ Patch7052: 0001-xf86-return-NULL-for-compat-output-if-no-outputs.patch
|
||||
# mustard: make the default queue length bigger to calm abrt down
|
||||
Patch7064: 0001-mieq-Bump-default-queue-size-to-512.patch
|
||||
|
||||
# Bug 962572 - X-sandboxes are not resizeable
|
||||
# enabled by default until sandbox -X uses the option
|
||||
Patch7065: 0001-ephyr-Add-resizeable-option.patch
|
||||
# Bug 518960 - Xephyr crashes in 24bpp
|
||||
Patch7067: 0001-ephyr-Fix-crash-on-24bpp-host-framebuffer.patch
|
||||
|
||||
# upstream in -next for 1.15, e21e183059df5975e7086850d1931edb2c1bbd06
|
||||
%if !0%{?rhel}
|
||||
Patch7071: 0001-os-use-libunwind-to-generate-backtraces.patch
|
||||
@ -586,6 +592,10 @@ rm -rf $RPM_BUILD_ROOT
|
||||
%{xserver_source_dir}
|
||||
|
||||
%changelog
|
||||
* Tue May 14 2013 Peter Hutterer <peter.hutterer@redhat.com> 1.14.1-2
|
||||
- Add -resizeable option to Xephyr, enable by default (#962572)
|
||||
- Fix crash on 24bpp host server (#518960)
|
||||
|
||||
* Mon May 06 2013 Dave Airlie <airlied@redhat.com> 1.14.1-1
|
||||
- upstream rebase
|
||||
- reorganise the randr/gpu screen patches + backports
|
||||
|
Loading…
Reference in New Issue
Block a user