Problems when adding a combo box to a toolbar and KActionCollection in KF6
Stefano Crocco
stefano.crocco at alice.it
Sun Oct 29 17:38:50 GMT 2023
Hello to everyone,
while porting Konqueror to KF6, I've hit a problem I don't know how to solve.
The issue is that it's impossible to give focus to the location bar by
clicking on it with the mouse as you can do in KF5.
After spending some hours trying to find out the cause of this, I reached the
conclusion that it has something to do with the main window's
actionCollection. A shortened version of the code which creates the location
bar is the following:
KonqMainWindow::KonqMainWindow() : KParts::MainWindow()
{
//...
m_combo = new KonqCombo(nullptr) //KonqCombo derives from KHistoryComboBox
//...
QWidgetAction *comboAction = new QWidgetAction(this);
actionCollection()->addAction(QStringLiteral("toolbar_url_combo"),
comboAction);
comboAction->setDefaultWidget(m_combo);
//...
setXMLFile(QStringLiteral("konqueror.rc"));
createGUI(nullptr);
//"locationToolBar" is the name of the toolbar where the widget should be
//inserted
m_combo->setParent(toolBar(QStringLiteral("locationToolBar")));
m_combo->show();
//...
}
If I remove the addAction method, the location bar is, of course, displayed
floating above the toolbar and it can be given focus clicking on it with the
mouse. The same happens if I remove the setDefaultWidget line. I tried adding
the action to the toolbar using
QAction *a = toolBar(QStringLiteral("locationToolBar"))->addWidget(m_combo);
actionCollection()->addAction(QStringLiteral("toolbar_url_combo"), a);
This gives the same problem as the previous code; however, if I remove the
second line, the focus works correctly again. This is what made me suppose the
problem is related to KActionCollection.
Initially, I thought that the problem was caused by some event filter or event
handler, so I tried creating a different action with new QComboBox, new action
name and so on, but the results were the same. Also, using a QLineEdit instead
of a QComboBox changed nothing.
I tried looking at the source code of KActionCollection, but I couldn't find
any significant difference between the KF5 and the KF6 version. The same can be
said for Konqueror source code, however.
Can someone give me some hints about what's happening?
Thanks in advance
Stefano
More information about the kde-devel
mailing list