#include "appcore_multiwindow_base_private.h"
appcore_multiwindow_base_context _appcore_mw_context;
+static guint __flush_timer = 0;
+
+static gboolean __flush_memory(gpointer data)
+{
+ _DBG("Flush memory");
+ if (_appcore_mw_context.ops.base.trim_memory)
+ _appcore_mw_context.ops.base.trim_memory(_appcore_mw_context.data);
+ __flush_timer = 0;
+ return G_SOURCE_REMOVE;
+}
+
+static void __add_flush_timer(void)
+{
+ if (__flush_timer)
+ return;
+
+ __flush_timer = g_timeout_add(5000, __flush_memory, NULL);
+}
+
+static void __remove_flush_timer(void)
+{
+ if (!__flush_timer)
+ return;
+
+ g_source_remove(__flush_timer);
+ __flush_timer = 0;
+}
static Eina_Bool __stub_show_cb(void *data, int type, void *event)
{
static Eina_Bool __stub_visibility_cb(void *data, int type, void *event)
{
+ Ecore_Wl2_Event_Window_Visibility_Change *ev = event;
+
if (_appcore_mw_context.ops.window.visibility)
_appcore_mw_context.ops.window.visibility(type, event, _appcore_mw_context.data);
+ if (ev && ev->fully_obscured) {
+ if (!appcore_multiwindow_base_window_is_resumed())
+ __add_flush_timer();
+ } else {
+ __remove_flush_timer();
+ }
+
return ECORE_CALLBACK_RENEW;
}
static Eina_Bool __stub_pre_visibility_cb(void *data, int type, void *event)
{
+ Ecore_Wl2_Event_Window_Pre_Visibility_Change *ev = event;
+
if (_appcore_mw_context.ops.window.pre_visibility)
_appcore_mw_context.ops.window.pre_visibility(type, event, _appcore_mw_context.data);
+ if (ev->type == ECORE_WL2_WINDOW_VISIBILITY_TYPE_PRE_UNOBSCURED)
+ __remove_flush_timer();
+
return ECORE_CALLBACK_RENEW;
}
return appcore_multiwindow_base_on_terminate();
}
+static void __on_trim_memory(void *data)
+{
+ appcore_multiwindow_base_on_trim_memory();
+}
+
static void __window_on_show(int type, void *event, void *data)
{
appcore_multiwindow_base_window_on_show(type, event);
ops.base.finish = NULL;
ops.base.run = NULL;
ops.base.exit = NULL;
+ ops.base.trim_memory = __on_trim_memory;
ops.window.show = __window_on_show;
ops.window.hide = __window_on_hide;
return 0;
}
+EXPORT_API int appcore_multiwindow_base_on_trim_memory(void)
+{
+ return appcore_base_on_trim_memory();
+}