From: Enlightenment S. <no-...@en...> - 2011-07-14 15:35:52
|
Log: Ecore_X: Add new xcb code (still not 100% complete tho). Author: devilhorns Date: 2011-07-14 08:35:42 -0700 (Thu, 14 Jul 2011) New Revision: 61376 Trac: http://trac.enlightenment.org/e/changeset/61376 Added: trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_atoms.c trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_error.c trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_extensions.c trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_image.c trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_input.c trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_keymap.c trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_render.c trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_textlist.c trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_vsync.c trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_window_shape.c trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_xfixes.c trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_xtest.c Removed: trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_reply.c Modified: trunk/ecore/src/lib/ecore_x/xcb/Makefile.am trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb.c trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_composite.c trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_cursor.c trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_damage.c trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_dnd.c trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_dpms.c trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_drawable.c trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_e.c trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_events.c trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_gc.c trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_icccm.c trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_mwm.c trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_netwm.c trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_pixmap.c trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_private.h trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_randr.c trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_region.c trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_screensaver.c trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_selection.c trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_shape.c trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_sync.c trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_window.c trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_window_prop.c trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_window_shadow.c trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_xinerama.c Modified: trunk/ecore/src/lib/ecore_x/xcb/Makefile.am =================================================================== --- trunk/ecore/src/lib/ecore_x/xcb/Makefile.am 2011-07-14 15:31:24 UTC (rev 61375) +++ trunk/ecore/src/lib/ecore_x/xcb/Makefile.am 2011-07-14 15:35:42 UTC (rev 61376) @@ -1,79 +1,93 @@ -MAINTAINERCLEANFILES = Makefile.in +MAINTAINERCLEANFILES = Makefile.in ecore_xcb_keysym_table.h if BUILD_ECORE_X_XCB AM_CPPFLAGS = \ -@XCB_DAMAGE_CFLAGS@ \ -@XCB_COMPOSITE_CFLAGS@ \ -@XCB_DPMS_CFLAGS@ \ -@XCB_RANDR_CFLAGS@ \ -@XCB_RENDER_CFLAGS@ \ -@XCB_SCREENSAVER_CFLAGS@ \ -@XCB_SHAPE_CFLAGS@ \ -@XCB_SYNC_CFLAGS@ \ -@XCB_XFIXES_CFLAGS@ \ -@XCB_XINERAMA_CFLAGS@ \ -@XCB_XPRINT_CFLAGS@ \ -@XCB_XTEST_CFLAGS@ \ -@XCB_CFLAGS@ \ --I$(top_srcdir)/src/lib/ecore \ --I$(top_srcdir)/src/lib/ecore_x \ --I$(top_srcdir)/src/lib/ecore_input \ --I$(top_builddir)/src/lib/ecore \ --I$(top_builddir)/src/lib/ecore_x \ --I$(top_builddir)/src/lib/ecore_input \ -@EVAS_CFLAGS@ \ -@EINA_CFLAGS@ + @XCB_DAMAGE_CFLAGS@ \ + @XCB_COMPOSITE_CFLAGS@ \ + @XCB_DPMS_CFLAGS@ \ + @XCB_RANDR_CFLAGS@ \ + @XCB_RENDER_CFLAGS@ \ + @XCB_SCREENSAVER_CFLAGS@ \ + @XCB_SHAPE_CFLAGS@ \ + @XCB_SYNC_CFLAGS@ \ + @XCB_XFIXES_CFLAGS@ \ + @XCB_XINERAMA_CFLAGS@ \ + @XCB_XPRINT_CFLAGS@ \ + @XCB_XTEST_CFLAGS@ \ + @XCB_XINPUT_CFLAGS@ \ + @XCB_CURSOR_CFLAGS@ \ + @XCB_DRI_CFLAGS@ \ + @XCB_CFLAGS@ \ + -I$(top_srcdir)/src/lib/ecore \ + -I$(top_srcdir)/src/lib/ecore_x \ + -I$(top_srcdir)/src/lib/ecore_input \ + -I$(top_builddir)/src/lib/ecore \ + -I$(top_builddir)/src/lib/ecore_x \ + -I$(top_builddir)/src/lib/ecore_input \ + @EINA_CFLAGS@ noinst_LTLIBRARIES = libecore_x_xcb.la libecore_x_xcb_la_SOURCES = \ -ecore_xcb_atom.c \ -ecore_xcb_cursor.c \ -ecore_xcb_damage.c \ -ecore_xcb_composite.c \ -ecore_xcb_dnd.c \ -ecore_xcb_dpms.c \ -ecore_xcb_drawable.c \ -ecore_xcb_e.c \ -ecore_xcb_events.c \ -ecore_xcb_fixes.c \ -ecore_xcb_gc.c \ -ecore_xcb_icccm.c \ -ecore_xcb_mwm.c \ -ecore_xcb_netwm.c \ -ecore_xcb_pixmap.c \ -ecore_xcb_randr.c \ -ecore_xcb_region.c \ -ecore_xcb_reply.c \ -ecore_xcb_screensaver.c \ -ecore_xcb_selection.c \ -ecore_xcb_shape.c \ -ecore_xcb_sync.c \ -ecore_xcb_window.c \ -ecore_xcb_window_prop.c \ -ecore_xcb_window_shadow.c \ -ecore_xcb_xinerama.c \ -ecore_xcb.c + ecore_xcb.c \ + ecore_xcb_atoms.c \ + ecore_xcb_extensions.c \ + ecore_xcb_shape.c \ + ecore_xcb_screensaver.c \ + ecore_xcb_sync.c \ + ecore_xcb_render.c \ + ecore_xcb_randr.c \ + ecore_xcb_xfixes.c \ + ecore_xcb_composite.c \ + ecore_xcb_cursor.c \ + ecore_xcb_damage.c \ + ecore_xcb_dnd.c \ + ecore_xcb_dpms.c \ + ecore_xcb_drawable.c \ + ecore_xcb_e.c \ + ecore_xcb_gc.c \ + ecore_xcb_image.c \ + ecore_xcb_input.c \ + ecore_xcb_mwm.c \ + ecore_xcb_pixmap.c \ + ecore_xcb_region.c \ + ecore_xcb_selection.c \ + ecore_xcb_textlist.c \ + ecore_xcb_events.c \ + ecore_xcb_keymap.c \ + ecore_xcb_netwm.c \ + ecore_xcb_icccm.c \ + ecore_xcb_window.c \ + ecore_xcb_window_prop.c \ + ecore_xcb_window_shape.c \ + ecore_xcb_window_shadow.c \ + ecore_xcb_xinerama.c \ + ecore_xcb_error.c \ + ecore_xcb_xtest.c \ + ecore_xcb_vsync.c libecore_x_xcb_la_LIBADD = \ -@XCB_DAMAGE_LIBS@ \ -@XCB_COMPOSITE_LIBS@ \ -@XCB_DPMS_LIBS@ \ -@XCB_RANDR_LIBS@ \ -@XCB_RENDER_LIBS@ \ -@XCB_SCREENSAVER_LIBS@ \ -@XCB_SHAPE_LIBS@ \ -@XCB_SYNC_LIBS@ \ -@XCB_XFIXES_LIBS@ \ -@XCB_XINERAMA_LIBS@ \ -@XCB_XPRINT_LIBS@ \ -@XCB_XTEST_LIBS@ \ -@XCB_LIBS@ \ -$(top_builddir)/src/lib/ecore/libecore.la \ -$(top_builddir)/src/lib/ecore_input/libecore_input.la \ -@EINA_LIBS@ + @XCB_DAMAGE_LIBS@ \ + @XCB_COMPOSITE_LIBS@ \ + @XCB_DPMS_LIBS@ \ + @XCB_RANDR_LIBS@ \ + @XCB_RENDER_LIBS@ \ + @XCB_SCREENSAVER_LIBS@ \ + @XCB_SHAPE_LIBS@ \ + @XCB_SYNC_LIBS@ \ + @XCB_XFIXES_LIBS@ \ + @XCB_XINERAMA_LIBS@ \ + @XCB_XPRINT_LIBS@ \ + @XCB_XTEST_LIBS@ \ + @XCB_XINPUT_LIBS@ \ + @XCB_CURSOR_LIBS@ \ + @XCB_DRI_LIBS@ \ + @XCB_LIBS@ \ + $(top_builddir)/src/lib/ecore/libecore.la \ + $(top_builddir)/src/lib/ecore_input/libecore_input.la \ + @EINA_LIBS@ endif Modified: trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb.c =================================================================== --- trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb.c 2011-07-14 15:31:24 UTC (rev 61375) +++ trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb.c 2011-07-14 15:35:42 UTC (rev 61376) @@ -1,130 +1,27 @@ -#include <string.h> - -#include <X11/keysym.h> - -#include <Ecore.h> -#include <Ecore_Input.h> - #include "ecore_xcb_private.h" -#include "Ecore_X_Atoms.h" -static Eina_Bool _ecore_xcb_fd_handler(void *data, Ecore_Fd_Handler *fd_handler); -static Eina_Bool _ecore_xcb_fd_handler_buf(void *data, Ecore_Fd_Handler *fd_handler); -static int _ecore_xcb_key_mask_get(xcb_keysym_t sym); -static int _ecore_xcb_event_modifier(unsigned int state); +/* local function prototypes */ +static int _ecore_xcb_shutdown(Eina_Bool close_display); +static Eina_Bool _ecore_xcb_fd_handle(void *data, Ecore_Fd_Handler *hdlr __UNUSED__); +static Eina_Bool _ecore_xcb_fd_handle_buff(void *data, Ecore_Fd_Handler *hdlr __UNUSED__); -static void * _ecore_xcb_event_filter_start(void *data); -static Eina_Bool _ecore_xcb_event_filter_filter(void *data, void *loop_data,int type, void *event); -static void _ecore_xcb_event_filter_end(void *data, void *loop_data); - -static Ecore_Fd_Handler *_ecore_xcb_fd_handler_handle = NULL; -static Ecore_Event_Filter *_ecore_xcb_filter_handler = NULL; - -static const int XCB_EVENT_ANY = 0; /* 0 can be used as there are no event types - * with index 0 and 1 as they are used for - * errors - */ - -#ifdef ECORE_XCB_DAMAGE -static int _ecore_xcb_event_damage_id = 0; -#endif /* ECORE_XCB_DAMAGE */ -#ifdef ECORE_XCB_RANDR -static int _ecore_xcb_event_randr_id = 0; -#endif /* ECORE_XCB_RANDR */ -#ifdef ECORE_XCB_SCREENSAVER -static int _ecore_xcb_event_screensaver_id = 0; -#endif /* ECORE_XCB_SCREENSAVER */ -#ifdef ECORE_XCB_SHAPE -static int _ecore_xcb_event_shape_id = 0; -#endif /* ECORE_XCB_SHAPE */ -#ifdef ECORE_XCB_SYNC -static int _ecore_xcb_event_sync_id = 0; -#endif /* ECORE_XCB_SYNC */ -#ifdef ECORE_XCB_FIXES -static int _ecore_xcb_event_fixes_selection_id = 0; -#endif /* ECORE_XCB_FIXES */ - -static int _ecore_xcb_event_handlers_num = 0; -static void (**_ecore_xcb_event_handlers) (xcb_generic_event_t * event) = NULL; -static xcb_generic_event_t *_ecore_xcb_event_buffered = NULL; - +/* local variables */ static int _ecore_xcb_init_count = 0; static int _ecore_xcb_grab_count = 0; -int _ecore_x11xcb_log_dom = -1; +static Ecore_Fd_Handler *_ecore_xcb_fd_handler = NULL; +static xcb_generic_event_t *_ecore_xcb_event_buffered = NULL; +/* external variables */ +int _ecore_xcb_log_dom = -1; +Ecore_X_Display *_ecore_xcb_display = NULL; Ecore_X_Connection *_ecore_xcb_conn = NULL; Ecore_X_Screen *_ecore_xcb_screen = NULL; +int _ecore_xcb_event_handlers_num = 0; +Ecore_X_Atom _ecore_xcb_atoms_wm_protocol[ECORE_X_WM_PROTOCOL_NUM]; double _ecore_xcb_double_click_time = 0.25; -Ecore_X_Time _ecore_xcb_event_last_time = XCB_NONE; -Ecore_X_Window _ecore_xcb_event_last_window = XCB_NONE; -int16_t _ecore_xcb_event_last_root_x = 0; -int16_t _ecore_xcb_event_last_root_y = 0; -int _ecore_xcb_xcursor = 0; -Ecore_X_Window _ecore_xcb_private_window = 0; - -/* FIXME - These are duplicates after making ecore atoms public */ - -Ecore_X_Atom _ecore_xcb_atoms_wm_protocols[ECORE_X_WM_PROTOCOL_NUM]; - -EAPI int ECORE_X_EVENT_ANY = 0; -EAPI int ECORE_X_EVENT_MOUSE_IN = 0; -EAPI int ECORE_X_EVENT_MOUSE_OUT = 0; -EAPI int ECORE_X_EVENT_WINDOW_FOCUS_IN = 0; -EAPI int ECORE_X_EVENT_WINDOW_FOCUS_OUT = 0; -EAPI int ECORE_X_EVENT_WINDOW_KEYMAP = 0; -EAPI int ECORE_X_EVENT_WINDOW_DAMAGE = 0; -EAPI int ECORE_X_EVENT_WINDOW_VISIBILITY_CHANGE = 0; -EAPI int ECORE_X_EVENT_WINDOW_CREATE = 0; -EAPI int ECORE_X_EVENT_WINDOW_DESTROY = 0; -EAPI int ECORE_X_EVENT_WINDOW_HIDE = 0; -EAPI int ECORE_X_EVENT_WINDOW_SHOW = 0; -EAPI int ECORE_X_EVENT_WINDOW_SHOW_REQUEST = 0; -EAPI int ECORE_X_EVENT_WINDOW_REPARENT = 0; -EAPI int ECORE_X_EVENT_WINDOW_CONFIGURE = 0; -EAPI int ECORE_X_EVENT_WINDOW_CONFIGURE_REQUEST = 0; -EAPI int ECORE_X_EVENT_WINDOW_GRAVITY = 0; -EAPI int ECORE_X_EVENT_WINDOW_RESIZE_REQUEST = 0; -EAPI int ECORE_X_EVENT_WINDOW_STACK = 0; -EAPI int ECORE_X_EVENT_WINDOW_STACK_REQUEST = 0; -EAPI int ECORE_X_EVENT_WINDOW_PROPERTY = 0; -EAPI int ECORE_X_EVENT_WINDOW_COLORMAP = 0; -EAPI int ECORE_X_EVENT_WINDOW_MAPPING = 0; -EAPI int ECORE_X_EVENT_MAPPING_CHANGE = 0; -EAPI int ECORE_X_EVENT_SELECTION_CLEAR = 0; -EAPI int ECORE_X_EVENT_SELECTION_REQUEST = 0; -EAPI int ECORE_X_EVENT_SELECTION_NOTIFY = 0; -EAPI int ECORE_X_EVENT_CLIENT_MESSAGE = 0; -EAPI int ECORE_X_EVENT_WINDOW_SHAPE = 0; -EAPI int ECORE_X_EVENT_SCREENSAVER_NOTIFY = 0; -EAPI int ECORE_X_EVENT_SYNC_COUNTER = 0; -EAPI int ECORE_X_EVENT_SYNC_ALARM = 0; -EAPI int ECORE_X_EVENT_SCREEN_CHANGE = 0; -EAPI int ECORE_X_EVENT_DAMAGE_NOTIFY = 0; - -EAPI int ECORE_X_EVENT_WINDOW_DELETE_REQUEST = 0; - -EAPI int ECORE_X_EVENT_WINDOW_MOVE_RESIZE_REQUEST = 0; -EAPI int ECORE_X_EVENT_WINDOW_STATE_REQUEST = 0; -EAPI int ECORE_X_EVENT_FRAME_EXTENTS_REQUEST = 0; -EAPI int ECORE_X_EVENT_PING = 0; -EAPI int ECORE_X_EVENT_DESKTOP_CHANGE = 0; - -EAPI int ECORE_X_EVENT_STARTUP_SEQUENCE_NEW = 0; -EAPI int ECORE_X_EVENT_STARTUP_SEQUENCE_CHANGE = 0; -EAPI int ECORE_X_EVENT_STARTUP_SEQUENCE_REMOVE = 0; - -EAPI int ECORE_X_MODIFIER_SHIFT = 0; -EAPI int ECORE_X_MODIFIER_CTRL = 0; -EAPI int ECORE_X_MODIFIER_ALT = 0; -EAPI int ECORE_X_MODIFIER_WIN = 0; - -EAPI int ECORE_X_LOCK_SCROLL = 0; -EAPI int ECORE_X_LOCK_NUM = 0; -EAPI int ECORE_X_LOCK_CAPS = 0; - /** - * @defgroup Ecore_Xcb_Init_Group X Library Init and Shutdown Functions + * @defgroup Ecore_X_Init_Group X Library Init and Shutdown Functions * * Functions that start and shut down the Ecore X Library. */ @@ -136,578 +33,147 @@ * assumed. * @return The number of times the library has been initialized without * being shut down. 0 is returned if an error occurs. - * @ingroup Ecore_Xcb_Init_Group + * @ingroup Ecore_X_Init_Group */ -EAPI int -ecore_x_init(const char *name) +EAPI int +ecore_x_init(const char *name) { - xcb_screen_iterator_t iter; - int screen; - uint32_t max_request_length; - const xcb_query_extension_reply_t *reply_big_requests; -#ifdef ECORE_XCB_DAMAGE - const xcb_query_extension_reply_t *reply_damage; -#endif /* ECORE_XCB_DAMAGE */ -#ifdef ECORE_XCB_COMPOSITE - const xcb_query_extension_reply_t *reply_composite; -#endif /* ECORE_XCB_COMPOSITE */ -#ifdef ECORE_XCB_DPMS - const xcb_query_extension_reply_t *reply_dpms; -#endif /* ECORE_XCB_DPMS */ -#ifdef ECORE_XCB_RANDR - const xcb_query_extension_reply_t *reply_randr; -#endif /* ECORE_XCB_RANDR */ -#ifdef ECORE_XCB_SCREENSAVER - const xcb_query_extension_reply_t *reply_screensaver; -#endif /* ECORE_XCB_SCREENSAVER */ -#ifdef ECORE_XCB_SHAPE - const xcb_query_extension_reply_t *reply_shape; -#endif /* ECORE_XCB_SHAPE */ -#ifdef ECORE_XCB_SYNC - xcb_sync_initialize_cookie_t cookie_sync_init; - xcb_sync_initialize_reply_t *reply_sync_init; - const xcb_query_extension_reply_t *reply_sync; -#endif /* ECORE_XCB_SYNC */ -#ifdef ECORE_XCB_FIXES - const xcb_query_extension_reply_t *reply_xfixes; -#endif /* ECORE_XCB_FIXES */ -#ifdef ECORE_XCB_XINERAMA - const xcb_query_extension_reply_t *reply_xinerama; -#endif /* ECORE_XCB_XINERAMA */ -#ifdef ECORE_XCB_XPRINT - const xcb_query_extension_reply_t *reply_xprint; -#endif /* ECORE_XCB_XPRINT */ + uint32_t mask, list[1]; - xcb_intern_atom_cookie_t atom_cookies[ECORE_X_ATOMS_COUNT]; + /* check if we have initialized already */ + if (++_ecore_xcb_init_count != 1) + return _ecore_xcb_init_count; - if (++_ecore_xcb_init_count != 1) - return _ecore_xcb_init_count; + LOGFN(__FILE__, __LINE__, __FUNCTION__); - /* We init some components (not related to XCB) */ - if (!eina_init()) - return --_ecore_xcb_init_count; + /* try to initialize eina + if (!eina_init()) return --_ecore_xcb_init_count; + */ - _ecore_x11xcb_log_dom = eina_log_domain_register - ("ecore_x", ECORE_XLIB_XCB_DEFAULT_LOG_COLOR); - if (_ecore_x11xcb_log_dom < 0) + /* try to initialize ecore */ + if (!ecore_init()) { - EINA_LOG_ERR("Impossible to create a log domain the Ecore XCB module."); - goto shutdown_eina; + /* unregister log domain */ + /* eina_log_domain_unregister(_ecore_xcb_log_dom); */ + /* _ecore_xcb_log_dom = -1; */ + /* eina_shutdown(); */ + return --_ecore_xcb_init_count; } - if (!ecore_init()) - goto shutdown_eina; - if (!ecore_event_init()) - goto shutdown_ecore; - - _ecore_xcb_conn = xcb_connect(name, &screen); - if (xcb_connection_has_error(_ecore_xcb_conn)) - goto shutdown_ecore_event; - - /* FIXME: no error code right now */ - /* _ecore_xcb_error_handler_init(); */ - - /********************/ - /* First round trip */ - /********************/ - - /* - * Non blocking stuff: - * - * 1. We request the atoms - * 2. We Prefetch the extension data - * - */ - - /* We request the atoms (non blocking) */ - _ecore_x_atom_init(atom_cookies); - - /* We prefetch all the extension data (non blocking) */ - - xcb_prefetch_extension_data(_ecore_xcb_conn, &xcb_big_requests_id); - -#ifdef ECORE_XCB_DAMAGE - xcb_prefetch_extension_data(_ecore_xcb_conn, &xcb_damage_id); -#endif /* ECORE_XCB_DAMAGE */ - -#ifdef ECORE_XCB_COMPOSITE - xcb_prefetch_extension_data(_ecore_xcb_conn, &xcb_composite_id); -#endif /* ECORE_XCB_COMPOSITE */ - -#ifdef ECORE_XCB_DPMS - xcb_prefetch_extension_data(_ecore_xcb_conn, &xcb_dpms_id); -#endif /* ECORE_XCB_DPMS */ - -#ifdef ECORE_XCB_RANDR - xcb_prefetch_extension_data(_ecore_xcb_conn, &xcb_randr_id); -#endif /* ECORE_XCB_RANDR */ - -#ifdef ECORE_XCB_SCREENSAVER - xcb_prefetch_extension_data(_ecore_xcb_conn, &xcb_screensaver_id); -#endif /* ECORE_XCB_SCREENSAVER */ - -#ifdef ECORE_XCB_SHAPE - xcb_prefetch_extension_data(_ecore_xcb_conn, &xcb_shape_id); -#endif /* ECORE_XCB_SHAPE */ - -#ifdef ECORE_XCB_SYNC - xcb_prefetch_extension_data(_ecore_xcb_conn, &xcb_sync_id); - cookie_sync_init = xcb_sync_initialize_unchecked(_ecore_xcb_conn, - XCB_SYNC_MAJOR_VERSION, - XCB_SYNC_MINOR_VERSION); -#endif /* ECORE_XCB_SYNC */ - -#ifdef ECORE_XCB_FIXES - xcb_prefetch_extension_data(_ecore_xcb_conn, &xcb_xfixes_id); -#endif /* ECORE_XCB_FIXES */ - -#ifdef ECORE_XCB_XINERAMA - xcb_prefetch_extension_data(_ecore_xcb_conn, &xcb_xinerama_id); -#endif /* ECORE_XCB_XINERAMA */ - -#ifdef ECORE_XCB_XPRINT - xcb_prefetch_extension_data(_ecore_xcb_conn, &xcb_x_print_id); -#endif /* ECORE_XCB_XPRINT */ - - _ecore_x_reply_init(); - _ecore_x_dnd_init(); - ecore_x_netwm_init(); - _ecore_x_selection_init(); - - /* There is no LASTEvent constant in XCB */ - /* LASTevent is equal to 35 */ - _ecore_xcb_event_handlers_num = 35; - - /* We get the default screen */ - iter = xcb_setup_roots_iterator(xcb_get_setup(_ecore_xcb_conn)); - for (; iter.rem; --screen, xcb_screen_next (&iter)) - if (screen == 0) - { - _ecore_xcb_screen = iter.data; - break; - } - - /* - * Blocking stuff: - * - * 1. We get the atoms - * 2. We ask for the extension data - * - */ - - /* We get the atoms (blocking) */ - _ecore_x_atom_init_finalize(atom_cookies); - - /* We then ask for the extension data (blocking) */ - reply_big_requests = xcb_get_extension_data(_ecore_xcb_conn, &xcb_big_requests_id); - -#ifdef ECORE_XCB_DAMAGE - reply_damage = xcb_get_extension_data(_ecore_xcb_conn, &xcb_damage_id); - if (reply_damage) - _ecore_xcb_event_damage_id = reply_damage->first_event + XCB_DAMAGE_NOTIFY; - - if (_ecore_xcb_event_damage_id >= _ecore_xcb_event_handlers_num) - _ecore_xcb_event_handlers_num = _ecore_xcb_event_damage_id + 1; - -#endif /* ECORE_XCB_DAMAGE */ - -#ifdef ECORE_XCB_COMPOSITE - reply_composite = xcb_get_extension_data(_ecore_xcb_conn, &xcb_composite_id); -#endif /* ECORE_XCB_COMPOSITE */ - -#ifdef ECORE_XCB_DPMS - reply_dpms = xcb_get_extension_data(_ecore_xcb_conn, &xcb_dpms_id); -#endif /* ECORE_XCB_DPMS */ - -#ifdef ECORE_XCB_RANDR - reply_randr = xcb_get_extension_data(_ecore_xcb_conn, &xcb_randr_id); - if (reply_randr) - _ecore_xcb_event_randr_id = reply_randr->first_event + XCB_RANDR_SCREEN_CHANGE_NOTIFY; - - if (_ecore_xcb_event_randr_id >= _ecore_xcb_event_handlers_num) - _ecore_xcb_event_handlers_num = _ecore_xcb_event_randr_id + 1; - -#endif /* ECORE_XCB_RANDR */ - -#ifdef ECORE_XCB_SCREENSAVER - reply_screensaver = xcb_get_extension_data(_ecore_xcb_conn, &xcb_screensaver_id); - if (reply_screensaver) - _ecore_xcb_event_screensaver_id = reply_screensaver->first_event + XCB_SCREENSAVER_NOTIFY; - - if (_ecore_xcb_event_screensaver_id >= _ecore_xcb_event_handlers_num) - _ecore_xcb_event_handlers_num = _ecore_xcb_event_screensaver_id + 1; - -#endif /* ECORE_XCB_SCREENSAVER */ - -#ifdef ECORE_XCB_SHAPE - reply_shape = xcb_get_extension_data(_ecore_xcb_conn, &xcb_shape_id); - if (reply_shape) - _ecore_xcb_event_shape_id = reply_shape->first_event + XCB_SHAPE_NOTIFY; - - if (_ecore_xcb_event_shape_id >= _ecore_xcb_event_handlers_num) - _ecore_xcb_event_handlers_num = _ecore_xcb_event_shape_id + 1; - -#endif /* ECORE_XCB_SHAPE */ - -#ifdef ECORE_XCB_SYNC - reply_sync = xcb_get_extension_data(_ecore_xcb_conn, &xcb_sync_id); - if (reply_sync) + /* setup ecore_xcb log domain */ + _ecore_xcb_log_dom = + eina_log_domain_register("ecore_x", ECORE_XCB_DEFAULT_LOG_COLOR); + if (_ecore_xcb_log_dom < 0) { - _ecore_xcb_event_sync_id = reply_sync->first_event; - reply_sync_init = xcb_sync_initialize_reply(_ecore_xcb_conn, - cookie_sync_init, NULL); - if (!reply_sync_init) - _ecore_xcb_event_sync_id = 0; - else - free(reply_sync_init); + EINA_LOG_ERR("Cannot create Ecore Xcb log domain"); + ecore_shutdown(); + return --_ecore_xcb_init_count; } - if (_ecore_xcb_event_sync_id + XCB_SYNC_ALARM_NOTIFY >= _ecore_xcb_event_handlers_num) - _ecore_xcb_event_handlers_num = _ecore_xcb_event_sync_id + XCB_SYNC_ALARM_NOTIFY + 1; - -#endif /* ECORE_XCB_SYNC */ - -#ifdef ECORE_XCB_FIXES - reply_xfixes = xcb_get_extension_data(_ecore_xcb_conn, &xcb_xfixes_id); - if (reply_xfixes) - _ecore_xcb_event_fixes_selection_id = reply_xfixes->first_event + XCB_XFIXES_SELECTION_NOTIFY; - - if (_ecore_xcb_event_fixes_selection_id >= _ecore_xcb_event_handlers_num) - _ecore_xcb_event_handlers_num = _ecore_xcb_event_fixes_selection_id + 1; - -#endif /* ECORE_XCB_FIXES */ - -#ifdef ECORE_XCB_XINERAMA - reply_xinerama = xcb_get_extension_data(_ecore_xcb_conn, &xcb_xinerama_id); -#endif /* ECORE_XCB_XINERAMA */ - -#ifdef ECORE_XCB_XPRINT - reply_xprint = xcb_get_extension_data(_ecore_xcb_conn, &xcb_x_print_id); -#endif /* ECORE_XCB_XPRINT */ - - /*********************/ - /* Second round trip */ - /*********************/ - - /* We ask for the QueryVersion request of the extensions */ -#ifdef ECORE_XCB_DAMAGE - _ecore_x_damage_init(reply_damage); -#endif /* ECORE_XCB_DAMAGE */ -#ifdef ECORE_XCB_COMPOSITE - _ecore_x_composite_init(reply_composite); -#endif /* ECORE_XCB_COMPOSITE */ -#ifdef ECORE_XCB_DPMS - _ecore_x_dpms_init(reply_dpms); -#endif /* ECORE_XCB_DPMS */ -#ifdef ECORE_XCB_RANDR - _ecore_x_randr_init(reply_randr); -#endif /* ECORE_XCB_RANDR */ -#ifdef ECORE_XCB_SCREENSAVER - _ecore_x_screensaver_init(reply_screensaver); -#endif /* ECORE_XCB_SCREENSAVER */ -#ifdef ECORE_XCB_SHAPE - _ecore_x_shape_init(reply_shape); -#endif /* ECORE_XCB_SHAPE */ -#ifdef ECORE_XCB_SYNC - _ecore_x_sync_init(reply_sync); -#endif /* ECORE_XCB_SYNC */ -#ifdef ECORE_XCB_FIXES - _ecore_x_xfixes_init(reply_xfixes); -#endif /* ECORE_XCB_FIXES */ -#ifdef ECORE_XCB_XINERAMA - _ecore_x_xinerama_init(reply_xinerama); -#endif /* ECORE_XCB_XINERAMA */ - - /* we enable the Big Request extension if present */ - max_request_length = xcb_get_maximum_request_length(_ecore_xcb_conn); - - _ecore_xcb_event_handlers = calloc(_ecore_xcb_event_handlers_num, sizeof(void *)); - if (!_ecore_xcb_event_handlers) - goto finalize_extensions; - -#ifdef ECORE_XCB_CURSOR - _ecore_xcb_xcursor = XcursorSupportsARGB(_ecore_xcb_conn); -#endif /* ECORE_XCB_CURSOR */ - - _ecore_xcb_event_handlers[XCB_EVENT_ANY] = _ecore_x_event_handle_any_event; - _ecore_xcb_event_handlers[XCB_KEY_PRESS] = _ecore_x_event_handle_key_press; - _ecore_xcb_event_handlers[XCB_KEY_RELEASE] = _ecore_x_event_handle_key_release; - _ecore_xcb_event_handlers[XCB_BUTTON_PRESS] = _ecore_x_event_handle_button_press; - _ecore_xcb_event_handlers[XCB_BUTTON_RELEASE] = _ecore_x_event_handle_button_release; - _ecore_xcb_event_handlers[XCB_MOTION_NOTIFY] = _ecore_x_event_handle_motion_notify; - _ecore_xcb_event_handlers[XCB_ENTER_NOTIFY] = _ecore_x_event_handle_enter_notify; - _ecore_xcb_event_handlers[XCB_LEAVE_NOTIFY] = _ecore_x_event_handle_leave_notify; - _ecore_xcb_event_handlers[XCB_FOCUS_IN] = _ecore_x_event_handle_focus_in; - _ecore_xcb_event_handlers[XCB_FOCUS_OUT] = _ecore_x_event_handle_focus_out; - _ecore_xcb_event_handlers[XCB_KEYMAP_NOTIFY] = _ecore_x_event_handle_keymap_notify; - _ecore_xcb_event_handlers[XCB_EXPOSE] = _ecore_x_event_handle_expose; - _ecore_xcb_event_handlers[XCB_GRAPHICS_EXPOSURE] = _ecore_x_event_handle_graphics_expose; - _ecore_xcb_event_handlers[XCB_VISIBILITY_NOTIFY] = _ecore_x_event_handle_visibility_notify; - _ecore_xcb_event_handlers[XCB_CREATE_NOTIFY] = _ecore_x_event_handle_create_notify; - _ecore_xcb_event_handlers[XCB_DESTROY_NOTIFY] = _ecore_x_event_handle_destroy_notify; - _ecore_xcb_event_handlers[XCB_UNMAP_NOTIFY] = _ecore_x_event_handle_unmap_notify; - _ecore_xcb_event_handlers[XCB_MAP_NOTIFY] = _ecore_x_event_handle_map_notify; - _ecore_xcb_event_handlers[XCB_MAP_REQUEST] = _ecore_x_event_handle_map_request; - _ecore_xcb_event_handlers[XCB_REPARENT_NOTIFY] = _ecore_x_event_handle_reparent_notify; - _ecore_xcb_event_handlers[XCB_CONFIGURE_NOTIFY] = _ecore_x_event_handle_configure_notify; - _ecore_xcb_event_handlers[XCB_CONFIGURE_REQUEST] = _ecore_x_event_handle_configure_request; - _ecore_xcb_event_handlers[XCB_GRAVITY_NOTIFY] = _ecore_x_event_handle_gravity_notify; - _ecore_xcb_event_handlers[XCB_RESIZE_REQUEST] = _ecore_x_event_handle_resize_request; - _ecore_xcb_event_handlers[XCB_CIRCULATE_NOTIFY] = _ecore_x_event_handle_circulate_notify; - _ecore_xcb_event_handlers[XCB_CIRCULATE_REQUEST] = _ecore_x_event_handle_circulate_request; - _ecore_xcb_event_handlers[XCB_PROPERTY_NOTIFY] = _ecore_x_event_handle_property_notify; - _ecore_xcb_event_handlers[XCB_SELECTION_CLEAR] = _ecore_x_event_handle_selection_clear; - _ecore_xcb_event_handlers[XCB_SELECTION_REQUEST] = _ecore_x_event_handle_selection_request; - _ecore_xcb_event_handlers[XCB_SELECTION_NOTIFY] = _ecore_x_event_handle_selection_notify; - _ecore_xcb_event_handlers[XCB_COLORMAP_NOTIFY] = _ecore_x_event_handle_colormap_notify; - _ecore_xcb_event_handlers[XCB_CLIENT_MESSAGE] = _ecore_x_event_handle_client_message; - _ecore_xcb_event_handlers[XCB_MAPPING_NOTIFY] = _ecore_x_event_handle_mapping_notify; -#ifdef ECORE_XCB_DAMAGE - if (_ecore_xcb_event_damage_id) - _ecore_xcb_event_handlers[_ecore_xcb_event_damage_id] = _ecore_x_event_handle_damage_notify; - -#endif /* ECORE_XCB_DAMAGE */ -#ifdef ECORE_XCB_RANDR - if (_ecore_xcb_event_randr_id) - _ecore_xcb_event_handlers[_ecore_xcb_event_randr_id] = _ecore_x_event_handle_randr_change; - -#endif /* ECORE_XCB_RANDR */ -#ifdef ECORE_XCB_SCREENSAVER - if (_ecore_xcb_event_screensaver_id) - _ecore_xcb_event_handlers[_ecore_xcb_event_screensaver_id] = _ecore_x_event_handle_screensaver_notify; - -#endif /* ECORE_XCB_SCREENSAVER */ -#ifdef ECORE_XCB_SHAPE - if (_ecore_xcb_event_shape_id) - _ecore_xcb_event_handlers[_ecore_xcb_event_shape_id] = _ecore_x_event_handle_shape_change; - -#endif /* ECORE_XCB_SHAPE */ -#ifdef ECORE_XCB_SYNC - if (_ecore_xcb_event_sync_id) + /* try to initialize ecore_event */ + if (!ecore_event_init()) { - _ecore_xcb_event_handlers[_ecore_xcb_event_sync_id + XCB_SYNC_COUNTER_NOTIFY] = - _ecore_x_event_handle_sync_counter; - _ecore_xcb_event_handlers[_ecore_xcb_event_sync_id + XCB_SYNC_ALARM_NOTIFY] = - _ecore_x_event_handle_sync_alarm; + /* unregister log domain */ + eina_log_domain_unregister(_ecore_xcb_log_dom); + _ecore_xcb_log_dom = -1; + ecore_shutdown(); +// eina_shutdown(); + return --_ecore_xcb_init_count; } -#endif /* ECORE_XCB_SYNC */ -#ifdef ECORE_XCB_FIXES - if (_ecore_xcb_event_fixes_selection_id) - _ecore_xcb_event_handlers[_ecore_xcb_event_fixes_selection_id] = _ecore_x_event_handle_fixes_selection_notify; + /* try to connect to the display server */ + _ecore_xcb_conn = xcb_connect(name, NULL); -#endif /* ECORE_XCB_FIXES */ + /* connect this way for opengl + _ecore_xcb_display = XOpenDisplay(name); + _ecore_xcb_conn = XGetXCBConnection(_ecore_xcb_display); + XSetEventQueueOwner(_ecore_xcb_display, XCBOwnsEventQueue); + */ - if (!ECORE_X_EVENT_ANY) + if (xcb_connection_has_error(_ecore_xcb_conn)) { - ECORE_X_EVENT_ANY = ecore_event_type_new(); - ECORE_X_EVENT_MOUSE_IN = ecore_event_type_new(); - ECORE_X_EVENT_MOUSE_OUT = ecore_event_type_new(); - ECORE_X_EVENT_WINDOW_FOCUS_IN = ecore_event_type_new(); - ECORE_X_EVENT_WINDOW_FOCUS_OUT = ecore_event_type_new(); - ECORE_X_EVENT_WINDOW_KEYMAP = ecore_event_type_new(); - ECORE_X_EVENT_WINDOW_DAMAGE = ecore_event_type_new(); - ECORE_X_EVENT_WINDOW_VISIBILITY_CHANGE = ecore_event_type_new(); - ECORE_X_EVENT_WINDOW_CREATE = ecore_event_type_new(); - ECORE_X_EVENT_WINDOW_DESTROY = ecore_event_type_new(); - ECORE_X_EVENT_WINDOW_HIDE = ecore_event_type_new(); - ECORE_X_EVENT_WINDOW_SHOW = ecore_event_type_new(); - ECORE_X_EVENT_WINDOW_SHOW_REQUEST = ecore_event_type_new(); - ECORE_X_EVENT_WINDOW_REPARENT = ecore_event_type_new(); - ECORE_X_EVENT_WINDOW_CONFIGURE = ecore_event_type_new(); - ECORE_X_EVENT_WINDOW_CONFIGURE_REQUEST = ecore_event_type_new(); - ECORE_X_EVENT_WINDOW_GRAVITY = ecore_event_type_new(); - ECORE_X_EVENT_WINDOW_RESIZE_REQUEST = ecore_event_type_new(); - ECORE_X_EVENT_WINDOW_STACK = ecore_event_type_new(); - ECORE_X_EVENT_WINDOW_STACK_REQUEST = ecore_event_type_new(); - ECORE_X_EVENT_WINDOW_PROPERTY = ecore_event_type_new(); - ECORE_X_EVENT_WINDOW_COLORMAP = ecore_event_type_new(); - ECORE_X_EVENT_WINDOW_MAPPING = ecore_event_type_new(); - ECORE_X_EVENT_MAPPING_CHANGE = ecore_event_type_new(); - ECORE_X_EVENT_SELECTION_CLEAR = ecore_event_type_new(); - ECORE_X_EVENT_SELECTION_REQUEST = ecore_event_type_new(); - ECORE_X_EVENT_SELECTION_NOTIFY = ecore_event_type_new(); - ECORE_X_EVENT_CLIENT_MESSAGE = ecore_event_type_new(); - ECORE_X_EVENT_WINDOW_SHAPE = ecore_event_type_new(); - ECORE_X_EVENT_SCREENSAVER_NOTIFY = ecore_event_type_new(); - ECORE_X_EVENT_SYNC_COUNTER = ecore_event_type_new(); - ECORE_X_EVENT_SYNC_ALARM = ecore_event_type_new(); - ECORE_X_EVENT_SCREEN_CHANGE = ecore_event_type_new(); - ECORE_X_EVENT_DAMAGE_NOTIFY = ecore_event_type_new(); - - ECORE_X_EVENT_WINDOW_DELETE_REQUEST = ecore_event_type_new(); - ECORE_X_EVENT_DESKTOP_CHANGE = ecore_event_type_new(); - ECORE_X_EVENT_WINDOW_MOVE_RESIZE_REQUEST = ecore_event_type_new(); - ECORE_X_EVENT_WINDOW_STATE_REQUEST = ecore_event_type_new(); - ECORE_X_EVENT_FRAME_EXTENTS_REQUEST = ecore_event_type_new(); - ECORE_X_EVENT_PING = ecore_event_type_new(); - - ECORE_X_EVENT_STARTUP_SEQUENCE_NEW = ecore_event_type_new(); - ECORE_X_EVENT_STARTUP_SEQUENCE_CHANGE = ecore_event_type_new(); - ECORE_X_EVENT_STARTUP_SEQUENCE_REMOVE = ecore_event_type_new(); + CRIT("XCB Connection has error"); + eina_log_domain_unregister(_ecore_xcb_log_dom); + _ecore_xcb_log_dom = -1; + ecore_event_shutdown(); + ecore_shutdown(); +// eina_shutdown(); + return --_ecore_xcb_init_count; } - /* everything has these... unless its like a pda... :) */ - ECORE_X_MODIFIER_SHIFT = _ecore_xcb_key_mask_get(XK_Shift_L); - ECORE_X_MODIFIER_CTRL = _ecore_xcb_key_mask_get(XK_Control_L); + /* grab the default screen */ + _ecore_xcb_screen = + xcb_setup_roots_iterator(xcb_get_setup(_ecore_xcb_conn)).data; - /* apple's xdarwin has no alt!!!! */ - ECORE_X_MODIFIER_ALT = _ecore_xcb_key_mask_get(XK_Alt_L); - if (!ECORE_X_MODIFIER_ALT) - ECORE_X_MODIFIER_ALT = _ecore_xcb_key_mask_get(XK_Meta_L); + /* NB: This method of init/finalize extensions first, then atoms + * Does end up being 2 round trips to X, BUT if we do extensions init then + * atoms init first, and call the 'finalize' functions later, we end up + * being slower, so it's a trade-off. This current method clocks in + * around 0.003 for fetching atoms VS 0.010 for init both then finalize */ - if (!ECORE_X_MODIFIER_ALT) - ECORE_X_MODIFIER_ALT = _ecore_xcb_key_mask_get(XK_Super_L); + /* prefetch extension data */ + _ecore_xcb_extensions_init(); - /* the windows key... a valid modifier :) */ - ECORE_X_MODIFIER_WIN = _ecore_xcb_key_mask_get(XK_Super_L); - if (!ECORE_X_MODIFIER_WIN) - ECORE_X_MODIFIER_WIN = _ecore_xcb_key_mask_get(XK_Mode_switch); + /* finalize extensions */ + _ecore_xcb_extensions_finalize(); - if (!ECORE_X_MODIFIER_WIN) - ECORE_X_MODIFIER_WIN = _ecore_xcb_key_mask_get(XK_Meta_L); + /* setup xcb events */ + _ecore_xcb_events_init(); - if (ECORE_X_MODIFIER_WIN == ECORE_X_MODIFIER_ALT) - ECORE_X_MODIFIER_WIN = 0; + /* set keyboard autorepeat */ + mask = XCB_KB_AUTO_REPEAT_MODE; + list[0] = XCB_AUTO_REPEAT_MODE_ON; + xcb_change_keyboard_control(_ecore_xcb_conn, mask, list); - if (ECORE_X_MODIFIER_ALT == ECORE_X_MODIFIER_CTRL) - ECORE_X_MODIFIER_ALT = 0; + /* setup xcb keymasks */ + _ecore_xcb_keymap_init(); - ECORE_X_LOCK_SCROLL = _ecore_xcb_key_mask_get(XK_Scroll_Lock); - ECORE_X_LOCK_NUM = _ecore_xcb_key_mask_get(XK_Num_Lock); - ECORE_X_LOCK_CAPS = _ecore_xcb_key_mask_get(XK_Caps_Lock); + /* finalize xcb keymasks */ + _ecore_xcb_keymap_finalize(); - _ecore_xcb_fd_handler_handle = - ecore_main_fd_handler_add(xcb_get_file_descriptor(_ecore_xcb_conn), - ECORE_FD_READ, - _ecore_xcb_fd_handler, _ecore_xcb_conn, - _ecore_xcb_fd_handler_buf, _ecore_xcb_conn); - if (!_ecore_xcb_fd_handler_handle) - goto free_event_handlers; + /* setup ecore fd handler */ + _ecore_xcb_fd_handler = + ecore_main_fd_handler_add(xcb_get_file_descriptor(_ecore_xcb_conn), + ECORE_FD_READ, _ecore_xcb_fd_handle, + _ecore_xcb_conn, _ecore_xcb_fd_handle_buff, + _ecore_xcb_conn); + if (!_ecore_xcb_fd_handler) + return _ecore_xcb_shutdown(EINA_TRUE); - _ecore_xcb_filter_handler = ecore_event_filter_add(_ecore_xcb_event_filter_start, _ecore_xcb_event_filter_filter, _ecore_xcb_event_filter_end, NULL); + /* prefetch atoms */ + _ecore_xcb_atoms_init(); - /* This is just to be anal about naming conventions */ + /* finalize atoms */ + _ecore_xcb_atoms_finalize(); - _ecore_xcb_atoms_wm_protocols[ECORE_X_WM_PROTOCOL_DELETE_REQUEST] = ECORE_X_ATOM_WM_DELETE_WINDOW; - _ecore_xcb_atoms_wm_protocols[ECORE_X_WM_PROTOCOL_TAKE_FOCUS] = ECORE_X_ATOM_WM_TAKE_FOCUS; - _ecore_xcb_atoms_wm_protocols[ECORE_X_NET_WM_PROTOCOL_PING] = ECORE_X_ATOM_NET_WM_PING; - _ecore_xcb_atoms_wm_protocols[ECORE_X_NET_WM_PROTOCOL_SYNC_REQUEST] = ECORE_X_ATOM_NET_WM_SYNC_REQUEST; + /* icccm_init: dummy function */ + ecore_x_icccm_init(); - _ecore_xcb_init_count++; + /* setup netwm */ + ecore_x_netwm_init(); - _ecore_xcb_private_window = ecore_x_window_override_new(0, -77, -777, 123, 456); + /* old e hints init: dummy function */ + ecore_x_e_init(); - /* We finally get the replies of the QueryVersion request */ -#ifdef ECORE_XCB_DAMAGE - _ecore_x_damage_init_finalize(); -#endif /* ECORE_XCB_DAMAGE */ -#ifdef ECORE_XCB_COMPOSITE - _ecore_x_composite_init_finalize(); -#endif /* ECORE_XCB_COMPOSITE */ -#ifdef ECORE_XCB_DPMS - _ecore_x_dpms_init_finalize(); -#endif /* ECORE_XCB_DPMS */ -#ifdef ECORE_XCB_RANDR - _ecore_x_randr_init_finalize(); -#endif /* ECORE_XCB_RANDR */ -#ifdef ECORE_XCB_SCREENSAVER - _ecore_x_screensaver_init_finalize(); -#endif /* ECORE_XCB_SCREENSAVER */ -#ifdef ECORE_XCB_SHAPE - _ecore_x_shape_init_finalize(); -#endif /* ECORE_XCB_SHAPE */ -#ifdef ECORE_XCB_SYNC - _ecore_x_sync_init_finalize(); -#endif /* ECORE_XCB_SYNC */ -#ifdef ECORE_XCB_FIXES - _ecore_x_xfixes_init_finalize(); -#endif /* ECORE_XCB_FIXES */ -#ifdef ECORE_XCB_XINERAMA - _ecore_x_xinerama_init_finalize(); -#endif /* ECORE_XCB_XINERAMA */ + _ecore_xcb_atoms_wm_protocol[ECORE_X_WM_PROTOCOL_DELETE_REQUEST] = + ECORE_X_ATOM_WM_DELETE_WINDOW; + _ecore_xcb_atoms_wm_protocol[ECORE_X_WM_PROTOCOL_TAKE_FOCUS] = + ECORE_X_ATOM_WM_TAKE_FOCUS; + _ecore_xcb_atoms_wm_protocol[ECORE_X_NET_WM_PROTOCOL_PING] = + ECORE_X_ATOM_NET_WM_PING; + _ecore_xcb_atoms_wm_protocol[ECORE_X_NET_WM_PROTOCOL_SYNC_REQUEST] = + ECORE_X_ATOM_NET_WM_SYNC_REQUEST; - return _ecore_xcb_init_count; + /* setup selection */ + _ecore_xcb_selection_init(); -free_event_handlers: - free(_ecore_xcb_event_handlers); - _ecore_xcb_event_handlers = NULL; -finalize_extensions: - /* We get the replies of the QueryVersion request because we leave */ -#ifdef ECORE_XCB_DAMAGE - _ecore_x_damage_init_finalize(); -#endif /* ECORE_XCB_DAMAGE */ -#ifdef ECORE_XCB_COMPOSITE - _ecore_x_composite_init_finalize(); -#endif /* ECORE_XCB_COMPOSITE */ -#ifdef ECORE_XCB_DPMS - _ecore_x_dpms_init_finalize(); -#endif /* ECORE_XCB_DPMS */ -#ifdef ECORE_XCB_RANDR - _ecore_x_randr_init_finalize(); -#endif /* ECORE_XCB_RANDR */ -#ifdef ECORE_XCB_SCREENSAVER - _ecore_x_screensaver_init_finalize(); -#endif /* ECORE_XCB_SCREENSAVER */ -#ifdef ECORE_XCB_SHAPE - _ecore_x_shape_init_finalize(); -#endif /* ECORE_XCB_SHAPE */ -#ifdef ECORE_XCB_SYNC - _ecore_x_sync_init_finalize(); -#endif /* ECORE_XCB_SYNC */ -#ifdef ECORE_XCB_FIXES - _ecore_x_xfixes_init_finalize(); -#endif /* ECORE_XCB_FIXES */ -#ifdef ECORE_XCB_XINERAMA - _ecore_x_xinerama_init_finalize(); -#endif /* ECORE_XCB_XINERAMA */ -shutdown_ecore_event: - ecore_event_shutdown(); -shutdown_ecore: - ecore_shutdown(); -shutdown_eina: - eina_log_domain_unregister(_ecore_x11xcb_log_dom); - _ecore_x11xcb_log_dom = -1; - eina_shutdown(); + /* setup dnd */ + _ecore_xcb_dnd_init(); - return --_ecore_xcb_init_count; -} /* ecore_x_init */ + // FIXME: XIM support -static int -_ecore_x_shutdown(int close_display) -{ - if (--_ecore_xcb_init_count != 0) - return _ecore_xcb_init_count; - - if (!_ecore_xcb_conn) - return _ecore_xcb_init_count; - - ecore_main_fd_handler_del(_ecore_xcb_fd_handler_handle); - if (close_display) - xcb_disconnect(_ecore_xcb_conn); - else - close(xcb_get_file_descriptor(_ecore_xcb_conn)); - - free(_ecore_xcb_event_handlers); - ecore_event_filter_del(_ecore_xcb_filter_handler); - _ecore_xcb_fd_handler_handle = NULL; - _ecore_xcb_filter_handler = NULL; - _ecore_xcb_conn = NULL; - _ecore_xcb_event_handlers = NULL; - _ecore_x_selection_shutdown(); - _ecore_x_dnd_shutdown(); - ecore_x_netwm_shutdown(); - _ecore_x_reply_shutdown(); - - ecore_event_shutdown(); - ecore_shutdown(); - - eina_log_domain_unregister(_ecore_x11xcb_log_dom); - _ecore_x11xcb_log_dom = -1; - eina_shutdown(); - return _ecore_xcb_init_count; -} /* _ecore_x_shutdown */ +} /** * Shuts down the Ecore X library. @@ -717,1341 +183,952 @@ * * @return The number of times the library has been initialized without * being shut down. - * @ingroup Ecore_Xcb_Init_Group + * @ingroup Ecore_X_Init_Group */ -EAPI int -ecore_x_shutdown(void) +EAPI int +ecore_x_shutdown(void) { - return _ecore_x_shutdown(1); -} /* ecore_x_shutdown */ + LOGFN(__FILE__, __LINE__, __FUNCTION__); + return _ecore_xcb_shutdown(EINA_TRUE); +} + /** * Shuts down the Ecore X library. * - * As ecore_xcb_shutdown, except do not close Display, only connection. + * As ecore_x_shutdown, except do not close Display, only connection. * - * @ingroup Ecore_Xcb_Init_Group + * @ingroup Ecore_X_Init_Group */ -EAPI int -ecore_x_disconnect(void) +EAPI int +ecore_x_disconnect(void) { - return _ecore_x_shutdown(0); -} /* ecore_x_disconnect */ + LOGFN(__FILE__, __LINE__, __FUNCTION__); + return _ecore_xcb_shutdown(EINA_FALSE); +} + /** - * @defgroup Ecore_Xcb_Display_Attr_Group X Display Attributes + * @defgroup Ecore_X_Flush_Group X Synchronization Functions * - * Functions that set and retrieve X display attributes. + * Functions that ensure that all commands that have been issued by the + * Ecore X library have been sent to the server. */ -EAPI Ecore_X_Display * -ecore_x_display_get(void) -{ - return NULL; -} /* ecore_x_display_get */ - /** - * Retrieves the Ecore_X_Connection handle used for the current X connection. - * @return The current X connection. - * @ingroup Ecore_Xcb_Display_Attr_Group + * Sends all X commands in the X Display buffer. + * @ingroup Ecore_X_Flush_Group */ -EAPI Ecore_X_Connection * -ecore_x_connection_get(void) +EAPI void +ecore_x_flush(void) { - return (Ecore_X_Connection *)_ecore_xcb_conn; -} /* ecore_x_connection_get */ + LOGFN(__FILE__, __LINE__, __FUNCTION__); -/** - * Retrieves the X display file descriptor. - * @return The current X display file descriptor. - * @ingroup Ecore_Xcb_Display_Attr_Group - */ -EAPI int -ecore_x_fd_get(void) -{ - return xcb_get_file_descriptor(_ecore_xcb_conn); -} /* ecore_x_fd_get */ + xcb_flush(_ecore_xcb_conn); +} /** * Retrieves the Ecore_X_Screen handle used for the current X connection. * @return The current default screen. - * @ingroup Ecore_Xcb_Display_Attr_Group + * @ingroup Ecore_X_Display_Attr_Group */ EAPI Ecore_X_Screen * -ecore_x_default_screen_get(void) +ecore_x_default_screen_get(void) { + LOGFN(__FILE__, __LINE__, __FUNCTION__); + return (Ecore_X_Screen *)_ecore_xcb_screen; -} /* ecore_x_default_screen_get */ +} -/** - * Retrieves the size of an Ecore_X_Screen. - * @param screen the handle to the screen to query. - * @param w where to return the width. May be NULL. Returns 0 on errors. - * @param h where to return the height. May be NULL. Returns 0 on errors. - * @ingroup Ecore_X_Display_Attr_Group - * @see ecore_x_default_screen_get() - * - * @since 1.1 - */ -EAPI void -ecore_x_screen_size_get(const Ecore_X_Screen *screen, int *w, int *h) +EAPI Ecore_X_Connection * +ecore_x_connection_get(void) { - xcb_screen_t *s = (xcb_screen_t *)screen; LOGFN(__FILE__, __LINE__, __FUNCTION__); - if (w) *w = 0; - if (h) *h = 0; - if (!s) return; - if (w) *w = s->width_in_pixels; - if (h) *h = s->height_in_pixels; + + return (Ecore_X_Connection *)_ecore_xcb_conn; } /** - * 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. - * - * @param t The time in seconds - * @ingroup Ecore_Xcb_Display_Attr_Group + * Return the last event time */ -EAPI void -ecore_x_double_click_time_set(double t) +EAPI Ecore_X_Time +ecore_x_current_time_get(void) { - if (t < 0.0) - t = 0.0; + LOGFN(__FILE__, __LINE__, __FUNCTION__); - _ecore_xcb_double_click_time = t; -} /* ecore_x_double_click_time_set */ + return _ecore_xcb_events_last_time_get(); +} /** - * Retrieves the double and triple click flag timeout. - * - * See @ref ecore_xcb_double_click_time_set for more information. - * - * @return The timeout for double clicks in seconds. - * @ingroup Ecore_Xcb_Display_Attr_Group + * Flushes the command buffer and waits until all requests have been + * processed by the server. + * @ingroup Ecore_X_Flush_Group */ -EAPI double -ecore_x_double_click_time_get(void) +EAPI void +ecore_x_sync(void) { - return _ecore_xcb_double_click_time; -} /* ecore_x_double_click_time_get */ + LOGFN(__FILE__, __LINE__, __FUNCTION__); -/** - * @defgroup Ecore_Xcb_Flush_Group X Synchronization Functions - * - * Functions that ensure that all commands that have been issued by the - * Ecore X library have been sent to the server. - */ + free(xcb_get_input_focus_reply(_ecore_xcb_conn, + xcb_get_input_focus(_ecore_xcb_conn), NULL)); +} -/** - * Sends all X commands in the X Display buffer. - * @ingroup Ecore_Xcb_Flush_Group - */ -EAPI void -ecore_x_flush(void) +EAPI void +ecore_x_grab(void) { - xcb_flush(_ecore_xcb_conn); -} /* ecore_x_flush */ + LOGFN(__FILE__, __LINE__, __FUNCTION__); -/** - * Flushes the command buffer and waits until all requests have been - * processed by the server. - * @ingroup Ecore_Xcb_Flush_Group - */ -EAPI void -ecore_x_sync(void) + _ecore_xcb_grab_count++; + if (_ecore_xcb_grab_count == 1) + xcb_grab_server(_ecore_xcb_conn); +} + +EAPI void +ecore_x_ungrab(void) { - free(xcb_get_input_focus_reply(_ecore_xcb_conn, xcb_get_input_focus(_ecore_xcb_conn), NULL)); -} /* ecore_x_sync */ + LOGFN(__FILE__, __LINE__, __FUNCTION__); + _ecore_xcb_grab_count--; + if (_ecore_xcb_grab_count < 0) _ecore_xcb_grab_count = 0; + if (_ecore_xcb_grab_count == 0) + xcb_ungrab_server(_ecore_xcb_conn); +} + /** - * Kill all clients with subwindows under a given window. + * Send client message with given type and format 32. * - * You can kill all clients connected to the X server by using - * @ref ecore_x_window_root_list to get a list of root windows, and - * then passing each root window to this function. + * @param win The window the message is sent to. + * @param type The client message type. + * @param d0 The client message data item 1 + * @param d1 The client message data item 2 + * @param d2 The client message data item 3 + * @param d3 The client message data item 4 + * @param d4 The client message data item 5 * - * @param root The window whose children will be killed. + * @return EINA_TRUE on success EINA_FALSE otherwise. */ -EAPI void -ecore_x_killall(Ecore_X_Window root) +EAPI Eina_Bool +ecore_x_client_message32_send(Ecore_X_Window win, Ecore_X_Atom type, Ecore_X_Event_Mask mask, long d0, long d1, long d2, long d3, long d4) { - int screens; - int i; + xcb_client_message_event_t ev; + xcb_void_cookie_t cookie; + xcb_generic_error_t *err; - xcb_grab_server(_ecore_xcb_conn); - screens = xcb_setup_roots_iterator (xcb_get_setup (_ecore_xcb_conn)).rem; + LOGFN(__FILE__, __LINE__, __FUNCTION__); - /* Tranverse window tree starting from root, and drag each - * before the firing squad */ - for (i = 0; i < screens; ++i) - { - xcb_query_tree_cookie_t cookie; - xcb_query_tree_reply_t *reply; + memset(&ev, 0, sizeof(xcb_client_message_event_t)); - cookie = xcb_query_tree_unchecked(_ecore_xcb_conn, root); - reply = xcb_query_tree_reply(_ecore_xcb_conn, cookie, NULL); - if (reply) - { - xcb_window_t *wins = NULL; - int tree_c_len; - int i; + ev.response_type = XCB_CLIENT_MESSAGE; + ev.format = 32; + ev.window = win; + ev.type = type; + ev.data.data32[0] = (uint32_t)d0; + ev.data.data32[1] = (uint32_t)d1; + ev.data.data32[2] = (uint32_t)d2; + ev.data.data32[3] = (uint32_t)d3; + ev.data.data32[4] = (uint32_t)d4; - wins = xcb_query_tree_children(reply); - tree_c_len = xcb_query_tree_children_length(reply); - for (i = 0; i < tree_c_len; i++) - xcb_kill_client(_ecore_xcb_conn, wins[i]); - free(reply); - } + // FIXME: Use unchecked version after development is ironed out + cookie = + xcb_send_event_checked(_ecore_xcb_conn, 0, win, mask, (const char *)&ev); + err = xcb_request_check(_ecore_xcb_conn, cookie); + if (err) + { + DBG("Problem Sending Event"); + DBG("\tType: %d", type); + DBG("\tWin: %d", win); + _ecore_xcb_error_handle(err); + free(err); + return EINA_FALSE; } - xcb_ungrab_server(_ecore_xcb_conn); - free(xcb_get_input_focus_reply(_ecore_xcb_conn, xcb_get_input_focus(_ecore_xcb_conn), NULL)); -} /* ecore_x_killall */ + return EINA_TRUE; +} /** - * Kill a specific client + * Send client message with given type and format 8. * - * You can kill a specific client woning window @p window + * @param win The window the message is sent to. + * @param type The client message type. + * @param data Data to be sent. + * @param len Number of data bytes, max 20. * - * @param window Window of the client to be killed + * @return EINA_TRUE on success EINA_FALSE otherwise. */ -EAPI void -ecore_x_kill(Ecore_X_Window window) +EAPI Eina_Bool +ecore_x_client_message8_send(Ecore_X_Window win, Ecore_X_Atom type, const void *data, int len) { - xcb_kill_client(_ecore_xcb_conn, window); -} /* ecore_x_kill */ + xcb_client_message_event_t ev; + xcb_void_cookie_t cookie; + xcb_generic_error_t *err; -/** - * TODO: Invoke the standard system beep to alert users - */ -EAPI Eina_Bool -ecore_x_bell(int percent) -{ - return 0; -} /* ecore_x_bell */ + LOGFN(__FILE__, __LINE__, __FUNCTION__); -/** - * Return the last event time - */ -EAPI Ecore_X_Time -ecore_x_current_time_get(void) -{ - return _ecore_xcb_event_last_time; -} /* ecore_x_current_time_get */ + memset(&ev, 0, sizeof(xcb_client_message_event_t)); -static void -handle_event(xcb_generic_event_t *ev) -{ - uint8_t response_type = ev->response_type & ~0x80; + ev.response_type = XCB_CLIENT_MESSAGE; + ev.format = 8; + ev.window = win; + ev.type = type; + if (len > 20) len = 20; + memcpy(ev.data.data8, data, len); + memset(ev.data.data8 + len, 0, 20 - len); - if (response_type < _ecore_xcb_event_handlers_num) + // FIXME: Use unchecked version after development is ironed out + cookie = + xcb_send_event_checked(_ecore_xcb_conn, 0, win, + XCB_EVENT_MASK_NO_EVENT, (const char *)&ev); + err = xcb_request_check(_ecore_xcb_conn, cookie); + if (err) { - if (_ecore_xcb_event_handlers[XCB_EVENT_ANY]) - _ecore_xcb_event_handlers[XCB_EVENT_ANY] (ev); - - if (_ecore_xcb_event_handlers[response_type]) - _ecore_xcb_event_handlers[response_type] (ev); + DBG("Problem Sending Event"); + DBG("\tType: %d", type); + DBG("\tWin: %d", win); + _ecore_xcb_error_handle(err); + free(err); + return EINA_FALSE; } -} /* handle_event */ -static Eina_Bool -_ecore_xcb_fd_handler(void *data, Ecore_Fd_Handler *fd_handler __UNUSED__) + return EINA_TRUE; +} + +EAPI Eina_Bool +ecore_x_mouse_down_send(Ecore_X_Window win, int x, int y, int b) { - xcb_connection_t *c; - xcb_generic_event_t *ev; + xcb_translate_coordinates_cookie_t cookie; + xcb_translate_coordinates_reply_t *reply; + xcb_button_press_event_t ev; + xcb_void_cookie_t vcookie; + xcb_generic_error_t *err; + Ecore_X_Window root = 0; - c = (xcb_connection_t *)data; + LOGFN(__FILE__, __LINE__, __FUNCTION__); -/* INF ("nbr events: %d", _ecore_xcb_event_handlers_num); */ + root = ecore_x_window_root_get(win); + cookie = xcb_translate_coordinates(_ecore_xcb_conn, win, root, x, y); + reply = xcb_translate_coordinates_reply(_ecore_xcb_conn, cookie, NULL); + if (!reply) return EINA_FALSE; - /* We check if _ecore_xcb_event_buffered is NULL or not */ - if (_ecore_xcb_event_buffered) + memset(&ev, 0, sizeof(xcb_button_press_event_t)); + + ev.response_type = XCB_BUTTON_PRESS; + ev.event = win; + ev.child = win; + ev.root = root; + ev.event_x = x; + ev.event_y = y; + ev.same_screen = 1; + ev.state = 1 << b; + ev.detail = b; // xcb uses detail for button + ev.root_x = reply->dst_x; + ev.root_y = reply->dst_y; + ev.time = ecore_x_current_time_get(); + free(reply); + + // FIXME: Use unchecked version after development is ironed out + vcookie = + xcb_send_event_checked(_ecore_xcb_conn, 1, win, + XCB_EVENT_MASK_BUTTON_PRESS, (const char *)&ev); + err = xcb_request_check(_ecore_xcb_conn, vcookie); + if (err) { - handle_event(_ecore_xcb_event_buffered); - _ecore_xcb_event_buffered = NULL; + _ecore_xcb_error_handle(err); + free(err); + return EINA_FALSE; } - while ((ev = xcb_poll_for_event(c))) - handle_event(ev); + return EINA_TRUE; +} - return ECORE_CALLBACK_RENEW; -} /* _ecore_xcb_fd_handler */ - -static Eina_Bool -_ecore_xcb_fd_handler_buf(void *data, Ecore_Fd_Handler *fd_handler __UNUSED__) +EAPI Eina_Bool +ecore_x_mouse_up_send(Ecore_X_Window win, int x, int y, int b) { - xcb_connection_t *c; + xcb_translate_coordinates_cookie_t cookie; + xcb_translate_coordinates_reply_t *reply; + xcb_button_release_event_t ev; + xcb_void_cookie_t vcookie; + xcb_generic_error_t *err; + Ecore_X_Window root = 0; - c = (xcb_connection_t *)data; + LOGFN(__FILE__, __LINE__, __FUNCTION__); - _ecore_xcb_event_buffered = xcb_poll_for_event(c); - if (!_ecore_xcb_event_buffered) - return ECORE_CALLBACK_CANCEL; + root = ecore_x_window_root_get(win); + cookie = xcb_translate_coordinates(_ecore_xcb_conn, win, root, x, y); + reply = xcb_translate_coordinates_reply(_ecore_xcb_conn, cookie, NULL); + if (!reply) return EINA_FALSE; - return ECORE_CALLBACK_RENEW; -} /* _ecore_xcb_fd_handler_buf */ + memset(&ev, 0, sizeof(xcb_button_release_event_t)); -/* FIXME: possible roundtrip */ -/* FIXME: fix xcb_keysyms. It's ugly !! (reply in xcb_key_symbols_get_keysym) */ -static int -_ecore_xcb_key_mask_get(xcb_keysym_t sym) -{ - xcb_get_modifier_mapping_cookie_t cookie; - xcb_get_modifier_mapping_reply_t *reply; - xcb_key_symbols_t *symbols; - xcb_keysym_t sym2; - int i, j; - xcb_keycode_t *keycodes = NULL; - int mod_keys_len; - const int masks[8] = - { - XCB_MOD_MASK_SHIFT, - XCB_MOD_MASK_LOCK, - XCB_MOD_MASK_CONTROL, - XCB_MOD_MASK_1, - XCB_MOD_MASK_2, - XCB_MOD_MASK_3, - XCB_MOD_MASK_4, - XCB_MOD_MASK_5 - }; + ev.response_type = XCB_BUTTON_RELEASE; + ev.event = win; + ev.child = win; + ev.root = root; + ev.event_x = x; + ev.event_y = y; + ev.same_screen = 1; + ev.state = 0; + ev.root_x = reply->dst_x; + ev.root_y = reply->dst_y; + ev.detail = b; // xcb uses detail for button + ev.time = ecore_x_current_time_get(); + free(reply); - cookie = xcb_get_modifier_mapping_unchecked(_ecore_xcb_conn); - symbols = xcb_key_symbols_alloc(_ecore_xcb_conn); - - reply = xcb_get_modifier_mapping_reply(_ecore_xcb_conn, cookie, NULL); - if (!reply) + // FIXME: Use unchecked version after development is ironed out + vcookie = + xcb_send_event_checked(_ecore_xcb_conn, 1, win, + XCB_EVENT_MASK_BUTTON_RELEASE, (const char *)&ev); + err = xcb_request_check(_ecore_xcb_conn, vcookie); + if (err) { - xcb_key_symbols_free(symbols); - - return 0; + _ecore_xcb_error_handle(err); + free(err); + return EINA_FALSE; } - keycodes = xcb_get_modifier_mapping_keycodes(reply); - mod_keys_len = xcb_get_modifier_mapping_keycodes_length(reply); - for (i = 0; i < mod_keys_len; i++) - { - for (j = 0; j < 8; j++) - { - sym2 = xcb_key_symbols_get_keysym(symbols, keycodes[i], j); - if (sym2 != 0) - break; - } - if (sym2 == sym) - { - int mask; + return EINA_TRUE; +} - mask = masks[j]; - free(reply); - xcb_key_symbols_free(symbols); - return mask; - } - } - - free(reply); - xcb_key_symbols_free(symbols); - - return 0; -} /* _ecore_xcb_key_mask_get */ - -typedef struct _Ecore_X_Filter_Data Ecore_X_Filter_Data; - -struct _Ecore_X_Filter_Data +EAPI Eina_Bool +ecore_x_mouse_move_send(Ecore_X_Window win, int x, int y) { - int last_event_type; -}; + xcb_translate_coordinates_cookie_t cookie; + xcb_translate_coordinates_reply_t *reply; + xcb_motion_notify_event_t ev; + xcb_void_cookie_t vcookie; + xcb_generic_error_t *err; + Ecore_X_Window root = 0; -static void * -_ecore_xcb_event_filter_start(void *data __UNUSED__) -{ - Ecore_X_Filter_Data *filter_data; + LOGFN(__FILE__, __LINE__, __FUNCTION__); - filter_data = calloc(1, sizeof(Ecore_X_Filter_Data)); - return filter_data; -} /* _ecore_xcb_event_filter_start */ + root = ecore_x_window_root_get(win); + cookie = xcb_translate_coordinates(_ecore_xcb_conn, win, root, x, y); + reply = xcb_translate_coordinates_reply(_ecore_xcb_conn, cookie, NULL); + if (!reply) return EINA_FALSE; -static Eina_Bool -_ecore_xcb_event_filter_filter(void *data __UNUSED__, void *loop_data,int type, void *event __UNUSED__) -{ - Ecore_X_Filter_Data *filter_data; + memset(&ev, 0, sizeof(xcb_motion_notify_event_t)); - filter_data = loop_data; - if (!filter_data) - return EINA_TRUE; + ev.response_type = XCB_MOTION_NOTIFY; + ev.event = win; + ev.child = win; + ev.root = root; + ev.event_x = x; + ev.event_y = y; + ev.same_screen = 1; + ev.state = 0; + ev.detail = 0; // xcb uses 'detail' for is_hint + ev.root_x = reply->dst_x; + ev.root_y = reply->dst_y; + ev.time = ecore_x_current_time_get(); + free(reply); - if (type == ECORE_EVENT_MOUSE_MOVE) + // FIXME: Use unchecked version after development is ironed out + vcookie = + xcb_send_event_checked(_ecore_xcb_conn, 1, win, + XCB_EVENT_MASK_POINTER_MOTION, (const char *)&ev); + err = xcb_request_check(_ecore_xcb_conn, vcookie); + if (err) { - if ((filter_data->last_event_type) == ECORE_EVENT_MOUSE_MOVE) - { - filter_data->last_event_type = type; - return EINA_FALSE; - } + _ecore_xcb_error_handle(err); + free(err); + return EINA_FALSE; } - filter_data->last_event_type = type; return EINA_TRUE; -} /* _ecore_xcb_event_filter_filter */ +} -static void -_ecore_xcb_event_filter_end(void *data __UNUSED__, void *loop_data) +EAPI Eina_Bool +ecore_x_keyboard_grab(Ecore_X_Window win) { - Ecore_X_Filter_Data *filter_data; + xcb_grab_keyboard_cookie_t cookie; + xcb_grab_keyboard_reply_t *reply; - filter_data = loop_data; - if (filter_data) - free(filter_data); -} /* _ecore_xcb_event_filter_end */ + LOGFN(__FILE__, __LINE__, __FUNCTION__); -/*****************************************************************************/ -/*****************************************************************************/ -/*****************************************************************************/ -/* FIXME: these funcs need categorising */ -/*****************************************************************************/ + cookie = + xcb_grab_keyboard_unchecked(_ecore_xcb_conn, 0, win, XCB_CURRENT_TIME, + XCB_GRAB_MODE_ASYNC, XCB_GRAB_MODE_ASYNC); + reply = xcb_grab_keyboard_reply(_ecore_xcb_conn, cookie, NULL); + if (!reply) return EINA_FALSE; + free(reply); + return EINA_TRUE; +} -/** - * Get a list of all the root windows on the server. - * - * @note The returned array will need to be freed after use. - * @param num_ret Pointer to integer to put number of windows returned in. - * @return An array of all the root windows. @c NULL is returned if memory - * could not be allocated for the list, or if @p num_ret is @c NULL. - */ -EAPI Ecore_X_Window * -ecore_x_window_root_list(int *num_ret) +EAPI void +ecore_x_keyboard_ungrab(void) { - xcb_screen_iterator_t iter; - const xcb_setup_t *setup; - uint8_t i; - uint8_t num; - Ecore_X_Window *roots; -/* #ifdef ECORE_XCBXPRINT */ -/* int xp_base, xp_err_base; */ -/* #endif /\* ECORE_XCBXPRINT *\/ */ + LOGFN(__FILE__, __LINE__, __FUNCTION__); - if (!num_ret) - return NULL; + xcb_ungrab_keyboard(_ecore_xcb_conn, XCB_CURRENT_TIME); +} - *num_ret = 0; - - /* FIXME: todo... */ -/* #ifdef ECORE_XCBXPRINT */ -/* num = ScreenCount(_ecore_xcb_conn); */ -/* if (ecore_xcb_xprint_query()) */ -/* { */ -/* Screen **ps = NULL; */ -/* int psnum = 0; */ - -/* ps = XpQueryScreens(_ecore_xcb_conn, &psnum); */ -/* if (ps) */ -/* { */ -/* int overlap, j; */ - -/* overlap = 0; */ -/* for (i = 0; i < num; i++) */ -/* { */ -/* for (j = 0; j < psnum; j++) */ -/* { */ -/* if (ScreenOfDisplay(_ecore_xcb_conn, i) == ps[j]) */ -/* overlap++; */ -/* } */ -/* } */ -/* roots = malloc((num - overlap) * sizeof(Ecore_X_Window)); */ -/* if (roots) */ -/* { */ -/* int k; */ - -/* k = 0; */ -/* for (i = 0; i < num; i++) */ -/* { */ -/* int is_print; */ - -/* is_print = 0; */ -/* for... [truncated message content] |
From: Enlightenment S. <no-...@en...> - 2011-07-14 16:04:36
|
Log: Ecore_X: Remove unused file. Author: devilhorns Date: 2011-07-14 09:04:26 -0700 (Thu, 14 Jul 2011) New Revision: 61386 Trac: http://trac.enlightenment.org/e/changeset/61386 Removed: trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_atom.c |
From: Enlightenment S. <no-...@en...> - 2011-07-14 16:05:33
|
Log: Ecore_X: Remove unused file. Author: devilhorns Date: 2011-07-14 09:05:13 -0700 (Thu, 14 Jul 2011) New Revision: 61387 Trac: http://trac.enlightenment.org/e/changeset/61387 Removed: trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_fixes.c |
From: Enlightenment S. <no-...@en...> - 2011-07-15 12:21:02
|
Log: Ecore_X: Add a missing function for ecore_x_randr_modes_info_get. Add a list of remaining ecore_xcb_randr functions to do. Author: devilhorns Date: 2011-07-15 05:20:52 -0700 (Fri, 15 Jul 2011) New Revision: 61397 Trac: http://trac.enlightenment.org/e/changeset/61397 Modified: trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_randr.c Modified: trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_randr.c =================================================================== --- trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_randr.c 2011-07-15 10:32:01 UTC (rev 61396) +++ trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_randr.c 2011-07-15 12:20:52 UTC (rev 61397) @@ -1,3 +1,57 @@ +/* TODO: List of missing functions + * + * ecore_x_randr_primary_output_set + * ecore_x_randr_current_output_get + * ecore_x_randr_current_crtc_get + * ecore_x_randr_crtc_pos_get + * ecore_x_randr_crtc_size_get + * ecore_x_randr_crtc_refresh_rate_get + * ecore_x_randr_crtc_orientations_get + * ecore_x_randr_crtc_orientation_set + * ecore_x_randr_crtc_clone_set + * ecore_x_randr_crtc_gamma_ramp_size_get + * ecore_x_randr_crtc_gamma_ramps_get + * ecore_x_randr_crtc_gamma_ramps_set + * ecore_x_randr_mode_size_get + * ecore_x_randr_output_size_mm_get + * ecore_x_randr_output_crtc_set + * ecore_x_randr_edid_valid_header + * ecore_x_randr_edid_version_get + * ecore_x_randr_edid_info_has_valid_checksum + * ecore_x_randr_edid_manufacturer_name_get + * ecore_x_randr_edid_display_name_get + * ecore_x_randr_edid_display_ascii_get + * ecore_x_randr_edid_display_serial_get + * ecore_x_randr_edid_model_get + * ecore_x_randr_edid_manufacturer_serial_number_get + * ecore_x_randr_edid_manufacturer_model_get + * ecore_x_randr_edid_dpms_available_get + * ecore_x_randr_edid_dpms_standby_available_get + * ecore_x_randr_edid_dpms_suspend_available_get + * ecore_x_randr_edid_dpms_off_available_get + * ecore_x_randr_edid_display_aspect_ratio_preferred_get + * ecore_x_randr_edid_display_aspect_ratios_get + * ecore_x_randr_edid_display_colorscheme_get + * ecore_x_randr_edid_display_type_digital_get + * ecore_x_randr_edid_display_interface_type_get + * ecore_x_randr_screen_backlight_level_set + * ecore_x_randr_primary_output_set + * ecore_x_randr_output_subpixel_order_get + * ecore_x_randr_output_wired_clones_get + * ecore_x_randr_output_compatibility_list_get + * ecore_x_randr_output_signal_formats_get + * ecore_x_randr_output_signal_format_set + * ecore_x_randr_output_signal_properties_get + * ecore_x_randr_output_connector_number_get + * ecore_x_randr_output_connector_type_get + * ecore_x_randr_crtc_panning_area_get + * ecore_x_randr_crtc_panning_area_set + * ecore_x_randr_crtc_tracking_area_get + * ecore_x_randr_crtc_tracking_area_set + * ecore_x_randr_crtc_border_area_get + * ecore_x_randr_crtc_border_area_set + */ + #include "ecore_xcb_private.h" # ifdef ECORE_XCB_RANDR # include <xcb/randr.h> @@ -646,8 +700,7 @@ reply = xcb_randr_get_screen_resources_reply(_ecore_xcb_conn, cookie, NULL); if (reply) { - ret = malloc(sizeof(Ecore_X_Randr_Mode_Info)); - if (ret) + if ((ret = malloc(sizeof(Ecore_X_Randr_Mode_Info)))) { uint8_t *nbuf; xcb_randr_mode_info_iterator_t miter; @@ -696,6 +749,83 @@ return ret; } +EAPI Ecore_X_Randr_Mode_Info ** +ecore_x_randr_modes_info_get(Ecore_X_Window root, int *num) +{ + Ecore_X_Randr_Mode_Info **ret = NULL; +#ifdef ECORE_XCB_RANDR + xcb_randr_get_screen_resources_cookie_t cookie; + xcb_randr_get_screen_resources_reply_t *reply; +#endif + + LOGFN(__FILE__, __LINE__, __FUNCTION__); + + if (num) *num = 0; + +#ifdef ECORE_XCB_RANDR + if (!_ecore_xcb_randr_root_validate(root)) return NULL; + + cookie = xcb_randr_get_screen_resources_unchecked(_ecore_xcb_conn, root); + reply = xcb_randr_get_screen_resources_reply(_ecore_xcb_conn, cookie, NULL); + if (reply) + { + if (num) *num = reply->num_modes; + ret = malloc(sizeof(Ecore_X_Randr_Mode_Info *) * reply->num_modes); + if (ret) + { + xcb_randr_mode_info_iterator_t miter; + int i = 0; + uint8_t *nbuf; + + nbuf = xcb_randr_get_screen_resources_names(reply); + miter = xcb_randr_get_screen_resources_modes_iterator(reply); + while (miter.rem) + { + xcb_randr_mode_info_t *minfo; + + minfo = miter.data; + nbuf += minfo->name_len; + if ((ret[i] = malloc(sizeof(Ecore_X_Randr_Mode_Info)))) + { + ret[i]->xid = minfo->id; + ret[i]->width = minfo->width; + ret[i]->height = minfo->height; + ret[i]->dotClock = minfo->dot_clock; + ret[i]->hSyncStart = minfo->hsync_start; + ret[i]->hSyncEnd = minfo->hsync_end; + ret[i]->hTotal = minfo->htotal; + ret[i]->vSyncStart = minfo->vsync_start; + ret[i]->vSyncEnd = minfo->vsync_end; + ret[i]->vTotal = minfo->vtotal; + ret[i]->modeFlags = minfo->mode_flags; + + ret[i]->name = NULL; + ret[i]->nameLength = minfo->name_len; + if (ret[i]->nameLength > 0) + { + ret[i]->name = malloc(ret[i]->nameLength + 1); + if (ret[i]->name) + memcpy(ret[i]->name, nbuf, ret[i]->nameLength + 1); + } + } + else + { + while (i > 0) + free(ret[--i]); + free(ret); + ret = NULL; + break; + } + i++; + xcb_randr_mode_info_next(&miter); + } + } + free(reply); + } +#endif + return ret; +} + /** * @brief gets the EDID information of an attached output if available. * Note that this information is not to be compared using ordinary string |
From: Enlightenment S. <no-...@en...> - 2011-07-15 12:58:31
|
Log: Ecore_X: Add some more missing randr functions. Author: devilhorns Date: 2011-07-15 05:58:24 -0700 (Fri, 15 Jul 2011) New Revision: 61398 Trac: http://trac.enlightenment.org/e/changeset/61398 Modified: trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_randr.c Modified: trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_randr.c =================================================================== --- trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_randr.c 2011-07-15 12:20:52 UTC (rev 61397) +++ trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_randr.c 2011-07-15 12:58:24 UTC (rev 61398) @@ -1,11 +1,5 @@ /* TODO: List of missing functions * - * ecore_x_randr_primary_output_set - * ecore_x_randr_current_output_get - * ecore_x_randr_current_crtc_get - * ecore_x_randr_crtc_pos_get - * ecore_x_randr_crtc_size_get - * ecore_x_randr_crtc_refresh_rate_get * ecore_x_randr_crtc_orientations_get * ecore_x_randr_crtc_orientation_set * ecore_x_randr_crtc_clone_set @@ -35,7 +29,6 @@ * ecore_x_randr_edid_display_type_digital_get * ecore_x_randr_edid_display_interface_type_get * ecore_x_randr_screen_backlight_level_set - * ecore_x_randr_primary_output_set * ecore_x_randr_output_subpixel_order_get * ecore_x_randr_output_wired_clones_get * ecore_x_randr_output_compatibility_list_get @@ -628,6 +621,21 @@ return ret; } +/* + * @param root window which's screen should be queried + * @param output that should be set as given root window's screen primary output + */ +EAPI void +ecore_x_randr_primary_output_set(Ecore_X_Window root, Ecore_X_Randr_Output output) +{ + LOGFN(__FILE__, __LINE__, __FUNCTION__); + +#ifdef ECORE_XCB_RANDR + if ((output) && (_ecore_xcb_randr_root_validate(root))) + xcb_randr_set_output_primary(_ecore_xcb_conn, root, output); +#endif +} + EAPI Ecore_X_Randr_Mode * ecore_x_randr_output_modes_get(Ecore_X_Window root, Ecore_X_Randr_Output output, int *num, int *npreferred) { @@ -749,6 +757,12 @@ return ret; } +/* + * @brief get detailed information for all modes related to a root window's screen + * @param root window which's screen's ressources are queried + * @param num number of modes returned + * @return modes' information + */ EAPI Ecore_X_Randr_Mode_Info ** ecore_x_randr_modes_info_get(Ecore_X_Window root, int *num) { @@ -1628,6 +1642,16 @@ return ret; } +EAPI void +ecore_x_randr_crtc_pos_get(Ecore_X_Window root, Ecore_X_Randr_Crtc crtc, int *x, int *y) +{ + LOGFN(__FILE__, __LINE__, __FUNCTION__); + +#ifdef ECORE_XCB_RANDR + ecore_x_randr_crtc_geometry_get(root, crtc, x, y, NULL, NULL); +#endif +} + /* * @brief sets the position of given CRTC within root window's screen * @param root the window's screen to be queried @@ -1670,6 +1694,58 @@ return ret; } +EAPI void +ecore_x_randr_crtc_size_get(Ecore_X_Window root, Ecore_X_Randr_Crtc crtc, int *w, int *h) +{ + LOGFN(__FILE__, __LINE__, __FUNCTION__); + +#ifdef ECORE_XCB_RANDR + ecore_x_randr_crtc_geometry_get(root, crtc, NULL, NULL, w, h); +#endif +} + +EAPI Ecore_X_Randr_Refresh_Rate +ecore_x_randr_crtc_refresh_rate_get(Ecore_X_Window root, Ecore_X_Randr_Crtc crtc, Ecore_X_Randr_Mode mode) +{ + Ecore_X_Randr_Refresh_Rate ret = 0.0; +#ifdef ECORE_XCB_RANDR + xcb_randr_get_screen_resources_cookie_t cookie; + xcb_randr_get_screen_resources_reply_t *reply; +#endif + + LOGFN(__FILE__, __LINE__, __FUNCTION__); + +#ifdef ECORE_XCB_RANDR + if (!_ecore_xcb_randr_crtc_validate(root, crtc)) return 0.0; + cookie = xcb_randr_get_screen_resources_unchecked(_ecore_xcb_conn, root); + reply = xcb_randr_get_screen_resources_reply(_ecore_xcb_conn, cookie, NULL); + if (reply) + { + xcb_randr_mode_info_iterator_t miter; + + miter = xcb_randr_get_screen_resources_modes_iterator(reply); + while (miter.rem) + { + xcb_randr_mode_info_t *minfo; + + minfo = miter.data; + if (minfo->id == mode) + { + if ((minfo->htotal) && (minfo->vtotal)) + { + ret = ((double)minfo->dot_clock / + ((double)minfo->htotal * (double)minfo->vtotal)); + } + break; + } + xcb_randr_mode_info_next(&miter); + } + free(reply); + } +#endif + return ret; +} + /* * @brief move given CRTCs belonging to the given root window's screen dx/dy pixels relative to their current position. The screen size will be automatically adjusted if necessary and possible. * @param root window which's screen's resources are used @@ -1722,12 +1798,10 @@ ((oreply[i]->x + oreply[i]->width + dx) > mw) || ((oreply[i]->y + oreply[i]->height + dy) > mh)) { -// free(oreply[i]); continue; } nw = MAX((int)(oreply[i]->x + oreply[i]->width + dx), nw); nh = MAX((int)(oreply[i]->y + oreply[i]->height + dy), nh); -// free(oreply); } } free(reply); |
From: Enlightenment S. <no-...@en...> - 2011-07-15 13:13:48
|
Log: Ecore_X: Add a few more missing randr functions to xcb. Author: devilhorns Date: 2011-07-15 06:13:38 -0700 (Fri, 15 Jul 2011) New Revision: 61399 Trac: http://trac.enlightenment.org/e/changeset/61399 Modified: trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_randr.c Modified: trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_randr.c =================================================================== --- trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_randr.c 2011-07-15 12:58:24 UTC (rev 61398) +++ trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_randr.c 2011-07-15 13:13:38 UTC (rev 61399) @@ -1,12 +1,6 @@ /* TODO: List of missing functions * - * ecore_x_randr_crtc_orientations_get - * ecore_x_randr_crtc_orientation_set * ecore_x_randr_crtc_clone_set - * ecore_x_randr_crtc_gamma_ramp_size_get - * ecore_x_randr_crtc_gamma_ramps_get - * ecore_x_randr_crtc_gamma_ramps_set - * ecore_x_randr_mode_size_get * ecore_x_randr_output_size_mm_get * ecore_x_randr_output_crtc_set * ecore_x_randr_edid_valid_header @@ -841,6 +835,49 @@ } /** + * @brief gets the width and hight of a given mode + * @param mode the mode which's size is to be looked up + * @param w width of given mode in px + * @param h height of given mode in px + */ +EAPI void +ecore_x_randr_mode_size_get(Ecore_X_Window root, Ecore_X_Randr_Mode mode, int *w, int *h) +{ +#ifdef ECORE_XCB_RANDR + xcb_randr_get_screen_resources_cookie_t cookie; + xcb_randr_get_screen_resources_reply_t *reply; +#endif + + LOGFN(__FILE__, __LINE__, __FUNCTION__); + +#ifdef ECORE_XCB_RANDR + if (mode == Ecore_X_Randr_None) return; + cookie = xcb_randr_get_screen_resources_unchecked(_ecore_xcb_conn, root); + reply = xcb_randr_get_screen_resources_reply(_ecore_xcb_conn, cookie, NULL); + if (reply) + { + xcb_randr_mode_info_iterator_t miter; + + miter = xcb_randr_get_screen_resources_modes_iterator(reply); + while (miter.rem) + { + xcb_randr_mode_info_t *minfo; + + minfo = miter.data; + if (minfo->id == mode) + { + if (w) *w = minfo->width; + if (h) *h = minfo->height; + break; + } + xcb_randr_mode_info_next(&miter); + } + free(reply); + } +#endif +} + +/** * @brief gets the EDID information of an attached output if available. * Note that this information is not to be compared using ordinary string * comparison functions, since it includes 0-bytes. @@ -1347,6 +1384,64 @@ return ret; } +EAPI Eina_Bool +ecore_x_randr_crtc_orientation_set(Ecore_X_Window root, Ecore_X_Randr_Crtc crtc, Ecore_X_Randr_Orientation orientation) +{ + Eina_Bool ret = EINA_FALSE; + + LOGFN(__FILE__, __LINE__, __FUNCTION__); + +#ifdef ECORE_XCB_RANDR + if (orientation != Ecore_X_Randr_None) + { + ret = + ecore_x_randr_crtc_settings_set(root, crtc, NULL, + Ecore_X_Randr_Unset, Ecore_X_Randr_Unset, + Ecore_X_Randr_Unset, Ecore_X_Randr_Unset, + orientation); + } +#endif + return ret; +} + +EAPI Ecore_X_Randr_Orientation +ecore_x_randr_crtc_orientations_get(Ecore_X_Window root, Ecore_X_Randr_Crtc crtc) +{ + Ecore_X_Randr_Orientation ret = Ecore_X_Randr_None; +#ifdef ECORE_XCB_RANDR + xcb_randr_get_screen_resources_cookie_t cookie; + xcb_randr_get_screen_resources_reply_t *reply; +#endif + + LOGFN(__FILE__, __LINE__, __FUNCTION__); + +#ifdef ECORE_XCB_RANDR + if (!_ecore_xcb_randr_crtc_validate(root, crtc)) return ret; + + cookie = xcb_randr_get_screen_resources_unchecked(_ecore_xcb_conn, root); + reply = xcb_randr_get_screen_resources_reply(_ecore_xcb_conn, cookie, NULL); + if (reply) + { + xcb_randr_get_crtc_info_cookie_t ocookie; + xcb_randr_get_crtc_info_reply_t *oreply; + + ocookie = + xcb_randr_get_crtc_info_unchecked(_ecore_xcb_conn, crtc, + reply->config_timestamp); + oreply = + xcb_randr_get_crtc_info_reply(_ecore_xcb_conn, ocookie, NULL); + if (oreply) + { + ret = oreply->rotations; + free(oreply); + } + free(reply); + } +#endif + + return ret; +} + /* * @brief get a CRTC's possible outputs. * @param root the root window which's screen will be queried |
From: Enlightenment S. <no-...@en...> - 2011-07-24 22:19:08
|
Log: Ecore_X: Fix CnP when using xcb backend. Author: devilhorns Date: 2011-07-24 15:19:00 -0700 (Sun, 24 Jul 2011) New Revision: 61662 Trac: http://trac.enlightenment.org/e/changeset/61662 Modified: trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_selection.c Modified: trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_selection.c =================================================================== --- trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_selection.c 2011-07-24 22:05:02 UTC (rev 61661) +++ trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_selection.c 2011-07-24 22:19:00 UTC (rev 61662) @@ -532,11 +532,12 @@ LOGFN(__FILE__, __LINE__, __FUNCTION__); xcb_set_selection_owner(_ecore_xcb_conn, win, - selection, ecore_x_current_time_get()); + selection, _ecore_xcb_events_last_time_get()); cookie = xcb_get_selection_owner(_ecore_xcb_conn, selection); reply = xcb_get_selection_owner_reply(_ecore_xcb_conn, cookie, NULL); if (!reply) return EINA_FALSE; + if (reply->owner != win) { free(reply); @@ -552,7 +553,7 @@ in = 2; else if (selection == ECORE_X_ATOM_SELECTION_CLIPBOARD) in = 3; - else + else return EINA_FALSE; if (data) @@ -562,7 +563,7 @@ _selections[in].win = win; _selections[in].selection = selection; _selections[in].length = size; - _selections[in].time = ecore_x_current_time_get(); + _selections[in].time = _ecore_xcb_events_last_time_get(); buff = malloc(size); if (!buff) return EINA_FALSE; @@ -597,7 +598,7 @@ atarget = _ecore_xcb_selection_target_atom_get(target); xcb_convert_selection(_ecore_xcb_conn, win, selection, atarget, prop, - ecore_x_current_time_get()); + XCB_CURRENT_TIME); } static Eina_Bool @@ -622,7 +623,9 @@ else return EINA_FALSE; - if (!(str = strdup(data))) return EINA_FALSE; + str = alloca(size + 1); + memcpy(str, data, size); + str[size] = '\0'; #ifdef HAVE_ICONV if (_ecore_xcb_utf8_textlist_to_textproperty(&str, 1, style, &ret)) @@ -631,15 +634,10 @@ size = (strlen((char *)ret.value) + 1); *data_ret = malloc(size); - if (!*data_ret) - { - free(str); - return EINA_FALSE; - } + if (!*data_ret) return EINA_FALSE; memcpy(*data_ret, ret.value, size); *size_ret = size; if (ret.value) free(ret.value); - if (str) free(str); return EINA_TRUE; } #else @@ -649,23 +647,16 @@ size = (strlen((char *)ret.value) + 1); *data_ret = malloc(size); - if (!*data_ret) - { - free(str); - return EINA_FALSE; - } + if (!*data_ret) return EINA_FALSE; memcpy(*data_ret, ret.value, size); *size_ret = size; if (ret.value) free(ret.value); - if (str) free(str); return EINA_TRUE; } #endif else - { - if (str) free(str); - return EINA_TRUE; - } + return EINA_TRUE; + return EINA_FALSE; } |
From: Enlightenment S. <no-...@en...> - 2011-07-26 02:22:06
|
Log: Ecore_X: Remove fixme comment (correct as it sits). Author: devilhorns Date: 2011-07-25 19:21:59 -0700 (Mon, 25 Jul 2011) New Revision: 61722 Trac: http://trac.enlightenment.org/e/changeset/61722 Modified: trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_events.c Modified: trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_events.c =================================================================== --- trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_events.c 2011-07-26 01:51:50 UTC (rev 61721) +++ trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_events.c 2011-07-26 02:21:59 UTC (rev 61722) @@ -2077,8 +2077,6 @@ e->evtype = ev->event_type; - /* FIXME: e->extension check may need to be against xcb_input_id - * NB: Have to test this */ if (e->extension == _ecore_xcb_event_input) _ecore_xcb_event_handle_input_event(event); |
From: Enlightenment S. <no-...@en...> - 2011-07-26 02:31:20
|
Log: Ecore_X: Remove 2 fixme's that were bogus, but add one new fixme note Author: devilhorns Date: 2011-07-25 19:31:13 -0700 (Mon, 25 Jul 2011) New Revision: 61723 Trac: http://trac.enlightenment.org/e/changeset/61723 Modified: trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_events.c Modified: trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_events.c =================================================================== --- trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_events.c 2011-07-26 02:21:59 UTC (rev 61722) +++ trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_events.c 2011-07-26 02:31:13 UTC (rev 61723) @@ -279,6 +279,8 @@ return; } + /* FIXME: Filter event for xim when xcb supports xim */ + _ecore_xcb_event_handle_any_event(ev); if (response == XCB_KEY_PRESS) @@ -2121,7 +2123,6 @@ keyname = buff; } - /* FIXME: Ecore_X_Ic */ val = _ecore_xcb_keymap_lookup_string(keycode, xevent->state, compose_buffer, sizeof(compose_buffer), &sym); @@ -2192,7 +2193,6 @@ keyname = buff; } - /* FIXME: Ecore_X_Ic */ val = _ecore_xcb_keymap_lookup_string(keycode, xevent->state, compose_buffer, sizeof(compose_buffer), &sym); |
From: Enlightenment S. <no-...@en...> - 2011-07-26 05:55:31
|
Log: Ecore_X: Oopsie, don't need those dbg statements anymore. Author: devilhorns Date: 2011-07-25 22:55:25 -0700 (Mon, 25 Jul 2011) New Revision: 61725 Trac: http://trac.enlightenment.org/e/changeset/61725 Modified: trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb.c Modified: trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb.c =================================================================== --- trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb.c 2011-07-26 05:54:01 UTC (rev 61724) +++ trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb.c 2011-07-26 05:55:25 UTC (rev 61725) @@ -142,11 +142,8 @@ } _real_display = dlsym(libxlib, "XOpenDisplay"); - if (_real_display) DBG("Have Real Display Symd"); _real_connection = dlsym(libxcb, "XGetXCBConnection"); - if (_real_connection) DBG("Have Real Connection Symd"); _real_queue = dlsym(libxcb, "XSetEventQueueOwner"); - if (_real_queue) DBG("Have Real Queue Symd"); if (_real_display) { |
From: Enlightenment S. <no-...@en...> - 2011-07-27 05:10:35
|
Log: Ecore_X: Remove recent xcb resource code (we're going to go a different path with this) ;) Reorder init/shutdown procedures to match order (first in, last out). Author: devilhorns Date: 2011-07-26 22:10:28 -0700 (Tue, 26 Jul 2011) New Revision: 61788 Trac: http://trac.enlightenment.org/e/changeset/61788 Removed: trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_resource.c Modified: trunk/ecore/src/lib/ecore_x/xcb/Makefile.am trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb.c trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_cursor.c trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_private.h trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_render.c Modified: trunk/ecore/src/lib/ecore_x/xcb/Makefile.am =================================================================== --- trunk/ecore/src/lib/ecore_x/xcb/Makefile.am 2011-07-27 04:57:18 UTC (rev 61787) +++ trunk/ecore/src/lib/ecore_x/xcb/Makefile.am 2011-07-27 05:10:28 UTC (rev 61788) @@ -66,8 +66,7 @@ ecore_xcb_xinerama.c \ ecore_xcb_error.c \ ecore_xcb_xtest.c \ - ecore_xcb_vsync.c \ - ecore_xcb_resource.c + ecore_xcb_vsync.c libecore_x_xcb_la_LIBADD = \ @XCB_DAMAGE_LIBS@ \ Modified: trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb.c =================================================================== --- trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb.c 2011-07-27 04:57:18 UTC (rev 61787) +++ trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb.c 2011-07-27 05:10:28 UTC (rev 61788) @@ -1233,28 +1233,24 @@ LOGFN(__FILE__, __LINE__, __FUNCTION__); - /* shutdown keymap */ - _ecore_xcb_keymap_shutdown(); + /* shutdown dnd */ + _ecore_xcb_dnd_shutdown(); - /* shutdown events */ - _ecore_xcb_events_shutdown(); - /* shutdown selection */ _ecore_xcb_selection_shutdown(); /* shutdown netwm */ ecore_x_netwm_shutdown(); - /* shutdown dnd */ - _ecore_xcb_dnd_shutdown(); - -#ifdef ECORE_XCB_XINPUT - _ecore_xcb_input_shutdown(); -#endif - if (_ecore_xcb_fd_handler) ecore_main_fd_handler_del(_ecore_xcb_fd_handler); + /* shutdown keymap */ + _ecore_xcb_keymap_shutdown(); + + /* shutdown events */ + _ecore_xcb_events_shutdown(); + /* disconnect from display server */ if (close_display) xcb_disconnect(_ecore_xcb_conn); Modified: trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_cursor.c =================================================================== --- trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_cursor.c 2011-07-27 04:57:18 UTC (rev 61787) +++ trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_cursor.c 2011-07-27 05:10:28 UTC (rev 61788) @@ -332,21 +332,21 @@ static void _ecore_xcb_cursor_default_size_get(void) { - char *v = NULL; + /* char *v = NULL; */ - v = getenv("XCURSOR_SIZE"); - if (!v) - v = _ecore_xcb_resource_get_string("Xcursor", "size"); - if (v) _ecore_xcb_cursor_size = ((atoi(v) * 16) / 72); + /* v = getenv("XCURSOR_SIZE"); */ + /* if (!v) */ + /* v = _ecore_xcb_resource_get_string("Xcursor", "size"); */ + /* if (v) _ecore_xcb_cursor_size = ((atoi(v) * 16) / 72); */ } static void _ecore_xcb_cursor_dpi_size_get(void) { - int v = 0; + /* int v = 0; */ - v = _ecore_xcb_resource_get_int("Xft", "dpi"); - if (v) _ecore_xcb_cursor_size = ((v * 16) / 72); + /* v = _ecore_xcb_resource_get_int("Xft", "dpi"); */ + /* if (v) _ecore_xcb_cursor_size = ((v * 16) / 72); */ } static void Modified: trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_private.h =================================================================== --- trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_private.h 2011-07-27 04:57:18 UTC (rev 61787) +++ trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_private.h 2011-07-27 05:10:28 UTC (rev 61788) @@ -334,7 +334,4 @@ int _ecore_xcb_error_handle(xcb_generic_error_t *err); int _ecore_xcb_io_error_handle(xcb_generic_error_t *err); -char *_ecore_xcb_resource_get_string(const char *prog, const char *name); -int _ecore_xcb_resource_get_int(const char *prog, const char *name); - #endif Modified: trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_render.c =================================================================== --- trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_render.c 2011-07-27 04:57:18 UTC (rev 61787) +++ trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_render.c 2011-07-27 05:10:28 UTC (rev 61788) @@ -56,8 +56,8 @@ { _render_argb = EINA_TRUE; v = getenv("XCURSOR_CORE"); - if (!v) - v = _ecore_xcb_resource_get_string("Xcursor", "core"); + /* if (!v) */ + /* v = _ecore_xcb_resource_get_string("Xcursor", "core"); */ if ((v) && (_ecore_xcb_render_parse_boolean(v))) _render_argb = EINA_FALSE; } @@ -66,8 +66,8 @@ { _render_anim = EINA_TRUE; v = getenv("XCURSOR_ANIM"); - if (!v) - v = _ecore_xcb_resource_get_string("Xcursor", "anim"); + /* if (!v) */ + /* v = _ecore_xcb_resource_get_string("Xcursor", "anim"); */ if ((v) && (_ecore_xcb_render_parse_boolean(v))) _render_anim = EINA_FALSE; } |
From: Enlightenment S. <no-...@en...> - 2011-07-27 07:40:26
|
Log: Ecore_X: For some very odd reason, certain *buntu systems will not build our ecore_xcb without having pixman_clags & libs as separate variables here...works on every other system I've tried, but eh it's *buntu .. their stupid :P Author: devilhorns Date: 2011-07-27 00:40:19 -0700 (Wed, 27 Jul 2011) New Revision: 61796 Trac: http://trac.enlightenment.org/e/changeset/61796 Modified: trunk/ecore/src/lib/ecore_x/xcb/Makefile.am Modified: trunk/ecore/src/lib/ecore_x/xcb/Makefile.am =================================================================== --- trunk/ecore/src/lib/ecore_x/xcb/Makefile.am 2011-07-27 07:12:28 UTC (rev 61795) +++ trunk/ecore/src/lib/ecore_x/xcb/Makefile.am 2011-07-27 07:40:19 UTC (rev 61796) @@ -20,6 +20,7 @@ @XCB_CURSOR_CFLAGS@ \ @XCB_DRI_CFLAGS@ \ @XCB_CFLAGS@ \ + @PIXMAN_CFLAGS@ \ -I$(top_srcdir)/src/lib/ecore \ -I$(top_srcdir)/src/lib/ecore_x \ -I$(top_srcdir)/src/lib/ecore_input \ @@ -85,6 +86,7 @@ @XCB_CURSOR_LIBS@ \ @XCB_DRI_LIBS@ \ @XCB_LIBS@ \ + @PIXMAN_LIBS@ \ $(top_builddir)/src/lib/ecore/libecore.la \ $(top_builddir)/src/lib/ecore_input/libecore_input.la \ @EINA_LIBS@ \ |
From: Enlightenment S. <no-...@en...> - 2011-08-02 09:07:59
|
Log: Ecore_Xcb: Make ecore_xcb_window_shape reflect the xlib version more (in the hunt to fix engage issue(s))...tho this still does not fix the issue(s) with engage :/ Author: devilhorns Date: 2011-08-02 02:07:52 -0700 (Tue, 02 Aug 2011) New Revision: 61986 Trac: http://trac.enlightenment.org/e/changeset/61986 Modified: trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_window_shape.c Modified: trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_window_shape.c =================================================================== --- trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_window_shape.c 2011-08-02 07:23:58 UTC (rev 61985) +++ trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_window_shape.c 2011-08-02 09:07:52 UTC (rev 61986) @@ -91,11 +91,13 @@ EAPI void ecore_x_window_shape_rectangle_set(Ecore_X_Window win, int x, int y, int w, int h) { +#ifdef ECORE_XCB_SHAPE + xcb_rectangle_t rect; +#endif + LOGFN(__FILE__, __LINE__, __FUNCTION__); #ifdef ECORE_XCB_SHAPE - xcb_rectangle_t rect; - rect.x = x; rect.y = y; rect.width = w; @@ -116,17 +118,35 @@ EAPI void ecore_x_window_shape_rectangles_set(Ecore_X_Window win, Ecore_X_Rectangle *rects, int num) { +#ifdef ECORE_XCB_SHAPE + xcb_rectangle_t *rect = NULL; +#endif + LOGFN(__FILE__, __LINE__, __FUNCTION__); + if (!rects) return; + #ifdef ECORE_XCB_SHAPE if (num > 0) - xcb_shape_rectangles(_ecore_xcb_conn, XCB_SHAPE_SO_SET, - XCB_SHAPE_SK_BOUNDING, XCB_CLIP_ORDERING_UNSORTED, - win, 0, 0, num, (xcb_rectangle_t *)&rects); - else - xcb_shape_rectangles(_ecore_xcb_conn, XCB_SHAPE_SO_SET, - XCB_SHAPE_SK_BOUNDING, XCB_CLIP_ORDERING_UNSORTED, - win, 0, 0, 0, NULL); + { + int i = 0; + + if (!(rect = malloc(sizeof(xcb_rectangle_t) * num))) + return; + + for (i = 0; i < num; i++) + { + rect[i].x = rects[i].x; + rect[i].y = rects[i].y; + rect[i].width = rects[i].width; + rect[i].height = rects[i].height; + } + } + xcb_shape_rectangles(_ecore_xcb_conn, XCB_SHAPE_SO_SET, + XCB_SHAPE_SK_BOUNDING, XCB_CLIP_ORDERING_UNSORTED, + win, 0, 0, num, (xcb_rectangle_t *)&rect); + + if (rect) free(rect); #else return; win = 0; @@ -172,11 +192,13 @@ EAPI void ecore_x_window_shape_rectangle_add(Ecore_X_Window win, int x, int y, int w, int h) { +#ifdef ECORE_XCB_SHAPE + xcb_rectangle_t rect; +#endif + LOGFN(__FILE__, __LINE__, __FUNCTION__); #ifdef ECORE_XCB_SHAPE - xcb_rectangle_t rect; - rect.x = x; rect.y = y; rect.width = w; @@ -197,11 +219,13 @@ EAPI void ecore_x_window_shape_rectangle_subtract(Ecore_X_Window win, int x, int y, int w, int h) { +#ifdef ECORE_XCB_SHAPE + xcb_rectangle_t rect; +#endif + LOGFN(__FILE__, __LINE__, __FUNCTION__); #ifdef ECORE_XCB_SHAPE - xcb_rectangle_t rect; - rect.x = x; rect.y = y; rect.width = w; @@ -249,17 +273,34 @@ EAPI void ecore_x_window_shape_rectangles_add(Ecore_X_Window win, Ecore_X_Rectangle *rects, int num) { +#ifdef ECORE_XCB_SHAPE + xcb_rectangle_t *rect = NULL; +#endif + LOGFN(__FILE__, __LINE__, __FUNCTION__); #ifdef ECORE_XCB_SHAPE if (num > 0) - xcb_shape_rectangles(_ecore_xcb_conn, XCB_SHAPE_SO_UNION, - XCB_SHAPE_SK_BOUNDING, XCB_CLIP_ORDERING_UNSORTED, - win, 0, 0, num, (xcb_rectangle_t *)&rects); - else - xcb_shape_rectangles(_ecore_xcb_conn, XCB_SHAPE_SO_UNION, - XCB_SHAPE_SK_BOUNDING, XCB_CLIP_ORDERING_UNSORTED, - win, 0, 0, 0, NULL); + { + int i = 0; + + if (!(rect = malloc(sizeof(xcb_rectangle_t) * num))) + return; + + for (i = 0; i < num; i++) + { + rect[i].x = rects[i].x; + rect[i].y = rects[i].y; + rect[i].width = rects[i].width; + rect[i].height = rects[i].height; + } + } + + xcb_shape_rectangles(_ecore_xcb_conn, XCB_SHAPE_SO_UNION, + XCB_SHAPE_SK_BOUNDING, XCB_CLIP_ORDERING_UNSORTED, + win, 0, 0, num, (xcb_rectangle_t *)&rect); + + if (rect) free(rect); #else return; win = 0; @@ -272,17 +313,18 @@ ecore_x_window_shape_rectangles_get(Ecore_X_Window win, int *num_ret) { Ecore_X_Rectangle *rects = NULL; +#ifdef ECORE_XCB_SHAPE + xcb_shape_get_rectangles_cookie_t cookie; + xcb_shape_get_rectangles_reply_t *reply; + xcb_rectangle_t *r; + unsigned int i = 0; +#endif LOGFN(__FILE__, __LINE__, __FUNCTION__); if (num_ret) *num_ret = 0; #ifdef ECORE_XCB_SHAPE - xcb_shape_get_rectangles_cookie_t cookie; - xcb_shape_get_rectangles_reply_t *reply; - xcb_rectangle_t *r; - unsigned int i = 0; - cookie = xcb_shape_get_rectangles(_ecore_xcb_conn, win, XCB_SHAPE_SK_BOUNDING); reply = xcb_shape_get_rectangles_reply(_ecore_xcb_conn, cookie, NULL); @@ -339,17 +381,18 @@ ecore_x_window_shape_input_rectangles_get(Ecore_X_Window win, int *num_ret) { Ecore_X_Rectangle *rects = NULL; +#ifdef ECORE_XCB_SHAPE + xcb_shape_get_rectangles_cookie_t cookie; + xcb_shape_get_rectangles_reply_t *reply; + xcb_rectangle_t *r; + unsigned int i = 0; +#endif LOGFN(__FILE__, __LINE__, __FUNCTION__); if (num_ret) *num_ret = 0; #ifdef ECORE_XCB_SHAPE - xcb_shape_get_rectangles_cookie_t cookie; - xcb_shape_get_rectangles_reply_t *reply; - xcb_rectangle_t *r; - unsigned int i = 0; - cookie = xcb_shape_get_rectangles(_ecore_xcb_conn, win, XCB_SHAPE_SK_INPUT); reply = xcb_shape_get_rectangles_reply(_ecore_xcb_conn, cookie, NULL); @@ -383,22 +426,60 @@ return rects; #else + xcb_get_geometry_cookie_t cookie; + xcb_get_geometry_reply_t *reply; + + if (!(rects = malloc(sizeof(Ecore_X_Rectangle)))) + return NULL; + + /* get geometry */ + cookie = xcb_get_geometry_unchecked(_ecore_xcb_conn, win); + reply = xcb_get_geometry_reply(_ecore_xcb_conn, cookie, NULL); + if (reply) + { + rects[0].x = reply->x; + rects[0].y = reply->y; + rects[0].width = reply->width; + rects[0].height = reply->height; + free(reply); + } + if (num_ret) *num_ret = 1; return rects; - win = 0; #endif } EAPI void ecore_x_window_shape_input_rectangles_set(Ecore_X_Window win, Ecore_X_Rectangle *rects, int num) { +#ifdef ECORE_XCB_SHAPE + xcb_rectangle_t *rect = NULL; +#endif + LOGFN(__FILE__, __LINE__, __FUNCTION__); -#ifdef ECORE_XCB_SHAPE if (!rects) return; +#ifdef ECORE_XCB_SHAPE + if (num > 0) + { + int i = 0; + + if (!(rect = malloc(sizeof(xcb_rectangle_t) * num))) + return; + + for (i = 0; i < num; i++) + { + rect[i].x = rects[i].x; + rect[i].y = rects[i].y; + rect[i].width = rects[i].width; + rect[i].height = rects[i].height; + } + } xcb_shape_rectangles(_ecore_xcb_conn, XCB_SHAPE_SO_SET, XCB_SHAPE_SK_INPUT, XCB_CLIP_ORDERING_UNSORTED, - win, 0, 0, num, (xcb_rectangle_t *)rects); + win, 0, 0, num, (xcb_rectangle_t *)&rect); + + if (rect) free(rect); #else return; win = 0; @@ -410,11 +491,13 @@ EAPI void ecore_x_window_shape_input_rectangle_subtract(Ecore_X_Window win, int x, int y, int w, int h) { +#ifdef ECORE_XCB_SHAPE + xcb_rectangle_t rect; +#endif + LOGFN(__FILE__, __LINE__, __FUNCTION__); #ifdef ECORE_XCB_SHAPE - xcb_rectangle_t rect; - rect.x = x; rect.y = y; rect.width = w; @@ -435,11 +518,13 @@ EAPI void ecore_x_window_shape_input_rectangle_add(Ecore_X_Window win, int x, int y, int w, int h) { +#ifdef ECORE_XCB_SHAPE + xcb_rectangle_t rect; +#endif + LOGFN(__FILE__, __LINE__, __FUNCTION__); #ifdef ECORE_XCB_SHAPE - xcb_rectangle_t rect; - rect.x = x; rect.y = y; rect.width = w; @@ -487,8 +572,6 @@ { LOGFN(__FILE__, __LINE__, __FUNCTION__); -// DBG("Window Shape Input Window Set XY: %d %d %d %d", win, shape_win, x, y); - #ifdef ECORE_XCB_SHAPE xcb_shape_combine(_ecore_xcb_conn, XCB_SHAPE_SO_SET, XCB_SHAPE_SK_INPUT, XCB_SHAPE_SK_INPUT, win, x, y, shape_win); @@ -506,8 +589,6 @@ { LOGFN(__FILE__, __LINE__, __FUNCTION__); -// DBG("Window Shape Input Window Add XY: %d %d %d %d", win, shape_win, x, y); - #ifdef ECORE_XCB_SHAPE xcb_shape_combine(_ecore_xcb_conn, XCB_SHAPE_SO_UNION, XCB_SHAPE_SK_INPUT, XCB_SHAPE_SK_INPUT, win, x, y, shape_win); @@ -525,8 +606,6 @@ { LOGFN(__FILE__, __LINE__, __FUNCTION__); -// DBG("Window Shape Input Window Set: %d %d", win, shape_win); - #ifdef ECORE_XCB_SHAPE xcb_shape_combine(_ecore_xcb_conn, XCB_SHAPE_SO_SET, XCB_SHAPE_SK_INPUT, XCB_SHAPE_SK_INPUT, win, 0, 0, shape_win); @@ -567,17 +646,34 @@ EAPI void ecore_x_window_shape_input_rectangles_add(Ecore_X_Window win, Ecore_X_Rectangle *rects, int num) { +#ifdef ECORE_XCB_SHAPE + xcb_rectangle_t *rect = NULL; +#endif + LOGFN(__FILE__, __LINE__, __FUNCTION__); #ifdef ECORE_XCB_SHAPE if (num > 0) - xcb_shape_rectangles(_ecore_xcb_conn, XCB_SHAPE_SO_UNION, - XCB_SHAPE_SK_INPUT, XCB_CLIP_ORDERING_UNSORTED, - win, 0, 0, num, (xcb_rectangle_t *)&rects); - else - xcb_shape_rectangles(_ecore_xcb_conn, XCB_SHAPE_SO_UNION, - XCB_SHAPE_SK_INPUT, XCB_CLIP_ORDERING_UNSORTED, - win, 0, 0, 0, NULL); + { + int i = 0; + + if (!(rect = malloc(sizeof(xcb_rectangle_t) * num))) + return; + + for (i = 0; i < num; i++) + { + rect[i].x = rects[i].x; + rect[i].y = rects[i].y; + rect[i].width = rects[i].width; + rect[i].height = rects[i].height; + } + } + + xcb_shape_rectangles(_ecore_xcb_conn, XCB_SHAPE_SO_UNION, + XCB_SHAPE_SK_INPUT, XCB_CLIP_ORDERING_UNSORTED, + win, 0, 0, num, (xcb_rectangle_t *)&rect); + + if (rect) free(rect); #else return; win = 0; |
From: Enlightenment S. <no-...@en...> - 2011-08-04 20:46:50
|
Log: Ecore_X: Fix dnd for shaped windows. Author: devilhorns Date: 2011-08-04 13:46:44 -0700 (Thu, 04 Aug 2011) New Revision: 62105 Trac: http://trac.enlightenment.org/e/changeset/62105 Modified: trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_window_shadow.c trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_window_shape.c Modified: trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_window_shadow.c =================================================================== --- trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_window_shadow.c 2011-08-04 20:44:05 UTC (rev 62104) +++ trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_window_shadow.c 2011-08-04 20:46:44 UTC (rev 62105) @@ -10,6 +10,8 @@ unsigned short w, h; }; +static Eina_Bool _inside_rects(Shadow *s, int x, int y, int bx, int by, Ecore_X_Rectangle *rects, int num); + //static int shadow_count = 0; static Shadow **shadow_base = NULL; static int shadow_num = 0; @@ -224,13 +226,20 @@ _ecore_x_window_shadow_tree_at_xy_get_shadow(Shadow *s, int bx, int by, int x, int y, Ecore_X_Window *skip, int skip_num) { Ecore_X_Window child; - int i = 0, j = 0, wx = 0, wy = 0; + Ecore_X_Rectangle *rects; + int i = 0, j = 0, wx = 0, wy = 0, num = 0; wx = s->x + bx; wy = s->y + by; if (!((x >= wx) && (y >= wy) && (x < (wx + s->w)) && (y < (wy + s->h)))) return 0; + rects = ecore_x_window_shape_rectangles_get(s->win, &num); + if (!_inside_rects(s, x, y, bx, by, rects, num)) return 0; + num = 0; + rects = ecore_x_window_shape_input_rectangles_get(s->win, &num); + if (!_inside_rects(s, x, y, bx, by, rects, num)) return 0; + if (s->children) { int skipit = 0; @@ -281,6 +290,28 @@ return _ecore_x_window_shadow_tree_at_xy_get_shadow(s, bx, by, x, y, skip, skip_num); } +static Eina_Bool +_inside_rects(Shadow *s, int x, int y, int bx, int by, Ecore_X_Rectangle *rects, int num) +{ + Eina_Bool inside = EINA_FALSE; + int i = 0; + + if (!rects) return EINA_FALSE; + for (i = 0; i < num; i++) + { + if ((x >= s->x + bx + rects[i].x) && + (y >= s->y + by + rects[i].y) && + (x < (int)(s->x + bx + rects[i].x + rects[i].width)) && + (y < (int)(s->y + by + rects[i].y + rects[i].height))) + { + inside = EINA_TRUE; + break; + } + } + free(rects); + return inside; +} + /** * Retrieves the top, visible window at the given location, * but skips the windows in the list. This uses a shadow tree built from the Modified: trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_window_shape.c =================================================================== --- trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_window_shape.c 2011-08-04 20:44:05 UTC (rev 62104) +++ trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_window_shape.c 2011-08-04 20:46:44 UTC (rev 62105) @@ -25,7 +25,6 @@ #ifdef ECORE_XCB_SHAPE xcb_shape_mask(_ecore_xcb_conn, XCB_SHAPE_SO_SET, XCB_SHAPE_SK_INPUT, win, 0, 0, mask); - #else return; win = 0; @@ -48,7 +47,6 @@ #ifdef ECORE_XCB_SHAPE xcb_shape_mask(_ecore_xcb_conn, XCB_SHAPE_SO_SET, XCB_SHAPE_SK_BOUNDING, win, 0, 0, mask); - #else return; win = 0; |
From: Enlightenment S. <no-...@en...> - 2011-08-08 18:05:15
|
Log: Ecore_X: Fix formatting of new xfixes code (someone's editor is not indenting correctly) ;) Fix formatting of some existing code to declare variables at the top of functions. Remove some unused variables. Author: devilhorns Date: 2011-08-08 11:05:07 -0700 (Mon, 08 Aug 2011) New Revision: 62209 Trac: http://trac.enlightenment.org/e/changeset/62209 Modified: trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_events.c Modified: trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_events.c =================================================================== --- trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_events.c 2011-08-08 16:09:34 UTC (rev 62208) +++ trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_events.c 2011-08-08 18:05:07 UTC (rev 62209) @@ -186,6 +186,7 @@ ECORE_X_EVENT_SELECTION_CLEAR = ecore_event_type_new(); ECORE_X_EVENT_SELECTION_REQUEST = ecore_event_type_new(); ECORE_X_EVENT_SELECTION_NOTIFY = ecore_event_type_new(); + ECORE_X_EVENT_FIXES_SELECTION_NOTIFY = ecore_event_type_new(); ECORE_X_EVENT_CLIENT_MESSAGE = ecore_event_type_new(); ECORE_X_EVENT_WINDOW_SHAPE = ecore_event_type_new(); ECORE_X_EVENT_SCREENSAVER_NOTIFY = ecore_event_type_new(); @@ -368,7 +369,7 @@ _ecore_xcb_event_handle_generic_event(ev); #ifdef ECORE_XCB_DAMAGE else if ((_ecore_xcb_event_damage >= 0) && - (response == _ecore_xcb_event_damage + XCB_DAMAGE_NOTIFY)) + (response == (_ecore_xcb_event_damage + XCB_DAMAGE_NOTIFY))) _ecore_xcb_event_handle_damage_notify(ev); #endif #ifdef ECORE_XCB_RANDR @@ -388,7 +389,7 @@ #endif #ifdef ECORE_XCB_SHAPE else if ((_ecore_xcb_event_shape >= 0) && - (response == _ecore_xcb_event_shape + XCB_SHAPE_NOTIFY)) + (response == (_ecore_xcb_event_shape + XCB_SHAPE_NOTIFY))) _ecore_xcb_event_handle_shape_change(ev); #endif #ifdef ECORE_XCB_SYNC @@ -1792,14 +1793,15 @@ static void _ecore_xcb_event_handle_damage_notify(xcb_generic_event_t *event) { +#ifdef ECORE_XCB_DAMAGE + xcb_damage_notify_event_t *ev; + Ecore_X_Event_Damage *e; +#endif + LOGFN(__FILE__, __LINE__, __FUNCTION__); _ecore_xcb_event_last_mouse_move = EINA_FALSE; - #ifdef ECORE_XCB_DAMAGE - xcb_damage_notify_event_t *ev; - Ecore_X_Event_Damage *e; - ev = (xcb_damage_notify_event_t *)event; if (!(e = calloc(1, sizeof(Ecore_X_Event_Damage)))) return; @@ -1823,14 +1825,15 @@ static void _ecore_xcb_event_handle_randr_change(xcb_generic_event_t *event) { +#ifdef ECORE_XCB_RANDR + xcb_randr_screen_change_notify_event_t *ev; + Ecore_X_Event_Screen_Change *e; +#endif + LOGFN(__FILE__, __LINE__, __FUNCTION__); _ecore_xcb_event_last_mouse_move = EINA_FALSE; - #ifdef ECORE_XCB_RANDR - xcb_randr_screen_change_notify_event_t *ev; - Ecore_X_Event_Screen_Change *e; - ev = (xcb_randr_screen_change_notify_event_t *)event; if (!(e = calloc(1, sizeof(Ecore_X_Event_Screen_Change)))) return; @@ -1852,13 +1855,14 @@ static void _ecore_xcb_event_handle_randr_notify(xcb_generic_event_t *event) { +#ifdef ECORE_XCB_RANDR + xcb_randr_notify_event_t *ev; +#endif + LOGFN(__FILE__, __LINE__, __FUNCTION__); _ecore_xcb_event_last_mouse_move = EINA_FALSE; - #ifdef ECORE_XCB_RANDR - xcb_randr_notify_event_t *ev; - ev = (xcb_randr_notify_event_t *)event; switch (ev->subCode) { @@ -1880,12 +1884,14 @@ static void _ecore_xcb_event_handle_randr_crtc_change(xcb_generic_event_t *event) { - LOGFN(__FILE__, __LINE__, __FUNCTION__); - #ifdef ECORE_XCB_RANDR xcb_randr_notify_event_t *ev; Ecore_X_Event_Randr_Crtc_Change *e; +#endif + LOGFN(__FILE__, __LINE__, __FUNCTION__); + +#ifdef ECORE_XCB_RANDR ev = (xcb_randr_notify_event_t *)event; if (!(e = calloc(1, sizeof(Ecore_X_Event_Randr_Crtc_Change)))) return; @@ -1906,12 +1912,14 @@ static void _ecore_xcb_event_handle_randr_output_change(xcb_generic_event_t *event) { - LOGFN(__FILE__, __LINE__, __FUNCTION__); - #ifdef ECORE_XCB_RANDR xcb_randr_notify_event_t *ev; Ecore_X_Event_Randr_Output_Change *e; +#endif + LOGFN(__FILE__, __LINE__, __FUNCTION__); + +#ifdef ECORE_XCB_RANDR ev = (xcb_randr_notify_event_t *)event; if (!(e = calloc(1, sizeof(Ecore_X_Event_Randr_Crtc_Change)))) return; @@ -1931,12 +1939,14 @@ static void _ecore_xcb_event_handle_randr_output_property_change(xcb_generic_event_t *event) { - LOGFN(__FILE__, __LINE__, __FUNCTION__); - #ifdef ECORE_XCB_RANDR xcb_randr_notify_event_t *ev; Ecore_X_Event_Randr_Output_Property_Notify *e; +#endif + LOGFN(__FILE__, __LINE__, __FUNCTION__); + +#ifdef ECORE_XCB_RANDR ev = (xcb_randr_notify_event_t *)event; if (!(e = calloc(1, sizeof(Ecore_X_Event_Randr_Output_Property_Notify)))) return; @@ -1957,14 +1967,15 @@ static void _ecore_xcb_event_handle_screensaver_notify(xcb_generic_event_t *event) { +#ifdef ECORE_XCB_SCREENSAVER + xcb_screensaver_notify_event_t *ev; + Ecore_X_Event_Screensaver_Notify *e; +#endif + LOGFN(__FILE__, __LINE__, __FUNCTION__); _ecore_xcb_event_last_mouse_move = EINA_FALSE; - #ifdef ECORE_XCB_SCREENSAVER - xcb_screensaver_notify_event_t *ev; - Ecore_X_Event_Screensaver_Notify *e; - ev = (xcb_screensaver_notify_event_t *)event; if (!(e = calloc(1, sizeof(Ecore_X_Event_Screensaver_Notify)))) return; @@ -2019,14 +2030,16 @@ static void _ecore_xcb_event_handle_sync_counter(xcb_generic_event_t *event) { +#ifdef ECORE_XCB_SYNC + xcb_sync_counter_notify_event_t *ev; + Ecore_X_Event_Sync_Counter *e; +#endif + LOGFN(__FILE__, __LINE__, __FUNCTION__); _ecore_xcb_event_last_mouse_move = EINA_FALSE; #ifdef ECORE_XCB_SYNC - xcb_sync_counter_notify_event_t *ev; - Ecore_X_Event_Sync_Counter *e; - ev = (xcb_sync_counter_notify_event_t *)event; if (!(e = calloc(1, sizeof(Ecore_X_Event_Sync_Counter)))) return; @@ -2039,14 +2052,15 @@ static void _ecore_xcb_event_handle_sync_alarm(xcb_generic_event_t *event) { +#ifdef ECORE_XCB_SYNC + xcb_sync_alarm_notify_event_t *ev; + Ecore_X_Event_Sync_Alarm *e; +#endif + LOGFN(__FILE__, __LINE__, __FUNCTION__); _ecore_xcb_event_last_mouse_move = EINA_FALSE; - #ifdef ECORE_XCB_SYNC - xcb_sync_alarm_notify_event_t *ev; - Ecore_X_Event_Sync_Alarm *e; - ev = (xcb_sync_alarm_notify_event_t *)event; if (!(e = calloc(1, sizeof(Ecore_X_Event_Sync_Alarm)))) return; @@ -2058,20 +2072,21 @@ } static void -_ecore_xcb_event_handle_xfixes_selection_notify(xcb_generic_event_t *event __UNUSED__) +_ecore_xcb_event_handle_xfixes_selection_notify(xcb_generic_event_t *event) { +#ifdef ECORE_XCB_XFIXES Ecore_X_Event_Fixes_Selection_Notify *e; Ecore_X_Atom sel; xcb_xfixes_selection_notify_event_t *ev; +#endif LOGFN(__FILE__, __LINE__, __FUNCTION__); _ecore_xcb_event_last_mouse_move = EINA_FALSE; +#ifdef ECORE_XCB_XFIXES ev = (xcb_xfixes_selection_notify_event_t *)event; - e = calloc(1, sizeof(*e)); - if (!e) - return; + if (!(e = calloc(1, sizeof(*e)))) return; e->win = ev->window; e->owner = ev->owner; @@ -2079,18 +2094,17 @@ e->selection_time = ev->selection_timestamp; e->atom = sel = ev->selection; if (sel == ECORE_X_ATOM_SELECTION_PRIMARY) - e->selection = ECORE_X_SELECTION_PRIMARY; + e->selection = ECORE_X_SELECTION_PRIMARY; else if (sel == ECORE_X_ATOM_SELECTION_SECONDARY) - e->selection = ECORE_X_SELECTION_SECONDARY; + e->selection = ECORE_X_SELECTION_SECONDARY; else if (sel == ECORE_X_ATOM_SELECTION_CLIPBOARD) - e->selection = ECORE_X_SELECTION_CLIPBOARD; + e->selection = ECORE_X_SELECTION_CLIPBOARD; else - e->selection = ECORE_X_SELECTION_OTHER; + e->selection = ECORE_X_SELECTION_OTHER; e->reason = ev->subtype; ecore_event_add(ECORE_X_EVENT_FIXES_SELECTION_NOTIFY, e, NULL, NULL); -} /* _ecore_x_event_handle_fixes_selection_notify */ - +#endif } static void @@ -2147,7 +2161,7 @@ xcb_keycode_t keycode = 0; xcb_key_press_event_t *xevent; char *keyname = NULL, *key = NULL; - char *compose = NULL, *tmp = NULL; + char *compose = NULL; char compose_buffer[256]; int val = 0; @@ -2176,7 +2190,7 @@ compose_buffer[val] = 0; compose = eina_str_convert(nl_langinfo(CODESET), "UTF-8", compose_buffer); - tmp = compose; +// tmp = compose; } key = _ecore_xcb_keymap_keysym_to_string(sym); @@ -2217,7 +2231,7 @@ xcb_keycode_t keycode = 0; xcb_key_release_event_t *xevent; char *keyname = NULL, *key = NULL; - char *compose = NULL, *tmp = NULL; + char *compose = NULL; char compose_buffer[256]; int val = 0; @@ -2246,7 +2260,7 @@ compose_buffer[val] = 0; compose = eina_str_convert(nl_langinfo(CODESET), "UTF-8", compose_buffer); - tmp = compose; +// tmp = compose; } key = _ecore_xcb_keymap_keysym_to_string(sym); |
From: Enlightenment S. <no-...@en...> - 2011-08-08 18:05:53
|
Log: Ecore_X: Fix newly added xfixes selection code for Tom ;) Author: devilhorns Date: 2011-08-08 11:05:46 -0700 (Mon, 08 Aug 2011) New Revision: 62210 Trac: http://trac.enlightenment.org/e/changeset/62210 Modified: trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_xfixes.c Modified: trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_xfixes.c =================================================================== --- trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_xfixes.c 2011-08-08 18:05:07 UTC (rev 62209) +++ trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_xfixes.c 2011-08-08 18:05:46 UTC (rev 62210) @@ -47,10 +47,7 @@ if (reply) { if (reply->major_version >= 3) - { - _xfixes_avail = EINA_TRUE; - ECORE_X_EVENT_FIXES_SELECTION_NOTIFY = ecore_event_type_new(); - } + _xfixes_avail = EINA_TRUE; free(reply); } @@ -64,17 +61,31 @@ ecore_x_fixes_selection_notification_request(Ecore_X_Atom selection) { #ifdef ECORE_XCB_XFIXES - if (_xfixes_avail) + Ecore_X_Window root = 0; + xcb_void_cookie_t cookie; + xcb_generic_error_t *err; + int mask = 0; +#endif + + if (!_xfixes_avail) return EINA_FALSE; +#ifdef ECORE_XCB_XFIXES + root = ((xcb_screen_t *)_ecore_xcb_screen)->root; + + mask = (XCB_XFIXES_SELECTION_EVENT_MASK_SET_SELECTION_OWNER | + XCB_XFIXES_SELECTION_EVENT_MASK_SELECTION_WINDOW_DESTROY | + XCB_XFIXES_SELECTION_EVENT_MASK_SELECTION_CLIENT_CLOSE); + + cookie = + xcb_xfixes_select_selection_input_checked(_ecore_xcb_conn, root, + selection, mask); + err = xcb_request_check(_ecore_xcb_conn, cookie); + if (err) { - xcb_xfixes_select_selection_input_checked(_ecore_xcb_conn, - /* FIXME: We need a way to know the root window. */ - NULL, - selection, - XCB_XFIXES_SELECTION_EVENT_MASK_SET_SELECTION_OWNER | - XCB_XFIXES_SELECTION_EVENT_MASK_SELECTION_WINDOW_DESTROY | - XCB_XFIXES_SELECTION_EVENT_MASK_SELECTION_CLIENT_CLOSE); - return EINA_TRUE; + free(err); + return EINA_FALSE; } + + return EINA_TRUE; #endif return EINA_FALSE; } |
From: Enlightenment S. <no-...@en...> - 2011-08-08 18:59:35
|
Log: Ecore_X: Use unchecked version for getting overlay window. Author: devilhorns Date: 2011-08-08 11:59:25 -0700 (Mon, 08 Aug 2011) New Revision: 62211 Trac: http://trac.enlightenment.org/e/changeset/62211 Modified: trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_composite.c Modified: trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_composite.c =================================================================== --- trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_composite.c 2011-08-08 18:05:46 UTC (rev 62210) +++ trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_composite.c 2011-08-08 18:59:25 UTC (rev 62211) @@ -216,7 +216,7 @@ LOGFN(__FILE__, __LINE__, __FUNCTION__); #ifdef ECORE_XCB_COMPOSITE - cookie = xcb_composite_get_overlay_window(_ecore_xcb_conn, root); + cookie = xcb_composite_get_overlay_window_unchecked(_ecore_xcb_conn, root); reply = xcb_composite_get_overlay_window_reply(_ecore_xcb_conn, cookie, NULL); if (!reply) return win; |
From: Enlightenment S. <no-...@en...> - 2011-08-08 19:15:11
|
Log: Ecore_X: Remove check for damage extension version. (we don't check version in xlib, so don't check it here). Author: devilhorns Date: 2011-08-08 12:15:04 -0700 (Mon, 08 Aug 2011) New Revision: 62212 Trac: http://trac.enlightenment.org/e/changeset/62212 Modified: trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_damage.c Modified: trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_damage.c =================================================================== --- trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_damage.c 2011-08-08 18:59:25 UTC (rev 62211) +++ trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_damage.c 2011-08-08 19:15:04 UTC (rev 62212) @@ -42,8 +42,7 @@ reply = xcb_damage_query_version_reply(_ecore_xcb_conn, cookie, NULL); if (reply) { - if (reply->major_version >= XCB_DAMAGE_MAJOR_VERSION) - _damage_avail = EINA_TRUE; + _damage_avail = EINA_TRUE; free(reply); } |
From: Enlightenment S. <no-...@en...> - 2011-08-08 19:15:48
|
Log: Ecore_X: Remove check for shape extension version. Author: devilhorns Date: 2011-08-08 12:15:41 -0700 (Mon, 08 Aug 2011) New Revision: 62213 Trac: http://trac.enlightenment.org/e/changeset/62213 Modified: trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_shape.c Modified: trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_shape.c =================================================================== --- trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_shape.c 2011-08-08 19:15:04 UTC (rev 62212) +++ trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_shape.c 2011-08-08 19:15:41 UTC (rev 62213) @@ -37,10 +37,7 @@ reply = xcb_shape_query_version_reply(_ecore_xcb_conn, cookie, NULL); if (reply) { - if ((reply->major_version >= XCB_SHAPE_MAJOR_VERSION) && - (reply->minor_version >= XCB_SHAPE_MINOR_VERSION)) - _shape_avail = EINA_TRUE; - + _shape_avail = EINA_TRUE; free(reply); } |
From: Enlightenment S. <no-...@en...> - 2011-08-08 19:31:24
|
Log: Ecore_X: We don't check fixes extension version in xlib, so don't check it here. Author: devilhorns Date: 2011-08-08 12:31:17 -0700 (Mon, 08 Aug 2011) New Revision: 62214 Trac: http://trac.enlightenment.org/e/changeset/62214 Modified: trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_xfixes.c Modified: trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_xfixes.c =================================================================== --- trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_xfixes.c 2011-08-08 19:15:41 UTC (rev 62213) +++ trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_xfixes.c 2011-08-08 19:31:17 UTC (rev 62214) @@ -46,8 +46,7 @@ reply = xcb_xfixes_query_version_reply(_ecore_xcb_conn, cookie, NULL); if (reply) { - if (reply->major_version >= 3) - _xfixes_avail = EINA_TRUE; + _xfixes_avail = EINA_TRUE; free(reply); } |
From: Enlightenment S. <no-...@en...> - 2011-08-08 20:10:52
|
Log: Ecore_X: Fix fat finger copy-paste error wrt casting on shape rectangles. Thanks jeffdameth for pointing that out ;) Author: devilhorns Date: 2011-08-08 13:10:44 -0700 (Mon, 08 Aug 2011) New Revision: 62215 Trac: http://trac.enlightenment.org/e/changeset/62215 Modified: trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_window_shape.c Modified: trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_window_shape.c =================================================================== --- trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_window_shape.c 2011-08-08 19:31:17 UTC (rev 62214) +++ trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_window_shape.c 2011-08-08 20:10:44 UTC (rev 62215) @@ -142,7 +142,7 @@ } xcb_shape_rectangles(_ecore_xcb_conn, XCB_SHAPE_SO_SET, XCB_SHAPE_SK_BOUNDING, XCB_CLIP_ORDERING_UNSORTED, - win, 0, 0, num, (xcb_rectangle_t *)&rect); + win, 0, 0, num, (xcb_rectangle_t *)rect); if (rect) free(rect); #else @@ -475,7 +475,7 @@ } xcb_shape_rectangles(_ecore_xcb_conn, XCB_SHAPE_SO_SET, XCB_SHAPE_SK_INPUT, XCB_CLIP_ORDERING_UNSORTED, - win, 0, 0, num, (xcb_rectangle_t *)&rect); + win, 0, 0, num, (xcb_rectangle_t *)rect); if (rect) free(rect); #else @@ -543,11 +543,13 @@ EAPI void ecore_x_window_shape_input_rectangle_set(Ecore_X_Window win, int x, int y, int w, int h) { +#ifdef ECORE_XCB_SHAPE + xcb_rectangle_t rect; +#endif + LOGFN(__FILE__, __LINE__, __FUNCTION__); #ifdef ECORE_XCB_SHAPE - xcb_rectangle_t rect; - rect.x = x; rect.y = y; rect.width = w; |
From: Enlightenment S. <no-...@en...> - 2011-08-08 20:35:55
|
Log: Ecore_X: Add comment wrt Fixes extension version (for Tom). Remove unused code wrt invert regions. Author: devilhorns Date: 2011-08-08 13:35:48 -0700 (Mon, 08 Aug 2011) New Revision: 62216 Trac: http://trac.enlightenment.org/e/changeset/62216 Modified: trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_xfixes.c Modified: trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_xfixes.c =================================================================== --- trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_xfixes.c 2011-08-08 20:10:44 UTC (rev 62215) +++ trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_xfixes.c 2011-08-08 20:35:48 UTC (rev 62216) @@ -46,6 +46,12 @@ reply = xcb_xfixes_query_version_reply(_ecore_xcb_conn, cookie, NULL); if (reply) { + /* NB: XFixes Extension >= 3 needed for shape stuff. + * for now, I am removing this check so that it matches the + * xlib code closer. If the extension version ends up being + * that important, then re-enable this */ + + /* if (reply->major_version >= 3) */ _xfixes_avail = EINA_TRUE; free(reply); } @@ -366,23 +372,17 @@ { #ifdef ECORE_XCB_XFIXES xcb_rectangle_t xrects; - int num = 0; #endif LOGFN(__FILE__, __LINE__, __FUNCTION__); #ifdef ECORE_XCB_XFIXES - while (bounds + num) - num++; - xrects.x = bounds->x; xrects.y = bounds->y; xrects.width = bounds->width; xrects.height = bounds->height; -// xrects = _ecore_xcb_rect_to_xcb(bounds, num); xcb_xfixes_invert_region(_ecore_xcb_conn, source, xrects, dest); -// free(xrects); #endif } |
From: Enlightenment S. <no-...@en...> - 2011-08-08 20:37:47
|
Log: Ecore_X: Make ecore_xcb_window match up more w/ xlib version. Fix some formatting. Don't allocate any Ecore_X_Windows if the children count is zero. Author: devilhorns Date: 2011-08-08 13:37:40 -0700 (Mon, 08 Aug 2011) New Revision: 62217 Trac: http://trac.enlightenment.org/e/changeset/62217 Modified: trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_window.c Modified: trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_window.c =================================================================== --- trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_window.c 2011-08-08 20:35:48 UTC (rev 62216) +++ trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_window.c 2011-08-08 20:37:40 UTC (rev 62217) @@ -886,8 +886,8 @@ LOGFN(__FILE__, __LINE__, __FUNCTION__); - list = (XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY | - XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT); + list = (XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT | + XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY); xcb_change_window_attributes(_ecore_xcb_conn, win, XCB_CW_EVENT_MASK, &list); @@ -1045,6 +1045,8 @@ ecore_x_sync(); // needed + /* FIXME: XLib uses XSelectInput */ + /* FIXME: Add error handler trap */ list = (XCB_EVENT_MASK_ENTER_WINDOW | XCB_EVENT_MASK_LEAVE_WINDOW | XCB_EVENT_MASK_PROPERTY_CHANGE | XCB_EVENT_MASK_RESIZE_REDIRECT | XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT | @@ -1083,12 +1085,19 @@ if (reply->map_state != XCB_MAP_STATE_UNMAPPED) att_ret->visible = EINA_TRUE; + if (reply->map_state == XCB_MAP_STATE_VIEWABLE) att_ret->viewable = EINA_TRUE; - if (reply->override_redirect) att_ret->override = EINA_TRUE; + + if (reply->override_redirect) + att_ret->override = EINA_TRUE; + if (reply->_class == XCB_WINDOW_CLASS_INPUT_ONLY) att_ret->input_only = EINA_TRUE; - if (reply->save_under) att_ret->save_under = EINA_TRUE; + + if (reply->save_under) + att_ret->save_under = EINA_TRUE; + att_ret->event_mask.mine = reply->your_event_mask; att_ret->event_mask.all = reply->all_event_masks; att_ret->event_mask.no_propagate = reply->do_not_propagate_mask; @@ -1237,6 +1246,7 @@ if (!num_ret) return NULL; + /* FIXME: Use xprint if available. Reference xlib */ setup = xcb_get_setup(_ecore_xcb_conn); iter = xcb_setup_roots_iterator(setup); num = setup->roots_len; @@ -1253,25 +1263,28 @@ { xcb_query_tree_cookie_t cookie; xcb_query_tree_reply_t *reply; - xcb_window_t *w; Ecore_X_Window *windows = NULL; LOGFN(__FILE__, __LINE__, __FUNCTION__); if (num) *num = 0; - cookie = xcb_query_tree(_ecore_xcb_conn, win); + cookie = xcb_query_tree_unchecked(_ecore_xcb_conn, win); reply = xcb_query_tree_reply(_ecore_xcb_conn, cookie, NULL); if (!reply) return NULL; + if (num) *num = reply->children_len; - - windows = malloc(sizeof(Ecore_X_Window) * reply->children_len); - if (windows) + if (reply->children_len > 0) { - unsigned int i = 0; + windows = malloc(sizeof(Ecore_X_Window) * reply->children_len); + if (windows) + { + unsigned int i = 0; + xcb_window_t *w; - w = xcb_query_tree_children(reply); - for (i = 0; i < reply->children_len; i++) - windows[i] = w[i]; + w = xcb_query_tree_children(reply); + for (i = 0; i < reply->children_len; i++) + windows[i] = w[i]; + } } free(reply); |
From: Enlightenment S. <no-...@en...> - 2011-08-08 20:39:17
|
Log: Ecore_X: Make ecore_x_init (wrt xcb) match the xlib version more (add eina_init, etc). dlopen XCloseDisplay for opengl and use that also. Use the unchecked version for query pointer. Add some FIXME notes. Author: devilhorns Date: 2011-08-08 13:39:10 -0700 (Mon, 08 Aug 2011) New Revision: 62218 Trac: http://trac.enlightenment.org/e/changeset/62218 Modified: trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb.c Modified: trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb.c =================================================================== --- trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb.c 2011-08-08 20:37:40 UTC (rev 62217) +++ trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb.c 2011-08-08 20:39:10 UTC (rev 62218) @@ -49,30 +49,29 @@ LOGFN(__FILE__, __LINE__, __FUNCTION__); - /* try to initialize eina + /* try to initialize eina */ if (!eina_init()) return --_ecore_xcb_init_count; - */ - /* try to initialize ecore */ - if (!ecore_init()) - { - /* unregister log domain */ - /* eina_log_domain_unregister(_ecore_xcb_log_dom); */ - /* _ecore_xcb_log_dom = -1; */ - /* eina_shutdown(); */ - return --_ecore_xcb_init_count; - } - /* setup ecore_xcb log domain */ _ecore_xcb_log_dom = eina_log_domain_register("ecore_x", ECORE_XCB_DEFAULT_LOG_COLOR); if (_ecore_xcb_log_dom < 0) { EINA_LOG_ERR("Cannot create Ecore Xcb log domain"); - ecore_shutdown(); + eina_shutdown(); return --_ecore_xcb_init_count; } + /* try to initialize ecore */ + if (!ecore_init()) + { + /* unregister log domain */ + eina_log_domain_unregister(_ecore_xcb_log_dom); + _ecore_xcb_log_dom = -1; + eina_shutdown(); + return --_ecore_xcb_init_count; + } + /* try to initialize ecore_event */ if (!ecore_event_init()) { @@ -80,9 +79,12 @@ eina_log_domain_unregister(_ecore_xcb_log_dom); _ecore_xcb_log_dom = -1; ecore_shutdown(); + eina_shutdown(); return --_ecore_xcb_init_count; } + /* NB: XLib has XInitThreads */ + /* check for env var which says we are not going to use GL @ all * * NB: This is done because if someone wants a 'pure' xcb implementation @@ -104,13 +106,16 @@ { /* env var was not specified, so we will assume that the user * may want opengl @ some point. connect this way for opengl to work */ - - /* want to dlopen here to avoid actual library linkage */ void *libxcb, *libxlib; Display *(*_real_display)(const char *display); xcb_connection_t *(*_real_connection)(Display *dpy); void (*_real_queue)(Display *dpy, enum XEventQueueOwner owner); + int (*_real_close)(Display *dpy); +#ifdef EVAS_FRAME_QUEUING + Status (*_real_threads)(void); +#endif + /* want to dlopen here to avoid actual library linkage */ libxlib = dlopen("libX11.so", (RTLD_LAZY | RTLD_GLOBAL)); if (!libxlib) libxlib = dlopen("libX11.so.6", (RTLD_LAZY | RTLD_GLOBAL)); @@ -122,7 +127,9 @@ /* unregister log domain */ eina_log_domain_unregister(_ecore_xcb_log_dom); _ecore_xcb_log_dom = -1; + ecore_event_shutdown(); ecore_shutdown(); + eina_shutdown(); return --_ecore_xcb_init_count; } @@ -137,19 +144,53 @@ /* unregister log domain */ eina_log_domain_unregister(_ecore_xcb_log_dom); _ecore_xcb_log_dom = -1; + ecore_event_shutdown(); ecore_shutdown(); + eina_shutdown(); return --_ecore_xcb_init_count; } _real_display = dlsym(libxlib, "XOpenDisplay"); + _real_close = dlsym(libxlib, "XCloseDisplay"); _real_connection = dlsym(libxcb, "XGetXCBConnection"); _real_queue = dlsym(libxcb, "XSetEventQueueOwner"); +#ifdef EVAS_FRAME_QUEUING + _real_threads = dlsym(libxlib, "XInitThreads"); +#endif if (_real_display) { +#ifdef EVAS_FRAME_QUEUING + if (_real_threads) _real_threads(); +#endif _ecore_xcb_display = _real_display(name); + if (!_ecore_xcb_display) + { + ERR("Could not open Display via XLib"); + /* unregister log domain */ + eina_log_domain_unregister(_ecore_xcb_log_dom); + _ecore_xcb_log_dom = -1; + ecore_event_shutdown(); + ecore_shutdown(); + eina_shutdown(); + return --_ecore_xcb_init_count; + } if (_real_connection) _ecore_xcb_conn = _real_connection(_ecore_xcb_display); + if (!_ecore_xcb_conn) + { + ERR("Could not get XCB Connection from XLib"); + + if (_real_close) _real_close(_ecore_xcb_display); + + /* unregister log domain */ + eina_log_domain_unregister(_ecore_xcb_log_dom); + _ecore_xcb_log_dom = -1; + ecore_event_shutdown(); + ecore_shutdown(); + eina_shutdown(); + return --_ecore_xcb_init_count; + } if (_real_queue) _real_queue(_ecore_xcb_display, XCBOwnsEventQueue); } @@ -162,6 +203,7 @@ _ecore_xcb_log_dom = -1; ecore_event_shutdown(); ecore_shutdown(); + eina_shutdown(); return --_ecore_xcb_init_count; } @@ -181,14 +223,14 @@ /* finalize extensions */ _ecore_xcb_extensions_finalize(); - /* setup xcb events */ - _ecore_xcb_events_init(); - /* set keyboard autorepeat */ mask = XCB_KB_AUTO_REPEAT_MODE; list[0] = XCB_AUTO_REPEAT_MODE_ON; xcb_change_keyboard_control(_ecore_xcb_conn, mask, list); + /* setup xcb events */ + _ecore_xcb_events_init(); + /* setup xcb keymasks */ _ecore_xcb_keymap_init(); @@ -636,7 +678,7 @@ if (x) *x = -1; if (y) *y = -1; - cookie = xcb_query_pointer(_ecore_xcb_conn, win); + cookie = xcb_query_pointer_unchecked(_ecore_xcb_conn, win); reply = xcb_query_pointer_reply(_ecore_xcb_conn, cookie, NULL); if (!reply) return; if (x) *x = reply->win_x; @@ -649,6 +691,9 @@ { LOGFN(__FILE__, __LINE__, __FUNCTION__); + /* FIXME: Check request for success */ + /* xcb_change_pointer_control_checked */ + /* xcb_request_check */ xcb_change_pointer_control(_ecore_xcb_conn, accel_num, accel_denom, threshold, 1, 1); return EINA_TRUE; @@ -800,6 +845,9 @@ { LOGFN(__FILE__, __LINE__, __FUNCTION__); + /* FIXME: Check Return */ + /* xcb_warp_pointer_checked */ + /* xcb_request_check */ xcb_warp_pointer(_ecore_xcb_conn, XCB_NONE, win, 0, 0, 0, 0, x, y); return EINA_TRUE; } @@ -1228,47 +1276,53 @@ static int _ecore_xcb_shutdown(Eina_Bool close_display) { - if (--_ecore_xcb_init_count != 0) return _ecore_xcb_init_count; - if (!_ecore_xcb_conn) return _ecore_xcb_init_count; + if (--_ecore_xcb_init_count != 0) + return _ecore_xcb_init_count; + if (!_ecore_xcb_conn) + return _ecore_xcb_init_count; + LOGFN(__FILE__, __LINE__, __FUNCTION__); - /* shutdown dnd */ - _ecore_xcb_dnd_shutdown(); + if (_ecore_xcb_fd_handler) + ecore_main_fd_handler_del(_ecore_xcb_fd_handler); + /* disconnect from display server */ + if (close_display) + xcb_disconnect(_ecore_xcb_conn); + else + close(xcb_get_file_descriptor(_ecore_xcb_conn)); + + /* shutdown events */ + _ecore_xcb_events_shutdown(); + + /* shutdown input extension */ + _ecore_xcb_input_shutdown(); + /* shutdown selection */ _ecore_xcb_selection_shutdown(); + /* shutdown dnd */ + _ecore_xcb_dnd_shutdown(); + /* shutdown netwm */ ecore_x_netwm_shutdown(); - if (_ecore_xcb_fd_handler) - ecore_main_fd_handler_del(_ecore_xcb_fd_handler); - /* shutdown keymap */ _ecore_xcb_keymap_shutdown(); - /* shutdown events */ - _ecore_xcb_events_shutdown(); - - /* disconnect from display server */ - if (close_display) - xcb_disconnect(_ecore_xcb_conn); - else - close(xcb_get_file_descriptor(_ecore_xcb_conn)); - /* shutdown ecore_event */ ecore_event_shutdown(); + /* shutdown ecore */ + ecore_shutdown(); + /* unregister log domain */ eina_log_domain_unregister(_ecore_xcb_log_dom); _ecore_xcb_log_dom = -1; - /* shutdown ecore */ - ecore_shutdown(); - /* shutdown eina */ -// eina_shutdown(); + eina_shutdown(); return _ecore_xcb_init_count; } @@ -1299,8 +1353,11 @@ err = (xcb_generic_error_t *)ev; _ecore_xcb_io_error_handle(err); } - else - _ecore_xcb_events_handle(ev); + else + { + /* FIXME: Filter event for XIM */ + _ecore_xcb_events_handle(ev); + } free(ev); } |
From: Enlightenment S. <no-...@en...> - 2011-08-08 20:40:12
|
Log: Ecore_X: Make ecore_xcb_e match up more w/ xlib version. Don't use ecore_x_client_message32_send, but rather send the events directly via xcb (like xlib does). Author: devilhorns Date: 2011-08-08 13:40:04 -0700 (Mon, 08 Aug 2011) New Revision: 62219 Trac: http://trac.enlightenment.org/e/changeset/62219 Modified: trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_e.c Modified: trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_e.c =================================================================== --- trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_e.c 2011-08-08 20:39:10 UTC (rev 62218) +++ trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_e.c 2011-08-08 20:40:04 UTC (rev 62219) @@ -150,131 +150,131 @@ EAPI void ecore_x_e_comp_sync_begin_send(Ecore_X_Window win) { -// xcb_client_message_event_t ev; + xcb_client_message_event_t ev; LOGFN(__FILE__, __LINE__, __FUNCTION__); - ecore_x_client_message32_send(win, ECORE_X_ATOM_E_COMP_SYNC_BEGIN, - XCB_EVENT_MASK_NO_EVENT, win, 0, 0, 0, 0); + /* ecore_x_client_message32_send(win, ECORE_X_ATOM_E_COMP_SYNC_BEGIN, */ + /* XCB_EVENT_MASK_NO_EVENT, win, 0, 0, 0, 0); */ - /* memset(&ev, 0, sizeof(xcb_client_message_event_t)); */ + memset(&ev, 0, sizeof(xcb_client_message_event_t)); - /* ev.response_type = XCB_CLIENT_MESSAGE; */ - /* ev.format = 32; */ - /* ev.window = win; */ - /* ev.type = ECORE_X_ATOM_E_COMP_SYNC_BEGIN; */ - /* ev.data.data32[0] = win; */ - /* ev.data.data32[1] = 0; */ - /* ev.data.data32[2] = 0; */ - /* ev.data.data32[3] = 0; */ - /* ev.data.data32[4] = 0; */ + ev.response_type = XCB_CLIENT_MESSAGE; + ev.format = 32; + ev.window = win; + ev.type = ECORE_X_ATOM_E_COMP_SYNC_BEGIN; + ev.data.data32[0] = win; + ev.data.data32[1] = 0; + ev.data.data32[2] = 0; + ev.data.data32[3] = 0; + ev.data.data32[4] = 0; - /* xcb_send_event(_ecore_xcb_conn, 0, win, */ - /* XCB_EVENT_MASK_NO_EVENT, (const char *)&ev); */ + xcb_send_event(_ecore_xcb_conn, 0, win, + XCB_EVENT_MASK_NO_EVENT, (const char *)&ev); } EAPI void ecore_x_e_comp_sync_end_send(Ecore_X_Window win) { -// xcb_client_message_event_t ev; + xcb_client_message_event_t ev; LOGFN(__FILE__, __LINE__, __FUNCTION__); - ecore_x_client_message32_send(win, ECORE_X_ATOM_E_COMP_SYNC_END, - XCB_EVENT_MASK_NO_EVENT, win, 0, 0, 0, 0); + /* ecore_x_client_message32_send(win, ECORE_X_ATOM_E_COMP_SYNC_END, */ + /* XCB_EVENT_MASK_NO_EVENT, win, 0, 0, 0, 0); */ - /* memset(&ev, 0, sizeof(xcb_client_message_event_t)); */ + memset(&ev, 0, sizeof(xcb_client_message_event_t)); - /* ev.response_type = XCB_CLIENT_MESSAGE; */ - /* ev.format = 32; */ - /* ev.window = win; */ - /* ev.type = ECORE_X_ATOM_E_COMP_SYNC_END; */ - /* ev.data.data32[0] = win; */ - /* ev.data.data32[1] = 0; */ - /* ev.data.data32[2] = 0; */ - /* ev.data.data32[3] = 0; */ - /* ev.data.data32[4] = 0; */ + ev.response_type = XCB_CLIENT_MESSAGE; + ev.format = 32; + ev.window = win; + ev.type = ECORE_X_ATOM_E_COMP_SYNC_END; + ev.data.data32[0] = win; + ev.data.data32[1] = 0; + ev.data.data32[2] = 0; + ev.data.data32[3] = 0; + ev.data.data32[4] = 0; - /* xcb_send_event(_ecore_xcb_conn, 0, win, */ - /* XCB_EVENT_MASK_NO_EVENT, (const char *)&ev); */ + xcb_send_event(_ecore_xcb_conn, 0, win, + XCB_EVENT_MASK_NO_EVENT, (const char *)&ev); } EAPI void ecore_x_e_comp_sync_cancel_send(Ecore_X_Window win) { -// xcb_client_message_event_t ev; + xcb_client_message_event_t ev; LOGFN(__FILE__, __LINE__, __FUNCTION__); - ecore_x_client_message32_send(win, ECORE_X_ATOM_E_COMP_SYNC_CANCEL, - XCB_EVENT_MASK_NO_EVENT, win, 0, 0, 0, 0); + /* ecore_x_client_message32_send(win, ECORE_X_ATOM_E_COMP_SYNC_CANCEL, */ + /* XCB_EVENT_MASK_NO_EVENT, win, 0, 0, 0, 0); */ - /* memset(&ev, 0, sizeof(xcb_client_message_event_t)); */ + memset(&ev, 0, sizeof(xcb_client_message_event_t)); - /* ev.response_type = XCB_CLIENT_MESSAGE; */ - /* ev.format = 32; */ - /* ev.window = win; */ - /* ev.type = ECORE_X_ATOM_E_COMP_SYNC_CANCEL; */ - /* ev.data.data32[0] = win; */ - /* ev.data.data32[1] = 0; */ - /* ev.data.data32[2] = 0; */ - /* ev.data.data32[3] = 0; */ - /* ev.data.data32[4] = 0; */ + ev.response_type = XCB_CLIENT_MESSAGE; + ev.format = 32; + ev.window = win; + ev.type = ECORE_X_ATOM_E_COMP_SYNC_CANCEL; + ev.data.data32[0] = win; + ev.data.data32[1] = 0; + ev.data.data32[2] = 0; + ev.data.data32[3] = 0; + ev.data.data32[4] = 0; - /* xcb_send_event(_ecore_xcb_conn, 0, win, */ - /* XCB_EVENT_MASK_NO_EVENT, (const char *)&ev); */ + xcb_send_event(_ecore_xcb_conn, 0, win, + XCB_EVENT_MASK_NO_EVENT, (const char *)&ev); } EAPI void ecore_x_e_comp_flush_send(Ecore_X_Window win) { -// xcb_client_message_event_t ev; + xcb_client_message_event_t ev; LOGFN(__FILE__, __LINE__, __FUNCTION__); - ecore_x_client_message32_send(win, ECORE_X_ATOM_E_COMP_FLUSH, - XCB_EVENT_MASK_NO_EVENT, win, 0, 0, 0, 0); + /* ecore_x_client_message32_send(win, ECORE_X_ATOM_E_COMP_FLUSH, */ + /* XCB_EVENT_MASK_NO_EVENT, win, 0, 0, 0, 0); */ - /* memset(&ev, 0, sizeof(xcb_client_message_event_t)); */ + memset(&ev, 0, sizeof(xcb_client_message_event_t)); - /* ev.response_type = XCB_CLIENT_MESSAGE; */ - /* ev.format = 32; */ - /* ev.window = win; */ - /* ev.type = ECORE_X_ATOM_E_COMP_FLUSH; */ - /* ev.data.data32[0] = win; */ - /* ev.data.data32[1] = 0; */ - /* ev.data.data32[2] = 0; */ - /* ev.data.data32[3] = 0; */ - /* ev.data.data32[4] = 0; */ + ev.response_type = XCB_CLIENT_MESSAGE; + ev.format = 32; + ev.window = win; + ev.type = ECORE_X_ATOM_E_COMP_FLUSH; + ev.data.data32[0] = win; + ev.data.data32[1] = 0; + ev.data.data32[2] = 0; + ev.data.data32[3] = 0; + ev.data.data32[4] = 0; - /* xcb_send_event(_ecore_xcb_conn, 0, win, */ - /* XCB_EVENT_MASK_NO_EVENT, (const char *)&ev); */ + xcb_send_event(_ecore_xcb_conn, 0, win, + XCB_EVENT_MASK_NO_EVENT, (const char *)&ev); } EAPI void ecore_x_e_comp_dump_send(Ecore_X_Window win) { -// xcb_client_message_event_t ev; + xcb_client_message_event_t ev; LOGFN(__FILE__, __LINE__, __FUNCTION__); - ecore_x_client_message32_send(win, ECORE_X_ATOM_E_COMP_DUMP, - XCB_EVENT_MASK_NO_EVENT, win, 0, 0, 0, 0); + /* ecore_x_client_message32_send(win, ECORE_X_ATOM_E_COMP_DUMP, */ + /* XCB_EVENT_MASK_NO_EVENT, win, 0, 0, 0, 0); */ - /* memset(&ev, 0, sizeof(xcb_client_message_event_t)); */ + memset(&ev, 0, sizeof(xcb_client_message_event_t)); - /* ev.response_type = XCB_CLIENT_MESSAGE; */ - /* ev.format = 32; */ - /* ev.window = win; */ - /* ev.type = ECORE_X_ATOM_E_COMP_DUMP; */ - /* ev.data.data32[0] = win; */ - /* ev.data.data32[1] = 0; */ - /* ev.data.data32[2] = 0; */ - /* ev.data.data32[3] = 0; */ - /* ev.data.data32[4] = 0; */ + ev.response_type = XCB_CLIENT_MESSAGE; + ev.format = 32; + ev.window = win; + ev.type = ECORE_X_ATOM_E_COMP_DUMP; + ev.data.data32[0] = win; + ev.data.data32[1] = 0; + ev.data.data32[2] = 0; + ev.data.data32[3] = 0; + ev.data.data32[4] = 0; - /* xcb_send_event(_ecore_xcb_conn, 0, win, */ - /* XCB_EVENT_MASK_NO_EVENT, (const char *)&ev); */ + xcb_send_event(_ecore_xcb_conn, 0, win, + XCB_EVENT_MASK_NO_EVENT, (const char *)&ev); } EAPI void |