Module: wine Branch: master Commit: bcd99f5c370a85998dfc7ac3650d96c298e79c71 URL: http://source.winehq.org/git/wine.git/?a=commit;h=bcd99f5c370a85998dfc7ac365...
Author: Alexandre Julliard julliard@winehq.org Date: Thu Jun 1 09:41:05 2017 +0200
wineandroid: Wait until we receive the desktop size before proceeding with startup.
Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/wineandroid.drv/WineActivity.java | 3 ++- dlls/wineandroid.drv/window.c | 41 +++++++++++++++++++++++++++++++ dlls/wineandroid.drv/wineandroid.drv.spec | 3 +++ 3 files changed, 46 insertions(+), 1 deletion(-)
diff --git a/dlls/wineandroid.drv/WineActivity.java b/dlls/wineandroid.drv/WineActivity.java index 3696493..cc43bbe 100644 --- a/dlls/wineandroid.drv/WineActivity.java +++ b/dlls/wineandroid.drv/WineActivity.java @@ -70,7 +70,6 @@ public class WineActivity extends Activity Locale.getDefault().getCountry() + ".UTF-8";
copyAssetFiles(); - runOnUiThread( new Runnable() { public void run() { progress_dialog.dismiss(); }});
HashMap<String,String> env = new HashMap<String,String>(); env.put( "WINELOADER", loader.toString() ); @@ -96,6 +95,8 @@ public class WineActivity extends Activity log.delete(); }
+ createProgressDialog( 0, "Setting up the Windows environment..." ); + System.load( libdir.toString() + "/libwine.so" ); prefix.mkdirs();
diff --git a/dlls/wineandroid.drv/window.c b/dlls/wineandroid.drv/window.c index 971fd56..ba9f3b4 100644 --- a/dlls/wineandroid.drv/window.c +++ b/dlls/wineandroid.drv/window.c @@ -282,6 +282,28 @@ static int process_events( DWORD mask )
/*********************************************************************** + * wait_events + */ +static int wait_events( int timeout ) +{ + assert( GetCurrentThreadId() == desktop_tid ); + + for (;;) + { + struct pollfd pollfd; + int ret; + + pollfd.fd = event_pipe[0]; + pollfd.events = POLLIN | POLLHUP; + ret = poll( &pollfd, 1, timeout ); + if (ret == -1 && errno == EINTR) continue; + if (ret && (pollfd.revents & (POLLHUP | POLLERR))) ret = -1; + return ret; + } +} + + +/*********************************************************************** * ANDROID_MsgWaitForMultipleObjectsEx */ DWORD CDECL ANDROID_MsgWaitForMultipleObjectsEx( DWORD count, const HANDLE *handles, @@ -411,3 +433,22 @@ void CDECL ANDROID_WindowPosChanged( HWND hwnd, HWND insert_after, UINT swp_flag TRACE( "win %p window %s client %s style %08x flags %08x\n", hwnd, wine_dbgstr_rect(window_rect), wine_dbgstr_rect(client_rect), new_style, swp_flags ); } + + +/*********************************************************************** + * ANDROID_create_desktop + */ +BOOL CDECL ANDROID_create_desktop( UINT width, UINT height ) +{ + /* wait until we receive the surface changed event */ + while (!screen_width) + { + if (wait_events( 2000 ) != 1) + { + ERR( "wait timed out\n" ); + break; + } + process_events( QS_ALLINPUT ); + } + return TRUE; +} diff --git a/dlls/wineandroid.drv/wineandroid.drv.spec b/dlls/wineandroid.drv/wineandroid.drv.spec index 49402a8..84ed7fd 100644 --- a/dlls/wineandroid.drv/wineandroid.drv.spec +++ b/dlls/wineandroid.drv/wineandroid.drv.spec @@ -11,3 +11,6 @@ @ cdecl MsgWaitForMultipleObjectsEx(long ptr long long long) ANDROID_MsgWaitForMultipleObjectsEx @ cdecl WindowPosChanging(long long long ptr ptr ptr ptr) ANDROID_WindowPosChanging @ cdecl WindowPosChanged(long long long ptr ptr ptr ptr ptr) ANDROID_WindowPosChanged + +# Desktop +@ cdecl wine_create_desktop(long long) ANDROID_create_desktop