Module: wine Branch: master Commit: f39e021006fe4131618f26138c7e7ddc6223ad92 URL: http://source.winehq.org/git/wine.git/?a=commit;h=f39e021006fe4131618f26138c...
Author: Alexandre Julliard julliard@winehq.org Date: Thu Jun 22 20:04:43 2017 +0200
wineandroid: Also create HWND_MESSAGE windows on the Java side.
Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/wineandroid.drv/WineActivity.java | 5 +++++ dlls/wineandroid.drv/device.c | 12 +++++++++--- dlls/wineandroid.drv/window.c | 27 ++------------------------- 3 files changed, 16 insertions(+), 28 deletions(-)
diff --git a/dlls/wineandroid.drv/WineActivity.java b/dlls/wineandroid.drv/WineActivity.java index 742fabc..295ecc4 100644 --- a/dlls/wineandroid.drv/WineActivity.java +++ b/dlls/wineandroid.drv/WineActivity.java @@ -62,6 +62,7 @@ public class WineActivity extends Activity private ProgressDialog progress_dialog;
protected WineWindow desktop_window; + protected WineWindow message_window;
@Override public void onCreate(Bundle savedInstanceState) @@ -290,6 +291,7 @@ public class WineActivity extends Activity
protected class WineWindow extends Object { + static protected final int HWND_MESSAGE = 0xfffffffd; static protected final int WS_VISIBLE = 0x10000000;
protected int hwnd; @@ -617,6 +619,9 @@ public class WineActivity extends Activity desktop_window = new WineWindow( hwnd, null ); addView( desktop_window.create_whole_view() ); desktop_window.client_group.bringToFront(); + + message_window = new WineWindow( WineWindow.HWND_MESSAGE, null ); + message_window.create_window_groups(); }
@Override diff --git a/dlls/wineandroid.drv/device.c b/dlls/wineandroid.drv/device.c index d17b7c5..54c409b 100644 --- a/dlls/wineandroid.drv/device.c +++ b/dlls/wineandroid.drv/device.c @@ -251,6 +251,13 @@ static struct native_win_data *get_ioctl_native_win_data( const struct ioctl_hea return get_native_win_data( LongToHandle(hdr->hwnd), hdr->opengl ); }
+static int get_ioctl_win_parent( HWND parent ) +{ + if (parent != GetDesktopWindow() && !GetAncestor( parent, GA_PARENT )) + return HandleToLong( HWND_MESSAGE ); + return HandleToLong( parent ); +} + static void wait_fence_and_close( int fence ) { __s32 timeout = 1000; /* FIXME: should be -1 for infinite timeout */ @@ -1353,7 +1360,6 @@ struct ANativeWindow *create_ioctl_window( HWND hwnd, BOOL opengl ) { struct ioctl_android_create_window req; struct native_win_wrapper *win = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*win) ); - HWND parent = GetAncestor( hwnd, GA_PARENT );
if (!win) return NULL;
@@ -1378,7 +1384,7 @@ struct ANativeWindow *create_ioctl_window( HWND hwnd, BOOL opengl )
req.hdr.hwnd = HandleToLong( win->hwnd ); req.hdr.opengl = win->opengl; - req.parent = HandleToLong( parent ); + req.parent = get_ioctl_win_parent( GetAncestor( hwnd, GA_PARENT )); android_ioctl( IOCTL_CREATE_WINDOW, &req, sizeof(req), NULL, NULL );
return &win->win; @@ -1438,7 +1444,7 @@ int ioctl_set_window_parent( HWND hwnd, HWND parent )
req.hdr.hwnd = HandleToLong( hwnd ); req.hdr.opengl = FALSE; - req.parent = HandleToLong( parent ); + req.parent = get_ioctl_win_parent( parent ); return android_ioctl( IOCTL_SET_WINDOW_PARENT, &req, sizeof(req), NULL, NULL ); }
diff --git a/dlls/wineandroid.drv/window.c b/dlls/wineandroid.drv/window.c index 3bfd0a8..5def81e 100644 --- a/dlls/wineandroid.drv/window.c +++ b/dlls/wineandroid.drv/window.c @@ -1018,34 +1018,11 @@ static struct android_win_data *create_win_data( HWND hwnd, const RECT *window_r
if (!(parent = GetAncestor( hwnd, GA_PARENT ))) return NULL; /* desktop or HWND_MESSAGE */
- if (parent != GetDesktopWindow()) - { - if (!(data = get_win_data( parent )) && - !(data = create_win_data( parent, NULL, NULL ))) - return NULL; - release_win_data( data ); - } - if (!(data = alloc_win_data( hwnd ))) return NULL;
data->parent = (parent == GetDesktopWindow()) ? 0 : parent; - - if (window_rect) - { - data->whole_rect = data->window_rect = *window_rect; - data->client_rect = *client_rect; - } - else - { - GetWindowRect( hwnd, &data->window_rect ); - MapWindowPoints( 0, parent, (POINT *)&data->window_rect, 2 ); - data->whole_rect = data->window_rect; - GetClientRect( hwnd, &data->client_rect ); - MapWindowPoints( hwnd, parent, (POINT *)&data->client_rect, 2 ); - ioctl_window_pos_changed( hwnd, &data->window_rect, &data->client_rect, &data->whole_rect, - GetWindowLongW( hwnd, GWL_STYLE ), SWP_NOACTIVATE, - GetWindow( hwnd, GW_HWNDPREV ), GetWindow( hwnd, GW_OWNER )); - } + data->whole_rect = data->window_rect = *window_rect; + data->client_rect = *client_rect; return data; }