[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-core-devel
Subject: Re: [PATCH] Scrollable page dialogs
From: Aurélien Gâteau <aurelien.gateau () free ! fr>
Date: 2007-12-20 22:45:17
Message-ID: fker9t$n2i$1 () ger ! gmane ! org
[Download RAW message or body]
Aurélien Gâteau wrote:
> Nevertheless, I see your point about not making a change which would
> impact all KDE dialogs, especially at a time were the next release is not
> an rc. I am going to see if I can figure a way to do add scrollbars to
> SystemSettings modules only.
While I still believe having scrollbars on all overgrowing KDE dialogs would
be a good idea, since it is what the HIG recommends, I worked this evening
on a SystemSettings specific implementation. Attached patch adds
QScrollArea to SystemSettings modules only.
So the question is: which patch (if any) should I apply?
Aurélien
["systemsettings_scrolling_pages.diff" (text/x-diff)]
Index: mainwindow.cpp
===================================================================
--- mainwindow.cpp (révision 751014)
+++ mainwindow.cpp (copie de travail)
@@ -277,17 +277,13 @@
kDebug() << "item selected: " << item->text();
groupWidget = moduleItemToWidgetDict[mItem];
- scrollView = moduleItemToScrollerDict[mItem];
if(groupWidget==0) {
QList<KCModuleInfo> list = mItem->modules;
- scrollView = new QScrollArea(windowStack);
- groupWidget = new KCMultiWidget(0, scrollView, Qt::NonModal); // THAT ZERO IS NEW (actually the 0 can go, jr)
- scrollView->setWidget(groupWidget);
- scrollView->setWidgetResizable(true);
- windowStack->addWidget(scrollView);
- moduleItemToScrollerDict.insert(mItem,scrollView);
+ groupWidget = new KCMultiWidget(0, windowStack, Qt::NonModal); // THAT ZERO IS NEW (actually the 0 can go, jr)
+ groupWidget->setWindowFlags(Qt::Widget);
+ windowStack->addWidget(groupWidget);
moduleItemToWidgetDict.insert(mItem,groupWidget);
connect(groupWidget, SIGNAL(aboutToShow( KCModuleProxy * )), this, SLOT(updateModuleHelp( KCModuleProxy * )));
@@ -305,7 +301,7 @@
// which makes the show() call below segfault. The groupWidget test
// above should prevent execution reaching here while the KCMultiWidget is
// visible
- windowStack->setCurrentWidget( scrollView );
+ windowStack->setCurrentWidget( groupWidget );
setCaption( mItem->text() );
showAllAction->setEnabled(true);
@@ -318,8 +314,6 @@
currentRadioAction->setEnabled(false);
}
- groupWidget->show();
-
// We resize and expand the window if necessary, but only once the window has been updated.
// Some modules seem to dynamically change thier size. The new size is only available
// once the dialog is updated. :-/ -SBE
Index: kcmultiwidget.cpp
===================================================================
--- kcmultiwidget.cpp (révision 751014)
+++ kcmultiwidget.cpp (copie de travail)
@@ -25,6 +25,7 @@
#include <qlayout.h>
#include <QProcess>
+#include <QScrollArea>
#include <kdebug.h>
#include <kiconloader.h>
@@ -239,6 +240,7 @@
return;
}
KCModuleProxy * module;
+ QScrollArea * moduleScrollArea;
if( m_orphanModules.contains( moduleinfo.service() ) )
{
// the KCModule already exists - it was removed from the dialog in
@@ -252,10 +254,15 @@
clientChanged( true );
}
+ moduleScrollArea = static_cast<QScrollArea*>( module->parentWidget() );
}
else
{
- module = new KCModuleProxy( moduleinfo, this );
+ moduleScrollArea = new QScrollArea( this );
+ module = new KCModuleProxy( moduleinfo, moduleScrollArea );
+ moduleScrollArea->setWidget( module );
+ moduleScrollArea->setWidgetResizable( true );
+ moduleScrollArea->setFrameStyle( QFrame::NoFrame );
QStringList parentComponents = moduleinfo.service()->property(
"X-KDE-System-Settings-Parent-Category" ).toStringList();
@@ -287,7 +294,7 @@
if( m_modules.count() == 1 ) {
slotAboutToShow( module );
}
- KPageWidgetItem* page = addPage(module, moduleinfo.moduleName());
+ KPageWidgetItem* page = addPage(moduleScrollArea, moduleinfo.moduleName());
page->setIcon( KIcon(moduleinfo.icon()) );
page->setHeader(moduleinfo.comment());
}
Index: mainwindow.h
===================================================================
--- mainwindow.h (révision 751014)
+++ mainwindow.h (copie de travail)
@@ -78,7 +78,6 @@
QScrollArea *scrollView;
QHash<ModuleIconItem*,KCMultiWidget*> moduleItemToWidgetDict;
- QHash<ModuleIconItem*,QScrollArea*> moduleItemToScrollerDict;
QList<KToggleAction*> pageActions;
QList<QScrollArea*> overviewPages;
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic