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,73 +296,76 @@ 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. */
setUpdatesEnabled(false);
viewport()->setUpdatesEnabled(false);
pl.clear();
// Convert ps answer in a list of tokenized lines
KSGRD::SensorTokenizer procs(list, '\n');
for (unsigned int i = 0; i < procs.count(); i++)
{ {
KSGRD::SensorPSLine* line = new KSGRD::SensorPSLine(procs[i]); /* Disable painting to avoid flickering effects,
if (line->count() != (uint) columns()) * especially when in tree view mode.
* Ditto for the scrollbar. */
setUpdatesEnabled(false);
viewport()->setUpdatesEnabled(false);
pl.clear();
// Convert ps answer in a list of tokenized lines
KSGRD::SensorTokenizer procs(list, '\n');
for (unsigned int i = 0; i < procs.count(); i++)
{ {
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);
} }
int currItemPos = itemPos(currentItem());
int vpos = verticalScrollBar()->value();
int hpos = horizontalScrollBar()->value();
updateMetaInfo();
clear();
if (treeViewEnabled)
buildTree();
else else
pl.append(line); buildList();
}
TQListViewItemIterator it( this );
int currItemPos = itemPos(currentItem()); while ( it.current() ) {
int vpos = verticalScrollBar()->value(); if ( itemPos( it.current() ) == currItemPos ) {
int hpos = horizontalScrollBar()->value(); setCurrentItem( it.current() );
break;
updateMetaInfo(); }
++it;
clear();
if (treeViewEnabled)
buildTree();
else
buildList();
TQListViewItemIterator it( this );
while ( it.current() ) {
if ( itemPos( it.current() ) == currItemPos ) {
setCurrentItem( it.current() );
break;
} }
++it;
verticalScrollBar()->setValue(vpos);
horizontalScrollBar()->setValue(hpos);
// Re-enable painting, and force an update.
setUpdatesEnabled(true);
viewport()->setUpdatesEnabled(true);
triggerUpdate();
} }
verticalScrollBar()->setValue(vpos);
horizontalScrollBar()->setValue(hpos);
// Re-enable painting, and force an update.
setUpdatesEnabled(true);
viewport()->setUpdatesEnabled(true);
triggerUpdate();
return (true); return (true);
} }
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