]> git.sesse.net Git - vlc/commitdiff
* AT LAST events work in X11 skins !
authorCyril Deguet <asmax@videolan.org>
Wed, 28 May 2003 23:56:51 +0000 (23:56 +0000)
committerCyril Deguet <asmax@videolan.org>
Wed, 28 May 2003 23:56:51 +0000 (23:56 +0000)
modules/gui/skins/x11/x11_api.cpp
modules/gui/skins/x11/x11_run.cpp
modules/gui/skins/x11/x11_theme.cpp

index 8f794a30b8d59684563d2aa16d06c939fd3f114f..32094240cdd05d6397e329ae1ab084885af07d50 100644 (file)
@@ -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  <asmax@videolan.org>
  *
@@ -30,6 +30,7 @@
 //--- SKIN ------------------------------------------------------------------
 #include <vlc/intf.h>
 #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<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 );
+        }
+    }
+    else
+    {
+        event.xclient.window = (( X11Window *)win)->GetHandle();
+        XSendEvent( g_pIntf->p_sys->display, event.xclient.window, False, 0, &event );
+    }
 }
 //---------------------------------------------------------------------------
 
index 0ec7cf2952ab68a056f19a520f518b97829a0526..b68f944623426fc13db544fdc1765630c44b569a 100644 (file)
@@ -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     <asmax@videolan.org>
  *
@@ -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
index 9afb78280440056f046a264f16a2c1077432b2bd..03342fda1f4e3cbc483e531c4599cf1873120cf2 100644 (file)
@@ -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     <asmax@videolan.org>
  *
@@ -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 ) ) ;