From 20c627d58cb8f08aad0e086dd73760ecad987986 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Tue, 6 Jun 2017 08:33:09 +0200 Subject: [PATCH] wineandroid: Update the contents when we receive a new surface from Java. Signed-off-by: Alexandre Julliard --- dlls/wineandroid.drv/android.h | 5 +++++ dlls/wineandroid.drv/device.c | 2 ++ dlls/wineandroid.drv/window.c | 30 ++++++++++++++++++++++++++++++ dlls/wineandroid.drv/wineandroid.drv.spec | 1 + 4 files changed, 38 insertions(+) diff --git a/dlls/wineandroid.drv/android.h b/dlls/wineandroid.drv/android.h index bfdd69707a6..3c2500e0d1c 100644 --- a/dlls/wineandroid.drv/android.h +++ b/dlls/wineandroid.drv/android.h @@ -71,6 +71,11 @@ extern unsigned int screen_height DECLSPEC_HIDDEN; extern RECT virtual_screen_rect DECLSPEC_HIDDEN; extern MONITORINFOEXW default_monitor DECLSPEC_HIDDEN; +enum android_window_messages +{ + WM_ANDROID_REFRESH = 0x80001000, +}; + extern void init_monitors( int width, int height ) DECLSPEC_HIDDEN; /* JNI entry points */ diff --git a/dlls/wineandroid.drv/device.c b/dlls/wineandroid.drv/device.c index fdcf24ad03d..1af59bece13 100644 --- a/dlls/wineandroid.drv/device.c +++ b/dlls/wineandroid.drv/device.c @@ -433,6 +433,7 @@ static void CALLBACK register_native_window_callback( ULONG_PTR arg1, ULONG_PTR if (!data || data->parent == win) { if (win) pANativeWindow_release( win ); + if (data && win) PostMessageW( hwnd, WM_ANDROID_REFRESH, 0, 0 ); TRACE( "%p -> %p win %p (unchanged)\n", hwnd, data, win ); return; } @@ -446,6 +447,7 @@ static void CALLBACK register_native_window_callback( ULONG_PTR arg1, ULONG_PTR win->perform( win, NATIVE_WINDOW_SET_BUFFERS_FORMAT, data->buffer_format ); win->setSwapInterval( win, data->swap_interval ); unwrap_java_call(); + PostMessageW( hwnd, WM_ANDROID_REFRESH, 0, 0 ); } TRACE( "%p -> %p win %p\n", hwnd, data, win ); } diff --git a/dlls/wineandroid.drv/window.c b/dlls/wineandroid.drv/window.c index 64333cb2f23..203492a94a2 100644 --- a/dlls/wineandroid.drv/window.c +++ b/dlls/wineandroid.drv/window.c @@ -977,6 +977,36 @@ void CDECL ANDROID_WindowPosChanged( HWND hwnd, HWND insert_after, UINT swp_flag } +/********************************************************************** + * ANDROID_WindowMessage + */ +LRESULT CDECL ANDROID_WindowMessage( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp ) +{ + struct android_win_data *data; + + switch (msg) + { + case WM_ANDROID_REFRESH: + if ((data = get_win_data( hwnd ))) + { + struct window_surface *surface = data->surface; + if (surface) + { + surface->funcs->lock( surface ); + *surface->funcs->get_bounds( surface ) = surface->rect; + surface->funcs->unlock( surface ); + if (is_argb_surface( surface )) surface->funcs->flush( surface ); + } + release_win_data( data ); + } + return 0; + default: + FIXME( "got window msg %x hwnd %p wp %lx lp %lx\n", msg, hwnd, wp, lp ); + return 0; + } +} + + /*********************************************************************** * ANDROID_create_desktop */ diff --git a/dlls/wineandroid.drv/wineandroid.drv.spec b/dlls/wineandroid.drv/wineandroid.drv.spec index 84ed7fd568c..7379458c4b3 100644 --- a/dlls/wineandroid.drv/wineandroid.drv.spec +++ b/dlls/wineandroid.drv/wineandroid.drv.spec @@ -9,6 +9,7 @@ @ cdecl CreateWindow(long) ANDROID_CreateWindow @ cdecl DestroyWindow(long) ANDROID_DestroyWindow @ cdecl MsgWaitForMultipleObjectsEx(long ptr long long long) ANDROID_MsgWaitForMultipleObjectsEx +@ cdecl WindowMessage(long long long long) ANDROID_WindowMessage @ cdecl WindowPosChanging(long long long ptr ptr ptr ptr) ANDROID_WindowPosChanging @ cdecl WindowPosChanged(long long long ptr ptr ptr ptr ptr) ANDROID_WindowPosChanged -- 2.11.4.GIT