diff --git a/legacy/ecore/src/lib/ecore_x/Ecore_X.h b/legacy/ecore/src/lib/ecore_x/Ecore_X.h index 3f9b926bea..44d78957cc 100644 --- a/legacy/ecore/src/lib/ecore_x/Ecore_X.h +++ b/legacy/ecore/src/lib/ecore_x/Ecore_X.h @@ -1515,6 +1515,8 @@ EAPI Ecore_X_Damage ecore_x_damage_new(Ecore_X_Drawable d, Ecore_X_Damage_Rep EAPI void ecore_x_damage_del(Ecore_X_Damage damage); EAPI void ecore_x_damage_subtract(Ecore_X_Damage damage, Ecore_X_Region repair, Ecore_X_Region parts); +EAPI int ecore_x_screen_is_composited(int screen); + #ifdef __cplusplus } #endif diff --git a/legacy/ecore/src/lib/ecore_x/ecore_x_netwm.c b/legacy/ecore/src/lib/ecore_x/ecore_x_netwm.c index 7ba35b78fe..3090ecb4c4 100644 --- a/legacy/ecore/src/lib/ecore_x/ecore_x_netwm.c +++ b/legacy/ecore/src/lib/ecore_x/ecore_x_netwm.c @@ -1638,3 +1638,22 @@ _ecore_x_netwm_startup_info_free(void *data) if (info->wmclass) free(info->wmclass); free(info); } + +/* + * Is screen composited? + */ +EAPI int +ecore_x_screen_is_composited(int screen) +{ + Ecore_X_Window win; + Ecore_X_Atom atom; + char buf[32]; + + snprintf(buf, sizeof(buf), "_NET_WM_CM_S%d", screen); + atom = XInternAtom(_ecore_x_disp, buf, True); + if (atom == None) return 0; + + win = XGetSelectionOwner(_ecore_x_disp, atom); + + return win != None; +}