You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
codeine/src/app/fullScreenAction.cpp

97 lines
2.8 KiB

// (C) 2005 Max Howell (max.howell@methylblue.com)
// See COPYING file for licensing information
#include "extern.h"
#include "fullScreenAction.h"
#include <tdelocale.h>
#include <twin.h>
#include <tqwidget.h>
#include "xineEngine.h" //videoWindow()
FullScreenAction::FullScreenAction( TQWidget* window, TDEActionCollection *parent )
: TDEToggleAction( TQString::null, Key_F, 0, 0, parent, "fullscreen" )
, m_window( window )
, m_shouldBeDisabled( false )
, m_state( 0 )
{
window->installEventFilter( this );
setChecked( false );
}
void
FullScreenAction::setChecked( bool setChecked )
{
TDEToggleAction::setChecked( setChecked );
m_window->raise();
const int id = m_window->winId();
if( setChecked ) {
setText( i18n("Exit F&ull Screen Mode") );
setIcon("view-restore");
m_state = KWin::windowInfo( id ).state();
KWin::setState( id, NET::FullScreen );
}
else {
setText(i18n("F&ull Screen Mode"));
setIcon("view-fullscreen");
KWin::clearState( id, NET::FullScreen );
KWin::setState( id, m_state ); // get round bug in KWin where it forgets maximisation state
}
if( setChecked == false && m_shouldBeDisabled )
setEnabled( false );
}
void
FullScreenAction::setEnabled( bool setEnabled )
{
if( setEnabled == false && isChecked() )
// don't disable the action if we are currently in fullscreen mode
// as then the user can't exit fullscreen mode! Instead disable it
// when we next get toggled out of fullscreen mode
m_shouldBeDisabled = true;
else {
//FIXME Codeine specific (because videoWindow isn't the window we control, we control the TDEMainWindow)
//NOTE also if the videoWindow is hidden at some point, this is broken..
//TODO new type of actionclass that event filters and is always correct state
if( setEnabled && reinterpret_cast<TQWidget*>(Codeine::videoWindow())->isHidden() )
setEnabled = false;
m_shouldBeDisabled = false;
TDEToggleAction::setEnabled( setEnabled );
}
}
bool
FullScreenAction::eventFilter( TQObject *o, TQEvent *e )
{
if( o == m_window )
switch( e->type() ) {
#if TQT_VERSION >= 0x030300
case TQEvent::WindowStateChange:
#else
case TQEvent::ShowFullScreen:
case TQEvent::ShowNormal:
case TQEvent::ShowMaximized:
case TQEvent::ShowMinimized:
#endif
if (m_window->isFullScreen() != isChecked())
slotActivated(); // setChecked( window->isFullScreen()) wouldn't emit signals
if (m_window->isFullScreen() && !isEnabled()) {
m_shouldBeDisabled = true;
setEnabled( true );
}
break;
default:
;
}
return false;
}