[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdebase/workspace/systemsettings
From:       Ben Cooksley <sourtooth () gmail ! com>
Date:       2009-05-25 8:01:50
Message-ID: 1243238510.184516.16213.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 972520 by bcooksley:

Always ensure modules are closed when switching views.
Always ensure that there are no changes before allowing access to the configuration \
dialog. Plugin Interface Change: ModuleView::closeModules() now forcibly closes \
modules.

BUG: 193902
BUG: 193904

 M  +4 -0      app/SettingsBase.cpp  
 M  +6 -0      classic/ClassicMode.cpp  
 M  +1 -0      classic/ClassicMode.h  
 M  +4 -0      core/BaseMode.cpp  
 M  +9 -1      core/BaseMode.h  
 M  +1 -6      core/ModuleView.cpp  
 M  +3 -7      core/ModuleView.h  
 M  +8 -1      icons/IconMode.cpp  
 M  +1 -0      icons/IconMode.h  


--- trunk/KDE/kdebase/workspace/systemsettings/app/SettingsBase.cpp #972519:972520
@@ -204,6 +204,9 @@
     if( !configDialog ) {
         initConfig();
     }
+    if( activeView && activeView->moduleView() && \
!activeView->moduleView()->resolveChanges() ) { +        return; // It shouldn't be \
triggering anyway, since the action is disabled +    }
 
     QStringList pluginList = possibleViews.keys();
     int configIndex = pluginList.indexOf(mainConfigGroup.readEntry( "ActiveView", \
"icon_mode" )); @@ -260,6 +263,7 @@
 
     if( activeView ) {
         activeView->saveState();
+        activeView->leaveModuleView();
     }
 
     QString viewToUse = mainConfigGroup.readEntry( "ActiveView", "icon_mode" );
--- trunk/KDE/kdebase/workspace/systemsettings/classic/ClassicMode.cpp #972519:972520
@@ -205,4 +205,10 @@
     d->classicWidget->setSizes( config().readEntry( "viewLayout", defaultSizes ) );
 }
 
+void ClassicMode::leaveModuleView()
+{
+    d->moduleView->closeModules();
+    d->stackedWidget->setCurrentWidget( d->classicCategory );
+}
+
 #include "ClassicMode.moc"
--- trunk/KDE/kdebase/workspace/systemsettings/classic/ClassicMode.h #972519:972520
@@ -32,6 +32,7 @@
     ClassicMode(QObject * parent, const QVariantList& );
     ~ClassicMode();
     void initEvent();
+    void leaveModuleView();
     QWidget * mainWidget();
     KAboutData * aboutData();
     ModuleView * moduleView() const;
--- trunk/KDE/kdebase/workspace/systemsettings/core/BaseMode.cpp #972519:972520
@@ -117,6 +117,10 @@
 {
 }
 
+void BaseMode::leaveModuleView()
+{
+}
+
 MenuItem * BaseMode::rootItem() const
 {
     return d->rootItem;
--- trunk/KDE/kdebase/workspace/systemsettings/core/BaseMode.h #972519:972520
@@ -111,10 +111,18 @@
     virtual void saveState();
 
     /**
+     * Causes the view to unload all modules in the module view, and return to their \
module selection state +     *
+     * @warning Failure to reimplement will cause modules to not be unloaded when \
changing views. +     * This must be implemented.
+     */
+    virtual void leaveModuleView();
+
+    /**
      * Provides access to the ModuleView the application uses to display control \
                modules.\n
      *
      * @warning Failure to reimplement will cause modules not to be checked for \
                configuration
-     * changes, and for the module to not be displayed in the About dialog.
+     * changes, and for the module to not be displayed in the About dialog. It must \
                be implemented.
      * @returns The ModuleView used by the plugin for handling modules.
      */
     virtual ModuleView * moduleView() const;
--- trunk/KDE/kdebase/workspace/systemsettings/core/ModuleView.cpp #972519:972520
@@ -219,12 +219,8 @@
     }
 }
 
-bool ModuleView::closeModules()
+void ModuleView::closeModules()
 {
-    if( !resolveChanges() ) {
-        return false;
-    }
-
     blockSignals(true);
     QMap<KPageWidgetItem*, KCModuleProxy*>::iterator pageIterator;
     QMap<KPageWidgetItem*, KCModuleProxy*>::iterator endIterator = d->mPages.end();
@@ -239,7 +235,6 @@
     d->mPages.clear();
     d->mModules.clear();
     blockSignals(false);
-    return true;
 }
 
 void ModuleView::moduleSave()
--- trunk/KDE/kdebase/workspace/systemsettings/core/ModuleView.h #972519:972520
@@ -85,14 +85,10 @@
     /**
      * Closes all active modules, after checking there are no active changes.
      *
-     * @warning The modules will not be closed if the currently active module has
-     *          changes and the user cancels the closing.
-     *
-     * @returns true if the modules were all closed successfully.
-     * @returns false if the modules were not closed successfully, this usually only
-                happens when the user cancels the closing.
+     * @warning This forces all modules to be destroyed regardless of if changes \
exist or not +     * If possible, always check with resolveChanges() first.
      */
-    bool closeModules();
+    void closeModules();
 
 public Q_SLOTS:
     /**
--- trunk/KDE/kdebase/workspace/systemsettings/icons/IconMode.cpp #972519:972520
@@ -147,7 +147,8 @@
 
 void IconMode::backToOverview()
 {
-    if( d->moduleView->closeModules() ) {
+    if( d->moduleView->resolveChanges() ) {
+        d->moduleView->closeModules();
         d->iconWidget->show();
         d->mainWidget->setCurrentWidget( d->iconWidget );
         d->backAction->setEnabled( false );
@@ -189,4 +190,10 @@
     d->mainWidget->setCurrentWidget( d->iconWidget );
 }
 
+void IconMode::leaveModuleView()
+{
+    d->moduleView->closeModules(); // We have to force it here
+    backToOverview();
+}
+
 #include "IconMode.moc"
--- trunk/KDE/kdebase/workspace/systemsettings/icons/IconMode.h #972519:972520
@@ -36,6 +36,7 @@
     ~IconMode();
     QWidget * mainWidget();
     void initEvent();
+    void leaveModuleView();
     KAboutData * aboutData();
     ModuleView * moduleView() const;
 


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic