void xf_xdamage_init(xfInfo* xfi) { int damage_event; int damage_error; int major, minor; XGCValues values; if (XDamageQueryExtension(xfi->display, &damage_event, &damage_error) == 0) { fprintf(stderr, "XDamageQueryExtension failed\n"); return; } XDamageQueryVersion(xfi->display, &major, &minor); if (XDamageQueryVersion(xfi->display, &major, &minor) == 0) { fprintf(stderr, "XDamageQueryVersion failed\n"); return; } else if (major < 1) { fprintf(stderr, "XDamageQueryVersion failed: major:%d minor:%d\n", major, minor); return; } xfi->xdamage_notify_event = damage_event + XDamageNotify; xfi->xdamage = XDamageCreate(xfi->display, xfi->root_window, XDamageReportDeltaRectangles); if (xfi->xdamage == None) { fprintf(stderr, "XDamageCreate failed\n"); return; } #ifdef WITH_XFIXES xfi->xdamage_region = XFixesCreateRegion(xfi->display, NULL, 0); if (xfi->xdamage_region == None) { fprintf(stderr, "XFixesCreateRegion failed\n"); XDamageDestroy(xfi->display, xfi->xdamage); xfi->xdamage = None; return; } #endif values.subwindow_mode = IncludeInferiors; xfi->xdamage_gc = XCreateGC(xfi->display, xfi->root_window, GCSubwindowMode, &values); XSetFunction(xfi->display, xfi->xdamage_gc, GXcopy); }
int x11_shadow_xinerama_init(x11ShadowSubsystem* subsystem) { #ifdef WITH_XINERAMA int index; int numMonitors; int major, minor; int xinerama_event; int xinerama_error; MONITOR_DEF* monitor; XineramaScreenInfo* screen; XineramaScreenInfo* screens; if (!XineramaQueryExtension(subsystem->display, &xinerama_event, &xinerama_error)) return -1; if (!XDamageQueryVersion(subsystem->display, &major, &minor)) return -1; if (!XineramaIsActive(subsystem->display)) return -1; screens = XineramaQueryScreens(subsystem->display, &numMonitors); if (numMonitors > 16) numMonitors = 16; if (!screens || (numMonitors < 1)) return -1; subsystem->monitorCount = numMonitors; for (index = 0; index < numMonitors; index++) { screen = &screens[index]; monitor = &(subsystem->monitors[index]); monitor->left = screen->x_org; monitor->top = screen->y_org; monitor->right = monitor->left + screen->width; monitor->bottom = monitor->top + screen->height; monitor->flags = (index == 0) ? 1 : 0; } XFree(screens); #endif return 1; }
void _ecore_x_damage_init(void) { #ifdef ECORE_XDAMAGE _damage_major = 1; _damage_minor = 0; LOGFN(__FILE__, __LINE__, __FUNCTION__); if (XDamageQueryVersion(_ecore_x_disp, &_damage_major, &_damage_minor)) _damage_available = EINA_TRUE; else _damage_available = EINA_FALSE; #else /* ifdef ECORE_XDAMAGE */ _damage_available = EINA_FALSE; #endif /* ifdef ECORE_XDAMAGE */ }
static GLboolean has_damage_post(Display *dpy) { static GLboolean inited = GL_FALSE; static GLboolean has_damage; if (!inited) { int major, minor; if (XDamageQueryVersion(dpy, &major, &minor) && major == 1 && minor >= 1) { has_damage = GL_TRUE; } else { has_damage = GL_FALSE; } inited = GL_TRUE; } return has_damage; }
static int x11_shadow_xinerama_init(x11ShadowSubsystem* subsystem) { #ifdef WITH_XINERAMA int major, minor; int xinerama_event; int xinerama_error; x11_shadow_subsystem_base_init(subsystem); if (!XineramaQueryExtension(subsystem->display, &xinerama_event, &xinerama_error)) return -1; if (!XDamageQueryVersion(subsystem->display, &major, &minor)) return -1; if (!XineramaIsActive(subsystem->display)) return -1; return 1; #else return -1; #endif }
static int x11_shadow_xdamage_init(x11ShadowSubsystem* subsystem) { #ifdef WITH_XDAMAGE int major, minor; int damage_event; int damage_error; if (!subsystem->use_xfixes) return -1; if (!XDamageQueryExtension(subsystem->display, &damage_event, &damage_error)) return -1; if (!XDamageQueryVersion(subsystem->display, &major, &minor)) return -1; if (major < 1) return -1; subsystem->xdamage_notify_event = damage_event + XDamageNotify; subsystem->xdamage = XDamageCreate(subsystem->display, subsystem->root_window, XDamageReportDeltaRectangles); if (!subsystem->xdamage) return -1; #ifdef WITH_XFIXES subsystem->xdamage_region = XFixesCreateRegion(subsystem->display, NULL, 0); if (!subsystem->xdamage_region) return -1; #endif return 1; #else return -1; #endif }
int x11_shadow_enum_monitors(MONITOR_DEF* monitors, int maxMonitors) { int index; Display* display; int displayWidth; int displayHeight; int numMonitors = 0; MONITOR_DEF* monitor; if (!getenv("DISPLAY")) setenv("DISPLAY", ":0", 1); display = XOpenDisplay(NULL); if (!display) { WLog_ERR(TAG, "failed to open display: %s", XDisplayName(NULL)); return -1; } displayWidth = WidthOfScreen(DefaultScreenOfDisplay(display)); displayHeight = HeightOfScreen(DefaultScreenOfDisplay(display)); #ifdef WITH_XINERAMA { int major, minor; int xinerama_event; int xinerama_error; XineramaScreenInfo* screen; XineramaScreenInfo* screens; if (XineramaQueryExtension(display, &xinerama_event, &xinerama_error) && XDamageQueryVersion(display, &major, &minor) && XineramaIsActive(display)) { screens = XineramaQueryScreens(display, &numMonitors); if (numMonitors > maxMonitors) numMonitors = maxMonitors; if (screens && (numMonitors > 0)) { for (index = 0; index < numMonitors; index++) { screen = &screens[index]; monitor = &monitors[index]; monitor->left = screen->x_org; monitor->top = screen->y_org; monitor->right = monitor->left + screen->width; monitor->bottom = monitor->top + screen->height; monitor->flags = (index == 0) ? 1 : 0; } } XFree(screens); } } #endif XCloseDisplay(display); if (numMonitors < 1) { index = 0; numMonitors = 1; monitor = &monitors[index]; monitor->left = 0; monitor->top = 0; monitor->right = displayWidth; monitor->bottom = displayHeight; monitor->flags = 1; } return numMonitors; }
bool MImXDamageExtension::queryVersion(int *major, int *minor) const { return XDamageQueryVersion(QX11Info::display(), major, minor) != 0; }