diff options
Diffstat (limited to 'src/lib/ecore_wl2/ecore_wl2.c')
-rw-r--r-- | src/lib/ecore_wl2/ecore_wl2.c | 50 |
1 files changed, 49 insertions, 1 deletions
diff --git a/src/lib/ecore_wl2/ecore_wl2.c b/src/lib/ecore_wl2/ecore_wl2.c index c309a92b37..78ac85b6ac 100644 --- a/src/lib/ecore_wl2/ecore_wl2.c +++ b/src/lib/ecore_wl2/ecore_wl2.c @@ -53,10 +53,45 @@ EAPI int ECORE_WL2_EVENT_WINDOW_HIDE = 0; EAPI int ECORE_WL2_EVENT_WINDOW_ACTIVATE = 0; EAPI int ECORE_WL2_EVENT_WINDOW_DEACTIVATE = 0; EAPI int ECORE_WL2_EVENT_WINDOW_ICONIFY_STATE_CHANGE = 0; +EAPI int ECORE_WL2_EVENT_WINDOW_OFFSCREEN = 0; EAPI int _ecore_wl2_event_window_www = -1; EAPI int _ecore_wl2_event_window_www_drag = -1; +static Eina_Array *supplied_modules = NULL; +static Eina_Array *local_modules = NULL; + +static Eina_Bool +_ecore_wl2_surface_modules_init(void) +{ + const char *mod_dir; + + supplied_modules = eina_module_arch_list_get(NULL, + PACKAGE_LIB_DIR"/ecore_wl2/engines", + MODULE_ARCH); + eina_module_list_load(supplied_modules); + + mod_dir = getenv("ECORE_WL2_SURFACE_MODULE_DIR"); + if (mod_dir) + { + local_modules = eina_module_list_get(NULL, mod_dir, + EINA_TRUE, NULL, NULL); + eina_module_list_load(local_modules); + } + + if (!supplied_modules && !local_modules) + return EINA_FALSE; + + return EINA_TRUE; +} + +static void +_ecore_wl2_surface_modules_unload(void) +{ + eina_module_list_unload(supplied_modules); + eina_module_list_unload(local_modules); +} + /* public API functions */ EAPI int ecore_wl2_init(void) @@ -89,6 +124,12 @@ ecore_wl2_init(void) goto ecore_event_err; } + if (!_ecore_wl2_surface_modules_init()) + { + ERR("Could not load surface modules"); + goto module_load_err; + } + /* handle creating new Ecore_Wl2 event types */ ECORE_WL2_EVENT_CONNECT = ecore_event_type_new(); ECORE_WL2_EVENT_DISCONNECT = ecore_event_type_new(); @@ -133,12 +174,16 @@ ecore_wl2_init(void) ECORE_WL2_EVENT_WINDOW_ACTIVATE = ecore_event_type_new(); ECORE_WL2_EVENT_WINDOW_DEACTIVATE = ecore_event_type_new(); ECORE_WL2_EVENT_WINDOW_ICONIFY_STATE_CHANGE = ecore_event_type_new(); + ECORE_WL2_EVENT_WINDOW_OFFSCREEN = ecore_event_type_new(); if (!no_session_recovery) no_session_recovery = !!getenv("EFL_NO_WAYLAND_SESSION_RECOVERY"); return _ecore_wl2_init_count; +module_load_err: + ecore_event_shutdown(); + ecore_event_err: ecore_shutdown(); @@ -203,7 +248,8 @@ ecore_wl2_shutdown(void) ECORE_WL2_EVENT_WINDOW_HIDE, ECORE_WL2_EVENT_WINDOW_ACTIVATE, ECORE_WL2_EVENT_WINDOW_DEACTIVATE, - ECORE_WL2_EVENT_WINDOW_ICONIFY_STATE_CHANGE); + ECORE_WL2_EVENT_WINDOW_ICONIFY_STATE_CHANGE, + ECORE_WL2_EVENT_WINDOW_OFFSCREEN); /* shutdown Ecore_Event */ ecore_event_shutdown(); @@ -215,6 +261,8 @@ ecore_wl2_shutdown(void) eina_log_domain_unregister(_ecore_wl2_log_dom); _ecore_wl2_log_dom = -1; + _ecore_wl2_surface_modules_unload(); + /* shutdown eina */ eina_shutdown(); |