[4/5] winex11: Implement additional XEMBED_* events
Sebastian Lackner
sebastian at fds-team.de
Tue Sep 24 17:59:55 CDT 2013
---
dlls/winex11.drv/event.c | 46
+++++++++++++++++++++++++++++++++++++++-------
1 file changed, 39 insertions(+), 7 deletions(-)
-------------- next part --------------
From d2f9131ece259489eb243f8ae29f269f4008a2a7 Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian at fds-team.de>
Date: Tue, 24 Sep 2013 15:39:38 +0200
Subject: winex11: Implement additional XEMBED_* events
---
dlls/winex11.drv/event.c | 46 +++++++++++++++++++++++++++++++++++++++-------
1 file changed, 39 insertions(+), 7 deletions(-)
diff --git a/dlls/winex11.drv/event.c b/dlls/winex11.drv/event.c
index 3c1a004..057d26d 100644
--- a/dlls/winex11.drv/event.c
+++ b/dlls/winex11.drv/event.c
@@ -1647,22 +1647,54 @@ static void EVENT_DropURLs( HWND hWnd, XClientMessageEvent *event )
*/
static void handle_xembed_protocol( HWND hwnd, XClientMessageEvent *event )
{
- struct x11drv_win_data *data = get_win_data( hwnd );
-
- if (!data) return;
-
switch (event->data.l[1])
{
case XEMBED_EMBEDDED_NOTIFY:
- TRACE( "win %p/%lx XEMBED_EMBEDDED_NOTIFY owner %lx\n", hwnd, event->window, event->data.l[3] );
- data->embedder = event->data.l[3];
+ {
+ struct x11drv_win_data *data = get_win_data( hwnd );
+ if (!data) break;
+
+ TRACE( "win %p/%lx XEMBED_EMBEDDED_NOTIFY owner %lx\n", hwnd, event->window, event->data.l[3] );
+ data->embedder = event->data.l[3];
+
+ /* window has been marked as embedded before (e.g. systray) */
+ if (data->embedded)
+ {
+ release_win_data( data );
+ break;
+ }
+
+ make_window_embedded( data );
+ release_win_data( data );
+ reparent_notify( event->display, hwnd, event->data.l[3], 0, 0 );
+ }
+ break;
+
+ case XEMBED_WINDOW_DEACTIVATE:
+ TRACE( "win %p/%lx XEMBED_WINDOW_DEACTIVATE message\n", hwnd, event->window );
+ focus_out( event->display, GetAncestor( hwnd, GA_ROOT ) );
break;
+
+ case XEMBED_FOCUS_OUT:
+ TRACE( "win %p/%lx XEMBED_FOCUS_OUT message\n", hwnd, event->window );
+ focus_out( event->display, GetAncestor( hwnd, GA_ROOT ) );
+ break;
+
+ case XEMBED_MODALITY_ON:
+ TRACE( "win %p/%lx XEMBED_MODALITY_ON message\n", hwnd, event->window );
+ EnableWindow( hwnd, FALSE );
+ break;
+
+ case XEMBED_MODALITY_OFF:
+ TRACE( "win %p/%lx XEMBED_MODALITY_OFF message\n", hwnd, event->window );
+ EnableWindow( hwnd, TRUE );
+ break;
+
default:
TRACE( "win %p/%lx XEMBED message %lu(%lu)\n",
hwnd, event->window, event->data.l[1], event->data.l[2] );
break;
}
- release_win_data( data );
}
--
1.7.9.5
More information about the wine-patches
mailing list