CVS commit by esben: Ignore Quit-selection if within 0.3s of opening menu, to avoid accidental closing of menu due to a mishandled click. Fix regression: It should now be possible to close the menu by pressing the Klipper icon M +22 -5 toplevel.cpp 1.171 M +4 -2 toplevel.h 1.60 --- kdebase/klipper/toplevel.cpp #1.170:1.171 @@ -160,5 +160,6 @@ KlipperWidget::KlipperWidget( QWidget *p setURLGrabberEnabled( bURLGrabber ); - menuTimer = new QTime(); + hideTimer = new QTime(); + showTimer = new QTime(); readProperties(m_config); @@ -188,4 +189,7 @@ KlipperWidget::KlipperWidget( QWidget *p KlipperPopup* popup = history()->popup(); connect ( history(), SIGNAL( topChanged() ), SLOT( slotHistoryTopChanged() ) ); + connect( popup, SIGNAL( aboutToHide() ), SLOT( slotStartHideTimer() ) ); + connect( popup, SIGNAL( aboutToShow() ), SLOT( slotStartShowTimer() ) ); + popup->plugAction( toggleURLGrabAction ); popup->plugAction( clearHistoryAction ); @@ -200,5 +204,6 @@ KlipperWidget::KlipperWidget( QWidget *p KlipperWidget::~KlipperWidget() { - delete menuTimer; + delete showTimer; + delete hideTimer; delete myURLGrabber; if( m_config != kapp->config()) @@ -253,5 +258,5 @@ void KlipperWidget::mousePressEvent(QMou // it's probably because the user clicked on the klipper icon // to hide it, and therefore won't want it shown again. - if ( menuTimer->elapsed() > 300 ) { + if ( hideTimer->elapsed() > 300 ) { slotPopupMenu(); } @@ -269,7 +274,12 @@ void KlipperWidget::paintEvent(QPaintEve } -void KlipperWidget::slotAboutToHideMenu() +void KlipperWidget::slotStartHideTimer() { - menuTimer->start(); + hideTimer->start(); +} + +void KlipperWidget::slotStartShowTimer() +{ + showTimer->start(); } @@ -513,4 +523,11 @@ void KlipperWidget::slotConfigure() void KlipperWidget::slotQuit() { + // If the menu was just opened, likely the user + // selected quit by accident while attempting to + // click the Klipper icon. + if ( showTimer->elapsed() < 300 ) { + return; + } + saveSession(); int autoStart = KMessageBox::questionYesNoCancel( 0L, i18n("Should Klipper start automatically\nwhen you login?"), i18n("Automatically Start Klipper?") ); --- kdebase/klipper/toplevel.h #1.59:1.60 @@ -150,5 +150,6 @@ private slots: void slotQuit(); - void slotAboutToHideMenu(); + void slotStartHideTimer(); + void slotStartShowTimer(); void slotClearOverflow(); @@ -159,5 +160,6 @@ private: QClipboard *clip; - QTime *menuTimer; + QTime *hideTimer; + QTime *showTimer; QMimeSource* m_lastClipdata;