--- Makefile.orig	Thu May  8 02:55:43 2008
+++ Makefile	Fri May  9 02:05:34 2008
@@ -6,7 +6,7 @@
 
 V=		0.8.6f
 DISTNAME=	vlc-${V}
-PKGNAME-main=	${DISTNAME}
+PKGNAME-main=	${DISTNAME}p0
 CATEGORIES=	x11
 MASTER_SITES=	http://download.videolan.org/pub/videolan/vlc/${V}/
 
--- /dev/null	Fri May  9 03:05:20 2008
+++ patches/patch-modules_gui_wxwidgets_interface_cpp	Fri May  9 02:57:30 2008
@@ -0,0 +1,273 @@
+$OpenBSD$
+--- modules/gui/wxwidgets/interface.cpp.orig	Mon Mar 24 00:41:49 2008
++++ modules/gui/wxwidgets/interface.cpp	Fri May  9 02:35:20 2008
+@@ -67,7 +67,7 @@
+ /*****************************************************************************
+  * Local prototypes
+  *****************************************************************************/
+-static int InteractCallback( vlc_object_t *, const char *, vlc_value_t,
++ static int InteractCallback( vlc_object_t *, const char *, vlc_value_t,
+                              vlc_value_t, void *);
+ 
+ /*****************************************************************************
+@@ -93,33 +93,6 @@ class wxMenuExt: public wxMenu (private)
+ 
+ };
+ 
+-class wxVolCtrl;
+-class VLCVolCtrl : public wxControl
+-{
+-public:
+-    VLCVolCtrl( intf_thread_t *p_intf, wxWindow *p_parent );
+-    virtual ~VLCVolCtrl() {};
+-
+-    virtual void OnPaint( wxPaintEvent &event );
+-    void OnChange( wxMouseEvent& event );
+-    void UpdateVolume();
+-
+-  private:
+-    DECLARE_EVENT_TABLE()
+-
+-    wxVolCtrl *gauge;
+-    int i_y_offset;
+-    vlc_bool_t b_mute;
+-    intf_thread_t *p_intf;
+-};
+-
+-BEGIN_EVENT_TABLE(VLCVolCtrl, wxControl)
+-    EVT_PAINT(VLCVolCtrl::OnPaint)
+-
+-    /* Mouse events */
+-    EVT_LEFT_UP(VLCVolCtrl::OnChange)
+-END_EVENT_TABLE()
+-
+ class Splitter : public wxSplitterWindow
+ {
+ public:
+@@ -291,6 +264,8 @@ enum
+     NextStream_Event,
+     SlowStream_Event,
+     FastStream_Event,
++    ToggleMute_Event,
++    SlideVolume_Event,
+ 
+     /* it is important for the id corresponding to the "About" command to have
+      * this standard value as otherwise it won't be handled properly under Mac
+@@ -344,6 +319,8 @@ BEGIN_EVENT_TABLE(Interface, wxFrame)
+     EVT_MENU(NextStream_Event, Interface::OnNextStream)
+     EVT_MENU(SlowStream_Event, Interface::OnSlowStream)
+     EVT_MENU(FastStream_Event, Interface::OnFastStream)
++    EVT_MENU(ToggleMute_Event, Interface::OnToggleMute)
++    EVT_COMMAND_SCROLL(SlideVolume_Event, Interface::OnSlideVolume)
+ 
+     /* Custom events */
+     EVT_COMMAND(0, wxEVT_INTF, Interface::OnControlEvent)
+@@ -530,7 +507,7 @@ void Interface::Init()
+ void Interface::Update()
+ {
+     /* Misc updates */
+-    if( !(i_update_counter % 10) ) ((VLCVolCtrl *)volctrl)->UpdateVolume();
++//    if( !(i_update_counter % 10) ) ((VLCVolCtrl *)volctrl)->UpdateVolume();
+ 
+     if( playlist_manager ) playlist_manager->Update();
+ 
+@@ -683,6 +660,7 @@ void Interface::CreateOurToolBar()
+ #define HELP_PLN N_("Next playlist item")
+ #define HELP_SLOW N_("Play slower")
+ #define HELP_FAST N_("Play faster")
++#define HELP_VOL N_("Toggle mute/unmute of the audio")
+ 
+ #define LABEL_OPEN N_("Open")
+ #define LABEL_STOP N_("Stop")
+@@ -694,6 +672,8 @@ void Interface::CreateOurToolBar()
+ #define LABEL_PLN N_("Next")
+ #define LABEL_SLOW N_("Slower")
+ #define LABEL_FAST N_("Faster")
++#define LABEL_VOL N_("Mute")
++
+     int minimal = config_GetInt( p_intf, "wx-minimal" );
+     bool label = config_GetInt( p_intf, "wx-labels" );
+ 
+@@ -740,15 +720,16 @@ void Interface::CreateOurToolBar()
+                           wxBitmap( playlist_small_xpm ), wxU(_(HELP_SPLO)) );
+     }
+ 
+-    wxControl *p_dummy_ctrl =
+-        new wxControl( toolbar, -1, wxDefaultPosition,
+-                       wxSize(16, 16 ), wxBORDER_NONE );
++    wxToolBarToolBase *v_tool = toolbar->AddTool( ToggleMute_Event,
++                         wxU(LABEL_VOL), wxBitmap( speaker_xpm ),
++                         wxU(_(HELP_VOL)), wxITEM_CHECK );
++    v_tool->SetClientData( v_tool );
+ 
+-    toolbar->AddControl( p_dummy_ctrl );
++    wxSlider *v_gauge = new wxSlider(toolbar, SlideVolume_Event, 256, 0,
++                            AOUT_VOLUME_MAX, wxDefaultPosition,
++                            wxSize(64,TOOLBAR_BMP_HEIGHT), wxSL_HORIZONTAL);
++    toolbar->AddControl(v_gauge);
+ 
+-    volctrl = new VLCVolCtrl( p_intf, toolbar );
+-    toolbar->AddControl( volctrl );
+-
+     toolbar->Realize();
+ 
+ #if wxUSE_DRAG_AND_DROP
+@@ -1199,6 +1180,49 @@ void Interface::OnFastStream( wxCommandEvent& WXUNUSED
+     }
+ }
+ 
++void Interface::OnToggleMute ( wxCommandEvent& WXUNUSED(event) )
++{
++    aout_VolumeMute(p_intf, NULL);
++    SyncVolume();
++
++}
++
++void Interface::SyncVolume()
++{
++    wxToolBarToolBase *p_tool = (wxToolBarToolBase *)
++        GetToolBar()->GetToolClientData( ToggleMute_Event );
++    if ( !p_tool) return;
++
++    audio_volume_t i_volume;
++    aout_VolumeGet(p_intf, &i_volume);
++
++// Updating the Mute Button... IF the slider is completely moved to the left,
++// the mute icon is shown too.
++    p_tool->SetNormalBitmap( wxBitmap( i_volume ? speaker_xpm : speaker_mute_xpm ) );
++    GetToolBar()->Realize();
++#if defined( __WXMSW__ )
++    /* Needed to work around a bug in wxToolBar::Realize() */
++    GetToolBar()->SetSize( GetSize().GetWidth(),
++                           GetToolBar()->GetSize().GetHeight() );
++    GetToolBar()->Update();
++#endif
++// the Toggle to true and false is nescessary; otherwise, the Icon is not repainted
++    GetToolBar()->ToggleTool( ToggleMute_Event, true );
++    GetToolBar()->ToggleTool( ToggleMute_Event, false );
++    GetToolBar()->Update();
++}
++
++void Interface::OnSlideVolume( wxScrollEvent& WXUNUSED(event))
++{
++    wxSlider *p_tool = (wxSlider *)
++        GetToolBar()->FindControl( SlideVolume_Event );
++    if ( !p_tool) return;
++
++    aout_VolumeSet(p_intf , p_tool->GetValue());
++    SyncVolume();
++
++}
++
+ void Interface::TogglePlayButton( int i_playing_status )
+ {
+     wxToolBarToolBase *p_tool = (wxToolBarToolBase *)
+@@ -1323,108 +1347,6 @@ bool DragAndDrop::OnDropFiles( wxCoord, wxCoord,
+     return TRUE;
+ }
+ #endif
+-
+-/*****************************************************************************
+- * Definition of VolCtrl class.
+- *****************************************************************************/
+-class wxVolCtrl: public wxGauge
+-{
+-public:
+-    /* Constructor */
+-    wxVolCtrl( intf_thread_t *_p_intf, wxWindow* parent, wxWindowID id,
+-               wxPoint = wxDefaultPosition, wxSize = wxSize( 20, -1 ) );
+-    virtual ~wxVolCtrl() {};
+-
+-    void UpdateVolume();
+-    int GetVolume();
+-
+-    void OnChange( wxMouseEvent& event );
+-
+-private:
+-    intf_thread_t *p_intf;
+-
+-    DECLARE_EVENT_TABLE();
+-};
+-
+-BEGIN_EVENT_TABLE(wxVolCtrl, wxWindow)
+-    /* Mouse events */
+-    EVT_LEFT_DOWN(wxVolCtrl::OnChange)
+-    EVT_MOTION(wxVolCtrl::OnChange)
+-END_EVENT_TABLE()
+-
+-wxVolCtrl::wxVolCtrl( intf_thread_t *_p_intf, wxWindow* parent, wxWindowID id,
+-                      wxPoint point, wxSize size )
+-  : wxGauge( parent, id, 200, point, size, wxGA_HORIZONTAL | wxGA_SMOOTH )
+-{
+-    p_intf = _p_intf;
+-    UpdateVolume();
+-}
+-
+-void wxVolCtrl::OnChange( wxMouseEvent& event )
+-{
+-    if( !event.LeftDown() && !event.LeftIsDown() ) return;
+-
+-    int i_volume = event.GetX() * 200 / GetClientSize().GetWidth();
+-    aout_VolumeSet( p_intf, i_volume * AOUT_VOLUME_MAX / 200 / 2 );
+-    UpdateVolume();
+-}
+-
+-void wxVolCtrl::UpdateVolume()
+-{
+-    audio_volume_t i_volume;
+-    aout_VolumeGet( p_intf, &i_volume );
+-
+-    int i_gauge_volume = i_volume * 200 * 2 / AOUT_VOLUME_MAX;
+-    if( i_gauge_volume == GetValue() ) return;
+-
+-    SetValue( i_gauge_volume );
+-    SetToolTip( wxString::Format((wxString)wxU(_("Volume")) + wxT(" %d"),
+-                i_gauge_volume / 2 ) );
+-}
+-
+-#if defined(__WXGTK__)
+-#define VLCVOL_HEIGHT p_parent->GetSize().GetHeight()
+-#else
+-#define VLCVOL_HEIGHT TOOLBAR_BMP_HEIGHT
+-#endif
+-VLCVolCtrl::VLCVolCtrl( intf_thread_t *_p_intf, wxWindow *p_parent )
+-  :wxControl( p_parent, -1, wxDefaultPosition, wxSize(64, VLCVOL_HEIGHT ),
+-              wxBORDER_NONE ),
+-   i_y_offset((VLCVOL_HEIGHT - TOOLBAR_BMP_HEIGHT) / 2),
+-   b_mute(0), p_intf(_p_intf)
+-{
+-    gauge = new wxVolCtrl( p_intf, this, -1, wxPoint( 18, i_y_offset ),
+-                           wxSize( 44, TOOLBAR_BMP_HEIGHT ) );
+-}
+-
+-void VLCVolCtrl::OnPaint( wxPaintEvent &evt )
+-{
+-    wxPaintDC dc( this );
+-    wxBitmap mPlayBitmap( b_mute ? speaker_mute_xpm : speaker_xpm );
+-    dc.DrawBitmap( mPlayBitmap, 0, i_y_offset, TRUE );
+-}
+-
+-void VLCVolCtrl::OnChange( wxMouseEvent& event )
+-{
+-    if( event.GetX() < TOOLBAR_BMP_WIDTH )
+-    {
+-        int i_volume;
+-        aout_VolumeMute( p_intf, (audio_volume_t *)&i_volume );
+-
+-        b_mute = !b_mute;
+-        Refresh();
+-    }
+-}
+-
+-void VLCVolCtrl::UpdateVolume()
+-{
+-    gauge->UpdateVolume();
+-
+-    int i_volume = gauge->GetValue();
+-    if( !!i_volume == !b_mute ) return;
+-    b_mute = !b_mute;
+-    Refresh();
+-}
+ 
+ /*****************************************************************************
+  * Systray class.
--- /dev/null	Fri May  9 03:05:26 2008
+++ patches/patch-modules_gui_wxwidgets_interface_hpp	Fri May  9 02:56:40 2008
@@ -0,0 +1,13 @@
+$OpenBSD$
+--- modules/gui/wxwidgets/interface.hpp.orig	Mon Mar 24 00:41:49 2008
++++ modules/gui/wxwidgets/interface.hpp	Fri May  9 02:35:20 2008
+@@ -147,6 +147,9 @@ namespace wxvlc
+         void OnNextStream( wxCommandEvent& event );
+         void OnSlowStream( wxCommandEvent& event );
+         void OnFastStream( wxCommandEvent& event );
++	void OnToggleMute( wxCommandEvent& event );
++	void OnSlideVolume( wxScrollEvent& event );
++        void SyncVolume( );
+ 
+         void OnInteraction( wxCommandEvent& event );
+ 
