File indexing completed on 2024-04-21 15:38:23

0001 /**
0002  * Copyright (C) 2002-2003 by Koos Vriezen <koos.vriezen@gmail.com>
0003  *
0004  *  This library is free software; you can redistribute it and/or
0005  *  modify it under the terms of the GNU Library General Public
0006  *  License version 2 as published by the Free Software Foundation.
0007  *
0008  *  This library is distributed in the hope that it will be useful,
0009  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
0010  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
0011  *  Library General Public License for more details.
0012  *
0013  *  You should have received a copy of the GNU Library General Public License
0014  *  along with this library; see the file COPYING.LIB.  If not, write to
0015  *  the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
0016  *  Boston, MA 02110-1301, USA.
0017  **/
0018 
0019 #include <stdio.h>
0020 #include <math.h>
0021 
0022 #include "config-kmplayer.h"
0023 // include files for Qt
0024 #include <qstyle.h>
0025 #include <qtimer.h>
0026 #include <qpainter.h>
0027 #include <qmetaobject.h>
0028 #include <qlayout.h>
0029 #include <qpixmap.h>
0030 #include <qtextedit.h>
0031 #include <qtooltip.h>
0032 #include <qapplication.h>
0033 #include <qcursor.h>
0034 #include <qkeysequence.h>
0035 #include <qslider.h>
0036 #include <qlabel.h>
0037 #include <qdatastream.h>
0038 #include <QContextMenuEvent>
0039 #include <QMimeData>
0040 #include <QDropEvent>
0041 #include <QAction>
0042 #include <QDragEnterEvent>
0043 #include <QFontDatabase>
0044 #include <QTextDocument>
0045 #include <QTextCursor>
0046 #include <qcursor.h>
0047 #include <qclipboard.h>
0048 #include <kicon.h>
0049 #include <QMainWindow>
0050 #include <QDockWidget>
0051 
0052 #include <kiconloader.h>
0053 #include <kstatusbar.h>
0054 #include <kdebug.h>
0055 #include <klocalizedstring.h>
0056 #include <kactioncollection.h>
0057 #include <kshortcut.h>
0058 #include <kfinddialog.h>
0059 
0060 #include "kmplayerview.h"
0061 #include "kmplayercontrolpanel.h"
0062 #include "playlistview.h"
0063 #include "viewarea.h"
0064 #include <solid/powermanagement.h>
0065 
0066 /* mouse invisible: define the time (in 1/1000 seconds) before mouse goes invisible */
0067 
0068 
0069 using namespace KMPlayer;
0070 
0071 //-------------------------------------------------------------------------
0072 
0073 KDE_NO_CDTOR_EXPORT PictureWidget::PictureWidget (QWidget * parent, View * view)
0074  : QWidget (parent), m_view (view) {
0075     setAutoFillBackground (true);
0076 }
0077 
0078 KDE_NO_EXPORT void PictureWidget::mousePressEvent (QMouseEvent *) {
0079     m_view->emitPictureClicked ();
0080 }
0081 
0082 KDE_NO_EXPORT void PictureWidget::mouseMoveEvent (QMouseEvent *e) {
0083     if (e->buttons () == Qt::NoButton)
0084         m_view->mouseMoved (e->x (), e->y ());
0085 }
0086 
0087 //-----------------------------------------------------------------------------
0088 
0089 KDE_NO_CDTOR_EXPORT TextEdit::TextEdit (QWidget * parent, View * view) : QTextEdit (parent), m_view (view) {
0090 #if QT_VERSION > 0x040399
0091     setAttribute (Qt::WA_NativeWindow);
0092     setAttribute(Qt::WA_DontCreateNativeAncestors);
0093 #endif
0094     setReadOnly (true);
0095     QPalette p=palette();
0096     p.setColor (QPalette::Active, QPalette::Base, QColor (Qt::black));
0097     p.setColor (QPalette::Active, QPalette::Foreground, (QColor (0xB2, 0xB2, 0xB2)));
0098     setPalette (p);
0099 }
0100 
0101 KDE_NO_EXPORT void TextEdit::contextMenuEvent (QContextMenuEvent * e) {
0102     m_view->controlPanel ()->popupMenu->exec (e->globalPos ());
0103 }
0104 
0105 //-----------------------------------------------------------------------------
0106 
0107 KDE_NO_CDTOR_EXPORT InfoWindow::InfoWindow (QWidget *, View * view)
0108  : m_view (view) {
0109     setReadOnly (true);
0110     //setLinkUnderline (false);
0111 }
0112 
0113 KDE_NO_EXPORT void InfoWindow::contextMenuEvent (QContextMenuEvent * e) {
0114     m_view->controlPanel ()->popupMenu->exec (e->globalPos ());
0115 }
0116 
0117 //-----------------------------------------------------------------------------
0118 
0119 KDE_NO_CDTOR_EXPORT View::View (QWidget *parent)
0120   : KMediaPlayer::View (parent),
0121     m_control_panel (0L),
0122     m_status_bar (0L),
0123     m_controlpanel_mode (CP_Show),
0124     m_old_controlpanel_mode (CP_Show),
0125     m_statusbar_mode (SB_Hide),
0126     controlbar_timer (0),
0127     infopanel_timer (0),
0128     m_restore_state_timer(0),
0129     m_powerManagerStopSleep( -1 ),
0130     m_keepsizeratio (false),
0131     m_playing (false),
0132     m_tmplog_needs_eol (false),
0133     m_revert_fullscreen (false),
0134     m_no_info (false),
0135     m_edit_mode (false)
0136 {
0137     setAttribute (Qt::WA_NoSystemBackground, true);
0138     setAutoFillBackground (false);
0139     setAcceptDrops(true);
0140 }
0141 
0142 KDE_NO_EXPORT void View::dropEvent (QDropEvent * de) {
0143     QList<QUrl> uris = de->mimeData()->urls();
0144     if (uris.isEmpty() || !uris[0].isValid()) {
0145         QString text = de->mimeData()->text();
0146         if (!text.isEmpty())
0147             uris.push_back(QUrl::fromUserInput(text));
0148     }
0149     if (uris.size () > 0) {
0150         //m_widgetstack->currentWidget ()->setFocus ();
0151         emit urlDropped (uris);
0152         de->accept ();
0153     }
0154 }
0155 
0156 KDE_NO_EXPORT void View::dragEnterEvent (QDragEnterEvent* dee) {
0157     if (m_playlist->isDragValid (dee))
0158         dee->accept ();
0159 }
0160 
0161 void View::initDock (QWidget *central) {
0162     m_dockarea = new QMainWindow;
0163     m_dockarea->setDockNestingEnabled(true);
0164     m_dockarea->setCentralWidget (central);
0165     central->setVisible (true);
0166 
0167     m_dock_playlist = new QDockWidget (i18n ("Playlist"));
0168     if (central != m_playlist)
0169         m_dock_playlist->setWidget (m_playlist);
0170     m_dock_playlist->setObjectName ("playlist");
0171 
0172     m_dock_infopanel = new QDockWidget (i18n ("Information"));
0173     if (central != m_infopanel)
0174         m_dock_infopanel->setWidget (m_infopanel);
0175     m_dock_infopanel->setObjectName ("infopanel");
0176 
0177     m_dock_playlist->hide ();
0178     m_dock_infopanel->hide ();
0179 
0180     m_dockarea->addDockWidget (Qt::BottomDockWidgetArea, m_dock_infopanel);
0181     m_dockarea->addDockWidget (Qt::LeftDockWidgetArea, m_dock_playlist);
0182 
0183     layout ()->addWidget (m_dockarea);
0184 
0185     m_dockarea->setWindowFlags (Qt::SubWindow);
0186     m_dockarea->show ();
0187 
0188     m_view_area->resizeEvent (0L);
0189 }
0190 
0191 KDE_NO_EXPORT void View::init (KActionCollection *action_collection, bool transparent) {
0192     QVBoxLayout * viewbox = new QVBoxLayout;
0193     viewbox->setContentsMargins (0, 0, 0, 0);
0194     setLayout (viewbox);
0195     m_view_area = new ViewArea (NULL, this, !transparent);
0196     m_playlist = new PlayListView (NULL, this, action_collection);
0197 
0198     m_picture = new PictureWidget (m_view_area, this);
0199     m_picture->hide ();
0200     m_control_panel = new ControlPanel (m_view_area, this);
0201     m_control_panel->setMaximumHeight(controlPanel ()->maximumSize ().height ());
0202     m_status_bar = new StatusBar (m_view_area);
0203     m_status_bar->clearMessage();
0204     m_status_bar->setAutoFillBackground (true);
0205     QSize sbsize = m_status_bar->sizeHint ();
0206     m_status_bar->hide ();
0207     m_status_bar->setMaximumHeight(sbsize.height ());
0208     setVideoWidget (m_view_area);
0209 
0210     m_multiedit = new TextEdit (m_view_area, this);
0211     QFont fnt = QFontDatabase::systemFont(QFontDatabase::FixedFont);
0212     m_multiedit->setFont (fnt);
0213     m_multiedit->hide ();
0214 
0215     m_infopanel = new InfoWindow (NULL, this);
0216 
0217     connect (m_control_panel->scale_slider, SIGNAL (valueChanged (int)),
0218              m_view_area, SLOT (scale (int)));
0219     setFocusPolicy (Qt::ClickFocus);
0220 
0221     setAcceptDrops (true);
0222 }
0223 
0224 KDE_NO_CDTOR_EXPORT View::~View () {
0225     if (m_view_area->parent () != this)
0226         delete m_view_area;
0227 }
0228 
0229 KDE_NO_EXPORT void View::setEraseColor (const QColor & /*color*/) {
0230     /*KMediaPlayer::View::setEraseColor (color);
0231     if (statusBar ()) {
0232         statusBar ()->setEraseColor (color);
0233         controlPanel ()->setEraseColor (color);
0234     }*/
0235 }
0236 
0237 void View::setInfoMessage (const QString & msg) {
0238     bool ismain = m_dockarea->centralWidget () == m_infopanel;
0239     if (msg.isEmpty ()) {
0240         if (!ismain && !m_edit_mode && !infopanel_timer)
0241             infopanel_timer = startTimer (0);
0242        m_infopanel->clear ();
0243     } else if (ismain || !m_no_info) {
0244         if (!ismain && !m_edit_mode && !m_dock_infopanel->isVisible ())
0245             m_dock_infopanel->show ();
0246         if (m_edit_mode)
0247             m_infopanel->setPlainText (msg);
0248         else
0249             m_infopanel->setHtml (msg);
0250     }
0251 }
0252 
0253 void View::setStatusMessage (const QString & msg) {
0254     if (m_statusbar_mode != SB_Hide)
0255         m_status_bar->showMessage(msg);
0256 }
0257 
0258 void View::toggleShowPlaylist () {
0259     if (m_controlpanel_mode == CP_Only)
0260         return;
0261     if (m_dock_playlist->isVisible ())
0262         m_dock_playlist->hide ();
0263     else
0264         m_dock_playlist->show();
0265     /*if (m_dock_playlist->mayBeShow ()) {
0266         if (m_dock_playlist->isDockBackPossible ())
0267             m_dock_playlist->dockBack ();
0268         else {
0269             bool horz = true;
0270             QStyle *style = m_playlist->style ();
0271             int h = style->pixelMetric (QStyle::PM_ScrollBarExtent, NULL, m_playlist);
0272             h += style->pixelMetric (QStyle::PM_DockWidgetFrameWidth, NULL, m_playlist);
0273             h +=style->pixelMetric (QStyle::PM_DockWidgetHandleExtent, NULL, m_playlist);
0274             for (Q3ListViewItem *i=m_playlist->firstChild();i;i=i->itemBelow()) {
0275                 h += i->height ();
0276                 if (h > int (0.25 * height ())) {
0277                     horz = false;
0278                     break;
0279                 }
0280             }
0281             int perc = 30;
0282             if (horz && 100 * h / height () < perc)
0283                 perc = 100 * h / height ();
0284             m_dock_playlist->manualDock (m_dock_video, horz ? K3DockWidget::DockTop : K3DockWidget::DockLeft, perc);
0285         }
0286     } else
0287         m_dock_playlist->undock ();*/
0288 }
0289 
0290 void View::setViewOnly () {
0291     m_dock_playlist->hide ();
0292     m_dock_infopanel->hide ();
0293 }
0294 
0295 void View::setEditMode (TopPlayItem *ri, bool enable) {
0296     m_edit_mode = enable;
0297     m_infopanel->setReadOnly (!m_edit_mode);
0298     if (m_edit_mode && !m_dock_infopanel->isVisible ())
0299         m_dock_infopanel->show ();
0300     //if (m_edit_mode && m_dock_infopanel->mayBeShow ())
0301     //    m_dock_infopanel->manualDock(m_dock_video,K3DockWidget::DockBottom,50);
0302     m_playlist->showAllNodes (ri, m_edit_mode);
0303 }
0304 
0305 #ifndef KMPLAYER_WITH_CAIRO
0306 bool View::setPicture (const QString & path) {
0307     if (path.isEmpty ())
0308         m_image = QImage ();
0309     else {
0310         m_image = QImage (path);
0311         if (m_image.isNull ())
0312             kDebug() << "View::setPicture failed " << path;
0313         else if (m_image.depth () < 24)
0314             m_image = m_image.convertToFormat (QImage::Format_RGB32);
0315     }
0316     m_picture->setVisible (!m_image.isNull ());
0317     if (m_image.isNull ()) {
0318         m_view_area->setVideoWidgetVisible (true);
0319     } else {
0320         QPalette palette = m_picture->palette ();
0321         palette.setColor (m_picture->backgroundRole(), viewArea()->palette ().color (backgroundRole ()));
0322         palette.setBrush (m_picture->backgroundRole(), QBrush (m_image));
0323         m_picture->setPalette (palette);
0324         m_view_area->setVideoWidgetVisible (false);
0325         controlPanel ()->raise ();
0326         setControlPanelMode (CP_AutoHide);
0327     }
0328     return !m_image.isNull ();
0329 }
0330 #endif
0331 
0332 void View::toggleVideoConsoleWindow () {
0333     if (m_multiedit->isVisible ()) {
0334         m_multiedit->hide ();
0335         m_view_area->setVideoWidgetVisible (true);
0336         m_control_panel->videoConsoleAction->setIcon(QIcon::fromTheme(("konsole")));
0337         m_control_panel->videoConsoleAction->setText (i18n ("Con&sole"));
0338         delayedShowButtons (false);
0339     } else {
0340         m_control_panel->videoConsoleAction->setIcon(QIcon::fromTheme("video"));
0341         m_control_panel->videoConsoleAction->setText (i18n ("V&ideo"));
0342         m_multiedit->show ();
0343         m_multiedit->raise ();
0344         m_view_area->setVideoWidgetVisible (false);
0345         addText (QString (""), false);
0346         if (m_controlpanel_mode == CP_AutoHide && m_playing)
0347             m_control_panel->show();
0348     }
0349     updateLayout ();
0350     emit windowVideoConsoleToggled (m_multiedit->isVisible ());
0351 }
0352 
0353 void View::setControlPanelMode (ControlPanelMode m) {
0354     if (controlbar_timer) {
0355         killTimer (controlbar_timer);
0356         controlbar_timer = 0L;
0357     }
0358     m_old_controlpanel_mode = m_controlpanel_mode = m;
0359     if (m_playing && isFullScreen())
0360         m_controlpanel_mode = CP_AutoHide;
0361     if ((m_controlpanel_mode == CP_Show || m_controlpanel_mode == CP_Only) &&
0362             !m_control_panel->isVisible ()) {
0363         m_control_panel->show ();
0364     } else if (m_controlpanel_mode == CP_AutoHide) {
0365         if (!m_image.isNull () || (m_playing && !m_multiedit->isVisible ()))
0366             delayedShowButtons (false);
0367         else if (!m_control_panel->isVisible ()) {
0368             m_control_panel->show ();
0369         }
0370     } else if (m_controlpanel_mode == CP_Hide) {
0371         bool vis = m_control_panel->isVisible();
0372         m_control_panel->hide ();
0373         if (vis)
0374             m_view_area->resizeEvent (0L);
0375     }
0376     m_view_area->resizeEvent (0L);
0377 }
0378 
0379 void View::setStatusBarMode (StatusBarMode m) {
0380     m_statusbar_mode = m;
0381     m_status_bar->setVisible (m != SB_Hide);
0382     m_view_area->resizeEvent (0L);
0383 }
0384 
0385 KDE_NO_EXPORT void View::delayedShowButtons (bool show) {
0386     if ((show && m_control_panel->isVisible ()) ||
0387             (!show && !m_control_panel->isVisible ())) {
0388         if (controlbar_timer) {
0389             killTimer (controlbar_timer);
0390             controlbar_timer = 0;
0391         }
0392         if (!show)
0393             m_control_panel->hide (); // for initial race
0394     } else if (m_controlpanel_mode == CP_AutoHide &&
0395             (m_playing || !m_image.isNull ()) &&
0396             !m_multiedit->isVisible () && !controlbar_timer) {
0397         controlbar_timer = startTimer (500);
0398     }
0399 }
0400 
0401 KDE_NO_EXPORT void View::mouseMoved (int, int y) {
0402     int h = m_view_area->height ();
0403     int vert_buttons_pos = h - statusBarHeight ();
0404     int cp_height = controlPanel ()->maximumSize ().height ();
0405     if (cp_height > int (0.25 * h))
0406         cp_height = int (0.25 * h);
0407     delayedShowButtons (y > vert_buttons_pos-cp_height && y < vert_buttons_pos);
0408 }
0409 
0410 KDE_NO_EXPORT void View::updateLayout () {
0411     if (m_controlpanel_mode == CP_Only)
0412         m_control_panel->setMaximumHeight(height());
0413     m_view_area->resizeEvent (0L);
0414 }
0415 
0416 void View::setKeepSizeRatio (bool b) {
0417     if (m_keepsizeratio != b) {
0418         m_keepsizeratio = b;
0419         updateLayout ();
0420         m_view_area->update ();
0421     }
0422 }
0423 
0424 KDE_NO_EXPORT void View::timerEvent (QTimerEvent * e) {
0425     if (e->timerId () == controlbar_timer) {
0426         controlbar_timer = 0;
0427         if (m_playing || !m_image.isNull ()) {
0428             int vert_buttons_pos = m_view_area->height()-statusBarHeight ();
0429             QPoint mouse_pos = m_view_area->mapFromGlobal (QCursor::pos ());
0430             int cp_height = m_control_panel->maximumSize ().height ();
0431             bool mouse_on_buttons = (//m_view_area->hasMouse () &&
0432                     mouse_pos.y () >= vert_buttons_pos-cp_height &&
0433                     mouse_pos.y ()<= vert_buttons_pos &&
0434                     mouse_pos.x () > 0 &&
0435                     mouse_pos.x () < m_control_panel->width());
0436             if (mouse_on_buttons && !m_control_panel->isVisible ()) {
0437                 m_control_panel->show ();
0438                 m_view_area->resizeEvent (0L);
0439             } else if (!mouse_on_buttons && m_control_panel->isVisible ()) {
0440                 m_control_panel->hide ();
0441                 m_view_area->resizeEvent (0L);
0442             }
0443         }
0444     } else if (e->timerId () == infopanel_timer) {
0445         if (m_infopanel->document ()->isEmpty ())
0446             m_dock_infopanel->hide ();
0447             //m_dock_infopanel->undock ();
0448         infopanel_timer  = 0;
0449     } else if (e->timerId () == m_restore_state_timer) {
0450         m_view_area->setVisible(true);
0451         setControlPanelMode (m_old_controlpanel_mode);
0452         m_dockarea->restoreState(m_dock_state);
0453         m_restore_state_timer = 0;
0454     }
0455     killTimer (e->timerId ());
0456 }
0457 
0458 void View::addText (const QString & str, bool eol) {
0459     if (m_tmplog_needs_eol)
0460         tmplog += QChar ('\n');
0461     tmplog += str;
0462     m_tmplog_needs_eol = eol;
0463     if (!m_multiedit->isVisible () && tmplog.size () < 7500)
0464         return;
0465     if (eol) {
0466         if (m_multiedit->document ()->isEmpty ())
0467             m_multiedit->setPlainText (tmplog);
0468         else
0469             m_multiedit->append (tmplog);
0470         tmplog.truncate (0);
0471         m_tmplog_needs_eol = false;
0472     } else {
0473         int pos = tmplog.lastIndexOf (QChar ('\n'));
0474         if (pos >= 0) {
0475             m_multiedit->append (tmplog.left (pos));
0476             tmplog = tmplog.mid (pos+1);
0477         }
0478     }
0479     QTextCursor cursor = m_multiedit->textCursor ();
0480     cursor.movePosition (QTextCursor::End);
0481     cursor.movePosition (QTextCursor::PreviousBlock, QTextCursor::MoveAnchor, 5000);
0482     cursor.movePosition (QTextCursor::Start, QTextCursor::KeepAnchor);
0483     cursor.removeSelectedText ();
0484     cursor.movePosition (QTextCursor::End);
0485     m_multiedit->setTextCursor (cursor);
0486 }
0487 
0488 KDE_NO_EXPORT void View::videoStart () {
0489     if (!isFullScreen () && m_dockarea->centralWidget () != m_view_area) {
0490         // restore from an info or playlist only setting
0491         if (m_dockarea->centralWidget () == m_playlist)
0492             m_dock_playlist->setWidget (m_playlist);
0493         else if (m_dockarea->centralWidget () == m_infopanel)
0494             m_dock_infopanel->setWidget (m_infopanel);
0495         else
0496             m_status_bar->setVisible (false);
0497         m_dockarea->setCentralWidget (m_view_area);
0498     }
0499     if (m_controlpanel_mode == CP_Only) {
0500         m_control_panel->setMaximumHeight(controlPanel()->preferredHeight());
0501         setControlPanelMode (CP_Show);
0502     }
0503 }
0504 
0505 KDE_NO_EXPORT void View::playingStart () {
0506     if (m_playing)
0507         return; //FIXME: make symetric with playingStop
0508     m_playing = true;
0509     m_revert_fullscreen = !isFullScreen();
0510     setControlPanelMode (m_old_controlpanel_mode);
0511 }
0512 
0513 KDE_NO_EXPORT void View::playingStop () {
0514     if (m_controlpanel_mode == CP_AutoHide && m_image.isNull ()) {
0515         m_control_panel->show ();
0516         //m_view_area->setMouseTracking (false);
0517     }
0518     if (controlbar_timer) {
0519         killTimer (controlbar_timer);
0520         controlbar_timer = 0;
0521     }
0522     m_playing = false;
0523     m_view_area->resizeEvent (0L);
0524 }
0525 
0526 KDE_NO_EXPORT void View::leaveEvent (QEvent *) {
0527     delayedShowButtons (false);
0528 }
0529 
0530 KDE_NO_EXPORT void View::reset () {
0531     if (m_revert_fullscreen && isFullScreen ())
0532         m_control_panel->fullscreenAction->activate (QAction::Trigger);
0533         //m_view_area->fullScreen ();
0534     playingStop ();
0535 }
0536 
0537 bool View::isFullScreen () const {
0538     return m_view_area->isFullScreen ();
0539 }
0540 
0541 void View::fullScreen () {
0542     if (m_restore_state_timer) {
0543         killTimer (m_restore_state_timer);
0544         m_restore_state_timer = 0;
0545     }
0546     if (!m_view_area->isFullScreen()) {
0547         m_sreensaver_disabled = false;
0548         m_powerManagerStopSleep = Solid::PowerManagement::beginSuppressingSleep("KMplayer: watching a film");
0549         /*QByteArray data, replydata;
0550         QCString replyType;
0551         if (kapp->dcopClient ()->call ("kdesktop", "KScreensaverIface",
0552                     "isEnabled()", data, replyType, replydata)) {
0553             bool enabled;
0554             QDataStream replystream (replydata, IO_ReadOnly);
0555             replystream >> enabled;
0556             if (enabled)
0557                 m_sreensaver_disabled = kapp->dcopClient()->send
0558                     ("kdesktop", "KScreensaverIface", "enable(bool)", "false");
0559         }*/
0560         //if (m_keepsizeratio && m_viewer->aspect () < 0.01)
0561         //    m_viewer->setAspect (1.0 * m_viewer->width() / m_viewer->height());
0562         m_dock_state = m_dockarea->saveState();
0563         m_dock_playlist->hide();
0564         m_dock_infopanel->hide();
0565         m_view_area->fullScreen();
0566         m_control_panel->zoomAction->setVisible (false);
0567         //if (m_viewer->isVisible ())
0568         //    m_viewer->setFocus ();
0569     } else {
0570         Solid::PowerManagement::stopSuppressingSleep(m_powerManagerStopSleep);
0571        // if (m_sreensaver_disabled)
0572        //     m_sreensaver_disabled = !kapp->dcopClient()->send
0573        //         ("kdesktop", "KScreensaverIface", "enable(bool)", "true");
0574         m_view_area->fullScreen();
0575         m_control_panel->zoomAction->setVisible (true);
0576         m_restore_state_timer = startTimer(100); //dockArea()->restoreState(m_dock_state);
0577     }
0578     setControlPanelMode (m_old_controlpanel_mode);
0579     emit fullScreenChanged ();
0580 }
0581 
0582 KDE_NO_EXPORT int View::statusBarHeight () const {
0583     if (statusBar()->isVisible () && !viewArea()->isFullScreen ()) {
0584         if (statusBarMode () == SB_Only)
0585             return height ();
0586         else
0587             return statusBar()->maximumSize ().height ();
0588     }
0589     return 0;
0590 }
0591 
0592 #include "kmplayerview.moc"