Commit 63fa336d authored by Cyril Deguet's avatar Cyril Deguet

* AT LAST events work in X11 skins !

parent 470e72bd
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* x11_api.cpp: Various x11-specific functions * x11_api.cpp: Various x11-specific functions
***************************************************************************** *****************************************************************************
* Copyright (C) 2003 VideoLAN * 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 <asmax@videolan.org> * Authors: Cyril Deguet <asmax@videolan.org>
* *
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
//--- SKIN ------------------------------------------------------------------ //--- SKIN ------------------------------------------------------------------
#include <vlc/intf.h> #include <vlc/intf.h>
#include "../src/skin_common.h" #include "../src/skin_common.h"
#include "../src/theme.h"
#include "../src/window.h" #include "../src/window.h"
#include "../os_window.h" #include "../os_window.h"
#include "../os_api.h" #include "../os_api.h"
...@@ -57,17 +58,29 @@ void OSAPI_PostMessage( SkinWindow *win, unsigned int message, unsigned int para ...@@ -57,17 +58,29 @@ void OSAPI_PostMessage( SkinWindow *win, unsigned int message, unsigned int para
event.type = ClientMessage; event.type = ClientMessage;
event.xclient.display = g_pIntf->p_sys->display; 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.send_event = 0;
event.xclient.message_type = NULL; event.xclient.message_type = NULL;
event.xclient.format = 32; event.xclient.format = 32;
event.xclient.data.l[0] = message; event.xclient.data.l[0] = message;
event.xclient.data.l[1] = param1; event.xclient.data.l[1] = param1;
event.xclient.data.l[2] = param2; event.xclient.data.l[2] = param2;
if( win == NULL )
{
// broadcast message
list<SkinWindow *>::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 ); 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 );
}
} }
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* x11_run.cpp: * x11_run.cpp:
***************************************************************************** *****************************************************************************
* Copyright (C) 2003 VideoLAN * 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 <asmax@videolan.org> * Authors: Cyril Deguet <asmax@videolan.org>
* *
...@@ -161,7 +161,6 @@ void ProcessEvent( intf_thread_t *p_intf, VlcProc *proc, XEvent *event ) ...@@ -161,7 +161,6 @@ void ProcessEvent( intf_thread_t *p_intf, VlcProc *proc, XEvent *event )
// Create event to dispatch in windows // Create event to dispatch in windows
// Skin event // Skin event
if( event->type == ClientMessage ) if( event->type == ClientMessage )
{ {
msg = ( (XClientMessageEvent *)event )->data.l[0]; msg = ( (XClientMessageEvent *)event )->data.l[0];
...@@ -213,14 +212,6 @@ void ProcessEvent( intf_thread_t *p_intf, VlcProc *proc, XEvent *event ) ...@@ -213,14 +212,6 @@ void ProcessEvent( intf_thread_t *p_intf, VlcProc *proc, XEvent *event )
return; // Exit VLC ! 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 else
{ {
// Find window matching with gwnd // Find window matching with gwnd
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* x11_theme.cpp: X11 implementation of the Theme class * x11_theme.cpp: X11 implementation of the Theme class
***************************************************************************** *****************************************************************************
* Copyright (C) 2003 VideoLAN * 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 <asmax@videolan.org> * Authors: Cyril Deguet <asmax@videolan.org>
* *
...@@ -167,8 +167,11 @@ void X11Theme::AddWindow( string name, int x, int y, bool visible, ...@@ -167,8 +167,11 @@ void X11Theme::AddWindow( string name, int x, int y, bool visible,
// Create the window // Create the window
Window root = DefaultRootWindow( display ); Window root = DefaultRootWindow( display );
Window wnd = XCreateSimpleWindow( display, root, 0, 0, 1, 1, 0, 0, 0 ); XSetWindowAttributes attr;
XSelectInput( display, wnd, ExposureMask| 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| KeyPressMask|KeyReleaseMask|ButtonPressMask|ButtonReleaseMask|
PointerMotionMask|EnterWindowMask|LeaveWindowMask); PointerMotionMask|EnterWindowMask|LeaveWindowMask);
...@@ -192,7 +195,14 @@ void X11Theme::AddWindow( string name, int x, int y, bool visible, ...@@ -192,7 +195,14 @@ void X11Theme::AddWindow( string name, int x, int y, bool visible,
// Display the window // Display the window
XMapRaised( display, wnd ); 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, WindowList.push_back( (SkinWindow *)new OSWindow( p_intf, wnd, x, y,
visible, fadetime, alpha, movealpha, dragdrop, name ) ) ; visible, fadetime, alpha, movealpha, dragdrop, name ) ) ;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment