mirror of https://github.com/kivy/kivy.git
uix:DropDown introduce `on_dismiss` event and use it in Spinner. fixes
the issue of having to press the spinner twice to show the dropdown if dismissed by touching outside.
This commit is contained in:
parent
b8eb030727
commit
5730a73f22
|
@ -115,6 +115,11 @@ class DropDown(ScrollView):
|
||||||
Fired when a selection is done, with the data of the selection as
|
Fired when a selection is done, with the data of the selection as
|
||||||
first argument. Data is what you pass in the :meth:`select` method
|
first argument. Data is what you pass in the :meth:`select` method
|
||||||
as first argument.
|
as first argument.
|
||||||
|
`on_dismiss`:
|
||||||
|
.. versionadded:: 1.8.0
|
||||||
|
|
||||||
|
Fired when the DropDown is dismissed either on selection or on
|
||||||
|
touching outside the widget.
|
||||||
'''
|
'''
|
||||||
|
|
||||||
auto_width = BooleanProperty(True)
|
auto_width = BooleanProperty(True)
|
||||||
|
@ -152,7 +157,7 @@ class DropDown(ScrollView):
|
||||||
list, which is a :class:`~kivy.uix.gridlayout.GridLayout` by default.
|
list, which is a :class:`~kivy.uix.gridlayout.GridLayout` by default.
|
||||||
'''
|
'''
|
||||||
|
|
||||||
__events__ = ('on_select', )
|
__events__ = ('on_select', 'on_dismiss')
|
||||||
|
|
||||||
def __init__(self, **kwargs):
|
def __init__(self, **kwargs):
|
||||||
self._win = None
|
self._win = None
|
||||||
|
@ -194,6 +199,10 @@ class DropDown(ScrollView):
|
||||||
if self.attach_to:
|
if self.attach_to:
|
||||||
self.attach_to.unbind(pos=self._reposition, size=self._reposition)
|
self.attach_to.unbind(pos=self._reposition, size=self._reposition)
|
||||||
self.attach_to = None
|
self.attach_to = None
|
||||||
|
self.dispatch('on_dismiss')
|
||||||
|
|
||||||
|
def on_dismiss(self):
|
||||||
|
pass
|
||||||
|
|
||||||
def select(self, data):
|
def select(self, data):
|
||||||
'''Call this method to trigger the `on_select` event, with the `data`
|
'''Call this method to trigger the `on_select` event, with the `data`
|
||||||
|
|
|
@ -104,10 +104,12 @@ class Spinner(Button):
|
||||||
def _build_dropdown(self, *largs):
|
def _build_dropdown(self, *largs):
|
||||||
if self._dropdown:
|
if self._dropdown:
|
||||||
self._dropdown.unbind(on_select=self._on_dropdown_select)
|
self._dropdown.unbind(on_select=self._on_dropdown_select)
|
||||||
|
self._dropdown.unbind(on_dismiss=self._toggle_dropdown)
|
||||||
self._dropdown.dismiss()
|
self._dropdown.dismiss()
|
||||||
self._dropdown = None
|
self._dropdown = None
|
||||||
self._dropdown = self.dropdown_cls()
|
self._dropdown = self.dropdown_cls()
|
||||||
self._dropdown.bind(on_select=self._on_dropdown_select)
|
self._dropdown.bind(on_select=self._on_dropdown_select)
|
||||||
|
self._dropdown.bind(on_dismiss=self._toggle_dropdown)
|
||||||
self._update_dropdown()
|
self._update_dropdown()
|
||||||
|
|
||||||
def _update_dropdown(self, *largs):
|
def _update_dropdown(self, *largs):
|
||||||
|
@ -130,5 +132,6 @@ class Spinner(Button):
|
||||||
if value:
|
if value:
|
||||||
self._dropdown.open(self)
|
self._dropdown.open(self)
|
||||||
else:
|
else:
|
||||||
self._dropdown.dismiss()
|
if self._dropdown.attach_to:
|
||||||
|
self._dropdown.dismiss()
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue