8a4941ecb2458f15e9fae321158facd0e87acadf
[vlc.git] / modules / gui / skins / x11 / x11_theme.cpp
1 /*****************************************************************************
2  * x11_theme.cpp: X11 implementation of the Theme class
3  *****************************************************************************
4  * Copyright (C) 2003 VideoLAN
5  * $Id: x11_theme.cpp,v 1.12 2003/06/10 11:43:41 gbazin Exp $
6  *
7  * Authors: Cyril Deguet     <asmax@videolan.org>
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software
21  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111,
22  * USA.
23  *****************************************************************************/
24
25 #ifdef X11_SKINS
26
27 //--- X11 -------------------------------------------------------------------
28 #include <X11/Xlib.h>
29
30 //--- VLC -------------------------------------------------------------------
31 #include <vlc/intf.h>
32
33 //--- SKIN ------------------------------------------------------------------
34 #include "../os_api.h"
35 #include "../src/banks.h"
36 #include "../src/window.h"
37 #include "../os_window.h"
38 #include "../src/event.h"
39 #include "../os_event.h"
40 #include "../src/theme.h"
41 #include "../os_theme.h"
42 #include "../src/vlcproc.h"
43 #include "../src/skin_common.h"
44
45
46 //---------------------------------------------------------------------------
47 void SkinManage( intf_thread_t *p_intf );
48
49
50 //---------------------------------------------------------------------------
51 // THEME
52 //---------------------------------------------------------------------------
53 X11Theme::X11Theme( intf_thread_t *_p_intf ) : Theme( _p_intf )
54 {
55     //Initialize values
56     p_intf = _p_intf;
57     display = p_intf->p_sys->display;
58 }
59
60 //---------------------------------------------------------------------------
61 X11Theme::~X11Theme()
62 {
63     XLOCK;
64     //XDestroyWindow( display, p_intf->p_sys->mainWin );
65     XUNLOCK;
66 }
67 //---------------------------------------------------------------------------
68 void X11Theme::OnLoadTheme()
69 {
70 /*    // The create menu
71     CreateSystemMenu();
72 */
73     Window root = DefaultRootWindow( display );
74     XLOCK;
75     p_intf->p_sys->mainWin = XCreateSimpleWindow( display, root, 0, 0, 
76                                                   1, 1, 0, 0, 0 );
77     XStoreName( display, p_intf->p_sys->mainWin, "VLC Media Player" );
78     XUNLOCK;
79 }
80 //---------------------------------------------------------------------------
81 void X11Theme::AddSystemMenu( string name, Event *event )
82 {/*
83     if( name == "SEPARATOR" )
84     {
85         AppendMenu( SysMenu, MF_SEPARATOR, 0, NULL );
86     }
87     else
88     {
89         AppendMenu( SysMenu, MF_STRING, (unsigned int)event,
90                     (char *)name.c_str() );
91     }*/
92 }
93 //---------------------------------------------------------------------------
94 void X11Theme::ChangeClientWindowName( string name )
95 {
96     XLOCK;
97     XStoreName( display, p_intf->p_sys->mainWin, name.c_str() );
98     XUNLOCK;
99 }
100 //---------------------------------------------------------------------------
101 void X11Theme::AddWindow( string name, int x, int y, bool visible,
102     int fadetime, int alpha, int movealpha, bool dragdrop )
103 {
104     // Create the window
105     Window root = DefaultRootWindow( display );
106     XSetWindowAttributes attr;
107     XLOCK;
108     Window wnd = XCreateWindow( display, root, 0, 0, 1, 1, 0, 0, InputOutput,
109                                 CopyFromParent, 0, &attr );
110     XSelectInput( display, wnd, ExposureMask|StructureNotifyMask|
111                   KeyPressMask|KeyReleaseMask|ButtonPressMask|
112                   ButtonReleaseMask|PointerMotionMask|EnterWindowMask|
113                   LeaveWindowMask);
114     XUNLOCK;
115
116     // Changing decorations
117     struct {
118         unsigned long flags;
119         unsigned long functions;
120         unsigned long decorations;
121         long input_mode;
122         unsigned long status;
123     } motifWmHints;
124
125     Atom hints_atom = XInternAtom( display, "_MOTIF_WM_HINTS", False );
126
127     motifWmHints.flags = 2;    // MWM_HINTS_DECORATIONS;
128     motifWmHints.decorations = 0;
129     XLOCK;
130     XChangeProperty( display, wnd, hints_atom, hints_atom, 32, 
131                      PropModeReplace, (unsigned char *)&motifWmHints, 
132                      sizeof( motifWmHints ) / sizeof( long ) );
133
134     // Change the window title
135     XStoreName( display, wnd, name.c_str() );
136     XUNLOCK;
137
138     WindowList.push_back( (SkinWindow *)new OSWindow( p_intf, wnd, x, y, 
139         visible, fadetime, alpha, movealpha, dragdrop, name ) ) ;
140 }
141 //---------------------------------------------------------------------------
142 void X11Theme::ChangeTray()
143 {/*
144     if( ShowInTray )
145     {
146         Shell_NotifyIcon( NIM_DELETE, &TrayIcon );
147         ShowInTray = false;
148     }
149     else
150     {
151         Shell_NotifyIcon( NIM_ADD, &TrayIcon );
152         ShowInTray = true;
153     }*/
154 }
155 //---------------------------------------------------------------------------
156 void X11Theme::ChangeTaskbar()
157 {/*
158     if( ShowInTaskbar )
159     {
160         ShowWindow( ParentWindow, SW_HIDE );
161         SetWindowLongPtr( ParentWindow, GWL_EXSTYLE,
162                           WS_EX_LAYERED|WS_EX_TOOLWINDOW );
163         ShowWindow( ParentWindow, SW_SHOW );
164         ShowInTaskbar = false;
165     }
166     else
167     {
168         ShowWindow( ParentWindow, SW_HIDE );
169         SetWindowLongPtr( ParentWindow, GWL_EXSTYLE,
170                           WS_EX_LAYERED|WS_EX_APPWINDOW );
171         ShowWindow( ParentWindow, SW_SHOW );
172         ShowInTaskbar = true;
173     }*/
174 }
175 //---------------------------------------------------------------------------
176
177 #endif