Enlightenment CVS committal Author : sebastid Project : e17 Module : libs/ecore
Dir : e17/libs/ecore/src/lib/ecore_x Modified Files: Ecore_X.h Makefile.am ecore_x.c ecore_x_events.c ecore_x_private.h Added Files: ecore_x_randr.c Log Message: Add xrandr. Check for Xprint extension before using Xprint functions. =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_x/Ecore_X.h,v retrieving revision 1.138 retrieving revision 1.139 diff -u -3 -r1.138 -r1.139 --- Ecore_X.h 25 Jun 2005 07:23:38 -0000 1.138 +++ Ecore_X.h 13 Aug 2005 22:14:40 -0000 1.139 @@ -245,6 +245,7 @@ typedef struct _Ecore_X_Event_Window_Shape Ecore_X_Event_Window_Shape; typedef struct _Ecore_X_Event_Sync_Counter Ecore_X_Event_Sync_Counter; typedef struct _Ecore_X_Event_Sync_Alarm Ecore_X_Event_Sync_Alarm; +typedef struct _Ecore_X_Event_Screen_Change Ecore_X_Event_Screen_Change; typedef struct _Ecore_X_Event_Window_Delete_Request Ecore_X_Event_Window_Delete_Request; typedef struct _Ecore_X_Event_Window_Prop_Title_Change Ecore_X_Event_Window_Prop_Title_Change; @@ -637,6 +638,12 @@ Ecore_X_Sync_Alarm alarm; }; +struct _Ecore_X_Event_Screen_Change +{ + Ecore_X_Window win, root; + int width, height; +}; + struct _Ecore_X_Event_Window_Delete_Request { Ecore_X_Window win; @@ -771,6 +778,7 @@ extern EAPI int ECORE_X_EVENT_WINDOW_SHAPE; extern EAPI int ECORE_X_EVENT_SYNC_COUNTER; extern EAPI int ECORE_X_EVENT_SYNC_ALARM; +extern EAPI int ECORE_X_EVENT_SCREEN_CHANGE; extern EAPI int ECORE_X_EVENT_WINDOW_DELETE_REQUEST; /* @@ -1313,6 +1321,19 @@ EAPI Ecore_X_Sync_Alarm ecore_x_sync_alarm_new(Ecore_X_Sync_Counter counter); EAPI int ecore_x_sync_alarm_free(Ecore_X_Sync_Alarm alarm); +/* ecore_x_randr.c */ +typedef struct _Ecore_X_Screen_Size Ecore_X_Screen_Size; +struct _Ecore_X_Screen_Size +{ + int width, height; +}; + +EAPI int ecore_x_randr_events_select(Ecore_X_Window win, int on); +EAPI Ecore_X_Screen_Size *ecore_x_randr_screen_sizes_get(Ecore_X_Window root, int *num); +EAPI int ecore_x_randr_screen_size_set(Ecore_X_Window root, + Ecore_X_Screen_Size *size); + + #ifdef __cplusplus } #endif =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_x/Makefile.am,v retrieving revision 1.23 retrieving revision 1.24 diff -u -3 -r1.23 -r1.24 --- Makefile.am 6 Jun 2005 09:40:00 -0000 1.23 +++ Makefile.am 13 Aug 2005 22:14:40 -0000 1.24 @@ -4,6 +4,7 @@ @Xcursor_cflags@ \ @Xprint_cflags@ \ @Xinerama_cflags@ \ [EMAIL PROTECTED]@ \ @x_cflags@ \ -I$(top_srcdir)/src/lib/ecore \ -I$(top_srcdir)/src/lib/ecore_txt \ @@ -29,6 +30,7 @@ ecore_x.c \ ecore_x_dnd.c \ ecore_x_sync.c \ +ecore_x_randr.c \ ecore_x_error.c \ ecore_x_events.c \ ecore_x_icccm.c \ @@ -48,6 +50,7 @@ @Xcursor_libs@ \ @Xprint_libs@ \ @Xinerama_libs@ \ [EMAIL PROTECTED]@ \ @x_ldflags@ \ @x_libs@ \ $(top_builddir)/src/lib/ecore/libecore.la \ @@ -68,6 +71,7 @@ ecore_x.c \ ecore_x_dnd.c \ ecore_x_sync.c \ +ecore_x_randr.c \ ecore_x_error.c \ ecore_x_events.c \ ecore_x_icccm.c \ =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_x/ecore_x.c,v retrieving revision 1.91 retrieving revision 1.92 diff -u -3 -r1.91 -r1.92 --- ecore_x.c 12 Jul 2005 15:27:45 -0000 1.91 +++ ecore_x.c 13 Aug 2005 22:14:40 -0000 1.92 @@ -18,6 +18,9 @@ static Ecore_Event_Filter *_ecore_x_filter_handler = NULL; static int _ecore_x_event_shape_id = 0; static int _ecore_x_event_sync_id = 0; +#ifdef ECORE_XRANDR +static int _ecore_x_event_randr_id = 0; +#endif static int _ecore_x_event_handlers_num = 0; static void (**_ecore_x_event_handlers) (XEvent * event) = NULL; @@ -120,6 +123,7 @@ int ECORE_X_EVENT_WINDOW_SHAPE = 0; int ECORE_X_EVENT_SYNC_COUNTER = 0; int ECORE_X_EVENT_SYNC_ALARM = 0; +int ECORE_X_EVENT_SCREEN_CHANGE = 0; int ECORE_X_EVENT_WINDOW_DELETE_REQUEST = 0; /* @@ -177,6 +181,10 @@ int shape_err_base = 0; int sync_base = 0; int sync_err_base = 0; +#ifdef ECORE_XRANDR + int randr_base = 0; + int randr_err_base = 0; +#endif if (_ecore_x_init_count > 0) { @@ -204,6 +212,13 @@ if (_ecore_x_event_sync_id + XSyncAlarmNotify >= LASTEvent) _ecore_x_event_handlers_num = _ecore_x_event_sync_id + XSyncAlarmNotify + 1; +#ifdef ECORE_XRANDR + if (XRRQueryExtension(_ecore_x_disp, &randr_base, &randr_err_base)) + _ecore_x_event_randr_id = randr_base + RRScreenChangeNotify; + if (_ecore_x_event_randr_id >= LASTEvent) + _ecore_x_event_handlers_num = _ecore_x_event_randr_id + 1; +#endif + _ecore_x_event_handlers = calloc(_ecore_x_event_handlers_num, sizeof(void *)); if (!_ecore_x_event_handlers) { @@ -256,6 +271,10 @@ _ecore_x_event_handlers[_ecore_x_event_sync_id + XSyncAlarmNotify] = _ecore_x_event_handle_sync_alarm; } +#ifdef ECORE_XRANDR + if (_ecore_x_event_randr_id) + _ecore_x_event_handlers[_ecore_x_event_randr_id] = _ecore_x_event_handle_randr_change; +#endif if (!ECORE_X_EVENT_KEY_DOWN) { ECORE_X_EVENT_KEY_DOWN = ecore_event_type_new(); @@ -293,6 +312,7 @@ ECORE_X_EVENT_WINDOW_SHAPE = 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_WINDOW_DELETE_REQUEST = ecore_event_type_new(); /* @@ -303,7 +323,7 @@ ECORE_X_EVENT_WINDOW_PROP_VISIBLE_ICON_NAME_CHANGE = ecore_event_type_new(); ECORE_X_EVENT_WINDOW_PROP_CLIENT_MACHINE_CHANGE = ecore_event_type_new(); ECORE_X_EVENT_WINDOW_PROP_PID_CHANGE = ecore_event_type_new(); - ECORE_X_EVENT_WINDOW_PROP_DESKTOP_CHANGE = ecore_event_type_new(); + ECORE_X_EVENT_WINDOW_PROP_DESKTOP_CHANGE = ecore_event_type_new(); */ ECORE_X_EVENT_DESKTOP_CHANGE = ecore_event_type_new(); @@ -853,15 +873,20 @@ { int num, i; Ecore_X_Window *roots; +#ifdef ECORE_XPRINT + int xp_base, xp_err_base; +#endif if (!num_ret) return NULL; *num_ret = 0; + #ifdef ECORE_XPRINT + num = ScreenCount(_ecore_x_disp); + if (XpQueryExtension(_ecore_x_disp, &xp_base, &xp_err_base)) { Screen **ps = NULL; int psnum = 0; - num = ScreenCount(_ecore_x_disp); ps = XpQueryScreens(_ecore_x_disp, &psnum); if (ps) { @@ -914,6 +939,14 @@ roots[i] = RootWindow(_ecore_x_disp, i); } } + else + { + roots = malloc(num * sizeof(Window)); + if (!roots) return NULL; + *num_ret = num; + for (i = 0; i < num; i++) + roots[i] = RootWindow(_ecore_x_disp, i); + } #else num = ScreenCount(_ecore_x_disp); roots = malloc(num * sizeof(Window)); =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_x/ecore_x_events.c,v retrieving revision 1.69 retrieving revision 1.70 diff -u -3 -r1.69 -r1.70 --- ecore_x_events.c 30 Jul 2005 11:43:17 -0000 1.69 +++ ecore_x_events.c 13 Aug 2005 22:14:40 -0000 1.70 @@ -1581,3 +1581,25 @@ e->alarm = sync_alarm_event->alarm; ecore_event_add(ECORE_X_EVENT_SYNC_ALARM, e, NULL, NULL); } + +#ifdef ECORE_XRANDR +void +_ecore_x_event_handle_randr_change(XEvent *xevent) +{ + XRRScreenChangeNotifyEvent *randr_event; + Ecore_X_Event_Screen_Change *e; + + randr_event = (XRRScreenChangeNotifyEvent *)xevent; + if (!XRRUpdateConfiguration(xevent)) + printf("ERROR: Can't update RR config!\n"); + + e = calloc(1, sizeof(Ecore_X_Event_Screen_Change)); + if (!e) return; + e->win = randr_event->window; + e->root = randr_event->root; + e->width = randr_event->width; + e->height = randr_event->height; + ecore_event_add(ECORE_X_EVENT_SCREEN_CHANGE, e, NULL, NULL); +} +#endif + =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_x/ecore_x_private.h,v retrieving revision 1.46 retrieving revision 1.47 diff -u -3 -r1.46 -r1.47 --- ecore_x_private.h 12 Jul 2005 15:27:46 -0000 1.46 +++ ecore_x_private.h 13 Aug 2005 22:14:40 -0000 1.47 @@ -27,6 +27,9 @@ #ifdef ECORE_XINERAMA #include <X11/extensions/Xinerama.h> #endif +#ifdef ECORE_XRANDR +#include <X11/extensions/Xrandr.h> +#endif #include "Ecore_X.h" @@ -179,6 +182,9 @@ void _ecore_x_event_handle_shape_change(XEvent *xevent); void _ecore_x_event_handle_sync_counter(XEvent *xevent); void _ecore_x_event_handle_sync_alarm(XEvent *xevent); +#ifdef ECORE_XRANDR +void _ecore_x_event_handle_randr_change(XEvent *xevent); +#endif void _ecore_x_selection_data_init(void); void _ecore_x_selection_shutdown(void); ------------------------------------------------------- SF.Net email is Sponsored by the Better Software Conference & EXPO September 19-22, 2005 * San Francisco, CA * Development Lifecycle Practices Agile & Plan-Driven Development * Managing Projects & Teams * Testing & QA Security * Process Improvement & Measurement * http://www.sqe.com/bsce5sf _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs