kuuko pushed a commit to branch master.

http://git.enlightenment.org/bindings/python/python-efl.git/commit/?id=6299a6c8ae824d4d99e2dad3a937e82d50414763

commit 6299a6c8ae824d4d99e2dad3a937e82d50414763
Author: Kai Huuhko <kai.huu...@gmail.com>
Date:   Tue Oct 8 09:08:37 2013 +0300

    Elementary: Make inheriting from scrollable a responsibility for the user.
---
 efl/elementary/diskselector.pyx     |  56 +++------
 efl/elementary/entry.pyx            |  58 +++------
 efl/elementary/gengrid.pyx          | 230 +++---------------------------------
 efl/elementary/genlist.pyx          |  20 +++-
 efl/elementary/genlist_item.pxi     |  10 +-
 efl/elementary/genlist_widget.pxi   |   2 +-
 efl/elementary/list.pyx             |  71 ++---------
 efl/elementary/photocam.pyx         |  22 ----
 efl/elementary/scroller.pxd         |  47 +-------
 efl/elementary/scroller.pyx         |  75 +++++++++---
 examples/elementary/test_conform.py |  24 ++--
 examples/elementary/test_entry.py   |  41 +++----
 examples/elementary/test_gengrid.py |   7 +-
 13 files changed, 176 insertions(+), 487 deletions(-)

diff --git a/efl/elementary/diskselector.pyx b/efl/elementary/diskselector.pyx
index 9537d0f..ed06a46 100644
--- a/efl/elementary/diskselector.pyx
+++ b/efl/elementary/diskselector.pyx
@@ -55,6 +55,20 @@ Default text parts of the diskselector items that you can 
use for are:
 .. note:: The "scroll,anim,*" and "scroll,drag,*" signals are only emitted
     by user intervention.
 
+Scollable Interface
+===================
+
+This widget supports the scrollable interface.
+
+If you wish to control the scolling behaviour using these functions,
+inherit both the widget class and the
+:py:class:`Scrollable<efl.elementary.scroller.Scrollable>` class
+using multiple inheritance, for example::
+
+    class ScrollableGenlist(Genlist, Scrollable):
+        def __init__(self, canvas, *args, **kwargs):
+            Genlist.__init__(self, canvas)
+
 """
 
 
@@ -99,7 +113,6 @@ cdef extern from "Elementary.h":
 
 from object_item cimport ObjectItem, _object_item_callback, \
     _object_item_to_python, _object_item_list_to_python
-from scroller cimport *
 
 cdef class DiskselectorItem(ObjectItem):
 
@@ -329,47 +342,6 @@ cdef class Diskselector(Object):
         def __get__(self):
             return elm_diskselector_display_item_num_get(self.obj)
 
-    property bounce:
-        """Bouncing behaviour when the scrolled content reaches an edge.
-
-        Tell the internal scroller object whether it should bounce or not
-        when it reaches the respective edges for each axis.
-
-        .. seealso:: :py:attr:`elementary.scroller.Scroller.bounce`
-
-        :type: (bool h_bounce, bool v_bounce)
-
-        """
-        def __set__(self, bounce):
-            h_bounce, v_bounce = bounce
-            elm_scroller_bounce_set(self.obj, h_bounce, v_bounce)
-        def __get__(self):
-            cdef Eina_Bool h_bounce, v_bounce
-            elm_scroller_bounce_get(self.obj, &h_bounce, &v_bounce)
-            return (h_bounce, v_bounce)
-
-    property scroller_policy:
-        """The scrollbar policy.
-
-        This sets the scrollbar visibility policy for the given scroller.
-        ELM_SCROLLER_POLICY_AUTO means the scrollbar is made visible if it
-        is needed, and otherwise kept hidden. ELM_SCROLLER_POLICY_ON turns
-        it on all the time, and ELM_SCROLLER_POLICY_OFF always keeps it off.
-        This applies respectively for the horizontal and vertical scrollbars.
-
-        Both are disabled by default, i.e., are set to ELM_SCROLLER_POLICY_OFF.
-
-        :type: tuple of Elm_Scroller_Policy
-
-        """
-        def __get__(self):
-            cdef Elm_Scroller_Policy h_policy, v_policy
-            elm_scroller_policy_get(self.obj, &h_policy, &v_policy)
-            return (h_policy, v_policy)
-        def __set__(self, policy):
-            h_policy, v_policy = policy
-            elm_scroller_policy_set(self.obj, h_policy, v_policy)
-
     def clear(self):
         """clear()
 
diff --git a/efl/elementary/entry.pyx b/efl/elementary/entry.pyx
index f342d85..056a0a5 100644
--- a/efl/elementary/entry.pyx
+++ b/efl/elementary/entry.pyx
@@ -39,6 +39,20 @@ Other features include password mode, filtering of inserted 
text with
 :py:func:`markup_filter_append()` and related functions, inline "items" and
 formatted markup text.
 
+Scollable Interface
+===================
+
+This widget supports the scrollable interface.
+
+If you wish to control the scolling behaviour using these functions,
+inherit both the widget class and the
+:py:class:`Scrollable<efl.elementary.scroller.Scrollable>` class
+using multiple inheritance, for example::
+
+    class ScrollableGenlist(Genlist, Scrollable):
+        def __init__(self, canvas, *args, **kwargs):
+            Genlist.__init__(self, canvas)
+
 Formatted text
 ==============
 
@@ -632,7 +646,6 @@ cdef extern from "Elementary.h":
     Eina_Bool               elm_cnp_selection_get(Evas_Object *obj, 
Elm_Sel_Type selection, Elm_Sel_Format format, Elm_Drop_Cb datacb, void *udata)
 
 from hover cimport Hover
-from scroller cimport *
 
 cimport enums
 
@@ -1663,49 +1676,6 @@ cdef class Entry(Object):
     cpdef end_visible_set(self, setting):
         elm_entry_end_visible_set(self.obj, setting)
 
-    property scrollbar_policy:
-        """This sets the entry's scrollbar policy (i.e. enabling/disabling
-        them).
-
-        Setting an entry to single-line mode with :py:attr:`single_line`
-        will automatically disable the display of scrollbars when the entry
-        moves inside its scroller.
-
-        :type: (:ref:`Elm_Scroller_Policy` **h**, :ref:`Elm_Scroller_Policy` 
**v**)
-
-        """
-        def __set__(self, value):
-            cdef Elm_Scroller_Policy h, v
-            h, v = value
-            elm_scroller_policy_set(self.obj, h, v)
-
-    def scrollbar_policy_set(self, Elm_Scroller_Policy h, Elm_Scroller_Policy 
v):
-        elm_scroller_policy_set(self.obj, h, v)
-
-    property bounce:
-        """Whether the entry will bounce when scrolling reaches
-        the end of the contained entry.
-
-        :type: (bool **h_bounce**, bool **v_bounce**)
-
-        """
-        def __get__(self):
-            cdef Eina_Bool h_bounce, v_bounce
-            elm_scroller_bounce_get(self.obj, &h_bounce, &v_bounce)
-            return (h_bounce, v_bounce)
-
-        def __set__(self, value):
-            cdef Eina_Bool h_bounce, v_bounce
-            h_bounce, v_bounce = value
-            elm_scroller_bounce_set(self.obj, h_bounce, v_bounce)
-
-    def bounce_set(self, h_bounce, v_bounce):
-        elm_scroller_bounce_set(self.obj, h_bounce, v_bounce)
-    def bounce_get(self):
-        cdef Eina_Bool h_bounce, v_bounce
-        elm_scroller_bounce_get(self.obj, &h_bounce, &v_bounce)
-        return (h_bounce, v_bounce)
-
     property input_panel_layout:
         """The input panel layout of the entry
 
diff --git a/efl/elementary/gengrid.pyx b/efl/elementary/gengrid.pyx
index e645fdd..d64e1d0 100644
--- a/efl/elementary/gengrid.pyx
+++ b/efl/elementary/gengrid.pyx
@@ -33,6 +33,20 @@ clicking on items to select them and clicking on the grid's 
viewport and
 swiping to pan the whole view) or via the keyboard, navigating through
 item with the arrow keys.
 
+Scollable Interface
+===================
+
+This widget supports the scrollable interface.
+
+If you wish to control the scolling behaviour using these functions,
+inherit both the widget class and the
+:py:class:`Scrollable<efl.elementary.scroller.Scrollable>` class
+using multiple inheritance, for example::
+
+    class ScrollableGenlist(Genlist, Scrollable):
+        def __init__(self, canvas, *args, **kwargs):
+            Genlist.__init__(self, canvas)
+
 Gengrid layouts
 ===============
 
@@ -380,7 +394,6 @@ cdef extern from "Elementary.h":
 from object_item cimport ObjectItem, _object_item_to_python, \
     elm_object_item_widget_get, _object_item_from_python, \
     _object_item_list_to_python, elm_object_item_data_get
-from scroller cimport *
 cimport enums
 
 import traceback
@@ -1210,31 +1223,6 @@ cdef class Gengrid(Object):
     def horizontal_get(self):
         return bool(elm_gengrid_horizontal_get(self.obj))
 
-    property bounce:
-        """The bouncing effect occurs whenever one reaches the gengrid's
-        edge's while panning it -- it will scroll past its limits a
-        little bit and return to the edge again, in a animated for,
-        automatically.
-
-        .. note:: By default, gengrids have bouncing enabled on both axis
-
-        """
-        def __get__(self):
-            cdef Eina_Bool h_bounce, v_bounce
-            elm_scroller_bounce_get(self.obj, &h_bounce, &v_bounce)
-            return (h_bounce, v_bounce)
-
-        def __set__(self, value):
-            h_bounce, v_bounce = value
-            elm_scroller_bounce_set(self.obj, bool(h_bounce), bool(v_bounce))
-
-    def bounce_set(self, h_bounce, v_bounce):
-        elm_scroller_bounce_set(self.obj, bool(h_bounce), bool(v_bounce))
-    def bounce_get(self):
-        cdef Eina_Bool h_bounce, v_bounce
-        elm_scroller_bounce_get(self.obj, &h_bounce, &v_bounce)
-        return (h_bounce, v_bounce)
-
     def item_append(self, GengridItemClass item_class not None,
                     item_data, func=None):
         """item_append(self, GengridItemClass item_class, item_data, 
func=None) -> GengridItem
@@ -1430,34 +1418,6 @@ cdef class Gengrid(Object):
     def last_item_get(self):
         return _object_item_to_python(elm_gengrid_last_item_get(self.obj))
 
-    property scroller_policy:
-        """This sets the scrollbar visibility policy for the given gengrid
-        scroller. #ELM_SCROLLER_POLICY_AUTO means the scrollbar is made
-        visible if it is needed, and otherwise kept hidden.
-        #ELM_SCROLLER_POLICY_ON turns it on all the time, and
-        #ELM_SCROLLER_POLICY_OFF always keeps it off. This applies
-        respectively for the horizontal and vertical scrollbars. Default is
-        #ELM_SCROLLER_POLICY_AUTO
-
-        :type: Elm_Scroller_Policy
-
-        """
-        def __get__(self):
-            cdef Elm_Scroller_Policy policy_h, policy_v
-            elm_scroller_policy_get(self.obj, &policy_h, &policy_v)
-            return (policy_h, policy_v)
-
-        def __set__(self, value):
-            policy_h, policy_v = value
-            elm_scroller_policy_set(self.obj, policy_h, policy_v)
-
-    def scroller_policy_set(self, policy_h, policy_v):
-        elm_scroller_policy_set(self.obj, policy_h, policy_v)
-    def scroller_policy_get(self):
-        cdef Elm_Scroller_Policy policy_h, policy_v
-        elm_scroller_policy_get(self.obj, &policy_h, &policy_v)
-        return (policy_h, policy_v)
-
     property items_count:
         """Return how many items are currently in a list.
 
@@ -1569,168 +1529,6 @@ cdef class Gengrid(Object):
     def reorder_mode_get(self, mode):
         return bool(elm_gengrid_reorder_mode_get(self.obj))
 
-    property page_relative:
-        """The gengrid's scroller is capable of binding scrolling by the
-        user to "pages". It means that, while scrolling and, specially
-        after releasing the mouse button, the grid will **snap** to the
-        nearest displaying page's area. When page sizes are set, the
-        grid's continuous content area is split into (equal) page sized
-        pieces.
-
-        This function sets the size of a page **relatively to the viewport
-        dimensions** of the gengrid, for each axis. A value ``1.0`` means
-        "the exact viewport's size", in that axis, while ``0.0`` turns
-        paging off in that axis. Likewise, ``0.5`` means "half a viewport".
-        Sane usable values are, than, between ``0.0`` and ``1.0``. Values
-        beyond those will make it behave behave inconsistently. If you only
-        want one axis to snap to pages, use the value ``0.0`` for the other
-        one.
-
-        There is a function setting page size values in **absolute** values,
-        too -- elm_gengrid_page_size_set(). Naturally, its use is mutually
-        exclusive to this one.
-
-        :type: tuple of floats
-
-        """
-        def __get__(self):
-            cdef double h_pagerel, v_pagerel
-            elm_scroller_page_relative_get(self.obj, &h_pagerel, &v_pagerel)
-            return (h_pagerel, v_pagerel)
-
-        def __set__(self, value):
-            h_pagerel, v_pagerel = value
-            elm_scroller_page_relative_set(self.obj, h_pagerel, v_pagerel)
-
-    def page_relative_set(self, h_pagerel, v_pagerel):
-        elm_scroller_page_relative_set(self.obj, h_pagerel, v_pagerel)
-    def page_relative_get(self):
-        cdef double h_pagerel, v_pagerel
-        elm_scroller_page_relative_get(self.obj, &h_pagerel, &v_pagerel)
-        return (h_pagerel, v_pagerel)
-
-    property page_size:
-        """The gengrid's scroller is capable of binding scrolling by the
-        user to "pages". It means that, while scrolling and, specially
-        after releasing the mouse button, the grid will **snap** to the
-        nearest displaying page's area. When page sizes are set, the
-        grid's continuous content area is split into (equal) page sized
-        pieces.
-
-        This function sets the size of a page of the gengrid, in pixels,
-        for each axis. Sane usable values are, between ``0`` and the
-        dimensions of ``obj``, for each axis. Values beyond those will
-        make it behave behave inconsistently. If you only want one axis
-        to snap to pages, use the value ``0`` for the other one.
-
-        There is a function setting page size values in **relative**
-        values, too -- elm_gengrid_page_relative_set(). Naturally, its
-        use is mutually exclusive to this one.
-
-        """
-        def __set__(self, value):
-            h_pagesize, v_pagesize = value
-            elm_scroller_page_size_set(self.obj, h_pagesize, v_pagesize)
-
-    def page_size_set(self, h_pagesize, v_pagesize):
-        elm_scroller_page_size_set(self.obj, h_pagesize, v_pagesize)
-
-    property current_page:
-        """The page number starts from 0. 0 is the first page.
-        Current page means the page which meet the top-left of the viewport.
-        If there are two or more pages in the viewport, it returns the
-        number of page which meet the top-left of the viewport.
-
-        .. seealso::
-            :py:attr:`last_page`
-            :py:func:`page_show()`
-            :py:func:`page_bring_in()`
-
-        :type: tuple of ints
-
-        """
-        def __get__(self):
-            cdef int h_pagenum, v_pagenum
-            elm_scroller_current_page_get(self.obj, &h_pagenum, &v_pagenum)
-            return (h_pagenum, v_pagenum)
-
-    def current_page_get(self):
-        cdef int h_pagenum, v_pagenum
-        elm_scroller_current_page_get(self.obj, &h_pagenum, &v_pagenum)
-        return (h_pagenum, v_pagenum)
-
-    property last_page:
-        """The page number starts from 0. 0 is the first page.
-        This returns the last page number among the pages.
-
-        .. seealso::
-            :py:attr:`current_page`
-            :py:func:`page_show()`
-            :py:func:`page_bring_in()`
-
-        :type: tuple of ints
-
-        """
-        def __get__(self):
-            cdef int h_pagenum, v_pagenum
-            elm_scroller_last_page_get(self.obj, &h_pagenum, &v_pagenum)
-            return (h_pagenum, v_pagenum)
-
-    def last_page_get(self):
-        cdef int h_pagenum, v_pagenum
-        elm_scroller_last_page_get(self.obj, &h_pagenum, &v_pagenum)
-        return (h_pagenum, v_pagenum)
-
-    def page_show(self, h_pagenum, v_pagenum):
-        """page_show(int h_pagenum, int v_pagenum)
-
-        Show a specific virtual region within the gengrid content object
-        by page number.
-
-        :param h_pagenumber: The horizontal page number
-        :param v_pagenumber: The vertical page number
-
-        0, 0 of the indicated page is located at the top-left of the viewport.
-        This will jump to the page directly without animation.
-
-        Example of usage::
-
-            sc = Gengrid(win)
-            sc.content = content
-            sc.page_relative = (1, 0)
-            h_page, v_page = sc.current_page
-            sc.page_show(h_page + 1, v_page)
-
-        .. seealso:: :py:func:`page_bring_in()`
-
-        """
-        elm_scroller_page_show(self.obj, h_pagenum, v_pagenum)
-
-    def page_bring_in(self, h_pagenum, v_pagenum):
-        """page_show(int h_pagenum, int v_pagenum)
-
-        Show a specific virtual region within the gengrid content object
-        by page number.
-
-        :param h_pagenumber: The horizontal page number
-        :param v_pagenumber: The vertical page number
-
-        0, 0 of the indicated page is located at the top-left of the viewport.
-        This will slide to the page with animation.
-
-        Example of usage::
-
-            sc = Gengrid(win)
-            sc.content = content
-            sc.page_relative = (1, 0)
-            h_page, v_page = sc.current_page
-            sc.page_bring_in(h_page + 1, v_page)
-
-        .. seealso:: :py:func:`page_show()`
-
-        """
-        elm_scroller_page_bring_in(self.obj, h_pagenum, v_pagenum)
-
     property filled:
         """The fill state of the whole grid of items of a gengrid
         within its given viewport. By default, this value is False, meaning
diff --git a/efl/elementary/genlist.pyx b/efl/elementary/genlist.pyx
index 7c67f10..1b4ebb0 100644
--- a/efl/elementary/genlist.pyx
+++ b/efl/elementary/genlist.pyx
@@ -221,6 +221,20 @@ per application with elm_theme_extension_add(). If you 
absolutely must
 have a specific style that overrides any theme the user or system sets up
 you can use elm_theme_overlay_add() to add such a file.
 
+Scollable Interface
+===================
+
+This widget supports the scrollable interface.
+
+If you wish to control the scolling behaviour using these functions,
+inherit both the widget class and the
+:py:class:`Scrollable<efl.elementary.scroller.Scrollable>` class
+using multiple inheritance, for example::
+
+    class ScrollableGenlist(Genlist, Scrollable):
+        def __init__(self, canvas, *args, **kwargs):
+            Genlist.__init__(self, canvas)
+
 Implementation
 ==============
 
@@ -810,7 +824,7 @@ cdef class GenlistIterator(object):
         Elm_Object_Item *current_item
         GenlistItem ret
 
-    def __cinit__(self, GenlistWidget gl):
+    def __cinit__(self, Genlist gl):
         self.current_item = elm_genlist_first_item_get(gl.obj)
 
     def __next__(self):
@@ -835,7 +849,7 @@ include "genlist_item_class.pxi"
 include "genlist_item.pxi"
 include "genlist_widget.pxi"
 
-class Genlist(GenlistWidget, ScrollableInterface):
-    pass
+#class Genlist(GenlistWidget, ScrollableInterface):
+    #pass
 
 _object_mapping_register("elm_genlist", Genlist)
diff --git a/efl/elementary/genlist_item.pxi b/efl/elementary/genlist_item.pxi
index 59d9a9b..f0e2d35 100644
--- a/efl/elementary/genlist_item.pxi
+++ b/efl/elementary/genlist_item.pxi
@@ -91,7 +91,7 @@ cdef class GenlistItem(ObjectItem):
                 self.cb_func,
                 self.item_data)
 
-    def append_to(self, GenlistWidget genlist not None):
+    def append_to(self, Genlist genlist not None):
         """append_to(Genlist genlist) -> GenlistItem
 
         Append a new item (add as last row) to this genlist.
@@ -121,7 +121,7 @@ cdef class GenlistItem(ObjectItem):
             Py_DECREF(self)
             return None
 
-    def prepend_to(self, GenlistWidget genlist not None):
+    def prepend_to(self, Genlist genlist not None):
         """prepend_to(Genlist genlist) -> GenlistItem
 
         Prepend a new item (add as first row) to this Genlist.
@@ -164,7 +164,7 @@ cdef class GenlistItem(ObjectItem):
         """
         cdef:
             Elm_Object_Item *item, *before
-            GenlistWidget genlist = before_item.widget
+            Genlist genlist = before_item.widget
             Evas_Smart_Cb cb = NULL
 
         if self.cb_func is not None:
@@ -198,7 +198,7 @@ cdef class GenlistItem(ObjectItem):
         """
         cdef:
             Elm_Object_Item *item, *after
-            GenlistWidget genlist = after_item.widget
+            Genlist genlist = after_item.widget
             Evas_Smart_Cb cb = NULL
 
         if self.cb_func is not None:
@@ -219,7 +219,7 @@ cdef class GenlistItem(ObjectItem):
             Py_DECREF(self)
             return None
 
-    def sorted_insert(self, GenlistWidget genlist not None, comparison_func):
+    def sorted_insert(self, Genlist genlist not None, comparison_func):
         """sorted_insert(Genlist genlist, comparison_func) -> GenlistItem
 
         Insert a new item into the sorted genlist object
diff --git a/efl/elementary/genlist_widget.pxi 
b/efl/elementary/genlist_widget.pxi
index 9be8221..e794d31 100644
--- a/efl/elementary/genlist_widget.pxi
+++ b/efl/elementary/genlist_widget.pxi
@@ -1,4 +1,4 @@
-cdef class GenlistWidget(Object):
+cdef class Genlist(Object):
 
     """This is the class that actually implements the widget."""
 
diff --git a/efl/elementary/list.pyx b/efl/elementary/list.pyx
index 9fbffe4..c47ee7b 100644
--- a/efl/elementary/list.pyx
+++ b/efl/elementary/list.pyx
@@ -70,6 +70,19 @@ Default text parts of the list items that you can use for 
are:
 
 - "default" - label in the list item
 
+Scollable Interface
+===================
+
+This widget supports the scrollable interface.
+
+If you wish to control the scolling behaviour using these functions,
+inherit both the widget class and the
+:py:class:`Scrollable<efl.elementary.scroller.Scrollable>` class
+using multiple inheritance, for example::
+
+    class ScrollableGenlist(Genlist, Scrollable):
+        def __init__(self, canvas, *args, **kwargs):
+            Genlist.__init__(self, canvas)
 
 Enumerations
 ------------
@@ -223,7 +236,6 @@ from object cimport Object
 from object_item cimport    _object_item_callback, \
                             _object_item_to_python, \
                             _object_item_list_to_python
-from scroller cimport *
 
 cimport enums
 
@@ -746,63 +758,6 @@ cdef class List(Object):
     def select_mode_get(self):
         return elm_list_select_mode_get(self.obj)
 
-    property bounce:
-        """The bouncing behaviour when the scrolled content reaches an edge.
-
-        Whether the internal scroller object should bounce or not when it
-        reaches the respective edges for each axis.
-
-        :type: (bool **h**, bool **v**)
-
-        """
-        def __set__(self, value):
-            h, v = value
-            elm_scroller_bounce_set(self.obj, h, v)
-
-        def __get__(self):
-            cdef Eina_Bool h, v
-            elm_scroller_bounce_get(self.obj, &h, &v)
-            return (h, v)
-
-    def bounce_set(self, h, v):
-        elm_scroller_bounce_set(self.obj, h, v)
-    def bounce_get(self):
-        cdef Eina_Bool h, v
-        elm_scroller_bounce_get(self.obj, &h, &v)
-        return (h, v)
-
-    property scroller_policy:
-        """The scrollbar policy.
-
-        This sets the scrollbar visibility policy for the given scroller.
-        ELM_SCROLLER_POLICY_AUTO means the scrollbar is made visible if it
-        is needed, and otherwise kept hidden. ELM_SCROLLER_POLICY_ON turns
-        it on all the time, and ELM_SCROLLER_POLICY_OFF always keeps it off.
-        This applies respectively for the horizontal and vertical scrollbars.
-
-        The both are disabled by default, i.e., are set to
-        ELM_SCROLLER_POLICY_OFF.
-
-        :type: :ref:`Scrolling policy <Elm_Scroller_Policy>`
-
-        """
-        def __set__(self, value):
-            policy_h, policy_v = value
-            elm_scroller_policy_set(self.obj, policy_h, policy_v)
-
-        def __get__(self):
-            cdef Elm_Scroller_Policy policy_h, policy_v
-            elm_scroller_policy_get(self.obj, &policy_h, &policy_v)
-            return (policy_h, policy_v)
-
-    def scroller_policy_set(self, policy_h, policy_v):
-        elm_scroller_policy_set(self.obj, policy_h, policy_v)
-    def scroller_policy_get(self):
-        cdef Elm_Scroller_Policy policy_h, policy_v
-        elm_scroller_policy_get(self.obj, &policy_h, &policy_v)
-        return (policy_h, policy_v)
-
-
     def item_append(self, label, evasObject icon = None,
                     evasObject end = None, callback = None, *args, **kargs):
         return ListItem(label, icon, end, callback, *args, 
**kargs).append_to(self)
diff --git a/efl/elementary/photocam.pyx b/efl/elementary/photocam.pyx
index 7da71c5..1c52ad8 100644
--- a/efl/elementary/photocam.pyx
+++ b/efl/elementary/photocam.pyx
@@ -126,7 +126,6 @@ cdef extern from "Elementary.h":
     Eina_Bool                elm_photocam_gesture_enabled_get(Evas_Object *obj)
 
 from efl.evas cimport Image as evasImage
-from scroller cimport *
 
 cimport enums
 
@@ -381,27 +380,6 @@ cdef class Photocam(Object):
     def internal_image_get(self):
         return self.internal_image
 
-    property bounce:
-        """Photocam scrolling bouncing.
-
-        :type: tuple of bools
-
-        """
-        def __set__(self, value):
-            h_bounce, v_bounce = value
-            elm_scroller_bounce_set(self.obj, h_bounce, v_bounce)
-        def __get__(self):
-            cdef Eina_Bool h_bounce, v_bounce
-            elm_scroller_bounce_get(self.obj, &h_bounce, &v_bounce)
-            return (h_bounce, v_bounce)
-
-    def bounce_set(self, h_bounce, v_bounce):
-        elm_scroller_bounce_set(self.obj, h_bounce, v_bounce)
-    def bounce_get(self):
-        cdef Eina_Bool h_bounce, v_bounce
-        elm_scroller_bounce_get(self.obj, &h_bounce, &v_bounce)
-        return (h_bounce, v_bounce)
-
     property gesture_enabled:
         """Set the gesture state for photocam.
 
diff --git a/efl/elementary/scroller.pxd b/efl/elementary/scroller.pxd
index 4d6a8a9..a108bd0 100644
--- a/efl/elementary/scroller.pxd
+++ b/efl/elementary/scroller.pxd
@@ -1,47 +1,4 @@
-from efl.evas cimport Eina_Bool, Evas_Object, Evas_Coord, const_Evas_Object
-from enums cimport Elm_Scroller_Policy, Elm_Scroller_Single_Direction, \
-    Elm_Scroller_Movement_Block
-from libc.string cimport const_char
-from cpython cimport PyUnicode_AsUTF8String
 from object cimport Object
 
-cdef extern from "Elementary.h":
-    Evas_Object             *elm_scroller_add(Evas_Object *parent)
-    void                     
elm_scroller_custom_widget_base_theme_set(Evas_Object *obj, const_char *widget, 
const_char *base)
-    void                     elm_scroller_content_min_limit(Evas_Object *obj, 
Eina_Bool w, Eina_Bool h)
-    void                     elm_scroller_region_show(Evas_Object *obj, 
Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h)
-    void                     elm_scroller_policy_set(Evas_Object *obj, 
Elm_Scroller_Policy policy_h, Elm_Scroller_Policy policy_v)
-    void                     elm_scroller_policy_get(Evas_Object *obj, 
Elm_Scroller_Policy *policy_h, Elm_Scroller_Policy *policy_v)
-    void                     elm_scroller_single_direction_set(Evas_Object 
*obj, Elm_Scroller_Single_Direction single_dir)
-    Elm_Scroller_Single_Direction 
elm_scroller_single_direction_get(const_Evas_Object *obj)
-    void                     elm_scroller_region_get(Evas_Object *obj, 
Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h)
-    void                     elm_scroller_child_size_get(Evas_Object *obj, 
Evas_Coord *w, Evas_Coord *h)
-    void                     elm_scroller_page_snap_set(Evas_Object *obj, 
Eina_Bool page_h_snap, Eina_Bool page_v_snap)
-    void                     elm_scroller_page_snap_get(const_Evas_Object 
*obj, Eina_Bool *page_h_snap, Eina_Bool *page_v_snap)
-    void                     elm_scroller_bounce_set(Evas_Object *obj, 
Eina_Bool h_bounce, Eina_Bool v_bounce)
-    void                     elm_scroller_bounce_get(Evas_Object *obj, 
Eina_Bool *h_bounce, Eina_Bool *v_bounce)
-    void                     elm_scroller_page_relative_set(Evas_Object *obj, 
double h_pagerel, double v_pagerel)
-    void                     elm_scroller_page_relative_get(Evas_Object *obj, 
double *h_pagerel, double *v_pagerel)
-    void                     elm_scroller_page_size_set(Evas_Object *obj, 
Evas_Coord h_pagesize, Evas_Coord v_pagesize)
-    void                     elm_scroller_page_size_get(const_Evas_Object 
*obj, Evas_Coord *h_pagesize, Evas_Coord *v_pagesize)
-    void                     
elm_scroller_page_scroll_limit_set(const_Evas_Object *obj, Evas_Coord 
page_limit_h, Evas_Coord page_limit_v)
-    void                     
elm_scroller_page_scroll_limit_get(const_Evas_Object *obj, Evas_Coord 
*page_limit_h, Evas_Coord *page_limit_v)
-    void                     elm_scroller_current_page_get(Evas_Object *obj, 
int *h_pagenumber, int *v_pagenumber)
-    void                     elm_scroller_last_page_get(Evas_Object *obj, int 
*h_pagenumber, int *v_pagenumber)
-    void                     elm_scroller_page_show(Evas_Object *obj, int 
h_pagenumber, int v_pagenumber)
-    void                     elm_scroller_page_bring_in(Evas_Object *obj, int 
h_pagenumber, int v_pagenumber)
-    void                     elm_scroller_region_bring_in(Evas_Object *obj, 
Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h)
-    void                     elm_scroller_propagate_events_set(Evas_Object 
*obj, Eina_Bool propagation)
-    Eina_Bool                elm_scroller_propagate_events_get(Evas_Object 
*obj)
-    void                     elm_scroller_gravity_set(Evas_Object *obj, double 
x, double y)
-    void                     elm_scroller_gravity_get(Evas_Object *obj, double 
*x, double *y)
-    void                     elm_scroller_movement_block_set(Evas_Object *obj, 
Elm_Scroller_Movement_Block block)
-    Elm_Scroller_Movement_Block 
elm_scroller_movement_block_get(const_Evas_Object *obj)
-
-cdef class ScrollableInterface(Object):
-    cpdef single_direction_set(self, Elm_Scroller_Single_Direction single_dir)
-    cpdef single_direction_get(self)
-    cpdef page_size_set(self, h_pagesize, v_pagesize)
-    cpdef page_size_get(self)
-    cpdef page_scroll_limit_set(self, int page_limit_h, int page_limit_v)
-    cpdef page_scroll_limit_get(self)
+cdef class Scrollable(Object):
+    pass
diff --git a/efl/elementary/scroller.pyx b/efl/elementary/scroller.pyx
index 218ef55..fc3d0e7 100644
--- a/efl/elementary/scroller.pyx
+++ b/efl/elementary/scroller.pyx
@@ -140,6 +140,45 @@ Type that blocks the scroll movement in one or more 
direction.
 
 """
 
+from efl.evas cimport Eina_Bool, Evas_Object, Evas_Coord, const_Evas_Object
+from enums cimport Elm_Scroller_Policy, Elm_Scroller_Single_Direction, \
+    Elm_Scroller_Movement_Block
+from libc.string cimport const_char
+from cpython cimport PyUnicode_AsUTF8String
+
+cdef extern from "Elementary.h":
+    Evas_Object             *elm_scroller_add(Evas_Object *parent)
+    void                     
elm_scroller_custom_widget_base_theme_set(Evas_Object *obj, const_char *widget, 
const_char *base)
+    void                     elm_scroller_content_min_limit(Evas_Object *obj, 
Eina_Bool w, Eina_Bool h)
+    void                     elm_scroller_region_show(Evas_Object *obj, 
Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h)
+    void                     elm_scroller_policy_set(Evas_Object *obj, 
Elm_Scroller_Policy policy_h, Elm_Scroller_Policy policy_v)
+    void                     elm_scroller_policy_get(Evas_Object *obj, 
Elm_Scroller_Policy *policy_h, Elm_Scroller_Policy *policy_v)
+    void                     elm_scroller_single_direction_set(Evas_Object 
*obj, Elm_Scroller_Single_Direction single_dir)
+    Elm_Scroller_Single_Direction 
elm_scroller_single_direction_get(const_Evas_Object *obj)
+    void                     elm_scroller_region_get(Evas_Object *obj, 
Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h)
+    void                     elm_scroller_child_size_get(Evas_Object *obj, 
Evas_Coord *w, Evas_Coord *h)
+    void                     elm_scroller_page_snap_set(Evas_Object *obj, 
Eina_Bool page_h_snap, Eina_Bool page_v_snap)
+    void                     elm_scroller_page_snap_get(const_Evas_Object 
*obj, Eina_Bool *page_h_snap, Eina_Bool *page_v_snap)
+    void                     elm_scroller_bounce_set(Evas_Object *obj, 
Eina_Bool h_bounce, Eina_Bool v_bounce)
+    void                     elm_scroller_bounce_get(Evas_Object *obj, 
Eina_Bool *h_bounce, Eina_Bool *v_bounce)
+    void                     elm_scroller_page_relative_set(Evas_Object *obj, 
double h_pagerel, double v_pagerel)
+    void                     elm_scroller_page_relative_get(Evas_Object *obj, 
double *h_pagerel, double *v_pagerel)
+    void                     elm_scroller_page_size_set(Evas_Object *obj, 
Evas_Coord h_pagesize, Evas_Coord v_pagesize)
+    void                     elm_scroller_page_size_get(const_Evas_Object 
*obj, Evas_Coord *h_pagesize, Evas_Coord *v_pagesize)
+    void                     
elm_scroller_page_scroll_limit_set(const_Evas_Object *obj, Evas_Coord 
page_limit_h, Evas_Coord page_limit_v)
+    void                     
elm_scroller_page_scroll_limit_get(const_Evas_Object *obj, Evas_Coord 
*page_limit_h, Evas_Coord *page_limit_v)
+    void                     elm_scroller_current_page_get(Evas_Object *obj, 
int *h_pagenumber, int *v_pagenumber)
+    void                     elm_scroller_last_page_get(Evas_Object *obj, int 
*h_pagenumber, int *v_pagenumber)
+    void                     elm_scroller_page_show(Evas_Object *obj, int 
h_pagenumber, int v_pagenumber)
+    void                     elm_scroller_page_bring_in(Evas_Object *obj, int 
h_pagenumber, int v_pagenumber)
+    void                     elm_scroller_region_bring_in(Evas_Object *obj, 
Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h)
+    void                     elm_scroller_propagate_events_set(Evas_Object 
*obj, Eina_Bool propagation)
+    Eina_Bool                elm_scroller_propagate_events_get(Evas_Object 
*obj)
+    void                     elm_scroller_gravity_set(Evas_Object *obj, double 
x, double y)
+    void                     elm_scroller_gravity_get(Evas_Object *obj, double 
*x, double *y)
+    void                     elm_scroller_movement_block_set(Evas_Object *obj, 
Elm_Scroller_Movement_Block block)
+    Elm_Scroller_Movement_Block 
elm_scroller_movement_block_get(const_Evas_Object *obj)
+
 from efl.evas cimport Evas_Object, const_Evas_Object, \
     Object as evasObject
 from efl.eo cimport object_from_instance, _object_mapping_register
@@ -163,7 +202,7 @@ ELM_SCROLLER_MOVEMENT_NO_BLOCK = 
enums.ELM_SCROLLER_MOVEMENT_NO_BLOCK
 ELM_SCROLLER_MOVEMENT_BLOCK_VERTICAL = 
enums.ELM_SCROLLER_MOVEMENT_BLOCK_VERTICAL
 ELM_SCROLLER_MOVEMENT_BLOCK_HORIZONTAL = 
enums.ELM_SCROLLER_MOVEMENT_BLOCK_HORIZONTAL
 
-cdef class ScrollableInterface(Object):
+cdef class Scrollable(Object):
 
     """
 
@@ -268,16 +307,16 @@ cdef class ScrollableInterface(Object):
         :since: 1.8
 
         """
-        def __set__(self, value):
-            self.single_direction_set(value)
+        def __set__(self, Elm_Scroller_Single_Direction single_dir):
+            elm_scroller_single_direction_set(self.obj, single_dir)
 
         def __get__(self):
-            return self.single_direction_get()
+            return elm_scroller_single_direction_get(self.obj)
 
-    cpdef single_direction_set(self, Elm_Scroller_Single_Direction single_dir):
+    def single_direction_set(self, Elm_Scroller_Single_Direction single_dir):
         elm_scroller_single_direction_set(self.obj, single_dir)
 
-    cpdef single_direction_get(self):
+    def single_direction_get(self):
         return elm_scroller_single_direction_get(self.obj)
 
     property region:
@@ -428,15 +467,18 @@ cdef class ScrollableInterface(Object):
 
         """
         def __set__(self, value):
-            self.page_size_set(*value)
+            h_pagesize, v_pagesize = value
+            elm_scroller_page_size_set(self.obj, h_pagesize, v_pagesize)
 
         def __get__(self):
-            return self.page_size_get()
+            cdef int h_pagesize, v_pagesize
+            elm_scroller_page_size_get(self.obj, &h_pagesize,  &v_pagesize)
+            return (h_pagesize, v_pagesize)
 
-    cpdef page_size_set(self, h_pagesize, v_pagesize):
+    def page_size_set(self, h_pagesize, v_pagesize):
         elm_scroller_page_size_set(self.obj, h_pagesize, v_pagesize)
 
-    cpdef page_size_get(self):
+    def page_size_get(self):
         cdef int h_pagesize, v_pagesize
         elm_scroller_page_size_get(self.obj, &h_pagesize,  &v_pagesize)
         return (h_pagesize, v_pagesize)
@@ -452,15 +494,18 @@ cdef class ScrollableInterface(Object):
 
         """
         def __set__(self, value):
-            self.page_scroll_limit_set(*value)
+            page_limit_h, page_limit_v = value
+            elm_scroller_page_scroll_limit_set(self.obj, page_limit_h, 
page_limit_v)
 
         def __get__(self):
-            return self.page_scroll_limit_get()
+            cdef int page_limit_h, page_limit_v
+            elm_scroller_page_scroll_limit_get(self.obj, &page_limit_h, 
&page_limit_v)
+            return (page_limit_h, page_limit_v)
 
-    cpdef page_scroll_limit_set(self, int page_limit_h, int page_limit_v):
+    def page_scroll_limit_set(self, int page_limit_h, int page_limit_v):
         elm_scroller_page_scroll_limit_set(self.obj, page_limit_h, 
page_limit_v)
 
-    cpdef page_scroll_limit_get(self):
+    def page_scroll_limit_get(self):
         cdef int page_limit_h, page_limit_v
         elm_scroller_page_scroll_limit_get(self.obj, &page_limit_h, 
&page_limit_v)
         return (page_limit_h, page_limit_v)
@@ -845,7 +890,7 @@ cdef class ScrollerWidget(LayoutClass):
     def __init__(self, evasObject parent):
         self._set_obj(elm_scroller_add(parent.obj))
 
-class Scroller(ScrollableInterface, ScrollerWidget):
+class Scroller(Scrollable, ScrollerWidget):
 
     """
 
diff --git a/examples/elementary/test_conform.py 
b/examples/elementary/test_conform.py
index f7557ec..d41a719 100644
--- a/examples/elementary/test_conform.py
+++ b/examples/elementary/test_conform.py
@@ -8,9 +8,15 @@ from efl.elementary.naviframe import Naviframe
 from efl.elementary.frame import Frame
 from efl.elementary.label import Label
 from efl.elementary.list import List
+from efl.elementary.scroller import Scrollable
 
 from efl.evas import EVAS_HINT_EXPAND, EVAS_HINT_FILL
 
+class ScrollableEntry(Scrollable, Entry):
+    def __init__(self, canvas, *args, **kwargs):
+        Entry.__init__(self, canvas)
+        self.scrollable = True
+
 def conformant_clicked(obj, item=None):
     win = StandardWindow("conformant", "Conformant")
     win.autodel = True
@@ -25,8 +31,7 @@ def conformant_clicked(obj, item=None):
     bx.size_hint_weight = EVAS_HINT_EXPAND, EVAS_HINT_EXPAND
     bx.size_hint_align = EVAS_HINT_FILL, EVAS_HINT_FILL
 
-    en = Entry(win)
-    en.scrollable = True
+    en = ScrollableEntry(win)
     en.single_line = True
     en.bounce = True, False
     en.text = "This is the top entry here"
@@ -42,8 +47,7 @@ def conformant_clicked(obj, item=None):
     bx.pack_end(btn)
     btn.show()
 
-    en = Entry(win)
-    en.scrollable = True
+    en = ScrollableEntry(win)
     en.single_line = True
     en.bounce = True, False
     en.text = "This is the middle entry here"
@@ -59,8 +63,7 @@ def conformant_clicked(obj, item=None):
     bx.pack_end(btn)
     btn.show()
 
-    en = Entry(win)
-    en.scrollable = True
+    en = ScrollableEntry(win)
     en.bounce = False, True
     en.text = "This is a multi-line entry at the bottom<br/>" \
     "This can contain more than 1 line of text and be " \
@@ -96,8 +99,7 @@ def conformant2_clicked(obj, item=None):
     win.resize_object_add(bx)
     bx.show()
 
-    en = Entry(win)
-    en.scrollable = True
+    en = ScrollableEntry(win)
     en.single_line = True
     en.bounce = True, False
     en.text = "This is the top entry here"
@@ -132,8 +134,7 @@ def conformant2_clicked(obj, item=None):
     bx.size_hint_weight = EVAS_HINT_EXPAND, EVAS_HINT_EXPAND
     bx.size_hint_align = EVAS_HINT_FILL, EVAS_HINT_FILL
 
-    en = Entry(win)
-    en.scrollable = True
+    en = ScrollableEntry(win)
     en.bounce = False, True
     en.text = "This entry and button below get deleted."
     en.size_hint_weight = EVAS_HINT_EXPAND, EVAS_HINT_EXPAND
@@ -164,8 +165,7 @@ def conformant2_clicked(obj, item=None):
     bx.size_hint_weight = EVAS_HINT_EXPAND, EVAS_HINT_EXPAND
     bx.size_hint_align = EVAS_HINT_FILL, EVAS_HINT_FILL
 
-    en = Entry(win)
-    en.scrollable = True
+    en = ScrollableEntry(win)
     en.bounce = False, True
     en.text = "This entry and button below get deleted."
     en.size_hint_weight = EVAS_HINT_EXPAND, EVAS_HINT_EXPAND
diff --git a/examples/elementary/test_entry.py 
b/examples/elementary/test_entry.py
index e24da1f..d7f2b80 100644
--- a/examples/elementary/test_entry.py
+++ b/examples/elementary/test_entry.py
@@ -14,6 +14,12 @@ from efl.elementary.frame import Frame
 from efl.elementary.label import Label
 from efl.elementary.separator import Separator
 from efl.elementary.icon import Icon
+from efl.elementary.scroller import Scrollable
+
+class ScrollableEntry(Scrollable, Entry):
+    def __init__(self, canvas, *args, **kwargs):
+        Entry.__init__(self, canvas)
+        self.scrollable = True
 
 from efl.evas import EVAS_HINT_EXPAND, EVAS_HINT_FILL
 
@@ -165,8 +171,7 @@ def entry_scrolled_clicked(obj, item = None):
     bx.show()
 
     # disabled entry
-    en = Entry(win)
-    en.scrollable = True
+    en = ScrollableEntry(win)
     en.size_hint_weight = EVAS_HINT_EXPAND, 0.0
     en.size_hint_align = EVAS_HINT_FILL, 0.5
     en.scrollbar_policy = ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF
@@ -177,8 +182,7 @@ def entry_scrolled_clicked(obj, item = None):
     bx.pack_end(en)
 
     # password entry
-    en = Entry(win)
-    en.scrollable = True
+    en = ScrollableEntry(win)
     en.size_hint_weight = EVAS_HINT_EXPAND, 0.0
     en.size_hint_align = EVAS_HINT_FILL, 0.5
     en.scrollbar_policy = ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF
@@ -190,8 +194,7 @@ def entry_scrolled_clicked(obj, item = None):
     bx.pack_end(en)
 
     # multi-line disable entry
-    en = Entry(win)
-    en.scrollable = True
+    en = ScrollableEntry(win)
     en.size_hint_weight = EVAS_HINT_EXPAND, EVAS_HINT_EXPAND
     en.size_hint_align = EVAS_HINT_FILL, EVAS_HINT_FILL
     en.scrollbar_policy = ELM_SCROLLER_POLICY_ON, ELM_SCROLLER_POLICY_ON
@@ -212,8 +215,7 @@ def entry_scrolled_clicked(obj, item = None):
     sp.show()
 
     # Single line selected entry
-    en = Entry(win)
-    en.scrollable = True
+    en = ScrollableEntry(win)
     en.size_hint_weight = EVAS_HINT_EXPAND, 0.0
     en.size_hint_align = EVAS_HINT_FILL, 0.5
     en.text = "This is a single line"
@@ -224,8 +226,7 @@ def entry_scrolled_clicked(obj, item = None):
     bx.pack_end(en)
 
     # Filter test
-    en = Entry(win)
-    en.scrollable = True
+    en = ScrollableEntry(win)
     en.size_hint_weight = EVAS_HINT_EXPAND, 0.0
     en.size_hint_align = EVAS_HINT_FILL, 0.5
     en.text = "Filter test"
@@ -237,8 +238,7 @@ def entry_scrolled_clicked(obj, item = None):
     en.markup_filter_append(my_filter, "test")
 
     # # Only digits entry
-    # en = Entry(win)
-    # en.scrollable = True
+    # en = ScrollableEntry(win)
     # en.size_hint_weight = EVAS_HINT_EXPAND, 0.0
     # en.size_hint_align = EVAS_HINT_FILL, 0.5
     # en.text = "01234"
@@ -252,8 +252,7 @@ def entry_scrolled_clicked(obj, item = None):
     # en.markup_filter_append(elm_entry_filter_accept_set, digits_filter_data)
 
     # # No digits entry
-    # en = Entry(win)
-    # en.scrollable = True
+    # en = ScrollableEntry(win)
     # en.size_hint_weight = EVAS_HINT_EXPAND, 0.0
     # en.size_hint_align = EVAS_HINT_FILL, 0.5
     # en.text = "No numbers here"
@@ -267,8 +266,7 @@ def entry_scrolled_clicked(obj, item = None):
     # en.markup_filter_append(elm_entry_filter_accept_set, digits_filter_data2)
 
     # # Size limited entry
-    # en = Entry(win)
-    # en.scrollable = True
+    # en = ScrollableEntry(win)
     # en.size_hint_weight = EVAS_HINT_EXPAND, 0.0
     # en.size_hint_align = EVAS_HINT_FILL, 0.5
     # en.text = "Just 20 chars"
@@ -282,8 +280,7 @@ def entry_scrolled_clicked(obj, item = None):
     # en.markup_filter_append(elm_entry_filter_limit_size, limit_filter_data)
 
     # # Byte size limited entry
-    # en = Entry(win)
-    # en.scrollable = True
+    # en = ScrollableEntry(win)
     # en.size_hint_weight = EVAS_HINT_EXPAND, 0.0
     # en.size_hint_align = EVAS_HINT_FILL, 0.5
     # en.text = "And now only 30 bytes"
@@ -297,7 +294,7 @@ def entry_scrolled_clicked(obj, item = None):
     # en.markup_filter_append(elm_entry_filter_limit_size, limit_filter_data2)
 
     # Single line password entry
-    en_p = Entry(win)
+    en_p = ScrollableEntry(win)
     en_p.scrollable = True
     en_p.size_hint_weight = EVAS_HINT_EXPAND, 0.0
     en_p.size_hint_align = EVAS_HINT_FILL, 0.5
@@ -309,8 +306,7 @@ def entry_scrolled_clicked(obj, item = None):
     bx.pack_end(en_p)
 
     # entry with icon/end widgets
-    en = Entry(win)
-    en.scrollable = True
+    en = ScrollableEntry(win)
     en.scrollbar_policy = ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF
     en.single_line = True
     en.size_hint_weight = EVAS_HINT_EXPAND, EVAS_HINT_EXPAND
@@ -332,8 +328,7 @@ def entry_scrolled_clicked(obj, item = None):
     bx.pack_end(en)
 
     # markup entry
-    en = Entry(win)
-    en.scrollable = True
+    en = ScrollableEntry(win)
     en.size_hint_weight = EVAS_HINT_EXPAND, EVAS_HINT_EXPAND
     en.size_hint_align = EVAS_HINT_FILL, EVAS_HINT_FILL
     en.scrollbar_policy = ELM_SCROLLER_POLICY_ON, ELM_SCROLLER_POLICY_ON
diff --git a/examples/elementary/test_gengrid.py 
b/examples/elementary/test_gengrid.py
index eaa99ae..ac272f2 100644
--- a/examples/elementary/test_gengrid.py
+++ b/examples/elementary/test_gengrid.py
@@ -13,6 +13,11 @@ from efl.elementary.image import Image
 from efl.elementary.gengrid import Gengrid, GengridItemClass
 from efl.elementary.slider import Slider
 from efl.elementary.table import Table
+from efl.elementary.scroller import Scrollable
+
+class ScrollableGengrid(Scrollable, Gengrid):
+    def __init__(self, canvas, *args, **kwargs):
+        Gengrid.__init__(self, canvas)
 
 
 images = ["panel_01.jpg", "plant_01.jpg", "rock_01.jpg", "rock_02.jpg",
@@ -80,7 +85,7 @@ def gengrid_clicked(obj):
                                        content_get_func=gg_content_get,
                                        state_get_func=gg_state_get,
                                        del_func=gg_del)
-    gg = Gengrid(win)
+    gg = ScrollableGengrid(win)
     gg.size_hint_weight_set(evas.EVAS_HINT_EXPAND, evas.EVAS_HINT_EXPAND)
     gg.size_hint_align_set(evas.EVAS_HINT_FILL, evas.EVAS_HINT_FILL)
     gg.horizontal_set(False)

-- 


Reply via email to