Enlightenment CVS committal
Author : raster
Project : e17
Module : libs/ecore
Dir : e17/libs/ecore/src/lib/ecore_x
Modified Files:
Tag: SPLIT
Ecore_X.h Makefile.am ecore_x.c ecore_x_private.h
Added Files:
Tag: SPLIT
ecore_x_events.c
Log Message:
x ubsystem now has event handlers to translate x events to ecore events...
empty right now.. but it works. this system later will need to be able to
generate synthetic events form client messages and property notify's
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_x/Attic/Ecore_X.h,v
retrieving revision 1.1.2.2
retrieving revision 1.1.2.3
diff -u -3 -r1.1.2.2 -r1.1.2.3
--- Ecore_X.h 16 Jan 2003 11:39:41 -0000 1.1.2.2
+++ Ecore_X.h 21 Jan 2003 01:22:45 -0000 1.1.2.3
@@ -18,7 +18,41 @@
#endif
-int ecore_x_init(const char *name);
+extern int ECORE_EVENT_X_KEY_DOWN;
+extern int ECORE_EVENT_X_KEY_UP;
+extern int ECORE_EVENT_X_MOUSE_BUTTON_DOWN;
+extern int ECORE_EVENT_X_MOUSE_BUTTON_UP;
+extern int ECORE_EVENT_X_MOUSE_MOVE;
+extern int ECORE_EVENT_X_MOUSE_IN;
+extern int ECORE_EVENT_X_MOUSE_OUT;
+extern int ECORE_EVENT_X_WINDOW_FOCUS_IN;
+extern int ECORE_EVENT_X_WINDOW_FOCUS_OUT;
+extern int ECORE_EVENT_X_WINDOW_DAMAGE;
+extern int ECORE_EVENT_X_WINDOW_VISIBILITY_CHANGE;
+extern int ECORE_EVENT_X_WINDOW_CREATE;
+extern int ECORE_EVENT_X_WINDOW_DESTROY;
+extern int ECORE_EVENT_X_WINDOW_HIDE;
+extern int ECORE_EVENT_X_WINDOW_SHOW;
+extern int ECORE_EVENT_X_WINDOW_SHOW_REQUEST;
+extern int ECORE_EVENT_X_WINDOW_REPARENT;
+extern int ECORE_EVENT_X_WINDOW_CONFIGURE;
+extern int ECORE_EVENT_X_WINDOW_CONFIGURE_REQUEST;
+extern int ECORE_EVENT_X_WINDOW_STACK;
+extern int ECORE_EVENT_X_WINDOW_STACK_REQUEST;
+extern int ECORE_EVENT_X_WINDOW_PROPERTY;
+extern int ECORE_EVENT_X_WINDOW_COLORMAP;
+extern int ECORE_EVENT_X_CLIENT_MESSAGE;
+extern int ECORE_EVENT_X_SELECTION_NOTIFY;
+extern int ECORE_EVENT_X_SELECTION_CLEAR;
+extern int ECORE_EVENT_X_SELECTION_REQUEST;
+extern int ECORE_EVENT_X_WINDOW_SHAPE;
+
+int ecore_x_init(const char *name);
+Display *ecore_x_display_get(void);
+
+void ecore_x_error_handler_set(void (*func) (void *data), const void *data);
+int ecore_x_error_request_get(void);
+int ecore_x_error_code_get(void);
#ifdef __cplusplus
}
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_x/Attic/Makefile.am,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -3 -r1.1.2.1 -r1.1.2.2
--- Makefile.am 16 Jan 2003 11:26:42 -0000 1.1.2.1
+++ Makefile.am 21 Jan 2003 01:22:45 -0000 1.1.2.2
@@ -8,6 +8,8 @@
libecore_x_la_SOURCES = \
ecore_x.c \
+ecore_x_error.c \
+ecore_x_events.c \
ecore_x_private.h
libecore_x_la_LIBADD = @x_ldflags@ @x_libs@
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_x/Attic/ecore_x.c,v
retrieving revision 1.1.2.2
retrieving revision 1.1.2.3
diff -u -3 -r1.1.2.2 -r1.1.2.3
--- ecore_x.c 16 Jan 2003 11:39:41 -0000 1.1.2.2
+++ ecore_x.c 21 Jan 2003 01:22:45 -0000 1.1.2.3
@@ -5,7 +5,41 @@
static int _ecore_x_fd_handler(Ecore_Fd_Handler *fd_handler, void *data);
static int _ecore_x_fd_handler_buf(Ecore_Fd_Handler *fd_handler, void *data);
-static Display *disp = NULL;
+static Ecore_Fd_Handler *_ecore_x_fd_handler_handle = NULL;
+static int _ecore_x_event_shape_id = 0;
+static int _ecore_x_event_handlers_num = 0;
+static void (**_ecore_x_event_handlers) (XEvent * event) = NULL;
+
+Display *_ecore_x_disp = NULL;
+
+int ECORE_EVENT_X_KEY_DOWN = 0;
+int ECORE_EVENT_X_KEY_UP = 0;
+int ECORE_EVENT_X_MOUSE_BUTTON_DOWN = 0;
+int ECORE_EVENT_X_MOUSE_BUTTON_UP = 0;
+int ECORE_EVENT_X_MOUSE_MOVE = 0;
+int ECORE_EVENT_X_MOUSE_IN = 0;
+int ECORE_EVENT_X_MOUSE_OUT = 0;
+int ECORE_EVENT_X_WINDOW_FOCUS_IN = 0;
+int ECORE_EVENT_X_WINDOW_FOCUS_OUT = 0;
+int ECORE_EVENT_X_WINDOW_DAMAGE = 0;
+int ECORE_EVENT_X_WINDOW_VISIBILITY_CHANGE = 0;
+int ECORE_EVENT_X_WINDOW_CREATE = 0;
+int ECORE_EVENT_X_WINDOW_DESTROY = 0;
+int ECORE_EVENT_X_WINDOW_HIDE = 0;
+int ECORE_EVENT_X_WINDOW_SHOW = 0;
+int ECORE_EVENT_X_WINDOW_SHOW_REQUEST = 0;
+int ECORE_EVENT_X_WINDOW_REPARENT = 0;
+int ECORE_EVENT_X_WINDOW_CONFIGURE = 0;
+int ECORE_EVENT_X_WINDOW_CONFIGURE_REQUEST = 0;
+int ECORE_EVENT_X_WINDOW_STACK = 0;
+int ECORE_EVENT_X_WINDOW_STACK_REQUEST = 0;
+int ECORE_EVENT_X_WINDOW_PROPERTY = 0;
+int ECORE_EVENT_X_WINDOW_COLORMAP = 0;
+int ECORE_EVENT_X_CLIENT_MESSAGE = 0;
+int ECORE_EVENT_X_SELECTION_NOTIFY = 0;
+int ECORE_EVENT_X_SELECTION_CLEAR = 0;
+int ECORE_EVENT_X_SELECTION_REQUEST = 0;
+int ECORE_EVENT_X_WINDOW_SHAPE = 0;
/**
* Init the X display connection
@@ -17,17 +51,132 @@
int
ecore_x_init(const char *name)
{
- if (disp) return 1;
- disp = XOpenDisplay((char *)name);
- if (!disp) return 0;
- /* FIXME: more to go here... */
- ecore_main_fd_handler_add(ConnectionNumber(disp),
- ECORE_FD_READ,
- _ecore_x_fd_handler, disp,
- _ecore_x_fd_handler_buf, disp);
+ int shape_base = 0;
+ int shape_err_base = 0;
+
+ if (_ecore_x_disp) return 1;
+ _ecore_x_disp = XOpenDisplay((char *)name);
+ if (!_ecore_x_disp) return 0;
+ _ecore_x_error_handler_init();
+ _ecore_x_event_handlers_num = LASTEvent;
+ if (XShapeQueryExtension(_ecore_x_disp, &shape_base, &shape_err_base))
+ _ecore_x_event_shape_id = shape_base + ShapeNotify;
+ if (_ecore_x_event_shape_id >= LASTEvent)
+ _ecore_x_event_handlers_num = _ecore_x_event_shape_id + 1;
+ _ecore_x_event_handlers = calloc(_ecore_x_event_handlers_num, sizeof(void *));
+ if (!_ecore_x_event_handlers)
+ {
+ XCloseDisplay(_ecore_x_disp);
+ _ecore_x_fd_handler_handle = NULL;
+ _ecore_x_disp = NULL;
+ return 0;
+ }
+ _ecore_x_event_handlers[KeyPress] = _ecore_x_event_handle_key_press;
+ _ecore_x_event_handlers[KeyRelease] = _ecore_x_event_handle_key_release;
+ _ecore_x_event_handlers[ButtonPress] = _ecore_x_event_handle_button_press;
+ _ecore_x_event_handlers[ButtonRelease] = _ecore_x_event_handle_button_release;
+ _ecore_x_event_handlers[MotionNotify] = _ecore_x_event_handle_motion_notify;
+ _ecore_x_event_handlers[EnterNotify] = _ecore_x_event_handle_enter_notify;
+ _ecore_x_event_handlers[LeaveNotify] = _ecore_x_event_handle_leave_notify;
+ _ecore_x_event_handlers[FocusIn] = _ecore_x_event_handle_focus_in;
+ _ecore_x_event_handlers[FocusOut] = _ecore_x_event_handle_focus_out;
+ _ecore_x_event_handlers[Expose] = _ecore_x_event_handle_expose;
+ _ecore_x_event_handlers[VisibilityNotify] =
+_ecore_x_event_handle_visibility_notify;
+ _ecore_x_event_handlers[CreateNotify] = _ecore_x_event_handle_create_notify;
+ _ecore_x_event_handlers[DestroyNotify] = _ecore_x_event_handle_destroy_notify;
+ _ecore_x_event_handlers[UnmapNotify] = _ecore_x_event_handle_unmap_notify;
+ _ecore_x_event_handlers[MapNotify] = _ecore_x_event_handle_map_notify;
+ _ecore_x_event_handlers[MapRequest] = _ecore_x_event_handle_map_request;
+ _ecore_x_event_handlers[ReparentNotify] = _ecore_x_event_handle_reparent_notify;
+ _ecore_x_event_handlers[ConfigureNotify] = _ecore_x_event_handle_configure_notify;
+ _ecore_x_event_handlers[ConfigureRequest] =
+_ecore_x_event_handle_configure_request;
+ _ecore_x_event_handlers[CirculateNotify] = _ecore_x_event_handle_circulate_notify;
+ _ecore_x_event_handlers[CirculateRequest] =
+_ecore_x_event_handle_circulate_request;
+ _ecore_x_event_handlers[PropertyNotify] = _ecore_x_event_handle_property_notify;
+ _ecore_x_event_handlers[ColormapNotify] = _ecore_x_event_handle_colormap_notify;
+ _ecore_x_event_handlers[ClientMessage] = _ecore_x_event_handle_client_message;
+ _ecore_x_event_handlers[SelectionNotify] = _ecore_x_event_handle_selection_notify;
+ _ecore_x_event_handlers[SelectionClear] = _ecore_x_event_handle_selection_clear;
+ _ecore_x_event_handlers[SelectionRequest] =
+_ecore_x_event_handle_selection_request;
+ if (_ecore_x_event_shape_id)
+ _ecore_x_event_handlers[_ecore_x_event_shape_id] =
+_ecore_x_event_handle_shape_change;
+ if (!ECORE_EVENT_X_KEY_DOWN)
+ {
+ ECORE_EVENT_X_KEY_DOWN = ecore_event_type_new();
+ ECORE_EVENT_X_KEY_UP = ecore_event_type_new();
+ ECORE_EVENT_X_MOUSE_BUTTON_DOWN = ecore_event_type_new();
+ ECORE_EVENT_X_MOUSE_BUTTON_UP = ecore_event_type_new();
+ ECORE_EVENT_X_MOUSE_MOVE = ecore_event_type_new();
+ ECORE_EVENT_X_MOUSE_IN = ecore_event_type_new();
+ ECORE_EVENT_X_MOUSE_OUT = ecore_event_type_new();
+ ECORE_EVENT_X_WINDOW_FOCUS_IN = ecore_event_type_new();
+ ECORE_EVENT_X_WINDOW_FOCUS_OUT = ecore_event_type_new();
+ ECORE_EVENT_X_WINDOW_DAMAGE = ecore_event_type_new();
+ ECORE_EVENT_X_WINDOW_VISIBILITY_CHANGE = ecore_event_type_new();
+ ECORE_EVENT_X_WINDOW_CREATE = ecore_event_type_new();
+ ECORE_EVENT_X_WINDOW_DESTROY = ecore_event_type_new();
+ ECORE_EVENT_X_WINDOW_HIDE = ecore_event_type_new();
+ ECORE_EVENT_X_WINDOW_SHOW = ecore_event_type_new();
+ ECORE_EVENT_X_WINDOW_SHOW_REQUEST = ecore_event_type_new();
+ ECORE_EVENT_X_WINDOW_REPARENT = ecore_event_type_new();
+ ECORE_EVENT_X_WINDOW_CONFIGURE = ecore_event_type_new();
+ ECORE_EVENT_X_WINDOW_CONFIGURE_REQUEST = ecore_event_type_new();
+ ECORE_EVENT_X_WINDOW_STACK = ecore_event_type_new();
+ ECORE_EVENT_X_WINDOW_STACK_REQUEST = ecore_event_type_new();
+ ECORE_EVENT_X_WINDOW_PROPERTY = ecore_event_type_new();
+ ECORE_EVENT_X_WINDOW_COLORMAP = ecore_event_type_new();
+ ECORE_EVENT_X_CLIENT_MESSAGE = ecore_event_type_new();
+ ECORE_EVENT_X_SELECTION_NOTIFY = ecore_event_type_new();
+ ECORE_EVENT_X_SELECTION_CLEAR = ecore_event_type_new();
+ ECORE_EVENT_X_SELECTION_REQUEST = ecore_event_type_new();
+ ECORE_EVENT_X_WINDOW_SHAPE = ecore_event_type_new();
+ }
+ _ecore_x_fd_handler_handle =
+ ecore_main_fd_handler_add(ConnectionNumber(_ecore_x_disp),
+ ECORE_FD_READ,
+ _ecore_x_fd_handler, _ecore_x_disp,
+ _ecore_x_fd_handler_buf, _ecore_x_disp);
+ if (!_ecore_x_fd_handler_handle)
+ {
+ XCloseDisplay(_ecore_x_disp);
+ free(_ecore_x_event_handlers);
+ _ecore_x_fd_handler_handle = NULL;
+ _ecore_x_disp = NULL;
+ _ecore_x_event_handlers = NULL;
+ return 0;
+ }
return 1;
}
+/**
+ * Shut down the X syystem
+ *
+ * This closes the X display connection and removes the handlers for it.
+ */
+void
+ecore_x_shutdown(void)
+{
+ if (!_ecore_x_disp) return;
+ XCloseDisplay(_ecore_x_disp);
+ free(_ecore_x_event_handlers);
+ ecore_main_fd_handler_del(_ecore_x_fd_handler_handle);
+ _ecore_x_fd_handler_handle = NULL;
+ _ecore_x_disp = NULL;
+ _ecore_x_event_handlers = NULL;
+}
+
+/**
+ * Get the X display pointer handle
+ * @return The X Display handle
+ *
+ * This returns the X Display handle used for the X connection.
+ */
+Display *
+ecore_x_display_get(void)
+{
+ return _ecore_x_disp;
+}
+
static int
_ecore_x_fd_handler(Ecore_Fd_Handler *fd_handler, void *data)
{
@@ -39,7 +188,11 @@
XEvent ev;
XNextEvent(d, &ev);
- /* FIXME: here we should be putting an event on the event list */
+ if ((ev.type >= 0) && (ev.type < _ecore_x_event_handlers_num))
+ {
+ if (_ecore_x_event_handlers[ev.type])
+ _ecore_x_event_handlers[ev.type] (&ev);
+ }
}
return 1;
}
===================================================================
RCS file:
/cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_x/Attic/ecore_x_private.h,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -3 -r1.1.2.1 -r1.1.2.2
--- ecore_x_private.h 16 Jan 2003 11:26:42 -0000 1.1.2.1
+++ ecore_x_private.h 21 Jan 2003 01:22:45 -0000 1.1.2.2
@@ -1,4 +1,45 @@
#ifndef _ECORE_X_PRIVATE_H
#define _ECORE_X_PRIVATE_H
+#define XK_MISCELLANY 1
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+#include <X11/Xatom.h>
+#include <X11/Xresource.h>
+#include <X11/keysymdef.h>
+#include <X11/extensions/XShm.h>
+#include <X11/extensions/shape.h>
+
+extern Display *_ecore_x_disp;
+
+void _ecore_x_error_handler_init(void);
+void _ecore_x_event_handle_key_press(XEvent *xevent);
+void _ecore_x_event_handle_key_release(XEvent *xevent);
+void _ecore_x_event_handle_button_press(XEvent *xevent);
+void _ecore_x_event_handle_button_release(XEvent *xevent);
+void _ecore_x_event_handle_motion_notify(XEvent *xevent);
+void _ecore_x_event_handle_enter_notify(XEvent *xevent);
+void _ecore_x_event_handle_leave_notify(XEvent *xevent);
+void _ecore_x_event_handle_focus_in(XEvent *xevent);
+void _ecore_x_event_handle_focus_out(XEvent *xevent);
+void _ecore_x_event_handle_expose(XEvent *xevent);
+void _ecore_x_event_handle_visibility_notify(XEvent *xevent);
+void _ecore_x_event_handle_create_notify(XEvent *xevent);
+void _ecore_x_event_handle_destroy_notify(XEvent *xevent);
+void _ecore_x_event_handle_unmap_notify(XEvent *xevent);
+void _ecore_x_event_handle_map_notify(XEvent *xevent);
+void _ecore_x_event_handle_map_request(XEvent *xevent);
+void _ecore_x_event_handle_reparent_notify(XEvent *xevent);
+void _ecore_x_event_handle_configure_notify(XEvent *xevent);
+void _ecore_x_event_handle_configure_request(XEvent *xevent);
+void _ecore_x_event_handle_circulate_notify(XEvent *xevent);
+void _ecore_x_event_handle_circulate_request(XEvent *xevent);
+void _ecore_x_event_handle_property_notify(XEvent *xevent);
+void _ecore_x_event_handle_colormap_notify(XEvent *xevent);
+void _ecore_x_event_handle_client_message(XEvent *xevent);
+void _ecore_x_event_handle_selection_notify(XEvent *xevent);
+void _ecore_x_event_handle_selection_clear(XEvent *xevent);
+void _ecore_x_event_handle_selection_request(XEvent *xevent);
+void _ecore_x_event_handle_shape_change(XEvent *xevent);
+
#endif
-------------------------------------------------------
This SF.NET email is sponsored by:
SourceForge Enterprise Edition + IBM + LinuxWorld = Something 2 See!
http://www.vasoftware.com
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs