author | zautrix <zautrix> | 2004-10-25 22:23:56 (UTC) |
---|---|---|
committer | zautrix <zautrix> | 2004-10-25 22:23:56 (UTC) |
commit | dbfa4de9416c28c5424eeee0f36f50de4cfae0ec (patch) (side-by-side diff) | |
tree | 31fa0522ff7821f5b7e98123e16f12455eeb01c9 /microkde | |
parent | 03ca6830a9e6742b8873aee04d77b3e094b65d30 (diff) | |
download | kdepimpi-dbfa4de9416c28c5424eeee0f36f50de4cfae0ec.zip kdepimpi-dbfa4de9416c28c5424eeee0f36f50de4cfae0ec.tar.gz kdepimpi-dbfa4de9416c28c5424eeee0f36f50de4cfae0ec.tar.bz2 |
pwmpi windows management fixes
-rw-r--r-- | microkde/kdeui/kmainwindow.cpp | 1 | ||||
-rw-r--r-- | microkde/kdeui/kmainwindow.h | 5 |
2 files changed, 4 insertions, 2 deletions
diff --git a/microkde/kdeui/kmainwindow.cpp b/microkde/kdeui/kmainwindow.cpp index bd5a2cc..3ae4c87 100644 --- a/microkde/kdeui/kmainwindow.cpp +++ b/microkde/kdeui/kmainwindow.cpp @@ -111,384 +111,385 @@ KMainWindow::~KMainWindow() //US memberList->remove( this ); } void KMainWindow::initKMainWindow(const char *name) { setDockMenuEnabled( FALSE ); //US mHelpMenu = 0; //US kapp->setTopWidget( this ); actionCollection()->setWidget( this ); //US connect(kapp, SIGNAL(shutDown()), this, SLOT(shuttingDown())); //US if( !memberList ) //US memberList = new QPtrList<KMainWindow>; /*US if ( !ksm ) ksm = ksmd.setObject(new KMWSessionManaged()); // set a unique object name. Required by session management. QCString objname; QCString s; int unusedNumber; if ( !name ) { // no name given objname = kapp->instanceName() + "-mainwindow#"; s = objname + '1'; // start adding number immediately unusedNumber = 1; } else if( 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(;;) { QWidgetList* list = kapp->topLevelWidgets(); QWidgetListIt it( *list ); bool found = false; for( QWidget* 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 KMainWindowPrivate; //US d->showHelpMenu = true; d->settingsDirty = false; d->autoSaveSettings = false; d->autoSaveWindowSize = true; // for compatibility //US d->kaccel = actionCollection()->kaccel(); d->toolBarHandler = 0; d->settingsTimer = 0; d->showStatusBarAction = NULL; /*US if ((d->care_about_geometry == beeing_first)) { beeing_first = false; if ( kapp->geometryArgument().isNull() ) // if there is no geometry, it doesn't mater d->care_about_geometry = false; else parseGeometry(false); } */ d->care_about_geometry = false; //US setCaption( kapp->caption() ); // attach dcop interface //US d->m_interface = new KMainWindowInterface(this); //US if (!kapp->authorize("movable_toolbars")) //US setDockWindowsMovable(false); } KAction *KMainWindow::toolBarMenuAction() { if ( !d->toolBarHandler ) return 0; return d->toolBarHandler->toolBarMenuAction(); } bool KMainWindow::canBeRestored( int number ) { /*US we do not have and want to save sessioninformation. Use info from the default application config. */ //US if ( !kapp->isRestored() ) //US return FALSE; //US KConfig *config = kapp->sessionConfig(); KConfig *config = KGlobal::config(); if ( !config ) return FALSE; config->setGroup( QString::fromLatin1("Number") ); int n = config->readNumEntry( QString::fromLatin1("NumberOfWindows") , 1 ); return number >= 1 && number <= n; } const QString KMainWindow::classNameOfToplevel( int number ) { /*US we do not have and want to save sessioninformation. Use info from the default application config. */ //US if ( !kapp->isRestored() ) //US return QString::null; //US KConfig *config = kapp->sessionConfig(); KConfig *config = KGlobal::config(); if ( !config ) return QString::null; QString s; s.setNum( number ); s.prepend( QString::fromLatin1("WindowProperties") ); config->setGroup( s ); if ( !config->hasKey( QString::fromLatin1("ClassName") ) ) return QString::null; else return config->readEntry( QString::fromLatin1("ClassName") ); } bool KMainWindow::restore( int number, bool show ) { /*US we do not have and want to save sessioninformation. Use info from the default application config. */ if ( !canBeRestored( number ) ) return FALSE; //US KConfig *config = kapp->sessionConfig(); KConfig *config = KGlobal::config(); if ( readPropertiesInternal( config, number ) ){ if ( show ) KMainWindow::show(); return FALSE; } return FALSE; } void KMainWindow::setCaption( const QString &caption ) { //US setPlainCaption( kapp->makeStdCaption(caption) ); setPlainCaption( caption ); } void KMainWindow::setCaption( const QString &caption, bool modified ) { //US setPlainCaption( kapp->makeStdCaption(caption, true, modified) ); setPlainCaption( caption + "modified:" ); } void KMainWindow::setPlainCaption( const QString &caption ) { QMainWindow::setCaption( caption ); #ifndef Q_WS_QWS //US the following is disabled for the embedded version //US NETWinInfo info( qt_xdisplay(), winId(), qt_xrootwin(), 0 ); //US info.setName( caption.utf8().data() ); #endif } void KMainWindow::slotStateChanged(const QString &newstate) { stateChanged(newstate, KXMLGUIClient::StateNoReverse); } /* * Get rid of this for KDE 4.0 */ void KMainWindow::slotStateChanged(const QString &newstate, KXMLGUIClient::ReverseStateChange reverse) { stateChanged(newstate, reverse); } void KMainWindow::closeEvent ( QCloseEvent *e ) { + //qDebug("MainWindow::closeEvent "); // 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; /*US QPtrListIterator<KMainWindow> it(*KMainWindow::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? /*US if ( queryExit() && !kapp->sessionSaving()) { // Yes, Quit app? // don't call queryExit() twice disconnect(kapp, SIGNAL(shutDown()), this, SLOT(shuttingDown())); kapp->deref(); // ...and quit aplication. } else { // cancel closing, it's stupid to end up with no windows at all.... e->ignore(); } */ //US we have no sessionmanagement. Simply close app. if ( queryExit() ) { // Yes, Quit app? qDebug("KMainWindow::closeEvent: Exit application ???"); // don't call queryExit() twice //US disconnect(kapp, SIGNAL(shutDown()), this, SLOT(shuttingDown())); } } } } bool KMainWindow::queryExit() { return TRUE; } bool KMainWindow::queryClose() { return TRUE; } void KMainWindow::saveGlobalProperties( KConfig* ) { } void KMainWindow::readGlobalProperties( KConfig* ) { } void KMainWindow::savePropertiesInternal( KConfig *config, int number ) { bool oldASWS = d->autoSaveWindowSize; d->autoSaveWindowSize = true; // make saveMainWindowSettings save the window size QString s; s.setNum(number); s.prepend(QString::fromLatin1("WindowProperties")); config->setGroup(s); // store objectName, className, Width and Height for later restoring // (Only useful for session management) config->writeEntry(QString::fromLatin1("ObjectName"), name()); config->writeEntry(QString::fromLatin1("ClassName"), className()); saveMainWindowSettings(config); // Menubar, statusbar and Toolbar settings. s.setNum(number); config->setGroup(s); saveProperties(config); d->autoSaveWindowSize = oldASWS; } void KMainWindow::setStandardToolBarMenuEnabled( bool enable ) { if ( enable ) { if ( d->toolBarHandler ) return; d->toolBarHandler = new KDEPrivate::ToolBarHandler( this ); /*US if ( factory() ) factory()->addClient( d->toolBarHandler ); */ } else { if ( !d->toolBarHandler ) return; /*US if ( factory() ) factory()->removeClient( d->toolBarHandler ); */ delete d->toolBarHandler; d->toolBarHandler = 0; } } bool KMainWindow::isStandardToolBarMenuEnabled() const { return ( d->toolBarHandler != 0 ); } void KMainWindow::createStandardStatusBarAction(){ if(!d->showStatusBarAction){ d->showStatusBarAction = KStdAction::showStatusbar(this, SLOT(setSettingsDirty()), actionCollection()); connect(d->showStatusBarAction, SIGNAL(toggled(bool)), statusBar(), SLOT(setShown(bool))); if(internalStatusBar()) d->showStatusBarAction->setChecked(!internalStatusBar()->isHidden()); } } QToolBar *KMainWindow::tBar( ) { if ( ! mQToolBar ) mQToolBar = new QToolBar( this ); return mQToolBar; } KToolBar *KMainWindow::toolBar( const char * name ) { if (!name) name = "mainToolBar"; KToolBar *tb = (KToolBar*)child( name, "KToolBar" ); if ( tb ) return tb; bool honor_mode = (name == "mainToolBar"); /*US if ( builderClient() ) return new KToolBar(this, name, honor_mode); // XMLGUI constructor else */ return new KToolBar(this, Top, false, name, honor_mode ); // non-XMLGUI } QPtrListIterator<KToolBar> KMainWindow::toolBarIterator() { toolbarList.clear(); QPtrList<QToolBar> lst; for ( int i = (int)QMainWindow::Unmanaged; i <= (int)Minimized; ++i ) { lst = toolBars( (ToolBarDock)i ); for ( QToolBar *tb = lst.first(); tb; tb = lst.next() ) { if ( !tb->inherits( "KToolBar" ) ) continue; toolbarList.append( (KToolBar*)tb ); } } return QPtrListIterator<KToolBar>( toolbarList ); } void KMainWindow::setAutoSaveSettings( const QString & groupName, bool saveWindowSize ) { d->autoSaveSettings = true; d->autoSaveGroup = groupName; d->autoSaveWindowSize = saveWindowSize; // Get notified when the user moves a toolbar around //US connect( this, SIGNAL( dockWindowPositionChanged( QDockWindow * ) ), //US this, SLOT( setSettingsDirty() ) ); connect( this, SIGNAL( toolBarPositionChanged(QToolBar *) ), this, SLOT( setSettingsDirty() ) ); // Get default values //US int scnum = QApplication::desktop()->screenNumber(parentWidget()); //US QRect desk = QApplication::desktop()->screenGeometry(scnum); QRect desk = KGlobalSettings::desktopGeometry(0); d->defaultWindowSize = QRect(desk.width(), width(), desk.height(), height()); // Now read the previously saved settings applyMainWindowSettings( KGlobal::config(), groupName ); } void KMainWindow::resetAutoSaveSettings() { d->autoSaveSettings = false; if ( d->settingsTimer ) d->settingsTimer->stop(); } bool KMainWindow::autoSaveSettings() const { diff --git a/microkde/kdeui/kmainwindow.h b/microkde/kdeui/kmainwindow.h index e76e732..2aafb9d 100644 --- a/microkde/kdeui/kmainwindow.h +++ b/microkde/kdeui/kmainwindow.h @@ -1,288 +1,289 @@ /* This file is part of the KDE libraries 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. $Id$ */ #ifndef KMAINWINDOW_H #define KMAINWINDOW_H /*US #include "kxmlguifactory.h" #include "kxmlguiclient.h" #include "kxmlguibuilder.h" #include <qmetaobject.h> class KPopupMenu; class KXMLGUIFactory; class KConfig; class KHelpMenu; class KStatusBar; class QStatusBar; class KMenuBar; class KMWSessionManaged; class KAccel; class KToolBarMenuAction; */ class QMenuBar; class QStatusBar; class KMainWindowPrivate; class KAction; #include <ktoolbar.h> #include <ktoolbarhandler.h> #include <kxmlguiclient.h> #include <qmainwindow.h> #include <qptrlist.h> class KActionCollection; class KMainWindow : public QMainWindow, virtual public KXMLGUIClient { Q_OBJECT private: //US create private defaultconstructor KMainWindow() {;}; -public: + public: /** * Construct a main window. * * @param parent The widget parent. This is usually 0 but it may also be the window * group leader. In that case, the KMainWindow becomes sort of a * secondary window. * * @param name The object name. For session management and window management to work * properly, all main windows in the application should have a * different name. When passing 0 (the default), KMainWindow will create * a unique name, but it's recommended to explicitly pass a window name that will * also describe the type of the window. If there can be several windows of the same * type, append '#' (hash) to the name, and KMainWindow will append numbers to make * the names unique. For example, for a mail client which has one main window showing * the mails and folders, and which can also have one or more windows for composing * mails, the name for the folders window should be e.g. "mainwindow" and * for the composer windows "composer#". * * @param f Specify the widget flags. The default is * WType_TopLevel and WDestructiveClose. TopLevel indicates that a * main window is a toplevel window, regardless of whether it has a * parent or not. DestructiveClose indicates that a main window is * automatically destroyed when its window is closed. Pass 0 if * you do not want this behavior. * * KMainWindows must be created on the heap with 'new', like: * <pre> KMainWindow *kmw = new KMainWindow (...</pre> **/ - KMainWindow( QWidget* parent = 0, const char *name = 0, WFlags f = WType_TopLevel | WDestructiveClose ); + //LR remove WDestructiveClose + KMainWindow( QWidget* parent = 0, const char *name = 0, WFlags f = WType_TopLevel /*| WDestructiveClose*/ ); /** * Destructor. * * Will also destroy the toolbars, and menubar if * needed. */ virtual ~KMainWindow(); /** * Retrieve the standard help menu. * * It contains entires for the * help system (activated by F1), an optional "What's This?" entry * (activated by Shift F1), an application specific dialog box, * and an "About KDE" dialog box. * * Example (adding a standard help menu to your application): * <pre> * KPopupMenu *help = helpMenu( <myTextString> ); * menuBar()->insertItem( i18n("&Help"), help ); * </pre> * * @param aboutAppText The string that is used in the application * specific dialog box. If you leave this string empty the * information in the global @ref KAboutData of the * application will be used to make a standard dialog box. * * @param showWhatsThis Set this to false if you do not want to include * the "What's This" menu entry. * * @return A standard help menu. */ //US KPopupMenu* helpMenu( const QString &aboutAppText = QString::null, //US bool showWhatsThis = TRUE ); /** * Returns the help menu. Creates a standard help menu if none exists yet. * * It contains entries for the * help system (activated by F1), an optional "What's This?" entry * (activated by Shift F1), an application specific dialog box, * and an "About KDE" dialog box. You must create the application * specific dialog box yourself. When the "About application" * menu entry is activated, a signal will trigger the * @ref showAboutApplication slot. See @ref showAboutApplication for more * information. * * Example (adding a help menu to your application): * <pre> * menuBar()->insertItem( i18n("&Help"), customHelpMenu() ); * </pre> * * @param showWhatsThis Set this to @p false if you do not want to include * the "What's This" menu entry. * * @return A standard help menu. */ //US KPopupMenu* customHelpMenu( bool showWhatsThis = TRUE ); /** * @sect Session Management * * Try to restore the toplevel widget as defined by the number (1..X). * * If the session did not contain so high a number, the configuration * is not changed and @p false returned. * * That means clients could simply do the following: * <pre> * if (kapp->isRestored()){ * int n = 1; * while (KMainWindow::canBeRestored(n)){ * (new childMW)->restore(n); * n++; * } * } else { * // create default application as usual * } * </pre> * Note that @ref QWidget::show() is called implicitly in restore. * * With this you can easily restore all toplevel windows of your * application. * * If your application uses different kinds of toplevel * windows, then you can use @ref KMainWindow::classNameOfToplevel(n) * to determine the exact type before calling the childMW * constructor in the example from above. * * If your client has only one kind of toplevel widgets (which * should be pretty usual) then you should use the RESTORE-macro * for backwards compatibility with 3.1 and 3.0 branches: * * <pre> * if (kapp->isRestored()) * RESTORE(childMW) * else { * // create default application as usual * } * </pre> * * The macro expands to the term above but is easier to use and * less code to write. * * For new code or if you have more than one kind of toplevel * widget (each derived from @ref KMainWindow, of course), you can * use the templated @ref kRestoreMainWindows global functions: * * <pre> * if (kapp->isRestored()) * kRestoreMainWindows< childMW1, childMW2, childMW3 >(); * else { * // create default application as usual * } * </pre> * * Currently, these functions are provided for up to three * template arguments. If you need more, tell us. To help you in * deciding whether or not you can use @ref kRestoreMainWindows, a * define KDE_RESTORE_MAIN_WINDOWS_NUM_TEMPLATE_ARGS is provided. * * @see restore() * @see classNameOfToplevel() * **/ static bool canBeRestored( int number ); /** * Returns the @ref className() of the @p number of the toplevel window which * should be restored. * * This is only useful if your application uses * different kinds of toplevel windows. */ static const QString classNameOfToplevel( int number ); /** * Restore the session specified by @p number. * * Returns @p false if this * fails, otherwise returns @p true and shows the window. * You should call @ref canBeRestored() first. * If @p show is true (default), this widget will be shown automatically. */ bool restore( int number, bool show = TRUE ); //US virtual KXMLGUIFactory *guiFactory(); /** * Create a GUI given a local XML file. * * If @p xmlfile is NULL, * then it will try to construct a local XML filename like * appnameui.rc where 'appname' is your app's name. If that file * does not exist, then the XML UI code will only use the global * (standard) XML file for the layout purposes. * * Note that when passing true for the conserveMemory argument subsequent * calls to guiFactory()->addClient/removeClient may not work as expected. * Also retrieving references to containers like popup menus or toolbars using * the container method will not work. * * @param xmlfile The local xmlfile (relative or absolute) * @param _conserveMemory Specify whether createGUI() should call * @ref KXMLGuiClient::conserveMemory() to free all memory * allocated by the @ref QDomDocument and by the KXMLGUIFactory. */ void createGUI( const QString &xmlfile = QString::null, bool _conserveMemory = TRUE ); /** * Enables the build of a standard help menu when calling createGUI(). * * The default behavior is to build one, you must call this function * to disable it */ void setHelpMenuEnabled(bool showHelpMenu = true); /** * Return @p true when the help menu is enabled */ bool isHelpMenuEnabled(); /** * Returns true, if there is a menubar * @since 3.1 */ bool hasMenuBar(); /** |