diff --git a/modules/gui/skins/x11/x11_api.cpp b/modules/gui/skins/x11/x11_api.cpp index 8f794a30b8..32094240cd 100644 --- a/modules/gui/skins/x11/x11_api.cpp +++ b/modules/gui/skins/x11/x11_api.cpp @@ -2,7 +2,7 @@ * x11_api.cpp: Various x11-specific functions ***************************************************************************** * Copyright (C) 2003 VideoLAN - * $Id: x11_api.cpp,v 1.2 2003/05/19 21:39:34 asmax Exp $ + * $Id: x11_api.cpp,v 1.3 2003/05/28 23:56:51 asmax Exp $ * * Authors: Cyril Deguet * @@ -30,6 +30,7 @@ //--- SKIN ------------------------------------------------------------------ #include #include "../src/skin_common.h" +#include "../src/theme.h" #include "../src/window.h" #include "../os_window.h" #include "../os_api.h" @@ -54,20 +55,32 @@ void OSAPI_PostMessage( SkinWindow *win, unsigned int message, unsigned int para long param2 ) { XEvent event; - + event.type = ClientMessage; event.xclient.display = g_pIntf->p_sys->display; - if( win == NULL ) - event.xclient.window = NULL; - else - event.xclient.window = (( X11Window *)win)->GetHandle(); event.xclient.send_event = 0; event.xclient.message_type = NULL; event.xclient.format = 32; event.xclient.data.l[0] = message; event.xclient.data.l[1] = param1; event.xclient.data.l[2] = param2; - XSendEvent( g_pIntf->p_sys->display, event.xclient.window, False, 0, &event ); + + if( win == NULL ) + { + // broadcast message + list::const_iterator w; + for( w = g_pIntf->p_sys->p_theme->WindowList.begin(); + w != g_pIntf->p_sys->p_theme->WindowList.end(); w++ ) + { + event.xclient.window = (( X11Window *)*w)->GetHandle(); + XSendEvent( g_pIntf->p_sys->display, event.xclient.window, False, 0, &event ); + } + } + else + { + event.xclient.window = (( X11Window *)win)->GetHandle(); + XSendEvent( g_pIntf->p_sys->display, event.xclient.window, False, 0, &event ); + } } //--------------------------------------------------------------------------- diff --git a/modules/gui/skins/x11/x11_run.cpp b/modules/gui/skins/x11/x11_run.cpp index 0ec7cf2952..b68f944623 100644 --- a/modules/gui/skins/x11/x11_run.cpp +++ b/modules/gui/skins/x11/x11_run.cpp @@ -2,7 +2,7 @@ * x11_run.cpp: ***************************************************************************** * Copyright (C) 2003 VideoLAN - * $Id: x11_run.cpp,v 1.9 2003/05/26 02:09:27 gbazin Exp $ + * $Id: x11_run.cpp,v 1.10 2003/05/28 23:56:51 asmax Exp $ * * Authors: Cyril Deguet * @@ -161,7 +161,6 @@ void ProcessEvent( intf_thread_t *p_intf, VlcProc *proc, XEvent *event ) // Create event to dispatch in windows // Skin event - if( event->type == ClientMessage ) { msg = ( (XClientMessageEvent *)event )->data.l[0]; @@ -213,14 +212,6 @@ void ProcessEvent( intf_thread_t *p_intf, VlcProc *proc, XEvent *event ) return; // Exit VLC ! } } - else if( wnd == NULL ) - { - for( win = p_intf->p_sys->p_theme->WindowList.begin(); - win != p_intf->p_sys->p_theme->WindowList.end(); win++ ) - { - (*win)->ProcessEvent( evt ); - } - } else { // Find window matching with gwnd diff --git a/modules/gui/skins/x11/x11_theme.cpp b/modules/gui/skins/x11/x11_theme.cpp index 9afb782804..03342fda1f 100644 --- a/modules/gui/skins/x11/x11_theme.cpp +++ b/modules/gui/skins/x11/x11_theme.cpp @@ -2,7 +2,7 @@ * x11_theme.cpp: X11 implementation of the Theme class ***************************************************************************** * Copyright (C) 2003 VideoLAN - * $Id: x11_theme.cpp,v 1.4 2003/05/24 21:28:29 asmax Exp $ + * $Id: x11_theme.cpp,v 1.5 2003/05/28 23:56:51 asmax Exp $ * * Authors: Cyril Deguet * @@ -167,8 +167,11 @@ void X11Theme::AddWindow( string name, int x, int y, bool visible, // Create the window Window root = DefaultRootWindow( display ); - Window wnd = XCreateSimpleWindow( display, root, 0, 0, 1, 1, 0, 0, 0 ); - XSelectInput( display, wnd, ExposureMask| + XSetWindowAttributes attr; + attr.override_redirect = True; + Window wnd = XCreateWindow( display, root, 0, 0, 1, 1, 0, 0, InputOutput, + CopyFromParent, CWOverrideRedirect, &attr ); + XSelectInput( display, wnd, ExposureMask|StructureNotifyMask| KeyPressMask|KeyReleaseMask|ButtonPressMask|ButtonReleaseMask| PointerMotionMask|EnterWindowMask|LeaveWindowMask); @@ -192,7 +195,14 @@ void X11Theme::AddWindow( string name, int x, int y, bool visible, // Display the window XMapRaised( display, wnd ); - XSync( display, False ); + + XEvent evt; + do + { + XNextEvent( display, &evt ); + } while( evt.type != MapNotify ); + + fprintf(stderr, "\nDONE\n"); WindowList.push_back( (SkinWindow *)new OSWindow( p_intf, wnd, x, y, visible, fadetime, alpha, movealpha, dragdrop, name ) ) ;