Mercurial > dwindows
changeset 2614:dbcd9416e9c9
Android: Popup menus on Andoird use an anchor View not the touch location.
The parent parameter passed probably will not be the ideal anchor. The two
options are to hit test the touch event coordinates of the x/y parameters.
Or, the solution I did in this commit, saving the View of the last click
event and if it is valid, use that View as the anchor. This works well in
the test program but may need to revisit this later.
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Fri, 23 Jul 2021 14:52:32 +0000 |
parents | 72f1141c07aa |
children | ac51cbdcfbe5 |
files | android/DWindows.kt |
diffstat | 1 files changed, 22 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/android/DWindows.kt Sun Jul 18 21:21:49 2021 +0000 +++ b/android/DWindows.kt Fri Jul 23 14:52:32 2021 +0000 @@ -743,6 +743,7 @@ var threadCond = threadLock.newCondition() var notificationID: Int = 0 var darkMode: Int = -1 + var lastClickView: View? = null private var paint = Paint() private var bgcolor: Int = 0 private var menuBar: DWMenu? = null @@ -838,8 +839,15 @@ fun menuPopup(menu: DWMenu, parent: View, x: Int, y: Int) { + var anchor: View? = parent + + // If lastClickView is valid, use that instead of parent + if(lastClickView != null) { + anchor = lastClickView + } + runOnUiThread { - val popup = PopupMenu(this, parent) + val popup = PopupMenu(this, anchor) menu.createMenu(popup.menu) popup.show() @@ -1417,6 +1425,7 @@ button!!.text = text button!!.id = cid button!!.setOnClickListener { + lastClickView = button!! eventHandlerSimple(button!!, 8) } } @@ -1433,6 +1442,7 @@ button!!.id = resid button!!.setImageResource(resid) button!!.setOnClickListener { + lastClickView = button!! eventHandlerSimple(button!!, 8) } } @@ -1449,6 +1459,7 @@ button!!.tag = dataArrayMap button!!.id = cid button!!.setOnClickListener { + lastClickView = button!! eventHandlerSimple(button!!, 8) } @@ -1479,6 +1490,7 @@ button!!.tag = dataArrayMap button!!.id = cid button!!.setOnClickListener { + lastClickView = button!! eventHandlerSimple(button!!, 8) } button!!.setImageBitmap(b) @@ -1521,6 +1533,7 @@ radiobutton!!.id = cid radiobutton!!.text = text radiobutton!!.setOnClickListener { + lastClickView = radiobutton!! eventHandlerSimple(radiobutton!!, 8) } } @@ -1538,6 +1551,7 @@ checkbox!!.id = cid checkbox!!.text = text checkbox!!.setOnClickListener { + lastClickView = checkbox!! eventHandlerSimple(checkbox!!, 8) } } @@ -2153,6 +2167,7 @@ view.isSelected = !view.isSelected adapter.selectedItem = position + lastClickView = cont!! // If we are single select or we got a double tap... // Generate an ENTER event if(cont!!.choiceMode != ListView.CHOICE_MODE_MULTIPLE || @@ -2171,6 +2186,7 @@ val title = adapter.model.getRowTitle(adapter.selectedItem) val data = adapter.model.getRowData(adapter.selectedItem) + lastClickView = cont!! eventHandlerContainer(cont!!, 10, title, 0, 0, data) } true @@ -2179,6 +2195,7 @@ val title = adapter.model.getRowTitle(position) val data = adapter.model.getRowData(position) + lastClickView = cont!! eventHandlerContainer(cont!!, 10, title, 0, 0, data) true } @@ -2902,11 +2919,13 @@ MotionEvent.ACTION_UP -> { render!!.evx = event.x render!!.evy = event.y + lastClickView = render!! eventHandlerInt(render!!, 4, event.x.toInt(), event.y.toInt(), render!!.button, 0) } MotionEvent.ACTION_MOVE -> { render!!.evx = event.x render!!.evy = event.y + lastClickView = render!! eventHandlerInt(render!!, 5, event.x.toInt(), event.y.toInt(), 1, 0) } } @@ -2916,12 +2935,14 @@ render!!.setOnLongClickListener{ // Long click functions as button 2 render!!.button = 2 + lastClickView = render!! eventHandlerInt(render!!, 3, render!!.evx.toInt(), render!!.evy.toInt(), 2, 0) true } render!!.setOnClickListener{ // Normal click functions as button 1 render!!.button = 1 + lastClickView = render!! eventHandlerInt(render!!, 3, render!!.evx.toInt(), render!!.evy.toInt(), 1, 0) } render!!.setOnKeyListener(View.OnKeyListener { v, keyCode, event ->