Hi Joel, thanks for the review. It does actually also work for the cursor popup menu but the auto-focus/auto-select-all action is missing there, so it's not as obvious as with the other popups. I fixed that with the commit I just to the mailing list, so please check again with both applied. Thanks!
On Thu, 2014-09-11 at 14:07 +0100, Joel Holdsworth wrote: > Hi Soeren, > > this seems to work nicely - except it doesn't seem to work on the time > cursors popup menu. Would you expect your patch to be able to affect > that? I guess this isn't relevant to the channel groups popup. > > Joel > > On 09/09/14 21:50, [email protected] wrote: > > From: Soeren Apel <[email protected]> > > > > This patch partly reverts two patches I submitted before: [1] [2] > > Instead, it implements a generic approach to the "close on enter" feature > > in popups by installing the key event handler on the first editable widget > > it finds in the popup. > > > > [1] http://sigrok.org/gitweb/?p=pulseview.git;a=commit;h=3c10012 > > [2] http://sigrok.org/gitweb/?p=pulseview.git;a=commit;h=0891e69 > > > > --- > > pv/view/signal.cpp | 21 --------------------- > > pv/view/signal.h | 2 -- > > pv/view/trace.cpp | 26 -------------------------- > > pv/view/trace.h | 4 ---- > > pv/widgets/popup.cpp | 40 ++++++++++++++++++++++++++++++++++++++++ > > pv/widgets/popup.h | 4 ++++ > > 6 files changed, 44 insertions(+), 53 deletions(-) > > > > diff --git a/pv/view/signal.cpp b/pv/view/signal.cpp > > index 97e0549..51af899 100644 > > --- a/pv/view/signal.cpp > > +++ b/pv/view/signal.cpp > > @@ -118,9 +118,6 @@ void Signal::populate_popup_form(QWidget *parent, > > QFormLayout *form) > > connect(_name_widget, SIGNAL(editTextChanged(const QString&)), > > this, SLOT(on_text_changed(const QString&))); > > > > - // We want to close the popup when the Enter key was pressed. > > - _name_widget->installEventFilter(this); > > - > > form->addRow(tr("Name"), _name_widget); > > > > add_colour_option(parent, form); > > @@ -140,24 +137,6 @@ QMenu* Signal::create_context_menu(QWidget *parent) > > return menu; > > } > > > > -bool Signal::eventFilter(QObject *obj, QEvent *evt) > > -{ > > - QKeyEvent *keyEvent; > > - > > - (void)obj; > > - > > - if (evt->type() == QEvent::KeyPress) { > > - keyEvent = static_cast<QKeyEvent*>(evt); > > - if (keyEvent->key() == Qt::Key_Enter || > > - keyEvent->key() == Qt::Key_Return) { > > - close_popup(); > > - return true; > > - } > > - } > > - > > - return false; > > -} > > - > > void Signal::delete_pressed() > > { > > on_disable(); > > diff --git a/pv/view/signal.h b/pv/view/signal.h > > index 7cf08b2..cce9f46 100644 > > --- a/pv/view/signal.h > > +++ b/pv/view/signal.h > > @@ -75,8 +75,6 @@ public: > > > > void delete_pressed(); > > > > - bool eventFilter(QObject *obj, QEvent *evt); > > - > > private Q_SLOTS: > > void on_disable(); > > > > diff --git a/pv/view/trace.cpp b/pv/view/trace.cpp > > index 250376e..7aa199c 100644 > > --- a/pv/view/trace.cpp > > +++ b/pv/view/trace.cpp > > @@ -219,24 +219,6 @@ QRectF Trace::get_label_rect(int right) > > label_size.width(), label_size.height()); > > } > > > > -bool Trace::eventFilter(QObject *obj, QEvent *evt) > > -{ > > - QKeyEvent *keyEvent; > > - > > - (void)obj; > > - > > - if (evt->type() == QEvent::KeyPress) { > > - keyEvent = static_cast<QKeyEvent*>(evt); > > - if (keyEvent->key() == Qt::Key_Enter || > > - keyEvent->key() == Qt::Key_Return) { > > - close_popup(); > > - return true; > > - } > > - } > > - > > - return false; > > -} > > - > > QColor Trace::get_text_colour() const > > { > > return (_colour.lightness() > 64) ? Qt::black : Qt::white; > > @@ -288,17 +270,9 @@ void Trace::populate_popup_form(QWidget *parent, > > QFormLayout *form) > > this, SLOT(on_text_changed(const QString&))); > > form->addRow(tr("Name"), name_edit); > > > > - // We want to close the popup when the Enter key was pressed. > > - name_edit->installEventFilter(this); > > - > > add_colour_option(parent, form); > > } > > > > -void Trace::close_popup() > > -{ > > - _popup->close(); > > -} > > - > > void Trace::on_popup_closed() > > { > > _popup = NULL; > > diff --git a/pv/view/trace.h b/pv/view/trace.h > > index 5cab440..7726be2 100644 > > --- a/pv/view/trace.h > > +++ b/pv/view/trace.h > > @@ -148,8 +148,6 @@ public: > > */ > > QRectF get_label_rect(int right); > > > > - bool eventFilter(QObject *obj, QEvent *evt); > > - > > protected: > > > > /** > > @@ -175,8 +173,6 @@ protected: > > > > virtual void populate_popup_form(QWidget *parent, QFormLayout *form); > > > > - void close_popup(); > > - > > private Q_SLOTS: > > void on_text_changed(const QString &text); > > > > diff --git a/pv/widgets/popup.cpp b/pv/widgets/popup.cpp > > index 9bdbd76..141985e 100644 > > --- a/pv/widgets/popup.cpp > > +++ b/pv/widgets/popup.cpp > > @@ -25,6 +25,7 @@ > > #include <QtGui> > > #include <QApplication> > > #include <QDesktopWidget> > > +#include <QLineEdit> > > > > #include "popup.h" > > > > @@ -67,6 +68,45 @@ void Popup::set_position(const QPoint point, Position > > pos) > > > > } > > > > +bool Popup::eventFilter(QObject *obj, QEvent *evt) > > +{ > > + QKeyEvent *keyEvent; > > + > > + (void)obj; > > + > > + if (evt->type() == QEvent::KeyPress) { > > + keyEvent = static_cast<QKeyEvent*>(evt); > > + if (keyEvent->key() == Qt::Key_Enter || > > + keyEvent->key() == Qt::Key_Return) { > > + this->close(); > > + return true; > > + } > > + } > > + > > + return false; > > +} > > + > > +void Popup::show() > > +{ > > + QLineEdit* le; > > + > > + QWidget::show(); > > + > > + // We want to close the popup when the Enter key was > > + // pressed and the first editable widget had focus. > > + if ((le = this->findChild<QLineEdit*>())) { > > + > > + // For combo boxes we need to hook into the parent of > > + // the line edit (i.e. the QComboBox). For edit boxes > > + // we hook into the widget directly. > > + if (le->parent()->metaObject()->className() == > > + this->metaObject()->className()) > > + le->installEventFilter(this); > > + else > > + le->parent()->installEventFilter(this); > > + } > > +} > > + > > bool Popup::space_for_arrow() const > > { > > // Check if there is room for the arrow > > diff --git a/pv/widgets/popup.h b/pv/widgets/popup.h > > index ec12304..2fdb23c 100644 > > --- a/pv/widgets/popup.h > > +++ b/pv/widgets/popup.h > > @@ -52,6 +52,10 @@ public: > > > > void set_position(const QPoint point, Position pos); > > > > + bool eventFilter(QObject *obj, QEvent *evt); > > + > > + void show(); > > + > > private: > > bool space_for_arrow() const; > > > > > > > ------------------------------------------------------------------------------ > Want excitement? > Manually upgrade your production database. > When you want reliability, choose Perforce > Perforce version control. Predictably reliable. > http://pubads.g.doubleclick.net/gampad/clk?id=157508191&iu=/4140/ostg.clktrk > _______________________________________________ > sigrok-devel mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/sigrok-devel ------------------------------------------------------------------------------ Want excitement? Manually upgrade your production database. When you want reliability, choose Perforce Perforce version control. Predictably reliable. http://pubads.g.doubleclick.net/gampad/clk?id=157508191&iu=/4140/ostg.clktrk _______________________________________________ sigrok-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/sigrok-devel

