# HG changeset patch # User bsmith@81767d24-ef19-dc11-ae90-00e081727c95 # Date 1658309433 0 # Node ID d7b6e19e44d2cd4891fa205be6d8448361d4fda4 # Parent ebe139dc16dd521dae0270244abebc5462c1353a Android: Add support for menu item handles in dw_window_set_style(). Also implement auto toggling of menu item checks. Only invalidate the menu after it is changed. diff -r ebe139dc16dd -r d7b6e19e44d2 android/DWindows.kt --- a/android/DWindows.kt Tue Jul 19 16:57:39 2022 +0000 +++ b/android/DWindows.kt Wed Jul 20 09:30:33 2022 +0000 @@ -2050,6 +2050,11 @@ menuitem.menuitem!!.isChecked = menuitem.checked menuitem.menuitem!!.isEnabled = menuitem.enabled menuitem.menuitem!!.setOnMenuItemClickListener { item: MenuItem? -> + // Toggle the check automatically + if(menuitem.menuitem!!.isCheckable) { + menuitem.menuitem!!.isChecked = !menuitem.menuitem!!.isChecked + menuitem.checked = menuitem.menuitem!!.isChecked + } eventHandlerSimple(menuitem, DWEvent.CLICKED) true } @@ -2773,6 +2778,7 @@ { for(menuitem in menu.children) { if(menuitem.id == cid) { + var changed: Boolean = false // Handle DW_MIS_ENABLED/DISABLED if((state and (1 or (1 shl 1))) != 0) { var enabled = false @@ -2782,11 +2788,9 @@ enabled = true } menuitem.enabled = enabled - if(menuitem.menuitem != null) { - runOnUiThread { - menuitem.menuitem!!.isEnabled = enabled - invalidateOptionsMenu() - } + if (menuitem.menuitem != null && menuitem.menuitem!!.isEnabled != enabled) { + menuitem.menuitem!!.isEnabled = enabled + changed = true } } @@ -2799,9 +2803,12 @@ checked = true } menuitem.checked = checked - if(menuitem.menuitem != null) { + if (menuitem.menuitem != null && menuitem.menuitem!!.isChecked != checked) { + menuitem.menuitem!!.isChecked = checked + changed = true + } + if(changed == true) { runOnUiThread { - menuitem.menuitem!!.isChecked = checked invalidateOptionsMenu() } } @@ -2891,6 +2898,46 @@ button.background = null } // TODO: Handle turning border back on if possible } + } else if(window is DWMenuItem) { + var menuitem = window as DWMenuItem + var changed: Boolean = false + + // Handle DW_MIS_ENABLED/DISABLED + if((mask and (1 or (1 shl 1))) != 0) { + var enabled = false + + // Handle DW_MIS_ENABLED = 1 or DW_MIS_DISABLED = 0 + if (((mask and 1) != 0 && (style and 1) != 0) || + ((mask and (1 shl 1) != 0 && (style and (1 shl 1) == 0)))) { + enabled = true + } + menuitem.enabled = enabled + if(menuitem.menuitem != null && menuitem.menuitem!!.isEnabled != enabled) { + menuitem.menuitem!!.isEnabled = enabled + changed = true + } + } + + // Handle DW_MIS_CHECKED/UNCHECKED + if((mask and ((1 shl 2) or (1 shl 3))) != 0) { + var checked = false + + // Handle DW_MIS_CHECKED = 1 or DW_MIS_UNCHECKED = 0 + if (((mask and (1 shl 2)) != 0 && (style and (1 shl 2)) != 0) || + ((mask and (1 shl 3) != 0 && (style and (1 shl 3) == 0)))) { + checked = true + } + menuitem.checked = checked + if (menuitem.menuitem != null && menuitem.menuitem!!.isChecked != checked) { + menuitem.menuitem!!.isChecked = checked + changed = true + } + } + if(changed == true) { + runOnUiThread { + invalidateOptionsMenu() + } + } } } }