You've already forked wine-staging
mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2025-04-13 14:42:51 -07:00
Compare commits
9 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
1a0d969d12 | ||
|
a926ab3deb | ||
|
d31a32b073 | ||
|
c21aa8beb3 | ||
|
67079f94ae | ||
|
c1dccff70a | ||
|
7b41306c4b | ||
|
2d7390de4b | ||
|
28bbb866f2 |
14
debian/changelog
vendored
14
debian/changelog
vendored
@@ -1,3 +1,17 @@
|
||||
wine-compholio (1.7.10) unstable; urgency=low
|
||||
* Removed monitor enumeration patch included in upstream Wine 1.7.10.
|
||||
* Updated SIO_ADDRESS_LIST_CHANGE patch with latest proposed version.
|
||||
* Added new patch to support linux windowlessmode (required for Qt5 browsers).
|
||||
-- Erich E. Hoover <erich.e.hoover@gmail.com> Fri, 03 Jan 2014 12:19:14 -0700
|
||||
|
||||
wine-compholio (1.7.9) unstable; urgency=low
|
||||
* Added a new patch for windowless mode for Qt5 browsers.
|
||||
-- Erich E. Hoover <erich.e.hoover@gmail.com> Fri, 27 Dec 2013 12:03:22 -0700
|
||||
|
||||
wine-compholio (1.7.8-1) unstable; urgency=low
|
||||
* Fixed several build problems.
|
||||
-- Erich E. Hoover <erich.e.hoover@gmail.com> Sat, 07 Dec 2013 10:49:03 -0700
|
||||
|
||||
wine-compholio (1.7.8) unstable; urgency=low
|
||||
* Added PulseAudio support patches.
|
||||
* Updated SIO_ADDRESS_LIST_CHANGE patches.
|
||||
|
1
debian/control
vendored
1
debian/control
vendored
@@ -50,6 +50,7 @@ Build-Depends: autotools-dev,
|
||||
libncurses5-dev [i386] | libncurses-dev [i386],
|
||||
libopenal-dev (>= 1:1.12) | ubuntu-desktop (<< 1.207),
|
||||
libpng12-dev,
|
||||
libpulse-dev,
|
||||
libssl-dev,
|
||||
libstdc++6-4.5-dev | libstdc++-dev,
|
||||
libtiff4-dev,
|
||||
|
4
debian/rules
vendored
4
debian/rules
vendored
@@ -64,8 +64,8 @@ ifneq "$(wildcard /usr/share/misc/config.guess)" ""
|
||||
endif
|
||||
|
||||
# Apply our patches to Wine
|
||||
for DIR in $(find $(CURDIR)/patches/ -type d | sort); do \
|
||||
for FILE in $(ls $$DIR | sort); do \
|
||||
for DIR in $$(find $(CURDIR)/patches/ -type d | sort); do \
|
||||
for FILE in $$(ls $$DIR | sort | grep '\.patch$$'); do \
|
||||
patch -N -p0 --strip=1 < $$DIR/$$FILE || exit 1; \
|
||||
done \
|
||||
done
|
||||
|
@@ -1,14 +1,14 @@
|
||||
From 8bd705add6a11c82faa1695656fd84c2611358c1 Mon Sep 17 00:00:00 2001
|
||||
From 60f7d242951be1980501f45922dbee5480ac2810 Mon Sep 17 00:00:00 2001
|
||||
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
|
||||
Date: Thu, 5 Dec 2013 13:45:15 -0700
|
||||
Date: Tue, 31 Dec 2013 18:36:58 -0700
|
||||
Subject: server: Implement an interface change notification object.
|
||||
|
||||
---
|
||||
server/event.c | 13 +++
|
||||
server/named_pipe.c | 13 ---
|
||||
server/object.h | 1 +
|
||||
server/sock.c | 303 ++++++++++++++++++++++++++++++++++++++++++++++++++-
|
||||
4 files changed, 313 insertions(+), 17 deletions(-)
|
||||
server/sock.c | 324 ++++++++++++++++++++++++++++++++++++++++++++++++++-
|
||||
4 files changed, 334 insertions(+), 17 deletions(-)
|
||||
|
||||
diff --git a/server/event.c b/server/event.c
|
||||
index b8515af..e8a3888 100644
|
||||
@@ -71,10 +71,18 @@ index bb3ff21..bad162f 100644
|
||||
extern struct keyed_event *get_keyed_event_obj( struct process *process, obj_handle_t handle, unsigned int access );
|
||||
extern void pulse_event( struct event *event );
|
||||
diff --git a/server/sock.c b/server/sock.c
|
||||
index 1a3a8f7..a34d086 100644
|
||||
index 1a3a8f7..9c8284d 100644
|
||||
--- a/server/sock.c
|
||||
+++ b/server/sock.c
|
||||
@@ -44,11 +44,17 @@
|
||||
@@ -23,6 +23,7 @@
|
||||
|
||||
#include "config.h"
|
||||
|
||||
+#include <limits.h>
|
||||
#include <assert.h>
|
||||
#include <fcntl.h>
|
||||
#include <stdarg.h>
|
||||
@@ -44,11 +45,17 @@
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
|
||||
@@ -92,7 +100,7 @@ index 1a3a8f7..a34d086 100644
|
||||
|
||||
#include "process.h"
|
||||
#include "file.h"
|
||||
@@ -83,9 +89,6 @@
|
||||
@@ -83,9 +90,6 @@
|
||||
#define FD_WINE_RAW 0x80000000
|
||||
#define FD_WINE_INTERNAL 0xFFFF0000
|
||||
|
||||
@@ -102,14 +110,12 @@ index 1a3a8f7..a34d086 100644
|
||||
struct sock
|
||||
{
|
||||
struct object obj; /* object header */
|
||||
@@ -107,8 +110,19 @@ struct sock
|
||||
@@ -107,16 +111,28 @@ struct sock
|
||||
struct sock *deferred; /* socket that waits for a deferred accept */
|
||||
struct async_queue *read_q; /* queue for asynchronous reads */
|
||||
struct async_queue *write_q; /* queue for asynchronous writes */
|
||||
+#ifdef HAVE_LINUX_RTNETLINK_H
|
||||
+ struct async_queue *ifchange_q; /* queue for interface change notifications */
|
||||
+ struct list ifchange_entry; /* entry in ifchange notification list */
|
||||
+#endif
|
||||
};
|
||||
|
||||
+#ifdef HAVE_LINUX_RTNETLINK_H
|
||||
@@ -122,7 +128,9 @@ index 1a3a8f7..a34d086 100644
|
||||
static void sock_dump( struct object *obj, int verbose );
|
||||
static int sock_signaled( struct object *obj, struct wait_queue_entry *entry );
|
||||
static struct fd *sock_get_fd( struct object *obj );
|
||||
@@ -117,6 +131,8 @@ static void sock_destroy( struct object *obj );
|
||||
static void sock_destroy( struct object *obj );
|
||||
+static void sock_destroy_ifchange_q( struct sock *sock );
|
||||
|
||||
static int sock_get_poll_events( struct fd *fd );
|
||||
static void sock_poll_event( struct fd *fd, int event );
|
||||
static enum server_fd_type sock_get_fd_type( struct fd *fd );
|
||||
@@ -140,13 +148,14 @@ index 1a3a8f7..a34d086 100644
|
||||
sock_queue_async, /* queue_async */
|
||||
sock_reselect_async, /* reselect_async */
|
||||
sock_cancel_async /* cancel_async */
|
||||
@@ -518,6 +534,43 @@ static enum server_fd_type sock_get_fd_type( struct fd *fd )
|
||||
@@ -518,6 +534,41 @@ static enum server_fd_type sock_get_fd_type( struct fd *fd )
|
||||
return FD_TYPE_SOCKET;
|
||||
}
|
||||
|
||||
+obj_handle_t sock_ioctl( struct fd *fd, ioctl_code_t code, const async_data_t *async_data,
|
||||
+ int blocking, const void *data, data_size_t size )
|
||||
+{
|
||||
+#ifdef HAVE_LINUX_RTNETLINK_H
|
||||
+ struct sock *sock = get_fd_user( fd );
|
||||
+ obj_handle_t wait_handle = 0;
|
||||
+ async_data_t new_data;
|
||||
@@ -163,53 +172,41 @@ index 1a3a8f7..a34d086 100644
|
||||
+ switch(code)
|
||||
+ {
|
||||
+ case WS_SIO_ADDRESS_LIST_CHANGE:
|
||||
+#ifdef HAVE_LINUX_RTNETLINK_H
|
||||
+ if (sock_add_ifchange( sock, async_data ))
|
||||
+ {
|
||||
+ set_error( STATUS_PENDING );
|
||||
+ return wait_handle;
|
||||
+ }
|
||||
+#else
|
||||
+ set_error( STATUS_NOT_SUPPORTED );
|
||||
+#endif
|
||||
+ break;
|
||||
+ default:
|
||||
+ close_handle( current->process, wait_handle );
|
||||
+ return default_fd_ioctl(fd, code, async_data, blocking, data, size);
|
||||
+ /* handled by default_fd_ioctl */
|
||||
+ break;
|
||||
+ }
|
||||
+ close_handle( current->process, wait_handle );
|
||||
+ return 0;
|
||||
+#endif
|
||||
+ return default_fd_ioctl(fd, code, async_data, blocking, data, size);
|
||||
+}
|
||||
+
|
||||
static void sock_queue_async( struct fd *fd, const async_data_t *data, int type, int count )
|
||||
{
|
||||
struct sock *sock = get_fd_user( fd );
|
||||
@@ -592,6 +645,14 @@ static void sock_destroy( struct object *obj )
|
||||
@@ -592,6 +643,7 @@ static void sock_destroy( struct object *obj )
|
||||
|
||||
free_async_queue( sock->read_q );
|
||||
free_async_queue( sock->write_q );
|
||||
+#ifdef HAVE_LINUX_RTNETLINK_H
|
||||
+ if (sock->ifchange_q)
|
||||
+ {
|
||||
+ free_async_queue( sock->ifchange_q );
|
||||
+ list_remove( &sock->ifchange_entry );
|
||||
+ release_object( ifchange_object );
|
||||
+ }
|
||||
+#endif
|
||||
+ sock_destroy_ifchange_q( sock );
|
||||
if (sock->event) release_object( sock->event );
|
||||
if (sock->fd)
|
||||
{
|
||||
@@ -618,6 +679,9 @@ static void init_sock(struct sock *sock)
|
||||
@@ -618,6 +670,7 @@ static void init_sock(struct sock *sock)
|
||||
sock->deferred = NULL;
|
||||
sock->read_q = NULL;
|
||||
sock->write_q = NULL;
|
||||
+#ifdef HAVE_LINUX_RTNETLINK_H
|
||||
+ sock->ifchange_q = NULL;
|
||||
+#endif
|
||||
memset( sock->errors, 0, sizeof(sock->errors) );
|
||||
}
|
||||
|
||||
@@ -906,6 +970,237 @@ static void sock_set_error(void)
|
||||
@@ -906,6 +959,269 @@ static void sock_set_error(void)
|
||||
set_error( sock_get_ntstatus( errno ) );
|
||||
}
|
||||
|
||||
@@ -279,11 +276,16 @@ index 1a3a8f7..a34d086 100644
|
||||
+ struct ifchange *ifchange = (struct ifchange *)obj;
|
||||
+ assert( obj->ops == &ifchange_ops );
|
||||
+
|
||||
+ /* reset the global ifchange object so that it will be recreated if it is needed again */
|
||||
+ ifchange_object = NULL;
|
||||
+ /* shut the socket down to force pending poll() calls in the client to return */
|
||||
+ shutdown( get_unix_fd(ifchange->fd), SHUT_RDWR );
|
||||
+ release_object( ifchange->fd );
|
||||
+ if (ifchange->fd)
|
||||
+ {
|
||||
+ /* reset the global ifchange object so that it will be recreated if it is needed again */
|
||||
+ assert( obj == ifchange_object );
|
||||
+ ifchange_object = NULL;
|
||||
+
|
||||
+ /* shut the socket down to force pending poll() calls in the client to return */
|
||||
+ shutdown( get_unix_fd(ifchange->fd), SHUT_RDWR );
|
||||
+ release_object( ifchange->fd );
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static int ifchange_get_poll_events( struct fd *fd )
|
||||
@@ -291,25 +293,33 @@ index 1a3a8f7..a34d086 100644
|
||||
+ return POLLIN;
|
||||
+}
|
||||
+
|
||||
+/* add a socket to the interface change notification's list of sockets */
|
||||
+void ifchange_add_sock( struct object *obj, struct sock *sock )
|
||||
+static void ifchange_add_sock( struct object *obj, struct sock *sock )
|
||||
+{
|
||||
+ struct ifchange *ifchange = (struct ifchange *)obj;
|
||||
+
|
||||
+ list_add_tail( &ifchange->sockets, &sock->ifchange_entry );
|
||||
+}
|
||||
+
|
||||
+static int init_ifchange( struct ifchange *ifchange )
|
||||
+/* we only need one of these interface notification objects, all of the sockets dependent upon
|
||||
+ * it will wake up when a notification event occurs */
|
||||
+static struct object *grab_ifchange( void )
|
||||
+{
|
||||
+ struct ifchange *ifchange;
|
||||
+ struct sockaddr_nl addr;
|
||||
+ int unix_fd;
|
||||
+
|
||||
+ list_init( &ifchange->sockets );
|
||||
+ if (ifchange_object)
|
||||
+ {
|
||||
+ /* increment the refcount for each socket that uses the ifchange object */
|
||||
+ return grab_object( ifchange_object );
|
||||
+ }
|
||||
+
|
||||
+ /* create the socket we need for processing interface change notifications */
|
||||
+ unix_fd = socket( PF_NETLINK, SOCK_RAW, NETLINK_ROUTE );
|
||||
+ if (unix_fd == -1)
|
||||
+ {
|
||||
+ sock_set_error();
|
||||
+ return 0;
|
||||
+ return NULL;
|
||||
+ }
|
||||
+ fcntl( unix_fd, F_SETFL, O_NONBLOCK ); /* make socket nonblocking */
|
||||
+ memset( &addr, 0, sizeof(addr) );
|
||||
@@ -320,47 +330,54 @@ index 1a3a8f7..a34d086 100644
|
||||
+ {
|
||||
+ sock_set_error();
|
||||
+ close( unix_fd );
|
||||
+ return 0;
|
||||
+ return NULL;
|
||||
+ }
|
||||
+ if (!(ifchange = alloc_object( &ifchange_ops )))
|
||||
+ {
|
||||
+ set_error( STATUS_NO_MEMORY );
|
||||
+ close( unix_fd );
|
||||
+ return NULL;
|
||||
+ }
|
||||
+ list_init( &ifchange->sockets );
|
||||
+ if (!(ifchange->fd = create_anonymous_fd( &ifchange_fd_ops, unix_fd, &ifchange->obj, 0 )))
|
||||
+ {
|
||||
+ close( unix_fd );
|
||||
+ return 0;
|
||||
+ }
|
||||
+ /* enable read wakeup on the file descriptor */
|
||||
+ set_fd_events( ifchange->fd, POLLIN );
|
||||
+ return 1;
|
||||
+}
|
||||
+
|
||||
+/* create a new ifchange notifier or, if one already exists, reuse the existing one */
|
||||
+static struct object *create_ifchange( void )
|
||||
+{
|
||||
+ struct ifchange *ifchange;
|
||||
+
|
||||
+ /* we only need one of these interface notification objects, all of the sockets dependent upon
|
||||
+ * it will wake up when a notification event occurs */
|
||||
+ if (ifchange_object)
|
||||
+ return grab_object( ifchange_object );
|
||||
+ if (!(ifchange = alloc_object( &ifchange_ops )))
|
||||
+ return NULL;
|
||||
+ if (!init_ifchange( ifchange ))
|
||||
+ {
|
||||
+ set_error( STATUS_NO_MEMORY );
|
||||
+ release_object( ifchange );
|
||||
+ return NULL;
|
||||
+ }
|
||||
+ set_fd_events( ifchange->fd, POLLIN ); /* enable read wakeup on the file descriptor */
|
||||
+
|
||||
+ /* the ifchange object is now successfully configured */
|
||||
+ ifchange_object = &ifchange->obj;
|
||||
+ return ifchange_object;
|
||||
+}
|
||||
+
|
||||
+/* wake up an ifchange notification queue for a socket and decrement the ifchange object refcount */
|
||||
+void sock_ifchange_wake_up( struct sock *sock, unsigned int status )
|
||||
+/* create a new ifchange queue for a specific socket or, if one already exists, reuse the existing one */
|
||||
+static struct async_queue *sock_get_ifchange_q( struct sock *sock )
|
||||
+{
|
||||
+ assert( sock->ifchange_q );
|
||||
+ async_wake_up( sock->ifchange_q, status );
|
||||
+ free_async_queue( sock->ifchange_q );
|
||||
+ sock->ifchange_q = NULL;
|
||||
+ list_remove( &sock->ifchange_entry );
|
||||
+ release_object( ifchange_object );
|
||||
+ struct object *ifchange;
|
||||
+ struct fd *fd;
|
||||
+
|
||||
+ if (sock->ifchange_q) /* reuse existing ifchange_q for this socket */
|
||||
+ return sock->ifchange_q;
|
||||
+
|
||||
+ if (!(ifchange = grab_ifchange()))
|
||||
+ return NULL;
|
||||
+
|
||||
+ /* create the ifchange notification queue */
|
||||
+ fd = ifchange_get_fd( ifchange );
|
||||
+ sock->ifchange_q = create_async_queue( fd );
|
||||
+ release_object( fd );
|
||||
+ if (!sock->ifchange_q)
|
||||
+ {
|
||||
+ set_error( STATUS_NO_MEMORY );
|
||||
+ release_object( ifchange );
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ /* add the socket to the ifchange notification list */
|
||||
+ ifchange_add_sock( ifchange, sock );
|
||||
+ return sock->ifchange_q;
|
||||
+}
|
||||
+
|
||||
+/* wake up all the sockets waiting for a change notification event */
|
||||
@@ -368,13 +385,16 @@ index 1a3a8f7..a34d086 100644
|
||||
+{
|
||||
+ struct ifchange *ifchange = (struct ifchange *)obj;
|
||||
+ struct list *ptr, *next;
|
||||
+
|
||||
+ assert( obj->ops == &ifchange_ops );
|
||||
+ assert( obj == ifchange_object );
|
||||
+
|
||||
+ LIST_FOR_EACH_SAFE( ptr, next, &ifchange->sockets )
|
||||
+ {
|
||||
+ struct sock *sock = LIST_ENTRY( ptr, struct sock, ifchange_entry );
|
||||
+
|
||||
+ sock_ifchange_wake_up( sock, status );
|
||||
+ assert( sock->ifchange_q );
|
||||
+ async_wake_up( sock->ifchange_q, status ); /* issue ifchange notification for the socket */
|
||||
+ sock_destroy_ifchange_q( sock ); /* remove socket from list and decrement ifchange refcount */
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
@@ -382,7 +402,7 @@ index 1a3a8f7..a34d086 100644
|
||||
+{
|
||||
+ struct object *ifchange = get_fd_user( fd );
|
||||
+ unsigned int status = STATUS_PENDING;
|
||||
+ char buffer[0x1000];
|
||||
+ char buffer[PIPE_BUF];
|
||||
+ int r;
|
||||
+
|
||||
+ r = recv( get_unix_fd(fd), buffer, sizeof(buffer), MSG_DONTWAIT );
|
||||
@@ -392,11 +412,11 @@ index 1a3a8f7..a34d086 100644
|
||||
+ return; /* retry when poll() says the socket is ready */
|
||||
+ status = sock_get_ntstatus( errno );
|
||||
+ }
|
||||
+ else if (r != 0)
|
||||
+ else if (r > 0)
|
||||
+ {
|
||||
+ struct nlmsghdr *nlh;
|
||||
+
|
||||
+ for (nlh = (struct nlmsghdr*)buffer; NLMSG_OK(nlh, r); nlh = NLMSG_NEXT(nlh, r))
|
||||
+ for (nlh = (struct nlmsghdr *)buffer; NLMSG_OK(nlh, r); nlh = NLMSG_NEXT(nlh, r))
|
||||
+ {
|
||||
+ if (nlh->nlmsg_type == NLMSG_DONE)
|
||||
+ break;
|
||||
@@ -414,35 +434,44 @@ index 1a3a8f7..a34d086 100644
|
||||
+}
|
||||
+
|
||||
+/* add interface change notification to a socket */
|
||||
+int sock_add_ifchange( struct sock *sock, const async_data_t *async_data )
|
||||
+static int sock_add_ifchange( struct sock *sock, const async_data_t *async_data )
|
||||
+{
|
||||
+ struct object *ifchange = ifchange_object;
|
||||
+ struct async_queue *ifchange_q;
|
||||
+ struct async *async;
|
||||
+ struct fd *fd;
|
||||
+
|
||||
+ if (!sock->ifchange_q)
|
||||
+ if (!(ifchange_q = sock_get_ifchange_q( sock )))
|
||||
+ return FALSE;
|
||||
+
|
||||
+ if (!(async = create_async( current, ifchange_q, async_data )))
|
||||
+ {
|
||||
+ /* associate this socket with the interface change object */
|
||||
+ ifchange = create_ifchange();
|
||||
+ if (!ifchange) return FALSE;
|
||||
+ ifchange_add_sock( ifchange, sock ); /* add this socket to the change notification list */
|
||||
+ if (!(fd = ifchange_get_fd( ifchange ))) goto fail;
|
||||
+ sock->ifchange_q = create_async_queue( fd );
|
||||
+ release_object( fd );
|
||||
+ if (!sock->ifchange_q) goto fail;
|
||||
+ if (!async_queued( ifchange_q ))
|
||||
+ sock_destroy_ifchange_q( sock );
|
||||
+
|
||||
+ set_error( STATUS_NO_MEMORY );
|
||||
+ return FALSE;
|
||||
+ }
|
||||
+ if (!(async = create_async( current, sock->ifchange_q, async_data ))) goto fail;
|
||||
+
|
||||
+ release_object( async );
|
||||
+ return TRUE;
|
||||
+
|
||||
+fail:
|
||||
+ free_async_queue( sock->ifchange_q );
|
||||
+ sock->ifchange_q = NULL;
|
||||
+ release_object( ifchange );
|
||||
+ return FALSE;
|
||||
+}
|
||||
+
|
||||
+#endif
|
||||
+
|
||||
+/* destroy an existing ifchange queue for a specific socket */
|
||||
+static void sock_destroy_ifchange_q( struct sock *sock )
|
||||
+{
|
||||
+#ifdef HAVE_LINUX_RTNETLINK_H
|
||||
+ if (sock->ifchange_q)
|
||||
+ {
|
||||
+ assert( ifchange_object );
|
||||
+
|
||||
+ list_remove( &sock->ifchange_entry );
|
||||
+ free_async_queue( sock->ifchange_q );
|
||||
+ sock->ifchange_q = NULL;
|
||||
+ release_object( ifchange_object );
|
||||
+ }
|
||||
+#endif
|
||||
+}
|
||||
+
|
||||
/* create a socket */
|
||||
DECL_HANDLER(create_socket)
|
||||
|
@@ -0,0 +1,41 @@
|
||||
From 32ae090ad4a99862a420cfe44847d8e2905cdde7 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Sat, 21 Dec 2013 23:57:02 +0100
|
||||
Subject: winex11: Implement X11DRV_FLUSH_GDI_DISPLAY ExtEscape command
|
||||
|
||||
---
|
||||
dlls/winex11.drv/init.c | 3 +++
|
||||
dlls/winex11.drv/x11drv.h | 3 ++-
|
||||
2 files changed, 5 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/winex11.drv/init.c b/dlls/winex11.drv/init.c
|
||||
index 5a7d316..68d3f96 100644
|
||||
--- a/dlls/winex11.drv/init.c
|
||||
+++ b/dlls/winex11.drv/init.c
|
||||
@@ -440,6 +440,9 @@ static INT X11DRV_ExtEscape( PHYSDEV dev, INT escape, INT in_count, LPCVOID in_d
|
||||
return TRUE;
|
||||
}
|
||||
break;
|
||||
+ case X11DRV_FLUSH_GDI_DISPLAY:
|
||||
+ XFlush( gdi_display );
|
||||
+ return TRUE;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h
|
||||
index 9008db6..85dd2a5 100644
|
||||
--- a/dlls/winex11.drv/x11drv.h
|
||||
+++ b/dlls/winex11.drv/x11drv.h
|
||||
@@ -277,7 +277,8 @@ enum x11drv_escape_codes
|
||||
X11DRV_GET_DRAWABLE, /* get current drawable for a DC */
|
||||
X11DRV_START_EXPOSURES, /* start graphics exposures */
|
||||
X11DRV_END_EXPOSURES, /* end graphics exposures */
|
||||
- X11DRV_FLUSH_GL_DRAWABLE /* flush changes made to the gl drawable */
|
||||
+ X11DRV_FLUSH_GL_DRAWABLE, /* flush changes made to the gl drawable */
|
||||
+ X11DRV_FLUSH_GDI_DISPLAY /* flush the gdi display */
|
||||
};
|
||||
|
||||
struct x11drv_escape_set_drawable
|
||||
--
|
||||
1.7.9.5
|
||||
|
@@ -0,0 +1,3 @@
|
||||
Revision: 1
|
||||
Author: Sebastian Lackner
|
||||
Title: Implement X11DRV_FLUSH_GDI_DISPLAY ExtEscape command.
|
@@ -1,35 +0,0 @@
|
||||
From c586d47aabf8741b8526579868c691e77ff5f7c8 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Thu, 21 Nov 2013 03:37:31 +0100
|
||||
Subject: quartz: Workaround Silverlight problems when multiple monitors are
|
||||
found
|
||||
|
||||
---
|
||||
dlls/quartz/vmr9.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/dlls/quartz/vmr9.c b/dlls/quartz/vmr9.c
|
||||
index 31f3f8e..20da5b9 100644
|
||||
--- a/dlls/quartz/vmr9.c
|
||||
+++ b/dlls/quartz/vmr9.c
|
||||
@@ -1440,7 +1440,7 @@ static HRESULT WINAPI VMR7MonitorConfig_GetAvailableMonitors(IVMRMonitorConfig *
|
||||
|
||||
args.info7 = info;
|
||||
args.info9 = NULL;
|
||||
- args.arraysize = arraysize;
|
||||
+ args.arraysize = 1; /* only return first entry */
|
||||
args.numdev = 0;
|
||||
EnumDisplayMonitors(NULL, NULL, get_available_monitors_proc, (LPARAM)&args);
|
||||
|
||||
@@ -1540,7 +1540,7 @@ static HRESULT WINAPI VMR9MonitorConfig_GetAvailableMonitors(IVMRMonitorConfig9
|
||||
|
||||
args.info7 = NULL;
|
||||
args.info9 = info;
|
||||
- args.arraysize = arraysize;
|
||||
+ args.arraysize = 1; /* only return first entry */
|
||||
args.numdev = 0;
|
||||
EnumDisplayMonitors(NULL, NULL, get_available_monitors_proc, (LPARAM)&args);
|
||||
|
||||
--
|
||||
1.7.9.5
|
||||
|
@@ -1,3 +0,0 @@
|
||||
Revision: 1
|
||||
Author: Sebastian Lackner
|
||||
Title: Workaround Silverlight problems when multiple monitors are found.
|
@@ -45,12 +45,12 @@ index a273502..5fa0cd5 100644
|
||||
+ { "8a366b6d-8ad6-4581-8aa9-66a03590a57b:1", "Erich E. Hoover", "Implement SIO_ADDRESS_LIST_CHANGE." },
|
||||
+ { "92938b89-506b-430a-ba50-32de8b286e56:1", "Erich E. Hoover", "Store and return security attributes with extended file attributes." },
|
||||
+ { "9cb0f665-bf7c-485f-89cc-554adcdf8880:1", "Erich E. Hoover", "Allow string comparison with linguistic casing." },
|
||||
+ { "59bd38b7-bbdc-4cfd-9ccd-1c72c4ed84c0:1", "Sebastian Lackner", "Implement X11DRV_FLUSH_GDI_DISPLAY ExtEscape command." },
|
||||
+ { "5d6bb7b5-ec88-4ed3-907d-9ad2173a2f88:1", "Sebastian Lackner", "Enable/disable windows when they are (un)mapped by foreign applications." },
|
||||
+ { "94186fff-6dbf-44d0-8eb1-2463d1608a0f:1", "Sebastian Lackner", "Update gl_drawable for embedded windows." },
|
||||
+ { "cbe240e8-2c58-430a-b61c-7fbb9d0e1e11:1", "Sebastian Lackner", "Change return value of stub SetNamedPipeHandleState to TRUE." },
|
||||
+ { "00273da7-72f8-4025-9e96-0c2bc95dacdb:1", "Maarten Lankhorst", "Winepulse patches extracted from https://launchpad.net/~mlankhorst/+archive/ppa/+files/wine1.7_1.7.7-0ubuntu2~saucy1.debian.tar.gz." },
|
||||
+ { "eec5dea8-879d-417b-9f97-364deaae6576:1", "Sebastian Lackner", "Add tests for IVMRMonitorConfig." },
|
||||
+ { "b2da36a4-2f5d-4ba2-9c66-cd4ccb886f92:1", "Sebastian Lackner", "Workaround Silverlight problems when multiple monitors are found." },
|
||||
+ { NULL, NULL, NULL }
|
||||
+};
|
||||
+
|
||||
|
13
precommit-hook.sh
Executable file
13
precommit-hook.sh
Executable file
@@ -0,0 +1,13 @@
|
||||
#!/bin/bash
|
||||
# Installation: ln -s ../../precommit-hook.sh .git/hooks/pre-commit
|
||||
|
||||
git diff --cached --name-status | while read status file; do
|
||||
if [[ "$file" =~ ^patches/ ]] || [[ "$file" =~ ^patch-list-template.diff$ ]]; then
|
||||
echo ""
|
||||
echo "*** GENERATING patch-list.patch ***"
|
||||
echo ""
|
||||
./generate-patchlist.sh > patches/patch-list.patch || exit 1
|
||||
git add patches/patch-list.patch || exit 1
|
||||
break;
|
||||
fi
|
||||
done
|
Reference in New Issue
Block a user