]> git.sesse.net Git - vlc/commitdiff
Qt: Correctly close the player when alt+f4 is pressed
authorJean-Baptiste Kempf <jb@videolan.org>
Tue, 4 May 2010 17:39:50 +0000 (19:39 +0200)
committerJean-Baptiste Kempf <jb@videolan.org>
Tue, 4 May 2010 17:40:38 +0000 (19:40 +0200)
even when in fullscreen. Close #3602

modules/gui/qt4/components/interface_widgets.cpp
modules/gui/qt4/components/interface_widgets.hpp

index 7cfb19cc1543dc02b69cf48020cd1b50bee09f14..efe02f61f8581883429ac29270a3e09faf0a1ca4 100644 (file)
@@ -29,6 +29,8 @@
 #endif
 
 #include "components/interface_widgets.hpp"
+#include "dialogs_provider.hpp"
+#include "util/customwidgets.hpp"               // qtEventToVLCKey, QVLCStackedWidget
 
 #include "menus.hpp"             /* Popup menu on bgWidget */
 
@@ -37,6 +39,7 @@
 #include <QLabel>
 #include <QToolButton>
 #include <QPalette>
+#include <QEvent>
 #include <QResizeEvent>
 #include <QDate>
 #include <QMenu>
@@ -70,14 +73,7 @@ private:
     VideoWidget *owner;
 public:
     ReparentableWidget( VideoWidget *owner ) : owner( owner )
-    {
-    }
-
-protected:
-    void keyPressEvent( QKeyEvent *e )
-    {
-        emit owner->keyPressed( e );
-    }
+    {}
 };
 
 /**********************************************************************
@@ -130,6 +126,7 @@ WId VideoWidget::request( int *pi_x, int *pi_y,
      * mode, and within the root window (NULL parent) in full-screen mode.
      */
     reparentable = new ReparentableWidget( this );
+    reparentable->installEventFilter(this );
     QLayout *innerLayout = new QHBoxLayout( reparentable );
     innerLayout->setContentsMargins( 0, 0, 0, 0 );
 
@@ -245,6 +242,32 @@ void VideoWidget::release( void )
     hide();
 }
 
+#undef KeyPress
+bool VideoWidget::eventFilter(QObject *obj, QEvent *event)
+{
+    if( obj == reparentable )
+    {
+        if (event->type() == QEvent::Close)
+        {
+            THEDP->quit();
+            return true;
+        }
+        else if( event->type() == QEvent::KeyPress )
+        {
+            emit keyPressed( static_cast<QKeyEvent *>(event) );
+            return true;
+        }
+        else if( event->type() == QEvent::Wheel )
+        {
+            int i_vlckey = qtWheelEventToVLCKey( static_cast<QWheelEvent *>( event) );
+            var_SetInteger( p_intf->p_libvlc, "key-pressed", i_vlckey );
+            msg_Dbg( p_intf, "Here: %i", i_vlckey );
+            return true;
+        }
+    }
+    return false;
+}
+
 /**********************************************************************
  * Background Widget. Show a simple image background. Currently,
  * it's album art if present or cone.
index 7cd3cfd22f35271347901d7d1bfecb1107f0654e..c3fcd3a39ebb2d3edc0918ca7f2ffe6a0d179055 100644 (file)
@@ -73,7 +73,7 @@ private:
 
     QWidget *reparentable;
     QLayout *layout;
-
+    virtual bool eventFilter ( QObject * watched, QEvent * event );
 signals:
     void keyPressed( QKeyEvent * );
     void sizeChanged( int, int );