* X11 skin windows should have an icon now
authorCyril Deguet <asmax@videolan.org>
Fri, 13 Jun 2003 21:18:54 +0000 (21:18 +0000)
committerCyril Deguet <asmax@videolan.org>
Fri, 13 Jun 2003 21:18:54 +0000 (21:18 +0000)
modules/gui/skins/src/skin_common.h
modules/gui/skins/src/skin_main.cpp
modules/gui/skins/x11/x11_window.cpp

index 09b9466..da0815a 100644 (file)
@@ -2,7 +2,7 @@
  * skin_common.h: Private Skin interface description
  *****************************************************************************
  * Copyright (C) 2003 VideoLAN
- * $Id: skin_common.h,v 1.20 2003/06/11 10:42:34 gbazin Exp $
+ * $Id: skin_common.h,v 1.21 2003/06/13 21:18:53 asmax Exp $
  *
  * Authors: Olivier Teulière <ipkiss@via.ecp.fr>
  *          Emmanuel Puig    <karibu@via.ecp.fr>
@@ -87,6 +87,8 @@ struct intf_sys_t
     Display *display;
     Window mainWin;    // Window which receives "broadcast" events
     vlc_mutex_t xlock;
+    Pixmap iconPixmap; // vlc icon
+    Pixmap iconMask;
 #endif
 
 #ifdef WIN32
index 0fa4c0f..edcded6 100644 (file)
@@ -2,7 +2,7 @@
  * skin-main.cpp: skins plugin for VLC
  *****************************************************************************
  * Copyright (C) 2003 VideoLAN
- * $Id: skin_main.cpp,v 1.38 2003/06/11 21:46:57 asmax Exp $
+ * $Id: skin_main.cpp,v 1.39 2003/06/13 21:18:53 asmax Exp $
  *
  * Authors: Olivier Teulière <ipkiss@via.ecp.fr>
  *          Emmanuel Puig    <karibu@via.ecp.fr>
@@ -57,6 +57,7 @@
 
 #ifdef X11_SKINS
 #include <X11/Xlib.h>
+#include <Imlib2.h>
 #endif
 
 //---------------------------------------------------------------------------
@@ -129,13 +130,45 @@ static int Open ( vlc_object_t *p_this )
 
 #elif defined X11_SKINS
     // Initialize X11
-    p_intf->p_sys->display = XOpenDisplay( NULL );
+    Display *display = XOpenDisplay( NULL );
+    p_intf->p_sys->display = display;
     vlc_mutex_init( p_intf, &p_intf->p_sys->xlock );
     // Fake window to receive broadcast events
-    Window root = DefaultRootWindow( p_intf->p_sys->display );
-    p_intf->p_sys->mainWin = XCreateSimpleWindow( p_intf->p_sys->display, root, 0, 0, 
+    Window root = DefaultRootWindow( display );
+    p_intf->p_sys->mainWin = XCreateSimpleWindow( display, root, 0, 0, 
                                                   1, 1, 0, 0, 0 );
-    XStoreName( p_intf->p_sys->display, p_intf->p_sys->mainWin, "VLC Media Player" );
+    XStoreName( display, p_intf->p_sys->mainWin, "VLC Media Player" );
+
+    // Load the vlc icon
+    int screen = DefaultScreen( display );
+    Screen *screenptr = DefaultScreenOfDisplay( display );
+    Visual *visual = DefaultVisualOfScreen( screenptr );
+    imlib_context_set_display( display );
+    imlib_context_set_visual( visual );
+    imlib_context_set_drawable( root );
+    imlib_context_set_colormap( DefaultColormap( display, screen ) );
+    imlib_context_set_dither( 1 );
+    imlib_context_set_blend( 1 );
+    Imlib_Image img = imlib_load_image_immediately( DATA_PATH "vlc32x32.png" );
+    if( img == NULL )
+    {
+        // for developers ;)
+        img = imlib_load_image_immediately( "./share/vlc32x32.png" );
+    }
+    if( img == NULL )
+    {
+        msg_Err( p_intf, "loading vlc icon failed" );
+        p_intf->p_sys->iconPixmap = None;
+        p_intf->p_sys->iconMask = None;
+    }
+    else
+    {
+        imlib_context_set_image( img );
+        imlib_render_pixmaps_for_whole_image( &p_intf->p_sys->iconPixmap,
+                                              &p_intf->p_sys->iconMask );
+        imlib_free_image();
+    }                                     
+
 
 #elif defined WIN32
     // Interface thread id used to post broadcast messages
index e0a1a58..8a36e43 100644 (file)
@@ -2,7 +2,7 @@
  * x11_window.cpp: X11 implementation of the Window class
  *****************************************************************************
  * Copyright (C) 2003 VideoLAN
- * $Id: x11_window.cpp,v 1.21 2003/06/09 19:08:33 asmax Exp $
+ * $Id: x11_window.cpp,v 1.22 2003/06/13 21:18:54 asmax Exp $
  *
  * Authors: Cyril Deguet     <asmax@videolan.org>
  *
@@ -95,6 +95,27 @@ X11Window::X11Window( intf_thread_t *p_intf, Window wnd, int x, int y,
         XUNLOCK;
     }
 
+    // Associate vlc icon to the window
+    XLOCK;
+    XWMHints *hints = XGetWMHints( display, Wnd );
+    if( !hints)
+    {
+        hints = XAllocWMHints();
+    }
+    if( hints->icon_pixmap != None )
+    {
+        hints->icon_pixmap = p_intf->p_sys->iconPixmap;
+        hints->flags |= IconPixmapHint;
+    }
+    if( hints->icon_mask != None )
+    {
+        hints->icon_mask = p_intf->p_sys->iconMask;
+        hints->flags |= IconMaskHint;
+    }
+    XSetWMHints( display, Wnd, hints );
+    XFree( hints );
+    XUNLOCK;
+
     // Create Tool Tip window
     XColor color;
     color.red = 0xffff;