Enlightenment CVS committal

Author  : kwo
Project : e16
Module  : e

Dir     : e16/e/src


Modified Files:
        E.h ecompmgr.c events.c icccm.c 


Log Message:
Simplify server extension handling. Initial screensaver extension stuff.
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/E.h,v
retrieving revision 1.537
retrieving revision 1.538
diff -u -3 -r1.537 -r1.538
--- E.h 19 Mar 2006 14:59:48 -0000      1.537
+++ E.h 19 Mar 2006 15:33:38 -0000      1.538
@@ -43,6 +43,14 @@
 #include <X11/Xlib.h>
 #include <X11/extensions/shape.h>
 
+#ifdef HAS_XSYNC
+#define USE_XSYNC 1            /* Experimental */
+#endif
+
+#ifdef HAS_XSCREENSAVER
+#define USE_XSCREENSAVER 1     /* Experimental */
+#endif
+
 #ifdef HAS_XRANDR
 #ifdef HAVE_X11_EXTENSIONS_XRANDR_H
 #define USE_XRANDR 1
@@ -53,8 +61,6 @@
 #define USE_COMPOSITE 1
 #endif
 
-#define USE_XSYNC 0            /* Experimental */
-
 #include <Imlib2.h>
 
 #define ENABLE_COLOR_MODIFIERS 0       /* Not functional */
@@ -216,6 +222,19 @@
 #define EVENT_FOCUS_IN    7
 #define EVENT_FOCUS_OUT   8
 
+/* Server extensions */
+#define XEXT_SHAPE       0
+#define XEXT_SYNC        1
+#define XEXT_SCRSAVER    2
+#define XEXT_RANDR       3
+#define XEXT_COMPOSITE   4
+#define XEXT_DAMAGE      5
+#define XEXT_FIXES       6
+#define XEXT_RENDER      7
+#define XEXT_CM_ALL     16
+
+#define XEXT_AVAILABLE(ext)  (Mode.server.extensions & (1 << ext))
+
 /*
  * Types
  */
@@ -491,6 +510,10 @@
    } place;
    struct
    {
+      unsigned int        extensions;
+   } server;
+   struct
+   {
       Pixmap              ext_pmap;
       char                ext_pmap_valid;
    } root;
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/ecompmgr.c,v
retrieving revision 1.104
retrieving revision 1.105
diff -u -3 -r1.104 -r1.105
--- ecompmgr.c  13 Mar 2006 22:46:14 -0000      1.104
+++ ecompmgr.c  19 Mar 2006 15:33:38 -0000      1.105
@@ -2593,19 +2593,7 @@
 static void
 ECompMgrInit(void)
 {
-   int                 events, errors, major, minor;
-
-   if (!XCompositeQueryExtension(disp, &events, &errors) ||
-       !XDamageQueryExtension(disp, &events, &errors) ||
-       !XFixesQueryExtension(disp, &events, &errors) ||
-       !XRenderQueryExtension(disp, &events, &errors))
-     {
-       Conf_compmgr.mode = ECM_MODE_OFF;
-       goto done;
-     }
-
-   if (!XCompositeQueryVersion(disp, &major, &minor) ||
-       (major == 0 && minor < 2))
+   if (!XEXT_AVAILABLE(XEXT_CM_ALL))
      {
        Conf_compmgr.mode = ECM_MODE_OFF;
        goto done;
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/events.c,v
retrieving revision 1.116
retrieving revision 1.117
diff -u -3 -r1.116 -r1.117
--- events.c    12 Feb 2006 19:14:14 -0000      1.116
+++ events.c    19 Mar 2006 15:33:38 -0000      1.117
@@ -30,6 +30,9 @@
 #if USE_XSYNC
 #include <X11/extensions/sync.h>
 #endif
+#if USE_XSCREENSAVER
+#include <X11/extensions/scrnsaver.h>
+#endif
 #if USE_XRANDR
 #include <X11/extensions/Xrandr.h>
 #endif
@@ -44,132 +47,161 @@
 static const char  *EventName(unsigned int type);
 #endif
 
-static int          event_base_shape = 0;
-static int          error_base_shape = 0;
-
-#if USE_XSYNC
-static int          event_base_sync = 0;
-static int          error_base_sync = 0;
-#endif
+typedef struct
+{
+   int                 event_base, error_base;
+   int                 major, minor;
+} EServerExtData;
 
-#if USE_XRANDR
-static int          event_base_randr = 0;
-static int          error_base_randr = 0;
-#endif
+typedef struct
+{
+   const char         *name;
+   unsigned int        ix;
+   int                 (*query_ext) (Display * dpy, int *event, int *error);
+   int                 (*query_ver) (Display * dpy, int *major, int *minor);
+   void                (*init) (int avaliable);
+} EServerExt;
+
+static EServerExtData ExtData[8];
+
+#define event_base_shape ExtData[XEXT_SHAPE].event_base
+#define event_base_randr ExtData[XEXT_RANDR].event_base
+#define event_base_damage ExtData[XEXT_DAMAGE].event_base
 
-#if USE_COMPOSITE
-static int          event_base_comp = 0;
-static int          error_base_comp = 0;
-static int          event_base_damage = 0;
-static int          error_base_damage = 0;
-static int          event_base_fixes = 0;
-static int          error_base_fixes = 0;
-static int          event_base_render = 0;
-static int          error_base_render = 0;
-#endif
+static void
+ExtInitShape(int available)
+{
+   if (available)
+      return;
 
-#define DOUBLE_CLICK_TIME 250  /* Milliseconds */
+   AlertX(_("X server setup error"), _("OK"), NULL, NULL,
+         _("FATAL ERROR:\n" "\n"
+           "This Xserver does not support the Shape extension.\n"
+           "This is required for Enlightenment to run.\n" "\n"
+           "Your Xserver probably is too old or mis-configured.\n" "\n"
+           "Exiting.\n"));
+   EExit(1);
+}
 
+#if USE_XSYNC
 static void
-EventsExtensionShowInfo(const char *name, int major, int minor,
-                       int event_base, int error_base)
+ExtInitSync(int available)
 {
+   if (!available)
+      return;
+
    if (EventDebug(EDBUG_TYPE_VERBOSE))
-      Eprintf("Found extension %-10s version %d.%d -"
-             " Event/error base = %d/%d\n", name,
-             major, minor, event_base, error_base);
+     {
+       int                 i, num;
+       XSyncSystemCounter *xssc;
+
+       xssc = XSyncListSystemCounters(disp, &num);
+       for (i = 0; i < num; i++)
+         {
+            Eprintf(" Sync counter %2d: %10s %#lx %#x:%#x\n", i,
+                    xssc[i].name, xssc[i].counter,
+                    XSyncValueHigh32(xssc[i].resolution),
+                    XSyncValueLow32(xssc[i].resolution));
+         }
+     }
 }
+#endif
 
-void
-EventsInit(void)
+#if USE_XSCREENSAVER
+static void
+ExtInitSS(int available)
 {
-   int                 major, minor;
+   if (!available)
+      return;
 
-   /* Check for the Shape Extension */
-   if (XShapeQueryExtension(disp, &event_base_shape, &error_base_shape))
-     {
-       XShapeQueryVersion(disp, &major, &minor);
-       EventsExtensionShowInfo("Shape", major, minor,
-                               event_base_shape, error_base_shape);
-     }
-   else
+   if (EventDebug(EDBUG_TYPE_VERBOSE))
      {
-       AlertX(_("X server setup error"), "", "",
-              _("Quit Enlightenment"),
-              _("FATAL ERROR:\n" "\n"
-                "This Xserver does not support the Shape extension.\n"
-                "This is required for Enlightenment to run.\n" "\n"
-                "Your Xserver probably is too old or mis-configured.\n" "\n"
-                "Exiting.\n"));
-       EExit(1);
-     }
+       XScreenSaverInfo   *xssi = XScreenSaverAllocInfo();
 
-#if USE_XSYNC
-   if (XSyncQueryExtension(disp, &event_base_sync, &error_base_sync))
-     {
-       XSyncInitialize(disp, &major, &minor);
-       EventsExtensionShowInfo("SYNC", major, minor,
-                               event_base_sync, error_base_sync);
-
-#if 1                          /* Debug */
-       {
-          int                 i, num;
-          XSyncSystemCounter *xssc;
-
-          xssc = XSyncListSystemCounters(disp, &num);
-          for (i = 0; i < num; i++)
-            {
-               Eprintf("%2d: %10s %#lx %#x:%#x\n", i,
-                       xssc[i].name,
-                       xssc[i].counter,
-                       XSyncValueHigh32(xssc[i].resolution),
-                       XSyncValueLow32(xssc[i].resolution));
-            }
-       }
-#endif
+       XScreenSaverQueryInfo(disp, VRoot.win, xssi);
+       Eprintf(" Screen saver window=%#lx\n", xssi->window);
+       XFree(xssi);
      }
+}
 #endif
 
 #if USE_XRANDR
-   if (XRRQueryExtension(disp, &event_base_randr, &error_base_randr))
-     {
-       XRRQueryVersion(disp, &major, &minor);
-       EventsExtensionShowInfo("RandR", major, minor,
-                               event_base_randr, error_base_randr);
+static void
+ExtInitRR(int available)
+{
+   if (!available)
+      return;
 
-       /* Listen for RandR events */
-       XRRSelectInput(disp, VRoot.win, RRScreenChangeNotifyMask);
-     }
+   /* Listen for RandR events */
+   XRRSelectInput(disp, VRoot.win, RRScreenChangeNotifyMask);
+}
 #endif
 
+static const EServerExt Extensions[] = {
+   {"Shape", XEXT_SHAPE, XShapeQueryExtension, XShapeQueryVersion,
+    ExtInitShape},
+#if USE_XSYNC
+   {"Sync", XEXT_SYNC, XSyncQueryExtension, XSyncInitialize, ExtInitSync},
+#endif
+#if USE_XSCREENSAVER
+   {"ScrSaver", XEXT_SCRSAVER, XScreenSaverQueryExtension,
+    XScreenSaverQueryVersion, ExtInitSS},
+#endif
+#if USE_XRANDR
+   {"RandR", XEXT_RANDR, XRRQueryExtension, XRRQueryVersion, ExtInitRR},
+#endif
 #if USE_COMPOSITE
-   if (XCompositeQueryExtension(disp, &event_base_comp, &error_base_comp))
-     {
-       XCompositeQueryVersion(disp, &major, &minor);
-       EventsExtensionShowInfo("Composite", major, minor,
-                               event_base_comp, error_base_comp);
-     }
+   {"Composite", XEXT_COMPOSITE, XCompositeQueryExtension,
+    XCompositeQueryVersion, NULL},
+   {"Damage", XEXT_DAMAGE, XDamageQueryExtension, XDamageQueryVersion, NULL},
+   {"Fixes", XEXT_FIXES, XFixesQueryExtension, XFixesQueryVersion, NULL},
+   {"Render", XEXT_RENDER, XRenderQueryExtension, XRenderQueryVersion, NULL},
+#endif
+};
 
-   if (XDamageQueryExtension(disp, &event_base_damage, &error_base_damage))
-     {
-       XDamageQueryVersion(disp, &major, &minor);
-       EventsExtensionShowInfo("Damage", major, minor,
-                               event_base_damage, error_base_damage);
-     }
+static void
+ExtQuery(const EServerExt * ext)
+{
+   int                 available;
+   EServerExtData     *exd = ExtData + ext->ix;
 
-   if (XFixesQueryExtension(disp, &event_base_fixes, &error_base_fixes))
-     {
-       XFixesQueryVersion(disp, &major, &minor);
-       EventsExtensionShowInfo("Fixes", major, minor,
-                               event_base_fixes, error_base_fixes);
-     }
+   available = ext->query_ext(disp, &(exd->event_base), &(exd->error_base));
 
-   if (XRenderQueryExtension(disp, &event_base_render, &error_base_render))
+   if (available)
      {
-       XRenderQueryVersion(disp, &major, &minor);
-       EventsExtensionShowInfo("Render", major, minor,
-                               event_base_render, error_base_render);
+       Mode.server.extensions |= 1 << ext->ix;
+
+       ext->query_ver(disp, &(exd->major), &(exd->minor));
+
+       if (EventDebug(EDBUG_TYPE_VERBOSE))
+          Eprintf("Found extension %-10s version %d.%d -"
+                  " Event/error base = %d/%d\n", ext->name,
+                  exd->major, exd->minor, exd->event_base, exd->error_base);
      }
+
+   if (ext->init)
+      ext->init(available);
+}
+
+#define DOUBLE_CLICK_TIME 250  /* Milliseconds */
+
+void
+EventsInit(void)
+{
+   unsigned int        i;
+
+   memset(ExtData, 0, sizeof(ExtData));
+
+   for (i = 0; i < sizeof(Extensions) / sizeof(EServerExt); i++)
+      ExtQuery(Extensions + i);
+
+#if USE_COMPOSITE
+#define XEXT_MASK_CM_ALL ((1 << XEXT_COMPOSITE) | (1 << XEXT_DAMAGE) | \
+                          (1 << XEXT_FIXES) | (1 << XEXT_RENDER))
+   if (((Mode.server.extensions & XEXT_MASK_CM_ALL) == XEXT_MASK_CM_ALL) &&
+       (ExtData[XEXT_COMPOSITE].major > 0 ||
+       ExtData[XEXT_COMPOSITE].minor >= 2))
+      Mode.server.extensions |= 1 << XEXT_CM_ALL;
 #endif
 }
 
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/icccm.c,v
retrieving revision 1.119
retrieving revision 1.120
diff -u -3 -r1.119 -r1.120
--- icccm.c     18 Feb 2006 09:50:16 -0000      1.119
+++ icccm.c     19 Mar 2006 15:33:38 -0000      1.120
@@ -31,6 +31,8 @@
 #include <X11/extensions/sync.h>
 #endif
 
+#undef USE_XSYNC               /* No - Not sure this is safe */
+
 static void         ICCCM_SetIconSizes(void);
 
 void




-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to