Compare commits
9 Commits
master
...
python-efl
Author | SHA1 | Date |
---|---|---|
|
6c98e8c460 | |
|
9fa3f3a893 | |
|
ccfc4b0082 | |
|
c1497e1028 | |
|
43c3d0521a | |
|
9434ccf64a | |
|
bca990eed7 | |
|
53e7af4905 | |
|
878c5f114c |
16
INSTALL
16
INSTALL
|
@ -48,7 +48,15 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
3. INSTALLATION:
|
3. CLEANUP:
|
||||||
|
-----------
|
||||||
|
* For cleaning up
|
||||||
|
|
||||||
|
python setup.py clean_generated_files
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
4. INSTALLATION:
|
||||||
----------------
|
----------------
|
||||||
|
|
||||||
* For system-wide installation (needs administrator privileges):
|
* For system-wide installation (needs administrator privileges):
|
||||||
|
@ -69,7 +77,7 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
4. DOCUMENTATION:
|
5. DOCUMENTATION:
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
To build the docs for the bindings you need to have Sphinx installed, for
|
To build the docs for the bindings you need to have Sphinx installed, for
|
||||||
|
@ -87,7 +95,7 @@
|
||||||
up with empty documentation.
|
up with empty documentation.
|
||||||
|
|
||||||
|
|
||||||
5. TESTS and EXAMPLES:
|
6. TESTS and EXAMPLES:
|
||||||
----------------------
|
----------------------
|
||||||
|
|
||||||
The tests/ folder contains all the unit tests available, you can run individual
|
The tests/ folder contains all the unit tests available, you can run individual
|
||||||
|
@ -101,7 +109,7 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
6. UNINSTALL:
|
7. UNINSTALL:
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
Unfortunately setup.py does not provide a way to remove the installed packages,
|
Unfortunately setup.py does not provide a way to remove the installed packages,
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
include README.rst INSTALL COPYING COPYING.LESSER AUTHORS changes.html
|
include README.rst INSTALL COPYING COPYING.LESSER AUTHORS changes.html
|
||||||
recursive-include efl *.c *.h *.pyx *.pxi
|
recursive-include efl *.c *.h *.pyx *.pxi *.pxd
|
||||||
graft include
|
graft include
|
||||||
graft tests
|
graft tests
|
||||||
recursive-exclude tests *.pyc
|
recursive-exclude tests *.pyc
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#################
|
#################
|
||||||
PYTHON-EFL 1.10.0
|
PYTHON-EFL 1.10.1
|
||||||
#################
|
#################
|
||||||
|
|
||||||
EFL is a collection of libraries for handling many common tasks a
|
EFL is a collection of libraries for handling many common tasks a
|
||||||
|
|
1
TODO
1
TODO
|
@ -5,7 +5,6 @@ BUGS
|
||||||
* Elm.Map: overlays_show segfaults, scrollers in examples are jumpy
|
* Elm.Map: overlays_show segfaults, scrollers in examples are jumpy
|
||||||
* Elementary: when we use custom function callbacks we usually leak some
|
* Elementary: when we use custom function callbacks we usually leak some
|
||||||
reference around, some examples:
|
reference around, some examples:
|
||||||
- Entry.markup_filter_append()
|
|
||||||
- Fileselector.custom_filter_append()
|
- Fileselector.custom_filter_append()
|
||||||
- Multibuttonentry.format_function_set()
|
- Multibuttonentry.format_function_set()
|
||||||
- Multibuttonentry.filter_append()
|
- Multibuttonentry.filter_append()
|
||||||
|
|
|
@ -101,11 +101,3 @@ API Reference
|
||||||
filedownload
|
filedownload
|
||||||
filemonitor
|
filemonitor
|
||||||
|
|
||||||
|
|
||||||
Inheritance diagram
|
|
||||||
-------------------
|
|
||||||
|
|
||||||
.. inheritance-diagram::
|
|
||||||
efl.ecore
|
|
||||||
:parts: 2
|
|
||||||
|
|
||||||
|
|
|
@ -3,5 +3,32 @@
|
||||||
:class:`efl.evas.Object` Class
|
:class:`efl.evas.Object` Class
|
||||||
==============================
|
==============================
|
||||||
|
|
||||||
|
.. _Evas_Keys:
|
||||||
|
|
||||||
|
Key Input Functions
|
||||||
|
===================
|
||||||
|
|
||||||
|
Functions which feed key events to the canvas.
|
||||||
|
|
||||||
|
As explained in :ref:`evas_main_intro_not_evas`, Evas is **not** aware of input
|
||||||
|
systems at all. Then, the user, if using it crudely (evas_new()),
|
||||||
|
will have to feed it with input events, so that it can react
|
||||||
|
somehow. If, however, the user creates a canvas by means of the
|
||||||
|
Ecore_Evas wrapper, it will automatically bind the chosen display
|
||||||
|
engine's input events to the canvas, for you.
|
||||||
|
|
||||||
|
This group presents the functions dealing with the feeding of key
|
||||||
|
events to the canvas. On most of them, one has to reference a given
|
||||||
|
key by a name (``keyname`` argument). Those are
|
||||||
|
**platform dependent** symbolic names for the keys. Sometimes
|
||||||
|
you'll get the right ``keyname`` by simply using an ASCII
|
||||||
|
value of the key name, but it won't be like that always.
|
||||||
|
|
||||||
|
Typical platforms are Linux frame buffer (Ecore_FB) and X server
|
||||||
|
(Ecore_X) when using Evas with Ecore and Ecore_Evas. Please refer
|
||||||
|
to your display engine's documentation when using evas through an
|
||||||
|
Ecore helper wrapper when you need the ``keyname``'s.
|
||||||
|
|
||||||
|
|
||||||
.. autoclass:: efl.evas.Object
|
.. autoclass:: efl.evas.Object
|
||||||
:inherited-members:
|
:inherited-members:
|
||||||
|
|
|
@ -3,6 +3,8 @@
|
||||||
|
|
||||||
.. module:: efl.evas
|
.. module:: efl.evas
|
||||||
|
|
||||||
|
.. _evas_main_intro:
|
||||||
|
|
||||||
What is Evas?
|
What is Evas?
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
|
@ -27,6 +29,7 @@ wish, thus keeping it small and lean. It has several display
|
||||||
back-ends, letting it display on several display systems, making it
|
back-ends, letting it display on several display systems, making it
|
||||||
portable for cross-device and cross-platform development.
|
portable for cross-device and cross-platform development.
|
||||||
|
|
||||||
|
.. _evas_main_intro_not_evas:
|
||||||
|
|
||||||
What Evas is not?
|
What Evas is not?
|
||||||
-----------------
|
-----------------
|
||||||
|
@ -41,6 +44,7 @@ should be polled from various sources and fed to Evas. Similarly, it will
|
||||||
not create windows or report windows updates to your system, rather just
|
not create windows or report windows updates to your system, rather just
|
||||||
drawing the pixels and reporting to the user the areas that were changed.
|
drawing the pixels and reporting to the user the areas that were changed.
|
||||||
|
|
||||||
|
.. _evas_main_work:
|
||||||
|
|
||||||
How does Evas work?
|
How does Evas work?
|
||||||
-------------------
|
-------------------
|
||||||
|
|
|
@ -203,7 +203,9 @@ ELM_DAY_LAST = enums.ELM_DAY_LAST
|
||||||
|
|
||||||
cdef class CalendarMark(object):
|
cdef class CalendarMark(object):
|
||||||
|
|
||||||
"""An item for the Calendar widget.
|
"""
|
||||||
|
|
||||||
|
An item for the Calendar widget.
|
||||||
|
|
||||||
A mark that will be drawn in the calendar respecting the insertion
|
A mark that will be drawn in the calendar respecting the insertion
|
||||||
time and periodicity. It will emit the type as signal to the widget theme.
|
time and periodicity. It will emit the type as signal to the widget theme.
|
||||||
|
@ -235,7 +237,7 @@ cdef class CalendarMark(object):
|
||||||
|
|
||||||
def __init__(self, evasObject cal, mark_type, mark_time,
|
def __init__(self, evasObject cal, mark_type, mark_time,
|
||||||
Elm_Calendar_Mark_Repeat_Type repeat):
|
Elm_Calendar_Mark_Repeat_Type repeat):
|
||||||
"""
|
"""Create a new Calendar mark
|
||||||
|
|
||||||
:param mark_type: A string used to define the type of mark. It will be
|
:param mark_type: A string used to define the type of mark. It will be
|
||||||
emitted to the theme, that should display a related modification on these
|
emitted to the theme, that should display a related modification on these
|
||||||
|
|
|
@ -661,7 +661,7 @@ cdef class Configuration(object):
|
||||||
property text_classes_list:
|
property text_classes_list:
|
||||||
"""Get Elementary's list of supported text classes.
|
"""Get Elementary's list of supported text classes.
|
||||||
|
|
||||||
:type: list of :ref:`Elm_Text_Class`
|
:type: list of tuples (name, desc)
|
||||||
|
|
||||||
"""
|
"""
|
||||||
def __get__(self):
|
def __get__(self):
|
||||||
|
@ -691,7 +691,7 @@ cdef class Configuration(object):
|
||||||
the default font properties for that class coming from the theme in
|
the default font properties for that class coming from the theme in
|
||||||
use. There is no need to free this list.
|
use. There is no need to free this list.
|
||||||
|
|
||||||
:type: list of :ref:`Elm_Font_Overlay`
|
:type: list of tuples (text_class, font, size)
|
||||||
|
|
||||||
"""
|
"""
|
||||||
def __get__(self):
|
def __get__(self):
|
||||||
|
@ -732,7 +732,7 @@ cdef class Configuration(object):
|
||||||
:param font: Font name and style string
|
:param font: Font name and style string
|
||||||
:type font: string
|
:type font: string
|
||||||
:param size: Font size
|
:param size: Font size
|
||||||
:type size: :ref:`Evas_Font_Size`
|
:type size: int
|
||||||
|
|
||||||
"""
|
"""
|
||||||
a1 = text_class
|
a1 = text_class
|
||||||
|
@ -783,7 +783,7 @@ cdef class Configuration(object):
|
||||||
"""
|
"""
|
||||||
def __get__(self):
|
def __get__(self):
|
||||||
cdef:
|
cdef:
|
||||||
Eina_List *lst = elm_config_color_overlay_list_get()
|
const Eina_List *lst = elm_config_color_overlay_list_get()
|
||||||
Elm_Color_Overlay *ov
|
Elm_Color_Overlay *ov
|
||||||
const char *color_class
|
const char *color_class
|
||||||
|
|
||||||
|
|
|
@ -719,18 +719,21 @@ cdef void py_elm_entry_filter_cb(void *data, Evas_Object *entry, char **text) wi
|
||||||
"""
|
"""
|
||||||
cdef:
|
cdef:
|
||||||
Entry en = object_from_instance(entry)
|
Entry en = object_from_instance(entry)
|
||||||
|
object ret
|
||||||
|
|
||||||
cb_func, cb_data = <object>data
|
for cb_func, cb_data in en.markup_filters:
|
||||||
try:
|
try:
|
||||||
ret = cb_func(en, _touni(text[0]), cb_data)
|
ret = cb_func(en, _touni(text[0]), cb_data)
|
||||||
except Exception:
|
except Exception:
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
|
|
||||||
if ret is None:
|
if ret is None:
|
||||||
free(text[0])
|
free(text[0])
|
||||||
text[0] = NULL
|
text[0] = NULL
|
||||||
return
|
return
|
||||||
|
|
||||||
|
if isinstance(ret, unicode): ret = PyUnicode_AsUTF8String(ret)
|
||||||
|
|
||||||
text[0] = strdup(<char *>ret)
|
text[0] = strdup(<char *>ret)
|
||||||
|
|
||||||
class EntryAnchorInfo(object):
|
class EntryAnchorInfo(object):
|
||||||
|
@ -810,6 +813,11 @@ cdef class Entry(LayoutClass):
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
cdef list markup_filters
|
||||||
|
|
||||||
|
def __cinit__(self):
|
||||||
|
self.markup_filters = []
|
||||||
|
|
||||||
def __init__(self, evasObject parent, *args, **kwargs):
|
def __init__(self, evasObject parent, *args, **kwargs):
|
||||||
"""By default, entries are:
|
"""By default, entries are:
|
||||||
|
|
||||||
|
@ -1403,13 +1411,16 @@ cdef class Entry(LayoutClass):
|
||||||
.. versionadded:: 1.8
|
.. versionadded:: 1.8
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
if not callable(func):
|
||||||
|
raise TypeError("func must be callable")
|
||||||
|
|
||||||
|
if not self.markup_filters:
|
||||||
|
elm_entry_markup_filter_append(self.obj,
|
||||||
|
py_elm_entry_filter_cb,
|
||||||
|
NULL)
|
||||||
|
|
||||||
cb_data = (func, data)
|
cb_data = (func, data)
|
||||||
# TODO: This is now a ref leak. It should be stored somewhere and
|
self.markup_filters.append(cb_data)
|
||||||
# deleted in the remove method.
|
|
||||||
Py_INCREF(cb_data)
|
|
||||||
elm_entry_markup_filter_append(self.obj,
|
|
||||||
py_elm_entry_filter_cb,
|
|
||||||
<void *>cb_data)
|
|
||||||
|
|
||||||
def markup_filter_prepend(self, func, data=None):
|
def markup_filter_prepend(self, func, data=None):
|
||||||
"""Prepend a markup filter function for text inserted in the entry
|
"""Prepend a markup filter function for text inserted in the entry
|
||||||
|
@ -1423,11 +1434,16 @@ cdef class Entry(LayoutClass):
|
||||||
.. versionadded:: 1.8
|
.. versionadded:: 1.8
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
if not callable(func):
|
||||||
|
raise TypeError("func must be callable")
|
||||||
|
|
||||||
|
if not self.markup_filters:
|
||||||
|
elm_entry_markup_filter_append(self.obj,
|
||||||
|
py_elm_entry_filter_cb,
|
||||||
|
NULL)
|
||||||
|
|
||||||
cb_data = (func, data)
|
cb_data = (func, data)
|
||||||
Py_INCREF(cb_data)
|
self.markup_filters.insert(0, cb_data)
|
||||||
elm_entry_markup_filter_prepend(self.obj,
|
|
||||||
py_elm_entry_filter_cb,
|
|
||||||
<void *>cb_data)
|
|
||||||
|
|
||||||
def markup_filter_remove(self, func, data=None):
|
def markup_filter_remove(self, func, data=None):
|
||||||
"""Remove a markup filter from the list
|
"""Remove a markup filter from the list
|
||||||
|
@ -1441,11 +1457,24 @@ cdef class Entry(LayoutClass):
|
||||||
.. versionadded:: 1.8
|
.. versionadded:: 1.8
|
||||||
|
|
||||||
"""
|
"""
|
||||||
cb_data = (func, data)
|
f = None
|
||||||
Py_INCREF(cb_data)
|
d = None
|
||||||
|
lst = self.markup_filters
|
||||||
|
|
||||||
|
for i, (f, d) in enumerate(lst):
|
||||||
|
if func is f and data is d:
|
||||||
|
break
|
||||||
|
|
||||||
|
if f is not func or d is not data:
|
||||||
|
raise ValueError("Callback was not registered with this object.")
|
||||||
|
|
||||||
|
lst.pop(i)
|
||||||
|
if lst:
|
||||||
|
return
|
||||||
|
|
||||||
elm_entry_markup_filter_remove(self.obj,
|
elm_entry_markup_filter_remove(self.obj,
|
||||||
py_elm_entry_filter_cb,
|
py_elm_entry_filter_cb,
|
||||||
<void *>cb_data)
|
NULL)
|
||||||
|
|
||||||
@DEPRECATED("1.8", "Use the module level markup_to_utf8() method instead.")
|
@DEPRECATED("1.8", "Use the module level markup_to_utf8() method instead.")
|
||||||
def markup_to_utf8(self, string):
|
def markup_to_utf8(self, string):
|
||||||
|
|
|
@ -319,11 +319,11 @@ cdef class GengridItem(ObjectItem):
|
||||||
def tooltip_content_cb_set(self, func, *args, **kargs):
|
def tooltip_content_cb_set(self, func, *args, **kargs):
|
||||||
"""Set the content to be shown in the tooltip object
|
"""Set the content to be shown in the tooltip object
|
||||||
|
|
||||||
Setup the tooltip to object. The object can have only one tooltip,
|
Setup the tooltip to object. The object can have only one tooltip, so
|
||||||
so any previews tooltip data is removed. ``func(args, kargs)`` will
|
any previews tooltip data is removed. ``func(owner, item, tooltip,
|
||||||
be called every time that need show the tooltip and it should return a
|
args, kargs)`` will be called every time that need show the tooltip and
|
||||||
valid Evas_Object. This object is then managed fully by tooltip system
|
it should return a valid Evas_Object. This object is then managed fully
|
||||||
and is deleted when the tooltip is gone.
|
by tooltip system and is deleted when the tooltip is gone.
|
||||||
|
|
||||||
:param func: Function to be create tooltip content, called when
|
:param func: Function to be create tooltip content, called when
|
||||||
need show tooltip.
|
need show tooltip.
|
||||||
|
@ -334,9 +334,9 @@ cdef class GengridItem(ObjectItem):
|
||||||
|
|
||||||
cdef void *cbdata
|
cdef void *cbdata
|
||||||
|
|
||||||
data = (func, self, args, kargs)
|
data = (func, args, kargs)
|
||||||
Py_INCREF(data)
|
Py_INCREF(data)
|
||||||
# FIXME: refleak?
|
# DECREF is in data_del_cb
|
||||||
cbdata = <void *>data
|
cbdata = <void *>data
|
||||||
elm_gengrid_item_tooltip_content_cb_set(self.item,
|
elm_gengrid_item_tooltip_content_cb_set(self.item,
|
||||||
_tooltip_item_content_create,
|
_tooltip_item_content_create,
|
||||||
|
|
|
@ -399,11 +399,11 @@ cdef class GenlistItem(ObjectItem):
|
||||||
def tooltip_content_cb_set(self, func, *args, **kargs):
|
def tooltip_content_cb_set(self, func, *args, **kargs):
|
||||||
"""Set the content to be shown in the tooltip object
|
"""Set the content to be shown in the tooltip object
|
||||||
|
|
||||||
Setup the tooltip to object. The object can have only one tooltip,
|
Setup the tooltip to object. The object can have only one tooltip, so
|
||||||
so any previews tooltip data is removed. ``func(args,kargs)`` will
|
any previews tooltip data is removed. ``func(owner, item, tooltip,
|
||||||
be called every time that need show the tooltip and it should return
|
args, kargs)`` will be called every time that need show the tooltip and
|
||||||
a valid Evas_Object. This object is then managed fully by tooltip
|
it should return a valid Evas_Object. This object is then managed fully
|
||||||
system and is deleted when the tooltip is gone.
|
by tooltip system and is deleted when the tooltip is gone.
|
||||||
|
|
||||||
:param func: Function to be create tooltip content, called when
|
:param func: Function to be create tooltip content, called when
|
||||||
need show tooltip.
|
need show tooltip.
|
||||||
|
@ -414,8 +414,9 @@ cdef class GenlistItem(ObjectItem):
|
||||||
|
|
||||||
cdef void *cbdata
|
cdef void *cbdata
|
||||||
|
|
||||||
data = (func, self, args, kargs)
|
data = (func, args, kargs)
|
||||||
Py_INCREF(data)
|
Py_INCREF(data)
|
||||||
|
# DECREF is in data_del_cb
|
||||||
cbdata = <void *>data
|
cbdata = <void *>data
|
||||||
elm_genlist_item_tooltip_content_cb_set(self.item,
|
elm_genlist_item_tooltip_content_cb_set(self.item,
|
||||||
_tooltip_item_content_create,
|
_tooltip_item_content_create,
|
||||||
|
@ -598,15 +599,9 @@ cdef class GenlistItem(ObjectItem):
|
||||||
.. versionadded:: 1.9
|
.. versionadded:: 1.9
|
||||||
|
|
||||||
"""
|
"""
|
||||||
cdef:
|
return _object_item_list_to_python(
|
||||||
Eina_List *l = elm_genlist_item_subitems_get(self.item)
|
elm_genlist_item_subitems_get(self.item)
|
||||||
list ret = list()
|
)
|
||||||
|
|
||||||
while l:
|
|
||||||
ret.append(object_from_instance(<Evas_Object*>l.data))
|
|
||||||
l = l.next
|
|
||||||
|
|
||||||
return ret
|
|
||||||
|
|
||||||
property expanded:
|
property expanded:
|
||||||
"""This function flags the item of type #ELM_GENLIST_ITEM_TREE as
|
"""This function flags the item of type #ELM_GENLIST_ITEM_TREE as
|
||||||
|
|
|
@ -39,11 +39,14 @@ This widget emits the following signals, besides the ones sent from
|
||||||
- ``item,selected`` - this is called when an item is selected by
|
- ``item,selected`` - this is called when an item is selected by
|
||||||
api, user interaction, and etc. this is also called when a
|
api, user interaction, and etc. this is also called when a
|
||||||
user press back space while cursor is on the first field of
|
user press back space while cursor is on the first field of
|
||||||
entry.
|
entry. event_info contains the item.
|
||||||
- ``item,added`` - when a new multi-button entry item is added.
|
- ``item,added`` - when a new multi-button entry item is added.
|
||||||
|
event_info contains the item.
|
||||||
- ``item,deleted`` - when a multi-button entry item is deleted.
|
- ``item,deleted`` - when a multi-button entry item is deleted.
|
||||||
|
event_info contains the item.
|
||||||
- ``item,clicked`` - this is called when an item is clicked by user
|
- ``item,clicked`` - this is called when an item is clicked by user
|
||||||
interaction. Both "item,selected" and "item,clicked" are needed.
|
interaction. Both "item,selected" and "item,clicked" are needed.
|
||||||
|
event_info contains the item.
|
||||||
- ``clicked`` - when multi-button entry is clicked.
|
- ``clicked`` - when multi-button entry is clicked.
|
||||||
- ``focused`` - when multi-button entry is focused.
|
- ``focused`` - when multi-button entry is focused.
|
||||||
- ``unfocused`` - when multi-button entry is unfocused.
|
- ``unfocused`` - when multi-button entry is unfocused.
|
||||||
|
@ -67,13 +70,18 @@ from libc.stdint cimport uintptr_t
|
||||||
|
|
||||||
from efl.eo cimport _object_mapping_register, object_from_instance, PY_REFCOUNT
|
from efl.eo cimport _object_mapping_register, object_from_instance, PY_REFCOUNT
|
||||||
from efl.utils.conversions cimport _ctouni
|
from efl.utils.conversions cimport _ctouni
|
||||||
from efl.evas cimport Object as evasObject
|
from efl.evas cimport Object as evasObject, evas_object_smart_callback_add
|
||||||
|
|
||||||
from libc.string cimport strdup
|
from libc.string cimport strdup
|
||||||
from object cimport Object
|
from object cimport Object
|
||||||
import traceback
|
import traceback
|
||||||
from object_item cimport _object_item_callback, _object_item_callback2, \
|
from object_item cimport _object_item_callback, _object_item_callback2, \
|
||||||
_object_item_to_python, _object_item_list_to_python, ObjectItem
|
_object_item_to_python, _object_item_list_to_python, ObjectItem, \
|
||||||
|
elm_object_item_data_get
|
||||||
|
|
||||||
|
def _cb_object_item_conv(uintptr_t addr):
|
||||||
|
cdef Elm_Object_Item *it = <Elm_Object_Item *>addr
|
||||||
|
return _object_item_to_python(it)
|
||||||
|
|
||||||
cdef Eina_Bool _multibuttonentry_filter_callback(Evas_Object *obj, \
|
cdef Eina_Bool _multibuttonentry_filter_callback(Evas_Object *obj, \
|
||||||
const char *item_label, void *item_data, void *data) with gil:
|
const char *item_label, void *item_data, void *data) with gil:
|
||||||
|
@ -235,17 +243,27 @@ cdef class MultiButtonEntryItem(ObjectItem):
|
||||||
def next_get(self):
|
def next_get(self):
|
||||||
return _object_item_to_python(elm_multibuttonentry_item_next_get(self.item))
|
return _object_item_to_python(elm_multibuttonentry_item_next_get(self.item))
|
||||||
|
|
||||||
|
cdef void _py_elm_mbe_item_added_cb(
|
||||||
|
void *data, Evas_Object *o, void *event_info) with gil:
|
||||||
|
cdef:
|
||||||
|
MultiButtonEntryItem it
|
||||||
|
Elm_Object_Item *item = <Elm_Object_Item *>event_info
|
||||||
|
|
||||||
|
if elm_object_item_data_get(item) == NULL:
|
||||||
|
it = MultiButtonEntryItem.__new__(MultiButtonEntryItem)
|
||||||
|
it._set_obj(item)
|
||||||
|
|
||||||
cdef class MultiButtonEntry(Object):
|
cdef class MultiButtonEntry(Object):
|
||||||
|
|
||||||
"""This is the class that actually implements the widget."""
|
"""This is the class that actually implements the widget."""
|
||||||
|
|
||||||
def __init__(self, evasObject parent, *args, **kwargs):
|
def __init__(self, evasObject parent, *args, **kwargs):
|
||||||
self._set_obj(elm_multibuttonentry_add(parent.obj))
|
self._set_obj(elm_multibuttonentry_add(parent.obj))
|
||||||
|
evas_object_smart_callback_add(
|
||||||
|
self.obj, "item,added",
|
||||||
|
_py_elm_mbe_item_added_cb, NULL
|
||||||
|
)
|
||||||
self._set_properties_from_keyword_args(kwargs)
|
self._set_properties_from_keyword_args(kwargs)
|
||||||
#
|
|
||||||
# TODO: Add callbacks for item added and item deleted, inject
|
|
||||||
# the python instance into Elm_Object_Item's data
|
|
||||||
#
|
|
||||||
|
|
||||||
property entry:
|
property entry:
|
||||||
"""The Entry object child of the multibuttonentry.
|
"""The Entry object child of the multibuttonentry.
|
||||||
|
@ -470,28 +488,28 @@ cdef class MultiButtonEntry(Object):
|
||||||
Py_INCREF(cbdata)
|
Py_INCREF(cbdata)
|
||||||
|
|
||||||
def callback_item_selected_add(self, func, *args, **kwargs):
|
def callback_item_selected_add(self, func, *args, **kwargs):
|
||||||
self._callback_add("item,selected", func, *args, **kwargs)
|
self._callback_add_full("item,selected", _cb_object_item_conv, func, *args, **kwargs)
|
||||||
|
|
||||||
def callback_item_selected_del(self, func):
|
def callback_item_selected_del(self, func):
|
||||||
self._callback_del("item,selected", func)
|
self._callback_del_full("item,selected", _cb_object_item_conv, func)
|
||||||
|
|
||||||
def callback_item_added_add(self, func, *args, **kwargs):
|
def callback_item_added_add(self, func, *args, **kwargs):
|
||||||
self._callback_add("item,added", func, *args, **kwargs)
|
self._callback_add_full("item,added", _cb_object_item_conv, func, *args, **kwargs)
|
||||||
|
|
||||||
def callback_item_added_del(self, func):
|
def callback_item_added_del(self, func):
|
||||||
self._callback_del("item,added", func)
|
self._callback_del_full("item,added", _cb_object_item_conv, func)
|
||||||
|
|
||||||
def callback_item_deleted_add(self, func, *args, **kwargs):
|
def callback_item_deleted_add(self, func, *args, **kwargs):
|
||||||
self._callback_add("item,deleted", func, *args, **kwargs)
|
self._callback_add_full("item,deleted", _cb_object_item_conv, func, *args, **kwargs)
|
||||||
|
|
||||||
def callback_item_deleted_del(self, func):
|
def callback_item_deleted_del(self, func):
|
||||||
self._callback_del("item,deleted", func)
|
self._callback_del_full("item,deleted", _cb_object_item_conv, func)
|
||||||
|
|
||||||
def callback_item_clicked_add(self, func, *args, **kwargs):
|
def callback_item_clicked_add(self, func, *args, **kwargs):
|
||||||
self._callback_add("item,clicked", func, *args, **kwargs)
|
self._callback_add_full("item,clicked", _cb_object_item_conv, func, *args, **kwargs)
|
||||||
|
|
||||||
def callback_item_clicked_del(self, func):
|
def callback_item_clicked_del(self, func):
|
||||||
self._callback_del("item,clicked", func)
|
self._callback_del_full("item,clicked", _cb_object_item_conv, func)
|
||||||
|
|
||||||
def callback_clicked_add(self, func, *args, **kwargs):
|
def callback_clicked_add(self, func, *args, **kwargs):
|
||||||
self._callback_add("clicked", func, *args, **kwargs)
|
self._callback_add("clicked", func, *args, **kwargs)
|
||||||
|
|
|
@ -102,7 +102,7 @@ Focus direction
|
||||||
|
|
||||||
.. versionadded:: 1.8.1
|
.. versionadded:: 1.8.1
|
||||||
|
|
||||||
.. _Elm_Focus_Move_Policy
|
.. _Elm_Focus_Move_Policy:
|
||||||
|
|
||||||
Focus move policy
|
Focus move policy
|
||||||
=================
|
=================
|
||||||
|
@ -119,7 +119,7 @@ Focus move policy
|
||||||
|
|
||||||
.. versionadded:: 1.10
|
.. versionadded:: 1.10
|
||||||
|
|
||||||
.. _Elm_Focus_Autoscroll_Mode
|
.. _Elm_Focus_Autoscroll_Mode:
|
||||||
|
|
||||||
Focus autoscroll mode
|
Focus autoscroll mode
|
||||||
=====================
|
=====================
|
||||||
|
|
|
@ -477,12 +477,11 @@ cdef class ObjectItem(object):
|
||||||
def tooltip_content_cb_set(self, func, *args, **kargs):
|
def tooltip_content_cb_set(self, func, *args, **kargs):
|
||||||
"""Set the content to be shown in the tooltip object
|
"""Set the content to be shown in the tooltip object
|
||||||
|
|
||||||
Setup the tooltip to object. The object can have only one tooltip,
|
Setup the tooltip to object. The object can have only one tooltip, so
|
||||||
so any previews tooltip data is removed. ``func(owner, tooltip,
|
any previews tooltip data is removed. ``func(owner, item, tooltip,
|
||||||
args, kargs)`` will be called every time that need show the tooltip
|
args, kargs)`` will be called every time that need show the tooltip and
|
||||||
and it should return a valid Evas_Object. This object is then
|
it should return a valid Evas_Object. This object is then managed fully
|
||||||
managed fully by tooltip system and is deleted when the tooltip is
|
by tooltip system and is deleted when the tooltip is gone.
|
||||||
gone.
|
|
||||||
|
|
||||||
:param func: Function to be create tooltip content, called when
|
:param func: Function to be create tooltip content, called when
|
||||||
need show tooltip.
|
need show tooltip.
|
||||||
|
@ -495,8 +494,8 @@ cdef class ObjectItem(object):
|
||||||
cdef void *cbdata
|
cdef void *cbdata
|
||||||
|
|
||||||
data = (func, args, kargs)
|
data = (func, args, kargs)
|
||||||
# FIXME: refleak
|
|
||||||
Py_INCREF(data)
|
Py_INCREF(data)
|
||||||
|
# DECREF is in data_del_cb
|
||||||
cbdata = <void *>data
|
cbdata = <void *>data
|
||||||
elm_object_item_tooltip_content_cb_set(self.item, _tooltip_item_content_create,
|
elm_object_item_tooltip_content_cb_set(self.item, _tooltip_item_content_create,
|
||||||
cbdata, _tooltip_item_data_del_cb)
|
cbdata, _tooltip_item_data_del_cb)
|
||||||
|
|
|
@ -42,7 +42,7 @@ cdef Evas_Object *_tooltip_item_content_create(void *data, Evas_Object *o, Evas_
|
||||||
tooltip = object_from_instance(t)
|
tooltip = object_from_instance(t)
|
||||||
item = _object_item_to_python(<Elm_Object_Item *>it)
|
item = _object_item_to_python(<Elm_Object_Item *>it)
|
||||||
(func, args, kargs) = <object>data
|
(func, args, kargs) = <object>data
|
||||||
ret = func(obj, item, *args, **kargs)
|
ret = func(obj, item, tooltip, *args, **kargs)
|
||||||
if not ret:
|
if not ret:
|
||||||
return NULL
|
return NULL
|
||||||
return ret.obj
|
return ret.obj
|
||||||
|
|
|
@ -508,7 +508,7 @@ cdef class Window(Object):
|
||||||
:return type: Elm_Win_Type
|
:return type: Elm_Win_Type
|
||||||
|
|
||||||
.. versionadded: 1.9
|
.. versionadded: 1.9
|
||||||
|
|
||||||
"""
|
"""
|
||||||
return elm_win_type_get(self.obj)
|
return elm_win_type_get(self.obj)
|
||||||
|
|
||||||
|
@ -836,7 +836,7 @@ cdef class Window(Object):
|
||||||
"""
|
"""
|
||||||
def __set__(self, list profiles):
|
def __set__(self, list profiles):
|
||||||
cdef:
|
cdef:
|
||||||
const char **array
|
const char **array = NULL
|
||||||
unsigned int arr_len = len(profiles)
|
unsigned int arr_len = len(profiles)
|
||||||
unsigned int i
|
unsigned int i
|
||||||
|
|
||||||
|
@ -862,7 +862,7 @@ cdef class Window(Object):
|
||||||
|
|
||||||
def available_profiles_set(self, list profiles):
|
def available_profiles_set(self, list profiles):
|
||||||
cdef:
|
cdef:
|
||||||
const char **array
|
const char **array = NULL
|
||||||
unsigned int arr_len = len(profiles)
|
unsigned int arr_len = len(profiles)
|
||||||
unsigned int i
|
unsigned int i
|
||||||
|
|
||||||
|
|
|
@ -223,11 +223,10 @@ cdef class Emotion(evasObject):
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
x, y, w, h = self.geometry_get()
|
x, y, w, h = self.geometry_get()
|
||||||
r, g, b, a = self.color_get()
|
r, g, b, a = self.color_get()
|
||||||
return ("<%s(%#x, type=%r, name=%r, "
|
return ("<%s(%#x, name=%r, file=%r, geometry=(%d, %d, %d, %d), "
|
||||||
"file=%r, geometry=(%d, %d, %d, %d), "
|
|
||||||
"color=(%d, %d, %d, %d), layer=%s, clip=%r, visible=%s) %s>") % \
|
"color=(%d, %d, %d, %d), layer=%s, clip=%r, visible=%s) %s>") % \
|
||||||
(self.__class__.__name__, <uintptr_t><void *>self,
|
(self.__class__.__name__, <uintptr_t><void *>self,
|
||||||
self.type_get(), self.name_get(), self.file_get(),
|
self.name_get(), self.file_get(),
|
||||||
x, y, w, h, r, g, b, a,
|
x, y, w, h, r, g, b, a,
|
||||||
self.layer_get(), self.clip_get(), self.visible_get(),
|
self.layer_get(), self.clip_get(), self.visible_get(),
|
||||||
evasObject.__repr__(self))
|
evasObject.__repr__(self))
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
# along with this Python-EFL. If not, see <http://www.gnu.org/licenses/>.
|
# along with this Python-EFL. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
cimport efl.evas.enums as enums
|
cimport efl.evas.enums as enums
|
||||||
|
from efl.utils.conversions cimport eina_list_strings_to_python_list
|
||||||
|
|
||||||
EVAS_LAYER_MIN = enums.EVAS_LAYER_MIN
|
EVAS_LAYER_MIN = enums.EVAS_LAYER_MIN
|
||||||
EVAS_LAYER_MAX = enums.EVAS_LAYER_MAX
|
EVAS_LAYER_MAX = enums.EVAS_LAYER_MAX
|
||||||
|
@ -310,14 +311,7 @@ def font_path_global_list():
|
||||||
.. versionadded: 1.10
|
.. versionadded: 1.10
|
||||||
|
|
||||||
"""
|
"""
|
||||||
cdef Eina_List *lst = evas_font_path_global_list()
|
return eina_list_strings_to_python_list(evas_font_path_global_list())
|
||||||
|
|
||||||
ret = []
|
|
||||||
while lst != NULL:
|
|
||||||
ret.append(<char*> lst.data)
|
|
||||||
lst = lst.next
|
|
||||||
|
|
||||||
return ret
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
2
setup.py
2
setup.py
|
@ -13,7 +13,7 @@ script_path = os.path.dirname(os.path.abspath(__file__))
|
||||||
|
|
||||||
# python-efl version
|
# python-efl version
|
||||||
VERSION = "1.10"
|
VERSION = "1.10"
|
||||||
RELEASE = "1.10.0"
|
RELEASE = "1.10.1"
|
||||||
|
|
||||||
# Add git commit count for dev builds
|
# Add git commit count for dev builds
|
||||||
if RELEASE.split(".")[2] == "99":
|
if RELEASE.split(".")[2] == "99":
|
||||||
|
|
Loading…
Reference in New Issue