From 007784cfb4856fa1fbe99808d912e8af09a0abcd Mon Sep 17 00:00:00 2001
From: Vadim Lopatin <coolreader.org@gmail.com>
Date: Tue, 12 Jan 2016 13:27:56 +0300
Subject: [PATCH] fix combobox signal handling

---
 src/dlangui/widgets/combobox.d | 14 +++++++++++---
 src/dlangui/widgets/lists.d    |  3 ++-
 2 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/src/dlangui/widgets/combobox.d b/src/dlangui/widgets/combobox.d
index 4a73e2a7..b4143f73 100644
--- a/src/dlangui/widgets/combobox.d
+++ b/src/dlangui/widgets/combobox.d
@@ -128,13 +128,15 @@ class ComboBoxBase : HorizontalLayout, OnClickHandler {
             _popupList = null;
         };
         _popupList.itemSelected = delegate(Widget source, int index) {
-            selectedItemIndex = index;
+            //selectedItemIndex = index;
             return true;
         };
         _popupList.itemClick = delegate(Widget source, int index) {
             selectedItemIndex = index;
-            if (_popup !is null)
+            if (_popup !is null) {
                 _popup.close();
+                _popup = null;
+            }
             return true;
         };
         _popupList.setFocus();
@@ -214,7 +216,8 @@ class ComboBox : ComboBoxBase {
     @property void items(dstring[] items) {
         setAdapter(new StringListAdapter(items));
         if(items.length > 0) {
-           selectedItemIndex = 0;
+            if (selectedItemIndex == -1 || selectedItemIndex > items.length)
+                selectedItemIndex = 0;
         }
         requestLayout();
     }
@@ -276,6 +279,11 @@ class ComboBox : ComboBoxBase {
         return super.selectedItemIndex(index);
     }
 
+    /** Selected item index. */
+    override @property int selectedItemIndex() {
+        return super.selectedItemIndex;
+    }
+
     override void initialize() {
         super.initialize();
         _body.focusable = false;
diff --git a/src/dlangui/widgets/lists.d b/src/dlangui/widgets/lists.d
index 68d85f29..d3142278 100644
--- a/src/dlangui/widgets/lists.d
+++ b/src/dlangui/widgets/lists.d
@@ -1094,6 +1094,7 @@ class ListWidget : WidgetGroup, OnScrollHandler, OnAdapterChangeHandler {
             itemrc.top += rc.top - scrollOffset.y;
             itemrc.bottom += rc.top - scrollOffset.y;
             if (itemrc.isPointInside(Point(event.x, event.y))) {
+                //Log.d("mouse event action=", event.action, " button=", event.button, " flags=", event.flags);
                 if ((event.flags & (MouseFlag.LButton || MouseFlag.RButton)) || _selectOnHover) {
                     if (_selectedItemIndex != i && itemEnabled(i)) {
                         int prevSelection = _selectedItemIndex;
@@ -1105,7 +1106,7 @@ class ListWidget : WidgetGroup, OnScrollHandler, OnAdapterChangeHandler {
                     if (itemEnabled(i))
                         setHoverItem(i);
                 }
-                if (event.button == MouseFlag.LButton || event.button == MouseFlag.RButton) {
+                if (event.button == MouseButton.Left || event.button == MouseButton.Right) {
                     if ((_clickOnButtonDown && event.action == MouseAction.ButtonDown) || (!_clickOnButtonDown && event.action == MouseAction.ButtonUp)) {
                         if (itemEnabled(i)) {
                             itemClicked(i);