forked from enlightenment/enlightenment
add support for wl_shell surface move & resize
@feature Signed-off-by: Chris Michael <cp.michael@samsung.com>
This commit is contained in:
parent
1238686136
commit
7a201e24da
|
@ -70,13 +70,113 @@ _e_shell_surface_cb_pong(struct wl_client *client EINA_UNUSED, struct wl_resourc
|
||||||
static void
|
static void
|
||||||
_e_shell_surface_cb_move(struct wl_client *client EINA_UNUSED, struct wl_resource *resource EINA_UNUSED, struct wl_resource *seat_resource EINA_UNUSED, uint32_t serial EINA_UNUSED)
|
_e_shell_surface_cb_move(struct wl_client *client EINA_UNUSED, struct wl_resource *resource EINA_UNUSED, struct wl_resource *seat_resource EINA_UNUSED, uint32_t serial EINA_UNUSED)
|
||||||
{
|
{
|
||||||
DBG("SHELL: Surface Move");
|
E_Client *ec;
|
||||||
|
E_Comp_Wl_Data *cdata;
|
||||||
|
E_Binding_Event_Mouse_Button ev;
|
||||||
|
|
||||||
|
/* get the client for this resource */
|
||||||
|
if (!(ec = wl_resource_get_user_data(resource)))
|
||||||
|
{
|
||||||
|
wl_resource_post_error(resource,
|
||||||
|
WL_DISPLAY_ERROR_INVALID_OBJECT,
|
||||||
|
"No Client For Shell Surface");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((ec->maximized) || (ec->fullscreen)) return;
|
||||||
|
|
||||||
|
/* get compositor data from seat */
|
||||||
|
if (!(cdata = wl_resource_get_user_data(seat_resource)))
|
||||||
|
{
|
||||||
|
wl_resource_post_error(seat_resource,
|
||||||
|
WL_DISPLAY_ERROR_INVALID_OBJECT,
|
||||||
|
"No Comp_Data for Seat");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (cdata->ptr.button)
|
||||||
|
{
|
||||||
|
case BTN_LEFT:
|
||||||
|
ev.button = 1;
|
||||||
|
break;
|
||||||
|
case BTN_MIDDLE:
|
||||||
|
ev.button = 2;
|
||||||
|
break;
|
||||||
|
case BTN_RIGHT:
|
||||||
|
ev.button = 3;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
ev.button = cdata->ptr.button;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
e_comp_object_frame_xy_unadjust(ec->frame,
|
||||||
|
wl_fixed_to_int(cdata->ptr.x) + ec->client.x,
|
||||||
|
wl_fixed_to_int(cdata->ptr.y) + ec->client.y,
|
||||||
|
&ev.canvas.x, &ev.canvas.y);
|
||||||
|
|
||||||
|
_e_shell_surface_mouse_down_helper(ec, &ev, EINA_TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_e_shell_surface_cb_resize(struct wl_client *client EINA_UNUSED, struct wl_resource *resource EINA_UNUSED, struct wl_resource *seat_resource EINA_UNUSED, uint32_t serial EINA_UNUSED, uint32_t edges EINA_UNUSED)
|
_e_shell_surface_cb_resize(struct wl_client *client EINA_UNUSED, struct wl_resource *resource EINA_UNUSED, struct wl_resource *seat_resource EINA_UNUSED, uint32_t serial EINA_UNUSED, uint32_t edges EINA_UNUSED)
|
||||||
{
|
{
|
||||||
DBG("SHELL: Surface Resize");
|
E_Client *ec;
|
||||||
|
E_Comp_Wl_Data *cdata;
|
||||||
|
E_Binding_Event_Mouse_Button ev;
|
||||||
|
|
||||||
|
/* get the client for this resource */
|
||||||
|
if (!(ec = wl_resource_get_user_data(resource)))
|
||||||
|
{
|
||||||
|
wl_resource_post_error(resource,
|
||||||
|
WL_DISPLAY_ERROR_INVALID_OBJECT,
|
||||||
|
"No Client For Shell Surface");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((edges == 0) || (edges > 15) ||
|
||||||
|
((edges & 3) == 3) || ((edges & 12) == 12)) return;
|
||||||
|
|
||||||
|
if ((ec->maximized) || (ec->fullscreen)) return;
|
||||||
|
|
||||||
|
/* get compositor data from seat */
|
||||||
|
if (!(cdata = wl_resource_get_user_data(seat_resource)))
|
||||||
|
{
|
||||||
|
wl_resource_post_error(seat_resource,
|
||||||
|
WL_DISPLAY_ERROR_INVALID_OBJECT,
|
||||||
|
"No Comp_Data for Seat");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
cdata->resize.resource = resource;
|
||||||
|
cdata->resize.edges = edges;
|
||||||
|
cdata->resize.width = ec->client.w;
|
||||||
|
cdata->resize.height = ec->client.h;
|
||||||
|
cdata->ptr.grab_x = cdata->ptr.x;
|
||||||
|
cdata->ptr.grab_y = cdata->ptr.y;
|
||||||
|
|
||||||
|
switch (cdata->ptr.button)
|
||||||
|
{
|
||||||
|
case BTN_LEFT:
|
||||||
|
ev.button = 1;
|
||||||
|
break;
|
||||||
|
case BTN_MIDDLE:
|
||||||
|
ev.button = 2;
|
||||||
|
break;
|
||||||
|
case BTN_RIGHT:
|
||||||
|
ev.button = 3;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
ev.button = cdata->ptr.button;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
e_comp_object_frame_xy_unadjust(ec->frame,
|
||||||
|
wl_fixed_to_int(cdata->ptr.x) + ec->client.x,
|
||||||
|
wl_fixed_to_int(cdata->ptr.y) + ec->client.y,
|
||||||
|
&ev.canvas.x, &ev.canvas.y);
|
||||||
|
|
||||||
|
_e_shell_surface_mouse_down_helper(ec, &ev, EINA_FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
Loading…
Reference in New Issue