We refactor code to handle the tizen_move_resize_set_geometry request.
We handled it using the serial data of buffer, but there was a case not to set the serial data.
So, we changed code that e compares the buffer size and requested geometry size instead of the
serial data.
Change-Id: I0994f382797de3108e9c6c3645b0449f750b4832
*/
static void _e_comp_wl_move_resize_init(void);
-static void _e_comp_wl_surface_state_serial_update(E_Client *ec, E_Comp_Wl_Surface_State *state);
static E_Client * _e_comp_wl_client_usable_get(pid_t pid, E_Pixmap *ep);
static Eina_List *hooks = NULL;
-static Eina_Bool serial_trace_debug = 0;
-
/* local functions */
static void
_e_comp_wl_hooks_clean(void)
if (state->new_attach)
{
- _e_comp_wl_surface_state_serial_update(ec, state);
e_comp_wl_surface_attach(ec, state->buffer);
}
// --------------------------------------------------------
// tizen_move_resize
// --------------------------------------------------------
-EINTERN void
-e_comp_wl_trace_serial_debug(Eina_Bool on)
-{
- if (on == serial_trace_debug) return;
- serial_trace_debug = on;
- ELOGF("POSSIZE", "serial trace_debug %s", NULL, (on ? "ON" : "OFF"));
-}
-
-static void
-_e_comp_wl_surface_state_serial_update(E_Client *ec, E_Comp_Wl_Surface_State *state)
-{
- E_Comp_Wl_Buffer *buffer;
- uint32_t serial = 0;
-
- if (!ec) return;
- if (e_object_is_del(E_OBJECT(ec))) return;
- if (!ec->comp_data) return;
-
- buffer = state->buffer;
- if (!buffer) return;
-
- serial = wayland_tbm_server_buffer_get_buffer_serial(buffer->resource);
- ec->surface_sync.serial = serial;
-
- if (serial_trace_debug)
- ELOGF("POSSIZE", "Update serial(%u) wl_buffer(%u)", ec, serial, wl_resource_get_id(buffer->resource));
-}
-
EINTERN Eina_Bool
e_comp_wl_commit_sync_client_geometry_add(E_Client *ec,
E_Client_Demand_Geometry mode,
if (eina_list_count(ec->surface_sync.pending_geometry))
{
- EINA_LIST_FOREACH(ec->surface_sync.pending_geometry, l, geo)
+ Eina_List *ll = NULL;
+ Eina_Bool match_size = EINA_FALSE;
+ EINA_LIST_REVERSE_FOREACH_SAFE(ec->surface_sync.pending_geometry, l, ll, geo)
{
- if (geo->serial <= ec->surface_sync.serial)
+ if (match_size)
+ {
+ ec->surface_sync.pending_geometry = eina_list_remove(ec->surface_sync.pending_geometry, geo);
+ E_FREE(geo);
+ continue;
+ }
+
+ if ((geo->w == bw) && (geo->h == bh))
{
+ match_size = EINA_TRUE;
if (geo->mode & E_GEOMETRY_SIZE)
{
- config.w = geo->w; config.h = geo->h;
+ config.w = geo->w;
+ config.h = geo->h;
}
if (geo->mode & E_GEOMETRY_POS)
{
- config.x = geo->x; config.y = geo->y;
+ config.x = geo->x;
+ config.y = geo->y;
}
change |= geo->mode;
ec->surface_sync.pending_geometry = eina_list_remove(ec->surface_sync.pending_geometry, geo);
}
return;
}
- else if (eina_streq(argv[2], "serial"))
- {
- if (!_e_info_client_eldbus_message_with_args("trace_message_serial", NULL, "i", onoff))
- {
- printf("_e_info_client_eldbus_message_with_args error");
- }
- return;
- }
else if (eina_streq(argv[2], "prstt"))
{
if (!_e_info_client_eldbus_message_with_args("trace_message_prstt", NULL, "i", onoff))
#endif
{
"trace",
- "[hwc | serial | exsync] [off: 0, on: 1]",
+ "[hwc | exsync] [off: 0, on: 1]",
"Show the trace log in detail",
_e_info_client_proc_trace
},
return reply;
}
-static Eldbus_Message *
-e_info_server_cb_serial_trace_message(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
-{
- Eldbus_Message *reply = eldbus_message_method_return_new(msg);
- uint32_t on;
-
- if (!eldbus_message_arguments_get(msg, "i", &on))
- {
- ERR("Error getting arguments.");
- return reply;
- }
-
- if (on == 0 || on == 1)
- e_comp_wl_trace_serial_debug(on);
-
- return reply;
-}
-
static Eldbus_Message *
e_info_server_cb_damage_trace_message(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
{
{ "dump_screen", ELDBUS_ARGS({"s", "dump_screen"}), NULL, _e_info_server_cb_screen_dump, 0 },
{ "output_mode", ELDBUS_ARGS({SIGNATURE_OUTPUT_MODE_CLIENT, "output mode"}), ELDBUS_ARGS({"a("SIGNATURE_OUTPUT_MODE_SERVER")", "array of ec"}), _e_info_server_cb_output_mode, 0 },
{ "trace_message_hwc", ELDBUS_ARGS({"i", "trace_message_hwc"}), NULL, e_info_server_cb_hwc_trace_message, 0},
- { "trace_message_serial", ELDBUS_ARGS({"i", "trace_message_serial"}), NULL, e_info_server_cb_serial_trace_message, 0},
{ "trace_message_prstt", ELDBUS_ARGS({"i", "trace_message_presentation_time"}), NULL, e_info_server_cb_prstt_trace_message, 0},
{ "trace_message_exsync", ELDBUS_ARGS({"i", "trace_message_ex_sync"}), NULL, e_info_server_cb_exsync_trace_message, 0},
{ "trace_message_damage", ELDBUS_ARGS({"i", "trace_message_damage"}), NULL, e_info_server_cb_damage_trace_message, 0},