# Copyright (C) 2007-2015 various contributors (see AUTHORS)
#
# This file is part of Python-EFL.
#
# Python-EFL is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 3 of the License, or (at your option) any later version.
#
# Python-EFL is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this Python-EFL. If not, see .
#from cpython cimport PyObject, Py_INCREF, Py_DECREF
from cpython cimport PyMem_Malloc, PyMem_Free, PyUnicode_AsUTF8String
from efl.utils.deprecated cimport DEPRECATED
def init(name=None):
"""Initialize the X display connection to the given display.
:param name: display target name, if None, default will be used.
:rtype: int
"""
cdef int i
if isinstance(name, unicode): name = PyUnicode_AsUTF8String(name)
i = ecore_x_init(name if name is not None else NULL)
x_events_register()
return i
def shutdown():
"""Shuts down the Ecore X library.
In shutting down the library, the X display connection is terminated
and any event handlers for it are removed.
:rtype: int
"""
return ecore_x_shutdown()
def disconnect():
"""Shuts down the Ecore X library.
As ecore_x_shutdown, except do not close Display, only connection.
:rtype: int
"""
return ecore_x_disconnect()
def fd_get():
"""Retrieves the X display file descriptor.
:rtype: int
"""
return ecore_x_fd_get()
def double_click_time_set(double t):
"""Sets the timeout for a double and triple clicks to be flagged.
This sets the time between clicks before the double_click flag is
set in a button down event. If 3 clicks occur within double this
time, the triple_click flag is also set.
"""
ecore_x_double_click_time_set(t)
def double_click_time_get():
":rtype: float"
return ecore_x_double_click_time_get()
def flush():
"Sends all X commands in the X Display buffer."
ecore_x_flush()
def sync():
"Flushes the command buffer and waits until all requests have been"
ecore_x_sync()
def current_time_get():
"Return the last event time."
return ecore_x_current_time_get()
def error_request_get():
"""Get the request code that caused the error.
:rtype: int
"""
return ecore_x_error_request_get()
def error_code_get():
"""Get the error code from the error.
:rtype: int
"""
return ecore_x_error_code_get()
def window_focus_get():
"""Returns the window that has the focus.
:rtype: L{Window}
"""
cdef Ecore_X_Window xid
xid = ecore_x_window_focus_get()
return Window_from_xid(xid)
cdef int _skip_list_build(skip_list, Ecore_X_Window **pskips, int *pskip_num) except 0:
cdef Window win
cdef int i
if skip_list:
pskip_num[0] = len(skip_list)
else:
pskip_num[0] = 0
if pskip_num[0] == 0:
pskips[0] = NULL
return 1
else:
pskips[0] = PyMem_Malloc(pskip_num[0] * sizeof(Ecore_X_Window))
i = 0
try:
for w in skip_list:
win = w
pskips[0][i] = win.xid
i += 1
except:
pskip_num[0] = 0
PyMem_Free(pskips[0])
raise
return 1
def window_shadow_tree_at_xy_with_skip_get(Window base, int x, int y, skip_list=None):
"""Retrieves the top, visible window at the given location,
but skips the windows in the list. This uses a shadow tree built from the
window tree that is only updated the first time
L{window_shadow_tree_at_xy_with_skip_get()} is called, or the next time
it is called after a L{window_shadow_tree_flush()}.
:param base: Window to use as base, or None to use root window.
:param x: The given X position.
:param y: The given Y position.
:rtype: Window
"""
cdef:
Ecore_X_Window base_xid, ret_xid
Ecore_X_Window *skips
int skip_num
if base is None:
base_xid = 0
else:
base_xid = base.xid
_skip_list_build(skip_list, &skips, &skip_num)
ret_xid = ecore_x_window_shadow_tree_at_xy_with_skip_get(base_xid, x, y,
skips, skip_num)
if skips != NULL:
PyMem_Free(skips)
return Window_from_xid(ret_xid)
def window_shadow_tree_flush():
"Flushes the window shadow tree so nothing is stored."
ecore_x_window_shadow_tree_flush()
def window_at_xy_get(int x, int y):
"""Retrieves the top, visible window at the given location.
:param x: horizontal position.
:param y: vertical position.
:rtype: Window
"""
cdef Ecore_X_Window xid
xid = ecore_x_window_at_xy_get(x, y)
return Window_from_xid(xid)
def window_at_xy_with_skip_get(int x, int y, skip_list=None):
"""Retrieves the top, visible window at the given location.
:param x: horizontal position.
:param y: vertical position.
:rtype: Window
"""
cdef:
Ecore_X_Window xid
Ecore_X_Window *skips
int skip_num
_skip_list_build(skip_list, &skips, &skip_num)
xid = ecore_x_window_at_xy_with_skip_get(x, y, skips, skip_num)
if skips != NULL:
PyMem_Free(skips)
return Window_from_xid(xid)
def window_at_xy_begin_get(Window begin, int x, int y):
"""Retrieves the top, visible window at the given location, starting from
begin.
:param begin: Window to start at.
:param x: horizontal position.
:param y: vertical position.
:rtype: Window
"""
cdef Ecore_X_Window xid, begin_xid
if begin is None:
begin_xid = 0
else:
begin_xid = begin.xid
xid = ecore_x_window_at_xy_begin_get(begin_xid, x, y)
return Window_from_xid(xid)
def keyboard_ungrab():
ecore_x_keyboard_ungrab()
def screensaver_event_available_get():
""" .. versionadded:: 1.11 """
return bool(ecore_x_screensaver_event_available_get())
def screensaver_idle_time_get():
""" .. versionadded:: 1.11 """
return ecore_x_screensaver_idle_time_get()
def screensaver_set(int timeout, int interval, int prefer_blanking, int allow_exposures):
""" .. versionadded:: 1.11 """
ecore_x_screensaver_set(timeout, interval, prefer_blanking, allow_exposures)
def screensaver_timeout_set(int timeout):
""" .. versionadded:: 1.11 """
ecore_x_screensaver_timeout_set(timeout)
def screensaver_timeout_get():
""" .. versionadded:: 1.11 """
return ecore_x_screensaver_timeout_get()
def screensaver_blank_set(int timeout):
""" .. versionadded:: 1.11 """
ecore_x_screensaver_blank_set(timeout)
def screensaver_blank_get():
""" .. versionadded:: 1.11 """
return ecore_x_screensaver_blank_get()
def screensaver_expose_set(int timeout):
""" .. versionadded:: 1.11 """
ecore_x_screensaver_expose_set(timeout)
def screensaver_expose_get():
""" .. versionadded:: 1.11 """
return ecore_x_screensaver_expose_get()
def screensaver_interval_set(int timeout):
""" .. versionadded:: 1.11 """
ecore_x_screensaver_interval_set(timeout)
def screensaver_interval_get():
""" .. versionadded:: 1.11 """
return ecore_x_screensaver_interval_get()
def screensaver_event_listen_set(Eina_Bool on):
""" .. versionadded:: 1.11 """
ecore_x_screensaver_event_listen_set(on)
def screensaver_custom_blanking_enable():
""" .. versionadded:: 1.11 """
return bool(ecore_x_screensaver_custom_blanking_enable())
def screensaver_custom_blanking_disable():
""" .. versionadded:: 1.11 """
return bool(ecore_x_screensaver_custom_blanking_disable())
@DEPRECATED("1.14", "Use screensaver_suspend() instead.")
def screensaver_supend():
""" .. versionadded:: 1.11 """
ecore_x_screensaver_suspend()
def screensaver_suspend():
""" .. versionadded:: 1.14 """
ecore_x_screensaver_suspend()
def screensaver_resume():
""" .. versionadded:: 1.11 """
ecore_x_screensaver_resume()
def cursor_shape_get(int shape):
"""
:param int shape: The shape ID (check Ecore_X_Cursor.h for these)
:return: The cursor id
:rtype: Ecore_X_Cursor
.. versionadded:: 1.14
"""
return ecore_x_cursor_shape_get(shape)
def cursor_free(Ecore_X_Cursor c):
"""
:param Ecore_X_Cursor c: The cursor ID
.. versionadded:: 1.14
"""
include "efl.ecore_x_window.pxi"
include "efl.ecore_x_events.pxi"