Fix keyboard multi-select failure in ksysguard

(cherry picked from commit 64f3533baa)
v3.5.13-sru
Timothy Pearson 12 years ago committed by Slávek Banko
parent 6d0a6c6224
commit d873dc1dba

@ -228,6 +228,8 @@ ProcessList::ProcessList(TQWidget *parent, const char* name)
* settings. */ * settings. */
connect(header(), TQT_SIGNAL(clicked(int)), this, TQT_SLOT(sortingChanged(int))); connect(header(), TQT_SIGNAL(clicked(int)), this, TQT_SLOT(sortingChanged(int)));
ctrlKeyDown = false;
shiftKeyDown = false;
treeViewEnabled = false; treeViewEnabled = false;
openAll = true; openAll = true;
@ -294,65 +296,68 @@ ProcessList::getSelectedAsStrings()
bool bool
ProcessList::update(const TQString& list) ProcessList::update(const TQString& list)
{ {
/* Disable painting to avoid flickering effects, if ((!shiftKeyDown) && (!ctrlKeyDown))
* especially when in tree view mode. {
* Ditto for the scrollbar. */ /* Disable painting to avoid flickering effects,
setUpdatesEnabled(false); * especially when in tree view mode.
viewport()->setUpdatesEnabled(false); * Ditto for the scrollbar. */
setUpdatesEnabled(false);
viewport()->setUpdatesEnabled(false);
pl.clear(); pl.clear();
// Convert ps answer in a list of tokenized lines // Convert ps answer in a list of tokenized lines
KSGRD::SensorTokenizer procs(list, '\n'); KSGRD::SensorTokenizer procs(list, '\n');
for (unsigned int i = 0; i < procs.count(); i++) for (unsigned int i = 0; i < procs.count(); i++)
{
KSGRD::SensorPSLine* line = new KSGRD::SensorPSLine(procs[i]);
if (line->count() != (uint) columns())
{ {
KSGRD::SensorPSLine* line = new KSGRD::SensorPSLine(procs[i]);
if (line->count() != (uint) columns())
{
#if 0 #if 0
// This is needed for debugging only. // This is needed for debugging only.
kdDebug(1215) << list << endl; kdDebug(1215) << list << endl;
TQString l; TQString l;
for (uint j = 0; j < line->count(); j++) for (uint j = 0; j < line->count(); j++)
l += (*line)[j] + "|"; l += (*line)[j] + "|";
kdDebug(1215) << "Incomplete ps line:" << l << endl; kdDebug(1215) << "Incomplete ps line:" << l << endl;
#endif #endif
return (false); return (false);
}
else
pl.append(line);
} }
else
pl.append(line);
}
int currItemPos = itemPos(currentItem()); int currItemPos = itemPos(currentItem());
int vpos = verticalScrollBar()->value(); int vpos = verticalScrollBar()->value();
int hpos = horizontalScrollBar()->value(); int hpos = horizontalScrollBar()->value();
updateMetaInfo(); updateMetaInfo();
clear(); clear();
if (treeViewEnabled) if (treeViewEnabled)
buildTree(); buildTree();
else else
buildList(); buildList();
TQListViewItemIterator it( this ); TQListViewItemIterator it( this );
while ( it.current() ) { while ( it.current() ) {
if ( itemPos( it.current() ) == currItemPos ) { if ( itemPos( it.current() ) == currItemPos ) {
setCurrentItem( it.current() ); setCurrentItem( it.current() );
break; break;
}
++it;
} }
++it;
}
verticalScrollBar()->setValue(vpos); verticalScrollBar()->setValue(vpos);
horizontalScrollBar()->setValue(hpos); horizontalScrollBar()->setValue(hpos);
// Re-enable painting, and force an update. // Re-enable painting, and force an update.
setUpdatesEnabled(true); setUpdatesEnabled(true);
viewport()->setUpdatesEnabled(true); viewport()->setUpdatesEnabled(true);
triggerUpdate(); triggerUpdate();
}
return (true); return (true);
} }
@ -360,7 +365,7 @@ ProcessList::update(const TQString& list)
void void
ProcessList::setTreeView(bool tv) ProcessList::setTreeView(bool tv)
{ {
if (treeViewEnabled = tv) if ((treeViewEnabled = tv))
{ {
savedWidth[0] = columnWidth(0); savedWidth[0] = columnWidth(0);
openAll = true; openAll = true;
@ -938,4 +943,28 @@ ProcessList::selectAllChilds(int pid, bool select)
} }
} }
void
ProcessList::keyPressEvent(TQKeyEvent *e)
{
if (e->key() == Key_Shift) {
shiftKeyDown = true;
}
if (e->key() == Key_Control) {
ctrlKeyDown = true;
}
KListView::keyPressEvent(e);
}
void
ProcessList::keyReleaseEvent(TQKeyEvent *e)
{
if (e->key() == Key_Shift) {
shiftKeyDown = false;
}
if (e->key() == Key_Control) {
ctrlKeyDown = false;
}
KListView::keyReleaseEvent(e);
}
#include "ProcessList.moc" #include "ProcessList.moc"

@ -170,6 +170,10 @@ signals:
void listModified(bool); void listModified(bool);
protected:
void keyPressEvent(TQKeyEvent *e);
void keyReleaseEvent(TQKeyEvent *e);
private: private:
// items of table header RMB popup menu // items of table header RMB popup menu
enum enum
@ -244,6 +248,8 @@ private:
bool killSupported; bool killSupported;
bool treeViewEnabled; bool treeViewEnabled;
bool openAll; bool openAll;
bool ctrlKeyDown;
bool shiftKeyDown;
/* The following lists are primarily used to store table specs between /* The following lists are primarily used to store table specs between
* load() and the actual table creation in addColumn(). */ * load() and the actual table creation in addColumn(). */

Loading…
Cancel
Save