summaryrefslogtreecommitdiffstats
path: root/tdeui/kmainwindow.cpp
diff options
context:
space:
mode:
authorTimothy Pearson <kb9vqf@pearsoncomputing.net>2013-02-01 17:25:43 -0600
committerTimothy Pearson <kb9vqf@pearsoncomputing.net>2013-02-01 17:25:43 -0600
commitd888cfa39e8b38abe17f3d425d19cb8235136a79 (patch)
tree7ae5487b84106036fdb781beec26fab10678a595 /tdeui/kmainwindow.cpp
parentdeac2ca49faed824fe83066080714eb6d653615b (diff)
downloadtdelibs-d888cfa39e8b38abe17f3d425d19cb8235136a79.tar.gz
tdelibs-d888cfa39e8b38abe17f3d425d19cb8235136a79.zip
Fix FTBFS
Diffstat (limited to 'tdeui/kmainwindow.cpp')
-rw-r--r--tdeui/kmainwindow.cpp1249
1 files changed, 0 insertions, 1249 deletions
diff --git a/tdeui/kmainwindow.cpp b/tdeui/kmainwindow.cpp
deleted file mode 100644
index 743c273cc..000000000
--- a/tdeui/kmainwindow.cpp
+++ /dev/null
@@ -1,1249 +0,0 @@
- /* This file is part of the KDE libraries
- Copyright
- (C) 2000 Reginald Stadlbauer (reggie@kde.org)
- (C) 1997 Stephan Kulow (coolo@kde.org)
- (C) 1997-2000 Sven Radej (radej@kde.org)
- (C) 1997-2000 Matthias Ettrich (ettrich@kde.org)
- (C) 1999 Chris Schlaeger (cs@kde.org)
- (C) 2002 Joseph Wenninger (jowenn@kde.org)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
- */
-#include "config.h"
-
-#include "kmainwindow.h"
-#include "kmainwindowiface.h"
-#include "ktoolbarhandler.h"
-#include "kwhatsthismanager_p.h"
-#include <tqsessionmanager.h>
-#include <tqobjectlist.h>
-#include <tqstyle.h>
-#include <tqlayout.h>
-#include <tqwidgetlist.h>
-#include <tqtimer.h>
-
-#include <kaccel.h>
-#include <kaction.h>
-#include <kapplication.h>
-#include <tdeconfig.h>
-#include <kdebug.h>
-#include <khelpmenu.h>
-#include <kmenubar.h>
-#include <kstatusbar.h>
-#include <twin.h>
-#include <kedittoolbar.h>
-#include <kmainwindow.h>
-
-#include <klocale.h>
-#include <kstandarddirs.h>
-#include <kstaticdeleter.h>
-#if defined Q_WS_X11
-#include <netwm.h>
-#endif
-
-#include <stdlib.h>
-#include <ctype.h>
-#include <assert.h>
-
-class TDEMainWindowPrivate {
-public:
- bool showHelpMenu:1;
-
- bool autoSaveSettings:1;
- bool settingsDirty:1;
- bool autoSaveWindowSize:1;
- bool care_about_geometry:1;
- bool shuttingDown:1;
- TQString autoSaveGroup;
- TDEAccel * kaccel;
- TDEMainWindowInterface *m_interface;
- KDEPrivate::ToolBarHandler *toolBarHandler;
- TQTimer* settingsTimer;
- TDEToggleAction *showStatusBarAction;
- TQRect defaultWindowSize;
- TQPtrList<TQDockWindow> hiddenDockWindows;
-};
-
-TQPtrList<TDEMainWindow>* TDEMainWindow::memberList = 0L;
-static bool no_query_exit = false;
-static KMWSessionManaged* ksm = 0;
-static KStaticDeleter<KMWSessionManaged> ksmd;
-
-class KMWSessionManaged : public KSessionManaged
-{
-public:
- KMWSessionManaged()
- {
- }
- ~KMWSessionManaged()
- {
- }
- bool saveState( TQSessionManager& )
- {
- TDEConfig* config = TDEApplication::kApplication()->sessionConfig();
- if ( TDEMainWindow::memberList->first() ){
- // According to Jochen Wilhelmy <digisnap@cs.tu-berlin.de>, this
- // hook is useful for better document orientation
- TDEMainWindow::memberList->first()->saveGlobalProperties(config);
- }
-
- TQPtrListIterator<TDEMainWindow> it(*TDEMainWindow::memberList);
- int n = 0;
- for (it.toFirst(); it.current(); ++it){
- n++;
- it.current()->savePropertiesInternal(config, n);
- }
- config->setGroup(TQString::fromLatin1("Number"));
- config->writeEntry(TQString::fromLatin1("NumberOfWindows"), n );
- return true;
- }
-
- bool commitData( TQSessionManager& sm )
- {
- // not really a fast method but the only compatible one
- if ( sm.allowsInteraction() ) {
- bool canceled = false;
- TQPtrListIterator<TDEMainWindow> it(*TDEMainWindow::memberList);
- ::no_query_exit = true;
- for (it.toFirst(); it.current() && !canceled;){
- TDEMainWindow *window = *it;
- ++it; // Update now, the current window might get deleted
- if ( !window->testWState( TQt::WState_ForceHide ) ) {
- TQCloseEvent e;
- TQApplication::sendEvent( window, &e );
- canceled = !e.isAccepted();
- /* Don't even think_about deleting widgets with
- Qt::WDestructiveClose flag set at this point. We
- are faking a close event, but we are *not*_
- closing the window. The purpose of the faked
- close event is to prepare the application so it
- can safely be quit without the user losing data
- (possibly showing a message box "do you want to
- save this or that?"). It is possible that the
- session manager quits the application later
- (emitting TQApplication::aboutToQuit() when this
- happens), but it is also possible that the user
- cancels the shutdown, so the application will
- continue to run.
- */
- }
- }
- ::no_query_exit = false;
- if (canceled)
- return false;
-
- TDEMainWindow* last = 0;
- for (it.toFirst(); it.current() && !canceled; ++it){
- TDEMainWindow *window = *it;
- if ( !window->testWState( TQt::WState_ForceHide ) ) {
- last = window;
- }
- }
- if ( last )
- return last->queryExit();
- // else
- return true;
- }
-
- // the user wants it, the user gets it
- return true;
- }
-};
-
-static bool being_first = true;
-
-TDEMainWindow::TDEMainWindow( TQWidget* parent, const char *name, WFlags f )
- : TQMainWindow( parent, name, f ), KXMLGUIBuilder( this ), helpMenu2( 0 ), factory_( 0 )
-{
- initTDEMainWindow(name, 0);
-}
-
-TDEMainWindow::TDEMainWindow( int cflags, TQWidget* parent, const char *name, WFlags f )
- : TQMainWindow( parent, name, f ), KXMLGUIBuilder( this ), helpMenu2( 0 ), factory_( 0 )
-{
- initTDEMainWindow(name, cflags);
-}
-
-void TDEMainWindow::initTDEMainWindow(const char *name, int cflags)
-{
- KWhatsThisManager::init ();
- setDockMenuEnabled( false );
- mHelpMenu = 0;
- kapp->setTopWidget( this );
- actionCollection()->setWidget( this );
- connect(kapp, TQT_SIGNAL(shutDown()), this, TQT_SLOT(shuttingDown()));
- if( !memberList )
- memberList = new TQPtrList<TDEMainWindow>;
-
- if ( !ksm )
- ksm = ksmd.setObject(ksm, new KMWSessionManaged());
- // set a unique object name. Required by session management.
- TQCString objname;
- TQCString s;
- int unusedNumber;
- if ( !name )
- { // no name given
- objname = kapp->instanceName() + "-mainwindow#";
- s = objname + '1'; // start adding number immediately
- unusedNumber = 1;
- }
- else if( name[0] != '\0' && name[ strlen( name ) - 1 ] == '#' )
- { // trailing # - always add a number
- objname = name;
- s = objname + '1'; // start adding number immediately
- unusedNumber = 1;
- }
- else
- {
- objname = name;
- s = objname;
- unusedNumber = 0; // add numbers only when needed
- }
- for(;;) {
- TQWidgetList* list = kapp->topLevelWidgets();
- TQWidgetListIt it( *list );
- bool found = false;
- for( TQWidget* w = it.current();
- w != NULL;
- ++it, w = it.current())
- if( w != this && w->name() == s )
- {
- found = true;
- break;
- }
- delete list;
- if( !found )
- break;
- s.setNum( ++unusedNumber );
- s = objname + s;
- }
- setName( s );
-
- memberList->append( this );
-
- d = new TDEMainWindowPrivate;
- d->showHelpMenu = true;
- d->settingsDirty = false;
- d->autoSaveSettings = false;
- d->autoSaveWindowSize = true; // for compatibility
- d->kaccel = actionCollection()->kaccel();
- d->toolBarHandler = 0;
- d->settingsTimer = 0;
- d->showStatusBarAction = NULL;
- d->shuttingDown = false;
- if ((d->care_about_geometry = being_first)) {
- being_first = false;
- if ( kapp->geometryArgument().isNull() ) // if there is no geometry, it doesn't mater
- d->care_about_geometry = false;
- else
- parseGeometry(false);
- }
-
- setCaption( kapp->caption() );
- if ( cflags & NoDCOPObject)
- d->m_interface = 0;
- else
- d->m_interface = new TDEMainWindowInterface(this);
-
- if (!kapp->authorize("movable_toolbars"))
- setDockWindowsMovable(false);
-}
-
-TDEAction *TDEMainWindow::toolBarMenuAction()
-{
- if ( !d->toolBarHandler )
- return 0;
-
- return d->toolBarHandler->toolBarMenuAction();
-}
-
-
-void TDEMainWindow::setupToolbarMenuActions()
-{
- if ( d->toolBarHandler )
- d->toolBarHandler->setupActions();
-}
-
-void TDEMainWindow::parseGeometry(bool parsewidth)
-{
- assert ( !kapp->geometryArgument().isNull() );
- assert ( d->care_about_geometry );
-
-#if defined Q_WS_X11
- int x, y;
- int w, h;
- int m = XParseGeometry( kapp->geometryArgument().latin1(), &x, &y, (unsigned int*)&w, (unsigned int*)&h);
- if (parsewidth) {
- TQSize minSize = minimumSize();
- TQSize maxSize = maximumSize();
- if ( !(m & WidthValue) )
- w = width();
- if ( !(m & HeightValue) )
- h = height();
- w = QMIN(w,maxSize.width());
- h = QMIN(h,maxSize.height());
- w = QMAX(w,minSize.width());
- h = QMAX(h,minSize.height());
- resize(w, h);
- } else {
- if ( parsewidth && !(m & XValue) )
- x = geometry().x();
- if ( parsewidth && !(m & YValue) )
- y = geometry().y();
- if ( (m & XNegative) )
- x = TDEApplication::desktop()->width() + x - w;
- if ( (m & YNegative) )
- y = TDEApplication::desktop()->height() + y - h;
- move(x, y);
- }
-#endif
-}
-
-TDEMainWindow::~TDEMainWindow()
-{
- delete d->settingsTimer;
- TQMenuBar* mb = internalMenuBar();
- delete mb;
- delete d->m_interface;
- delete d;
- memberList->remove( this );
-}
-
-TDEPopupMenu* TDEMainWindow::helpMenu( const TQString &aboutAppText, bool showWhatsThis )
-{
- if( !mHelpMenu ) {
- if ( aboutAppText.isEmpty() )
- mHelpMenu = new KHelpMenu( this, instance()->aboutData(), showWhatsThis);
- else
- mHelpMenu = new KHelpMenu( this, aboutAppText, showWhatsThis );
-
- if ( !mHelpMenu )
- return 0;
- connect( mHelpMenu, TQT_SIGNAL( showAboutApplication() ),
- this, TQT_SLOT( showAboutApplication() ) );
- }
-
- return mHelpMenu->menu();
-}
-
-TDEPopupMenu* TDEMainWindow::customHelpMenu( bool showWhatsThis )
-{
- if( !mHelpMenu ) {
- mHelpMenu = new KHelpMenu( this, TQString::null, showWhatsThis );
- connect( mHelpMenu, TQT_SIGNAL( showAboutApplication() ),
- this, TQT_SLOT( showAboutApplication() ) );
- }
-
- return mHelpMenu->menu();
-}
-
-bool TDEMainWindow::canBeRestored( int number )
-{
- if ( !kapp->isRestored() )
- return false;
- TDEConfig *config = kapp->sessionConfig();
- if ( !config )
- return false;
- config->setGroup( TQString::fromLatin1("Number") );
- int n = config->readNumEntry( TQString::fromLatin1("NumberOfWindows") , 1 );
- return number >= 1 && number <= n;
-}
-
-const TQString TDEMainWindow::classNameOfToplevel( int number )
-{
- if ( !kapp->isRestored() )
- return TQString::null;
- TDEConfig *config = kapp->sessionConfig();
- if ( !config )
- return TQString::null;
- TQString s;
- s.setNum( number );
- s.prepend( TQString::fromLatin1("WindowProperties") );
- config->setGroup( s );
- if ( !config->hasKey( TQString::fromLatin1("ClassName") ) )
- return TQString::null;
- else
- return config->readEntry( TQString::fromLatin1("ClassName") );
-}
-
-void TDEMainWindow::show()
-{
- TQMainWindow::show();
-
- for ( TQPtrListIterator<TQDockWindow> it( d->hiddenDockWindows ); it.current(); ++it )
- it.current()->show();
-
- d->hiddenDockWindows.clear();
-}
-
-void TDEMainWindow::hide()
-{
- if ( isVisible() ) {
-
- d->hiddenDockWindows.clear();
-
- TQObjectList *list = queryList( TQDOCKWINDOW_OBJECT_NAME_STRING );
- for( TQObjectListIt it( *list ); it.current(); ++it ) {
- TQDockWindow *dw = (TQDockWindow*)it.current();
- if ( dw->isTopLevel() && dw->isVisible() ) {
- d->hiddenDockWindows.append( dw );
- dw->hide();
- }
- }
- delete list;
- }
-
- TQWidget::hide();
-}
-
-bool TDEMainWindow::restore( int number, bool show )
-{
- if ( !canBeRestored( number ) )
- return false;
- TDEConfig *config = kapp->sessionConfig();
- if ( readPropertiesInternal( config, number ) ){
- if ( show )
- TDEMainWindow::show();
- return false;
- }
- return false;
-}
-
-KXMLGUIFactory *TDEMainWindow::guiFactory()
-{
- if ( !factory_ )
- factory_ = new KXMLGUIFactory( this, TQT_TQOBJECT(this), "guifactory" );
- return factory_;
-}
-
-int TDEMainWindow::configureToolbars()
-{
- saveMainWindowSettings(TDEGlobal::config());
- KEditToolbar dlg(actionCollection(), xmlFile(), true, this);
- connect(&dlg, TQT_SIGNAL(newToolbarConfig()), TQT_SLOT(saveNewToolbarConfig()));
- return dlg.exec();
-}
-
-void TDEMainWindow::saveNewToolbarConfig()
-{
- createGUI(xmlFile());
- applyMainWindowSettings( TDEGlobal::config() );
-}
-
-void TDEMainWindow::setupGUI( int options, const TQString & xmlfile ) {
- setupGUI(TQSize(), options, xmlfile);
-}
-
-void TDEMainWindow::setupGUI( TQSize defaultSize, int options, const TQString & xmlfile ) {
- if( options & Keys ){
- KStdAction::keyBindings(guiFactory(),
- TQT_SLOT(configureShortcuts()), actionCollection());
- }
-
- if( (options & StatusBar) && internalStatusBar() ){
- createStandardStatusBarAction();
- }
-
- if( options & ToolBar ){
- setStandardToolBarMenuEnabled( true );
- KStdAction::configureToolbars(TQT_TQOBJECT(this),
- TQT_SLOT(configureToolbars() ), actionCollection());
- }
-
- if( options & Create ){
- createGUI(xmlfile,false);
- }
-
- if( options & Save ){
- // setupGUI() is typically called in the constructor before show(),
- // so the default window size will be incorrect unless the application
- // hard coded the size which they should try not to do (i.e. use
- // size hints).
- if(initialGeometrySet())
- {
- // Do nothing...
- }
- else if(defaultSize.isValid())
- {
- resize(defaultSize);
- }
- else if(!isShown())
- {
- adjustSize();
- }
- setAutoSaveSettings();
- }
-
-}
-
-void TDEMainWindow::createGUI( const TQString &xmlfile, bool _conserveMemory )
-{
- // disabling the updates prevents unnecessary redraws
- setUpdatesEnabled( false );
-
- // just in case we are rebuilding, let's remove our old client
- guiFactory()->removeClient( this );
-
- // make sure to have an empty GUI
- TQMenuBar* mb = internalMenuBar();
- if ( mb )
- mb->clear();
-
- (void)toolBarIterator(); // make sure toolbarList is most-up-to-date
- toolbarList.setAutoDelete( true );
- toolbarList.clear();
- toolbarList.setAutoDelete( false );
-
- // don't build a help menu unless the user ask for it
- if (d->showHelpMenu) {
- // we always want a help menu
- if (!helpMenu2)
- helpMenu2 = new KHelpMenu(this, instance()->aboutData(), true,
- actionCollection());
- }
-
- // we always want to load in our global standards file
- setXMLFile( locate( "config", "ui/ui_standards.rc", instance() ) );
-
- // now, merge in our local xml file. if this is null, then that
- // means that we will be only using the global file
- if ( !xmlfile.isNull() ) {
- setXMLFile( xmlfile, true );
- } else {
- TQString auto_file(instance()->instanceName() + "ui.rc");
- setXMLFile( auto_file, true );
- }
-
- // make sure we don't have any state saved already
- setXMLGUIBuildDocument( TQDomDocument() );
-
- // do the actual GUI building
- guiFactory()->addClient( this );
-
- // try and get back *some* of our memory
- if ( _conserveMemory )
- {
- // before freeing the memory allocated by the DOM document we also
- // free all memory allocated internally in the KXMLGUIFactory for
- // the menubar and the toolbars . This however implies that we
- // have to take care of deleting those widgets ourselves. For
- // destruction this is no problem, but when rebuilding we have
- // to take care of that (and we want to rebuild the GUI when
- // using stuff like the toolbar editor ).
- // In addition we have to take care of not removing containers
- // like popupmenus, defined in the XML document.
- // this code should probably go into a separate method in TDEMainWindow.
- // there's just one problem: I'm bad in finding names ;-) , so
- // I skipped this ;-)
-
- TQDomDocument doc = domDocument();
-
- for( TQDomNode n = doc.documentElement().firstChild();
- !n.isNull(); n = n.nextSibling())
- {
- TQDomElement e = n.toElement();
-
- if ( e.tagName().lower() == "toolbar" )
- factory_->resetContainer( e.attribute( "name" ) );
- else if ( e.tagName().lower() == "menubar" )
- factory_->resetContainer( e.tagName(), true );
- }
-
- conserveMemory();
- }
-
- setUpdatesEnabled( true );
- updateGeometry();
-}
-
-void TDEMainWindow::setHelpMenuEnabled(bool showHelpMenu)
-{
- d->showHelpMenu = showHelpMenu;
-}
-
-bool TDEMainWindow::isHelpMenuEnabled()
-{
- return d->showHelpMenu;
-}
-
-void TDEMainWindow::setCaption( const TQString &caption )
-{
- setPlainCaption( kapp->makeStdCaption(caption) );
-}
-
-void TDEMainWindow::setCaption( const TQString &caption, bool modified )
-{
- setPlainCaption( kapp->makeStdCaption(caption, true, modified) );
-}
-
-void TDEMainWindow::setPlainCaption( const TQString &caption )
-{
- TQMainWindow::setCaption( caption );
-#if defined Q_WS_X11
- NETWinInfo info( tqt_xdisplay(), winId(), tqt_xrootwin(), 0 );
- info.setName( caption.utf8().data() );
-#endif
-}
-
-void TDEMainWindow::appHelpActivated( void )
-{
- if( !mHelpMenu ) {
- mHelpMenu = new KHelpMenu( this );
- if ( !mHelpMenu )
- return;
- }
- mHelpMenu->appHelpActivated();
-}
-
-void TDEMainWindow::slotStateChanged(const TQString &newstate)
-{
- stateChanged(newstate, KXMLGUIClient::StateNoReverse);
-}
-
-/*
- * Get rid of this for KDE 4.0
- */
-void TDEMainWindow::slotStateChanged(const TQString &newstate,
- KXMLGUIClient::ReverseStateChange reverse)
-{
- stateChanged(newstate, reverse);
-}
-
-/*
- * Enable this for KDE 4.0
- */
-// void TDEMainWindow::slotStateChanged(const TQString &newstate,
-// bool reverse)
-// {
-// stateChanged(newstate,
-// reverse ? KXMLGUIClient::StateReverse : KXMLGUIClient::StateNoReverse);
-// }
-
-void TDEMainWindow::closeEvent ( TQCloseEvent *e )
-{
- // Save settings if auto-save is enabled, and settings have changed
- if (d->settingsDirty && d->autoSaveSettings)
- saveAutoSaveSettings();
-
- if (queryClose()) {
- e->accept();
-
- int not_withdrawn = 0;
- TQPtrListIterator<TDEMainWindow> it(*TDEMainWindow::memberList);
- for (it.toFirst(); it.current(); ++it){
- if ( !it.current()->isHidden() && it.current()->isTopLevel() && it.current() != this )
- not_withdrawn++;
- }
-
- if ( !no_query_exit && not_withdrawn <= 0 ) { // last window close accepted?
- if ( queryExit() && !kapp->sessionSaving() && !d->shuttingDown ) { // Yes, Quit app?
- // don't call queryExit() twice
- disconnect(kapp, TQT_SIGNAL(shutDown()), this, TQT_SLOT(shuttingDown()));
- d->shuttingDown = true;
- kapp->deref(); // ...and quit application.
- } else {
- // cancel closing, it's stupid to end up with no windows at all....
- e->ignore();
- }
- }
- }
-}
-
-bool TDEMainWindow::queryExit()
-{
- return true;
-}
-
-bool TDEMainWindow::queryClose()
-{
- return true;
-}
-
-void TDEMainWindow::saveGlobalProperties( TDEConfig* )
-{
-}
-
-void TDEMainWindow::readGlobalProperties( TDEConfig* )
-{
-}
-
-#if defined(KDE_COMPAT)
-void TDEMainWindow::updateRects()
-{
-}
-#endif
-
-void TDEMainWindow::showAboutApplication()
-{
-}
-
-void TDEMainWindow::savePropertiesInternal( TDEConfig *config, int number )
-{
- bool oldASWS = d->autoSaveWindowSize;
- d->autoSaveWindowSize = true; // make saveMainWindowSettings save the window size
-
- TQString s;
- s.setNum(number);
- s.prepend(TQString::fromLatin1("WindowProperties"));
- config->setGroup(s);
-
- // store objectName, className, Width and Height for later restoring
- // (Only useful for session management)
- config->writeEntry(TQString::fromLatin1("ObjectName"), name());
- config->writeEntry(TQString::fromLatin1("ClassName"), className());
-
- saveMainWindowSettings(config); // Menubar, statusbar and Toolbar settings.
-
- s.setNum(number);
- config->setGroup(s);
- saveProperties(config);
-
- d->autoSaveWindowSize = oldASWS;
-}
-
-void TDEMainWindow::saveMainWindowSettings(TDEConfig *config, const TQString &configGroup)
-{
- kdDebug(200) << "TDEMainWindow::saveMainWindowSettings " << configGroup << endl;
- TQString oldGroup;
-
- if (!configGroup.isEmpty())
- {
- oldGroup = config->group();
- config->setGroup(configGroup);
- }
-
- // Called by session management - or if we want to save the window size anyway
- if ( d->autoSaveWindowSize )
- saveWindowSize( config );
-
- TQStatusBar* sb = internalStatusBar();
- if (sb) {
- if(!config->hasDefault("StatusBar") && !sb->isHidden() )
- config->revertToDefault("StatusBar");
- else
- config->writeEntry("StatusBar", sb->isHidden() ? "Disabled" : "Enabled");
- }
-
- TQMenuBar* mb = internalMenuBar();
- if (mb) {
- TQString MenuBar = TQString::fromLatin1("MenuBar");
- if(!config->hasDefault("MenuBar") && !mb->isHidden() )
- config->revertToDefault("MenuBar");
- else
- config->writeEntry("MenuBar", mb->isHidden() ? "Disabled" : "Enabled");
- }
-
- int n = 1; // Toolbar counter. toolbars are counted from 1,
- TDEToolBar *toolbar = 0;
- TQPtrListIterator<TDEToolBar> it( toolBarIterator() );
- while ( ( toolbar = it.current() ) ) {
- ++it;
- TQString group;
- if (!configGroup.isEmpty())
- {
- // Give a number to the toolbar, but prefer a name if there is one,
- // because there's no real guarantee on the ordering of toolbars
- group = (!::qstrcmp(toolbar->name(), "unnamed") ? TQString::number(n) : TQString(" ")+toolbar->name());
- group.prepend(" Toolbar");
- group.prepend(configGroup);
- }
- toolbar->saveSettings(config, group);
- n++;
- }
- if (!configGroup.isEmpty())
- config->setGroup(oldGroup);
-}
-
-void TDEMainWindow::setStandardToolBarMenuEnabled( bool enable )
-{
- if ( enable ) {
- if ( d->toolBarHandler )
- return;
-
- d->toolBarHandler = new KDEPrivate::ToolBarHandler( this );
-
- if ( factory() )
- factory()->addClient( d->toolBarHandler );
- } else {
- if ( !d->toolBarHandler )
- return;
-
- if ( factory() )
- factory()->removeClient( d->toolBarHandler );
-
- delete d->toolBarHandler;
- d->toolBarHandler = 0;
- }
-}
-
-bool TDEMainWindow::isStandardToolBarMenuEnabled() const
-{
- return ( d->toolBarHandler );
-}
-
-void TDEMainWindow::createStandardStatusBarAction(){
- if(!d->showStatusBarAction){
- d->showStatusBarAction = KStdAction::showStatusbar(TQT_TQOBJECT(this), TQT_SLOT(setSettingsDirty()), actionCollection());
- KStatusBar *sb = statusBar(); // Creates statusbar if it doesn't exist already.
- connect(d->showStatusBarAction, TQT_SIGNAL(toggled(bool)), sb, TQT_SLOT(setShown(bool)));
- d->showStatusBarAction->setChecked(sb->isHidden());
- }
-}
-
-bool TDEMainWindow::readPropertiesInternal( TDEConfig *config, int number )
-{
- if ( number == 1 )
- readGlobalProperties( config );
-
- // in order they are in toolbar list
- TQString s;
- s.setNum(number);
- s.prepend(TQString::fromLatin1("WindowProperties"));
-
- config->setGroup(s);
-
- // restore the object name (window role)
- if ( config->hasKey(TQString::fromLatin1("ObjectName" )) )
- setName( config->readEntry(TQString::fromLatin1("ObjectName")).latin1()); // latin1 is right here
-
- applyMainWindowSettings(config); // Menubar, statusbar and toolbar settings.
-
- s.setNum(number);
- config->setGroup(s);
- readProperties(config);
- return true;
-}
-
-void TDEMainWindow::applyMainWindowSettings(TDEConfig *config, const TQString &configGroup)
-{
- return applyMainWindowSettings(config,configGroup,false);
-}
-
-void TDEMainWindow::applyMainWindowSettings(TDEConfig *config, const TQString &configGroup,bool force)
-{
- kdDebug(200) << "TDEMainWindow::applyMainWindowSettings" << endl;
-
- TDEConfigGroupSaver saver( config, configGroup.isEmpty() ? config->group() : configGroup );
-
- restoreWindowSize(config);
-
- TQStatusBar* sb = internalStatusBar();
- if (sb) {
- TQString entry = config->readEntry("StatusBar", "Enabled");
- if ( entry == "Disabled" )
- sb->hide();
- else
- sb->show();
- if(d->showStatusBarAction)
- d->showStatusBarAction->setChecked(!sb->isHidden());
- }
-
- TQMenuBar* mb = internalMenuBar();
- if (mb) {
- TQString entry = config->readEntry ("MenuBar", "Enabled");
- if ( entry == "Disabled" )
- mb->hide();
- else
- mb->show();
- }
-
- int n = 1; // Toolbar counter. toolbars are counted from 1,
- TDEToolBar *toolbar;
- TQPtrListIterator<TDEToolBar> it( toolBarIterator() ); // must use own iterator
-
- for ( ; it.current(); ++it) {
- toolbar= it.current();
- TQString group;
- if (!configGroup.isEmpty())
- {
- // Give a number to the toolbar, but prefer a name if there is one,
- // because there's no real guarantee on the ordering of toolbars
- group = (!::qstrcmp(toolbar->name(), "unnamed") ? TQString::number(n) : TQString(" ")+toolbar->name());
- group.prepend(" Toolbar");
- group.prepend(configGroup);
- }
- toolbar->applySettings(config, group, force);
- n++;
- }
-
- finalizeGUI( true );
-}
-
-void TDEMainWindow::finalizeGUI( bool force )
-{
- //kdDebug(200) << "TDEMainWindow::finalizeGUI force=" << force << endl;
- // The whole reason for this is that moveToolBar relies on the indexes
- // of the other toolbars, so in theory it should be called only once per
- // toolbar, but in increasing order of indexes.
- // Since we can't do that immediately, we move them, and _then_
- // we call positionYourself again for each of them, but this time
- // the toolbariterator should give them in the proper order.
- // Both the XMLGUI and applySettings call this, hence "force" for the latter.
- TQPtrListIterator<TDEToolBar> it( toolBarIterator() );
- for ( ; it.current() ; ++it ) {
- it.current()->positionYourself( force );
- }
-
- d->settingsDirty = false;
-}
-
-void TDEMainWindow::saveWindowSize( TDEConfig * config ) const
-{
- int scnum = TQApplication::desktop()->screenNumber(parentWidget());
- TQRect desk = TQApplication::desktop()->screenGeometry(scnum);
- int w, h;
-#if defined Q_WS_X11
- // save maximalization as desktop size + 1 in that direction
- KWin::WindowInfo info = KWin::windowInfo( winId(), NET::WMState );
- w = info.state() & NET::MaxHoriz ? desk.width() + 1 : width();
- h = info.state() & NET::MaxVert ? desk.height() + 1 : height();
-#else
- if (isMaximized()) {
- w = desk.width() + 1;
- h = desk.height() + 1;
- }
- //TODO: add "Maximized" property instead "+1" hack
-#endif
- TQRect size( desk.width(), w, desk.height(), h );
- bool defaultSize = (size == d->defaultWindowSize);
- TQString widthString = TQString::fromLatin1("Width %1").arg(desk.width());
- TQString heightString = TQString::fromLatin1("Height %1").arg(desk.height());
- if (!config->hasDefault(widthString) && defaultSize)
- config->revertToDefault(widthString);
- else
- config->writeEntry(widthString, w );
-
- if (!config->hasDefault(heightString) && defaultSize)
- config->revertToDefault(heightString);
- else
- config->writeEntry(heightString, h );
-}
-
-void TDEMainWindow::restoreWindowSize( TDEConfig * config )
-{
- if (d->care_about_geometry) {
- parseGeometry(true);
- } else {
- // restore the size
- int scnum = TQApplication::desktop()->screenNumber(parentWidget());
- TQRect desk = TQApplication::desktop()->screenGeometry(scnum);
- if ( d->defaultWindowSize.isNull() ) // only once
- d->defaultWindowSize = TQRect(desk.width(), width(), desk.height(), height()); // store default values
- TQSize size( config->readNumEntry( TQString::fromLatin1("Width %1").arg(desk.width()), 0 ),
- config->readNumEntry( TQString::fromLatin1("Height %1").arg(desk.height()), 0 ) );
- if (size.isEmpty()) {
- // try the KDE 2.0 way
- size = TQSize( config->readNumEntry( TQString::fromLatin1("Width"), 0 ),
- config->readNumEntry( TQString::fromLatin1("Height"), 0 ) );
- if (!size.isEmpty()) {
- // make sure the other resolutions don't get old settings
- config->writeEntry( TQString::fromLatin1("Width"), 0 );
- config->writeEntry( TQString::fromLatin1("Height"), 0 );
- }
- }
- if ( !size.isEmpty() ) {
-#ifdef Q_WS_X11
- int state = ( size.width() > desk.width() ? NET::MaxHoriz : 0 )
- | ( size.height() > desk.height() ? NET::MaxVert : 0 );
- if(( state & NET::Max ) == NET::Max )
- ; // no resize
- else if(( state & NET::MaxHoriz ) == NET::MaxHoriz )
- resize( width(), size.height());
- else if(( state & NET::MaxVert ) == NET::MaxVert )
- resize( size.width(), height());
- else
- resize( size );
- // TQWidget::showMaximized() is both insufficient and broken
- KWin::setState( winId(), state );
-#else
- if (size.width() > desk.width() || size.height() > desk.height())
- setWindowState( WindowMaximized );
- else
- resize( size );
-#endif
- }
- }
-}
-
-bool TDEMainWindow::initialGeometrySet() const
-{
- return d->care_about_geometry;
-}
-
-void TDEMainWindow::ignoreInitialGeometry()
-{
- d->care_about_geometry = false;
-}
-
-void TDEMainWindow::setSettingsDirty()
-{
- //kdDebug(200) << "TDEMainWindow::setSettingsDirty" << endl;
- d->settingsDirty = true;
- if ( d->autoSaveSettings )
- {
- // Use a timer to save "immediately" user-wise, but not too immediately
- // (to compress calls and save only once, in case of multiple changes)
- if ( !d->settingsTimer )
- {
- d->settingsTimer = new TQTimer( this );
- connect( d->settingsTimer, TQT_SIGNAL( timeout() ), TQT_SLOT( saveAutoSaveSettings() ) );
- }
- d->settingsTimer->start( 500, true );
- }
-}
-
-bool TDEMainWindow::settingsDirty() const
-{
- return d->settingsDirty;
-}
-
-TQString TDEMainWindow::settingsGroup() const
-{
- return d->autoSaveGroup;
-}
-
-void TDEMainWindow::setAutoSaveSettings( const TQString & groupName, bool saveWindowSize )
-{
- d->autoSaveSettings = true;
- d->autoSaveGroup = groupName;
- d->autoSaveWindowSize = saveWindowSize;
- // Get notified when the user moves a toolbar around
- disconnect( this, TQT_SIGNAL( dockWindowPositionChanged( TQDockWindow * ) ),
- this, TQT_SLOT( setSettingsDirty() ) );
- connect( this, TQT_SIGNAL( dockWindowPositionChanged( TQDockWindow * ) ),
- this, TQT_SLOT( setSettingsDirty() ) );
-
- // Now read the previously saved settings
- applyMainWindowSettings( TDEGlobal::config(), groupName );
-}
-
-void TDEMainWindow::resetAutoSaveSettings()
-{
- d->autoSaveSettings = false;
- if ( d->settingsTimer )
- d->settingsTimer->stop();
-}
-
-bool TDEMainWindow::autoSaveSettings() const
-{
- return d->autoSaveSettings;
-}
-
-TQString TDEMainWindow::autoSaveGroup() const
-{
- return d->autoSaveGroup;
-}
-
-void TDEMainWindow::saveAutoSaveSettings()
-{
- Q_ASSERT( d->autoSaveSettings );
- //kdDebug(200) << "TDEMainWindow::saveAutoSaveSettings -> saving settings" << endl;
- saveMainWindowSettings( TDEGlobal::config(), d->autoSaveGroup );
- TDEGlobal::config()->sync();
- d->settingsDirty = false;
- if ( d->settingsTimer )
- d->settingsTimer->stop();
-}
-
-void TDEMainWindow::resizeEvent( TQResizeEvent * )
-{
- if ( d->autoSaveWindowSize )
- setSettingsDirty();
-}
-
-bool TDEMainWindow::hasMenuBar()
-{
- return (internalMenuBar());
-}
-
-KMenuBar *TDEMainWindow::menuBar()
-{
- KMenuBar * mb = internalMenuBar();
- if ( !mb ) {
- mb = new KMenuBar( this );
- // trigger a re-layout and trigger a call to the private
- // setMenuBar method.
- TQMainWindow::menuBar();
- }
- return mb;
-}
-
-KStatusBar *TDEMainWindow::statusBar()
-{
- KStatusBar * sb = internalStatusBar();
- if ( !sb ) {
- sb = new KStatusBar( this );
- // trigger a re-layout and trigger a call to the private
- // setStatusBar method.
- TQMainWindow::statusBar();
- }
- return sb;
-}
-
-void TDEMainWindow::shuttingDown()
-{
- // Needed for Qt <= 3.0.3 at least to prevent reentrancy
- // when queryExit() shows a dialog. Check before removing!
- static bool reentrancy_protection = false;
- if (!reentrancy_protection)
- {
- reentrancy_protection = true;
- // call the virtual queryExit
- queryExit();
- reentrancy_protection = false;
- }
-
-}
-
-KMenuBar *TDEMainWindow::internalMenuBar()
-{
- TQObjectList *l = queryList( "KMenuBar", 0, false, false );
- if ( !l || !l->first() ) {
- delete l;
- return 0;
- }
-
- KMenuBar *m = (KMenuBar*)l->first();
- delete l;
- return m;
-}
-
-KStatusBar *TDEMainWindow::internalStatusBar()
-{
- TQObjectList *l = queryList( "KStatusBar", 0, false, false );
- if ( !l || !l->first() ) {
- delete l;
- return 0;
- }
-
- KStatusBar *s = (KStatusBar*)l->first();
- delete l;
- return s;
-}
-
-void TDEMainWindow::childEvent( TQChildEvent* e)
-{
- TQMainWindow::childEvent( e );
-}
-
-TDEToolBar *TDEMainWindow::toolBar( const char * name )
-{
- if (!name)
- name = "mainToolBar";
- TDEToolBar *tb = (TDEToolBar*)child( name, "TDEToolBar" );
- if ( tb )
- return tb;
- bool honor_mode = (!strcmp(name, "mainToolBar"));
-
- if ( builderClient() )
- return new TDEToolBar(this, name, honor_mode); // XMLGUI constructor
- else
- return new TDEToolBar(this, DockTop, false, name, honor_mode ); // non-XMLGUI
-}
-
-TQPtrListIterator<TDEToolBar> TDEMainWindow::toolBarIterator()
-{
- toolbarList.clear();
- TQPtrList<TQToolBar> lst;
- for ( int i = (int)TQMainWindow::DockUnmanaged; i <= (int)DockMinimized; ++i ) {
- lst = toolBars( (ToolBarDock)i );
- for ( TQToolBar *tb = lst.first(); tb; tb = lst.next() ) {
- if ( !tb->inherits( "TDEToolBar" ) )
- continue;
- toolbarList.append( (TDEToolBar*)tb );
- }
- }
- return TQPtrListIterator<TDEToolBar>( toolbarList );
-}
-
-TDEAccel * TDEMainWindow::accel()
-{
- if ( !d->kaccel )
- d->kaccel = new TDEAccel( this, "kmw-kaccel" );
- return d->kaccel;
-}
-
-void TDEMainWindow::paintEvent( TQPaintEvent * pe )
-{
- TQMainWindow::paintEvent(pe); //Upcall to handle SH_MainWindow_SpaceBelowMenuBar rendering
-}
-
-TQSize TDEMainWindow::sizeForCentralWidgetSize(TQSize size)
-{
- TDEToolBar *tb = (TDEToolBar*)child( "mainToolBar", "TDEToolBar" );
- if (tb && !tb->isHidden()) {
- switch( tb->barPos() )
- {
- case TDEToolBar::Top:
- case TDEToolBar::Bottom:
- size += TQSize(0, tb->sizeHint().height());
- break;
-
- case TDEToolBar::Left:
- case TDEToolBar::Right:
- size += TQSize(toolBar()->sizeHint().width(), 0);
- break;
-
- case TDEToolBar::Flat:
- size += TQSize(0, 3+kapp->style().pixelMetric( TQStyle::PM_DockWindowHandleExtent ));
- break;
-
- default:
- break;
- }
- }
- KMenuBar *mb = internalMenuBar();
- if (mb && !mb->isHidden()) {
- size += TQSize(0,mb->heightForWidth(size.width()));
- if (style().styleHint(TQStyle::SH_MainWindow_SpaceBelowMenuBar, this))
- size += TQSize( 0, dockWindowsMovable() ? 1 : 2);
- }
- TQStatusBar *sb = internalStatusBar();
- if( sb && !sb->isHidden() )
- size += TQSize(0, sb->sizeHint().height());
-
- return size;
-}
-
-#if KDE_IS_VERSION( 3, 9, 0 )
-#ifdef __GNUC__
-#warning Remove, should be in Qt
-#endif
-#endif
-void TDEMainWindow::setIcon( const TQPixmap& p )
-{
- TQMainWindow::setIcon( p );
-#ifdef Q_WS_X11
- // Qt3 doesn't support _NET_WM_ICON, but TDEApplication::setTopWidget(), which
- // is used by TDEMainWindow, sets it
- KWin::setIcons( winId(), p, TQPixmap());
-#endif
-}
-
-TQPtrList<TDEMainWindow>* TDEMainWindow::getMemberList() { return memberList; }
-
-// why do we support old gcc versions? using KXMLGUIBuilder::finalizeGUI;
-// DF: because they compile KDE much faster :)
-void TDEMainWindow::finalizeGUI( KXMLGUIClient *client )
-{ KXMLGUIBuilder::finalizeGUI( client ); }
-
-void TDEMainWindow::virtual_hook( int id, void* data )
-{ KXMLGUIBuilder::virtual_hook( id, data );
- KXMLGUIClient::virtual_hook( id, data ); }
-
-
-
-#include "kmainwindow.moc"
-