+VideoContainer::VideoContainer(Monitor* parent) :
+ QFrame()
+ , m_monitor(parent)
+{
+ setFrameShape(QFrame::NoFrame);
+ setFocusPolicy(Qt::ClickFocus);
+ setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
+}
+
+// virtual
+void VideoContainer::mousePressEvent(QMouseEvent * event)
+{
+ if (m_monitor->underMouse()) event->setAccepted(false);
+}
+
+// virtual
+void VideoContainer::mouseReleaseEvent(QMouseEvent * event)
+{
+ if (m_monitor->underMouse()) event->setAccepted(false);
+ else {
+ if (m_monitor->isActive()) {
+ m_monitor->slotPlay();
+ event->accept();
+ }
+ }
+}
+
+// virtual
+void VideoContainer::mouseMoveEvent(QMouseEvent *event)
+{
+ if (m_monitor->underMouse()) event->setAccepted(false);
+}
+
+// virtual
+void VideoContainer::wheelEvent(QWheelEvent * event)
+{
+ if (m_monitor->underMouse()) event->setAccepted(false);
+ else {
+ m_monitor->slotMouseSeek(event->delta(), event->modifiers() == Qt::ControlModifier);
+ event->accept();
+ }
+}
+
+void VideoContainer::mouseDoubleClickEvent(QMouseEvent * event)
+{
+ if (!KdenliveSettings::openglmonitors())
+ switchFullScreen();
+}
+
+void VideoContainer::switchFullScreen()
+{
+ // TODO: disable screensaver?
+ Qt::WindowFlags flags = windowFlags();
+ if (!isFullScreen()) {
+ // Check if we ahave a multiple monitor setup
+ setUpdatesEnabled(false);
+#if QT_VERSION >= 0x040600
+ int monitors = QApplication::desktop()->screenCount();
+#else
+ int monitors = QApplication::desktop()->numScreens();
+#endif
+ if (monitors > 1) {
+ QRect screenres;
+ // Move monitor widget to the second screen (one screen for Kdenlive, the other one for the Monitor widget
+ int currentScreen = QApplication::desktop()->screenNumber(this);
+ if (currentScreen < monitors - 1)
+ screenres = QApplication::desktop()->screenGeometry(currentScreen + 1);
+ else
+ screenres = QApplication::desktop()->screenGeometry(currentScreen - 1);
+ move(QPoint(screenres.x(), screenres.y()));
+ resize(screenres.width(), screenres.height());
+ }
+
+ m_baseFlags = flags & (Qt::Window | Qt::SubWindow);
+ flags |= Qt::Window;
+ flags ^= Qt::SubWindow;
+ setWindowFlags(flags);
+#ifdef Q_WS_X11
+ // This works around a bug with Compiz
+ // as the window must be visible before we can set the state
+ show();
+ raise();
+ setWindowState(windowState() | Qt::WindowFullScreen); // set
+#else
+ setWindowState(windowState() | Qt::WindowFullScreen); // set
+ setUpdatesEnabled(true);
+ show();
+#endif
+ } else {
+ setUpdatesEnabled(false);
+ flags ^= (Qt::Window | Qt::SubWindow); //clear the flags...
+ flags |= m_baseFlags; //then we reset the flags (window and subwindow)
+ setWindowFlags(flags);
+ setWindowState(windowState() ^ Qt::WindowFullScreen); // reset
+ setUpdatesEnabled(true);
+ show();
+ }
+ m_monitor->pause();
+}
+
+