Alexandre Julliard : wineandroid: Also create HWND_MESSAGE windows on the Java side.
Module: wine Branch: master Commit: f39e021006fe4131618f26138c7e7ddc6223ad92 URL: http://source.winehq.org/git/wine.git/?a=commit;h=f39e021006fe4131618f26138c... Author: Alexandre Julliard <julliard(a)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(a)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; }
participants (1)
-
Alexandre Julliard