diff options
Diffstat (limited to 'src/android/jar/src/org/qtproject/qt5/android')
3 files changed, 35 insertions, 21 deletions
diff --git a/src/android/jar/src/org/qtproject/qt5/android/CursorHandle.java b/src/android/jar/src/org/qtproject/qt5/android/CursorHandle.java index 788a5c2b3d..38cc695c37 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/CursorHandle.java +++ b/src/android/jar/src/org/qtproject/qt5/android/CursorHandle.java @@ -166,11 +166,11 @@ public class CursorHandle implements ViewTreeObserver.OnPreDrawListener int y2 = y + location[1] + m_yShift; if (m_id == QtNative.IdCursorHandle) { - x2 -= m_cursorView.getWidth() / 2 ; + x2 -= m_popup.getWidth() / 2 ; } else if ((m_id == QtNative.IdLeftHandle && !m_rtl) || (m_id == QtNative.IdRightHandle && m_rtl)) { - x2 -= m_cursorView.getWidth() * 3 / 4; + x2 -= m_popup.getWidth() * 3 / 4; } else { - x2 -= m_cursorView.getWidth() / 4; + x2 -= m_popup.getWidth() / 4; } if (m_popup.isShowing()) { diff --git a/src/android/jar/src/org/qtproject/qt5/android/EditPopupMenu.java b/src/android/jar/src/org/qtproject/qt5/android/EditPopupMenu.java index d065cd8549..18a8b36273 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/EditPopupMenu.java +++ b/src/android/jar/src/org/qtproject/qt5/android/EditPopupMenu.java @@ -59,7 +59,8 @@ import android.view.ViewGroup; import android.R; // Helper class that manages a cursor or selection handle -public class EditPopupMenu implements ViewTreeObserver.OnPreDrawListener, EditContextView.OnClickListener +public class EditPopupMenu implements ViewTreeObserver.OnPreDrawListener, View.OnLayoutChangeListener, + EditContextView.OnClickListener { private View m_layout = null; private EditContextView m_view = null; @@ -67,10 +68,15 @@ public class EditPopupMenu implements ViewTreeObserver.OnPreDrawListener, EditCo private int m_posX; private int m_posY; private int m_buttons; + private CursorHandle m_cursorHandle; + private CursorHandle m_leftSelectionHandle; + private CursorHandle m_rightSelectionHandle; public EditPopupMenu(Activity activity, View layout) { m_view = new EditContextView(activity, this); + m_view.addOnLayoutChangeListener(this); + m_layout = layout; } @@ -90,13 +96,9 @@ public class EditPopupMenu implements ViewTreeObserver.OnPreDrawListener, EditCo m_layout.getViewTreeObserver().addOnPreDrawListener(this); } - public int getHeight() - { - return m_view.getHeight(); - } - // Show the handle at a given position (or move it if it is already shown) - public void setPosition(final int x, final int y, final int buttons) + public void setPosition(final int x, final int y, final int buttons, + CursorHandle cursorHandle, CursorHandle leftSelectionHandle, CursorHandle rightSelectionHandle) { initOverlay(); @@ -109,6 +111,14 @@ public class EditPopupMenu implements ViewTreeObserver.OnPreDrawListener, EditCo x2 -= m_view.getWidth() / 2 ; + y2 -= m_view.getHeight(); + if (y2 < 0) { + if (cursorHandle != null) + y2 = cursorHandle.bottom(); + else if (leftSelectionHandle != null && rightSelectionHandle != null) + y2 = Math.max(leftSelectionHandle.bottom(), rightSelectionHandle.bottom()); + } + if (m_layout.getWidth() < x + m_view.getWidth() / 2) x2 = m_layout.getWidth() - m_view.getWidth(); @@ -123,6 +133,9 @@ public class EditPopupMenu implements ViewTreeObserver.OnPreDrawListener, EditCo m_posX = x; m_posY = y; m_buttons = buttons; + m_cursorHandle = cursorHandle; + m_leftSelectionHandle = leftSelectionHandle; + m_rightSelectionHandle = rightSelectionHandle; } public void hide() { @@ -138,12 +151,21 @@ public class EditPopupMenu implements ViewTreeObserver.OnPreDrawListener, EditCo // For example if the keyboard appears. // Adjust the position of the handle accordingly if (m_popup != null && m_popup.isShowing()) - setPosition(m_posX, m_posY, m_buttons); + setPosition(m_posX, m_posY, m_buttons, m_cursorHandle, m_leftSelectionHandle, m_rightSelectionHandle); return true; } @Override + public void onLayoutChange(View v, int left, int top, int right, int bottom, + int oldLeft, int oldTop, int oldRight, int oldBottom) + { + if ((right - left != oldRight - oldLeft || bottom - top != oldBottom - oldTop) && + m_popup != null && m_popup.isShowing()) + setPosition(m_posX, m_posY, m_buttons, m_cursorHandle, m_leftSelectionHandle, m_rightSelectionHandle); + } + + @Override public void contextButtonClicked(int buttonId) { switch (buttonId) { case R.string.cut: diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java b/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java index 8fa889fa31..2df2ed9a1d 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java +++ b/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java @@ -552,16 +552,8 @@ public class QtActivityDelegate editButtons &= ~EditContextView.PASTE_BUTTON; if ((mode & CursorHandleShowEdit) == CursorHandleShowEdit && editButtons != 0) { - editY -= m_editPopupMenu.getHeight(); - if (editY < 0) { - if (m_cursorHandle != null) - editY = m_cursorHandle.bottom(); - else if (m_leftSelectionHandle != null && m_rightSelectionHandle != null) - editY = Math.max(m_leftSelectionHandle.bottom(), m_rightSelectionHandle.bottom()); - else - return; - } - m_editPopupMenu.setPosition(editX, editY, editButtons); + m_editPopupMenu.setPosition(editX, editY, editButtons, m_cursorHandle, m_leftSelectionHandle, + m_rightSelectionHandle); } else { if (m_editPopupMenu != null) m_editPopupMenu.hide(); |