> Incidentally, _q_returnPressed() looks _fairly_ internal to Qt. > > Would connecting to commandCO->lineEdit() / SIGNAL(returnedPressed()) > be an option? > > Andre' As usual, you're completely right. Didn't yet realize the possibility of connecting two SIGNALs to each other. Thank you for helping me out. A new patch is attached. Vincent
Index: src/frontends/qt4/GuiSendto.cpp =================================================================== --- src/frontends/qt4/GuiSendto.cpp (revision 26289) +++ src/frontends/qt4/GuiSendto.cpp (working copy) @@ -23,6 +23,7 @@ #include "support/qstring_helpers.h" #include "support/filetools.h" +#include <QLineEdit> #include <QListWidget> #include <QPushButton> @@ -38,8 +39,11 @@ { setupUi(this); + QLineEdit const * line_edit = commandCO->lineEdit(); connect(okPB, SIGNAL(clicked()), this, SLOT(slotOK())); + connect(okPB, SIGNAL(clicked()), line_edit, SIGNAL(returnPressed())); connect(applyPB, SIGNAL(clicked()), this, SLOT(slotApply())); + connect(applyPB, SIGNAL(clicked()), line_edit, SIGNAL(returnPressed())); connect(closePB, SIGNAL(clicked()), this, SLOT(slotClose())); connect(formatLW, SIGNAL(itemClicked(QListWidgetItem *)), @@ -48,6 +52,8 @@ this, SLOT(slotFormatSelected(QListWidgetItem *))); connect(formatLW, SIGNAL(itemClicked(QListWidgetItem *)), this, SLOT(changed_adaptor())); + connect(formatLW, SIGNAL(itemSelectionChanged()), + this, SLOT(changed_adaptor())); connect(commandCO, SIGNAL(textChanged(QString)), this, SLOT(changed_adaptor())); @@ -68,6 +74,13 @@ { all_formats_ = allFormats(); + // Save the current selection if any + Format const * current_format = 0; + int const line = formatLW->currentRow(); + if (line >= 0 && line <= formatLW->count() + && formatLW->selectedItems().size() > 0) + current_format = all_formats_[line]; + // Check whether the current contents of the browser will be // changed by loading the contents of formats vector<string> keys; @@ -76,8 +89,14 @@ vector<string>::iterator result = keys.begin(); vector<Format const *>::const_iterator it = all_formats_.begin(); vector<Format const *>::const_iterator end = all_formats_.end(); - for (; it != end; ++it, ++result) + + int current_line = -1; + for (int ln = 0; it != end; ++it, ++result, ++ln) { *result = (*it)->prettyname(); + if (current_format + && (*it)->prettyname() == current_format->prettyname()) + current_line = ln; + } // Reload the browser formatLW->clear(); @@ -87,7 +106,9 @@ formatLW->addItem(qt_(*it)); } - commandCO->addItem(command_); + // Restore the selection + if (current_line > -1) + formatLW->setCurrentItem(formatLW->item(current_line)); } @@ -110,7 +131,8 @@ if (line < 0 || line > int(formatLW->count())) return false; - return formatLW->count() != 0 && + return formatLW->selectedItems().size()>0 && + formatLW->count() != 0 && !commandCO->currentText().isEmpty(); } @@ -119,10 +141,20 @@ { format_ = 0; command_ = toqstr(lyxrc.custom_export_command); + paramsToDialog(format_, command_); return true; } +void GuiSendTo::paramsToDialog(Format const * format, QString const & command) +{ + if (!command.isEmpty()) + commandCO->addItem(command); + + bc().setValid(isValid()); +} + + void GuiSendTo::dispatchParams() { if (command_.isEmpty() || !format_ || format_->name().empty()) Index: src/frontends/qt4/GuiSendto.h =================================================================== --- src/frontends/qt4/GuiSendto.h (revision 26289) +++ src/frontends/qt4/GuiSendto.h (working copy) @@ -51,6 +51,8 @@ /// bool initialiseParams(std::string const & data); /// + void paramsToDialog(Format const * format, QString const & command); + /// void clearParams() {} /// void dispatchParams();