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