comp_wl_buffer = _e_hwc_window_comp_wl_buffer_get(hwc_window);
if ((!comp_wl_buffer) &&
- (!e_view_client_visible_get(e_client_view_get(ec))) &&
- (ec->exp_iconify.buffer_flush) &&
- (e_policy_visibility_client_is_iconic(ec)))
+ (e_policy_client_buffer_flush_enabled_get(ec)))
return EINA_FALSE;
if (!comp_wl_buffer)
#include "e_policy_visibility_intern.h"
#include "e_client_intern.h"
#include "e_view_client_intern.h"
+#include "e_policy_intern.h"
# include <gbm.h>
# include <wayland-tbm-server.h>
if (!(ec = copy_thread_data->hwc_window->ec)) goto end;
if (!e_client_cdata_get(ec)) goto end;
- if ((!e_view_client_visible_get(e_client_view_get(ec))) &&
- (ec->exp_iconify.buffer_flush) &&
- (e_policy_visibility_client_is_iconic(ec)))
+ if (e_policy_client_buffer_flush_enabled_get(ec))
goto end;
comp_buffer = _comp_wl_buffer_get(ec);
if (!hwc_window->ec) return;
- if ((!e_view_client_visible_get(e_client_view_get(hwc_window->ec))) &&
- (hwc_window->ec->exp_iconify.buffer_flush) &&
- (e_policy_visibility_client_is_iconic(hwc_window->ec)))
+ if (e_policy_client_buffer_flush_enabled_get(hwc_window->ec))
return;
_e_hwc_window_queue_copy_thread_check_and_run(hwc_window);
hwc_window = ec->hwc_window;
if (!hwc_window) return;
- if ((!e_view_client_visible_get(e_client_view_get(ec))) &&
- (ec->exp_iconify.buffer_flush) &&
- (e_policy_visibility_client_is_iconic(ec)))
+ if (e_policy_client_buffer_flush_enabled_get(hwc_window->ec))
return;
_e_hwc_window_queue_copy_thread_check_and_run(hwc_window);
#include "e_devicemgr_wl_intern.h"
#include "e_view_client_intern.h"
#include "e_comp_wl_input_thread_intern.h"
+#include "e_policy_intern.h"
#include <tizen-extension-server-protocol.h>
#include <relative-pointer-unstable-v1-server-protocol.h>
wl_signal_emit(&cdata->state_commit_signal, &cdata->surface);
- if (buffer &&
- ec->exp_iconify.buffer_flush &&
- e_policy_visibility_client_is_iconic(ec))
- {
- e_pixmap_buffer_clear(ec->pixmap, EINA_FALSE);
- }
+ if ((buffer) && (e_policy_client_buffer_flush_enabled_get(ec)))
+ e_pixmap_buffer_clear(ec->pixmap, EINA_FALSE);
}
static void
E_Pixmap *pixmap = ec->pixmap;
E_Surface *surface;
- /* if not only free, client should be iconic state */
- if (!only_free && !e_policy_visibility_client_is_iconic(ec)) return;
+ if ((!only_free) && (!e_policy_client_buffer_flush_enabled_get(ec))) return;
E_Tizen_Surface_Shm *surface_shm;
E_Tizen_Surface_Shm_Flusher *surface_shm_flusher;
wl_list_init(&pc->pixmap_destroy.link);
}
+EINTERN Eina_Bool
+e_policy_client_buffer_flush_enabled_get(E_Client *ec)
+{
+ if (!ec) return EINA_FALSE;
+ if (!ec->comp_data) return EINA_FALSE;
+ if (!ec->exp_iconify.buffer_flush) return EINA_FALSE;
+ if (e_view_client_visible_get(e_client_view_get(ec))) return EINA_FALSE;
+ if (ec->is_cursor) return EINA_FALSE;
+ /* Currently, there is no case where the ec used as a subsurface is in the iconify
+ or hide_by_request state, and it can not be determined whether it is suitable
+ for a subsurface. */
+ if (e_comp_wl_subsurface_check(ec)) return EINA_FALSE;
+
+ if (e_policy_visibility_client_is_iconic(ec)) return EINA_TRUE;
+ if (e_client_hide_by_request_get(ec)) return EINA_TRUE;
+
+ return EINA_FALSE;
+}
+
EINTERN E_Policy_Client *
e_policy_client_add(E_Client *ec)
{
EINTERN Eina_Bool e_policy_interceptor_call(E_Policy_Intercept_Point ipoint, E_Client *ec, ...);
EINTERN E_Config_Policy_Desk *_e_policy_desk_get_by_num(unsigned int zone_num, int x, int y);
+EINTERN Eina_Bool e_policy_client_buffer_flush_enabled_get(E_Client *ec);
#endif
VS_DBG(ec, "\tUPDATE ICONIC STATE: %s", STATE_STR(vc));
vc->prepare_emitted = 0;
- if (ec->iconic && ec->exp_iconify.buffer_flush)
+ if (e_policy_client_buffer_flush_enabled_get(ec))
e_pixmap_buffer_clear(ec->pixmap, EINA_FALSE);
}