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

Reply via email to