Android: Fix crash when selecting text on a TextField

The crash is due to absence of the helper class that manages the
selection in QtInputDelegate.
As a fix, updateInputDelegate() is introduced when setView(), where the
instantiation and clearance of EditPopupMenu is made. On the other hand,
the nullity of EditPopupMenu in QTEmbeddedDelegate is handled.

Fixes: QTBUG-122740
Change-Id: Iac5cded7be7530dde8c739265fc9402670714d39
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
(cherry picked from commit a87764789feaa0575b9f4f0957bb7ec3e3b9a4d1)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Ahmed El Khazari 2024-04-17 13:21:54 +03:00 committed by Qt Cherry-pick Bot
parent 5f7324b20e
commit d77e099200
2 changed files with 16 additions and 5 deletions

View File

@ -143,10 +143,20 @@ class QtEmbeddedDelegate extends QtActivityDelegateBase implements QtNative.AppS
void setView(QtView view) {
m_view = view;
updateInputDelegate();
if (m_view != null)
registerGlobalFocusChangeListener(m_view);
}
private void updateInputDelegate() {
if (m_view == null) {
m_inputDelegate.setEditPopupMenu(null);
return;
}
m_inputDelegate.setEditPopupMenu(new EditPopupMenu(m_activity, m_view));
}
public void setRootWindowRef(long ref) {
m_rootWindowRef = ref;
}

View File

@ -405,14 +405,15 @@ public class QtInputDelegate implements QtInputConnection.QtInputConnectionListe
if (!QtClipboardManager.hasClipboardText(activity))
editButtons &= ~EditContextView.PASTE_BUTTON;
if (m_editPopupMenu != null) {
if ((mode & CursorHandleShowEdit) == CursorHandleShowEdit && editButtons != 0) {
m_editPopupMenu.setPosition(editX, editY, editButtons,
m_cursorHandle, m_leftSelectionHandle, m_rightSelectionHandle);
} else {
if (m_editPopupMenu != null)
m_editPopupMenu.hide();
}
}
}
public boolean onKeyDown(int keyCode, KeyEvent event)
{