Handle compositors without wl_shell
This commit is contained in:
+28
-17
@@ -720,6 +720,28 @@ window_get_resize_dx_dy(struct window *window, int *x, int *y)
|
|||||||
window->resize_edges = 0;
|
window->resize_edges = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
window_set_type(struct window *window)
|
||||||
|
{
|
||||||
|
struct display *display = window->display;
|
||||||
|
|
||||||
|
switch (window->type) {
|
||||||
|
case TYPE_FULLSCREEN:
|
||||||
|
wl_shell_set_fullscreen(display->shell, window->surface);
|
||||||
|
break;
|
||||||
|
case TYPE_TOPLEVEL:
|
||||||
|
wl_shell_set_toplevel(display->shell, window->surface);
|
||||||
|
break;
|
||||||
|
case TYPE_TRANSIENT:
|
||||||
|
wl_shell_set_transient(display->shell, window->surface,
|
||||||
|
window->parent->surface,
|
||||||
|
window->x, window->y, 0);
|
||||||
|
break;
|
||||||
|
case TYPE_CUSTOM:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
window_attach_surface(struct window *window)
|
window_attach_surface(struct window *window)
|
||||||
{
|
{
|
||||||
@@ -731,6 +753,9 @@ window_attach_surface(struct window *window)
|
|||||||
#endif
|
#endif
|
||||||
int32_t x, y;
|
int32_t x, y;
|
||||||
|
|
||||||
|
if (display->shell)
|
||||||
|
window_set_type(window);
|
||||||
|
|
||||||
switch (window->buffer_type) {
|
switch (window->buffer_type) {
|
||||||
#ifdef HAVE_CAIRO_EGL
|
#ifdef HAVE_CAIRO_EGL
|
||||||
case WINDOW_BUFFER_TYPE_EGL_WINDOW:
|
case WINDOW_BUFFER_TYPE_EGL_WINDOW:
|
||||||
@@ -766,22 +791,6 @@ window_attach_surface(struct window *window)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (window->type) {
|
|
||||||
case TYPE_FULLSCREEN:
|
|
||||||
wl_shell_set_fullscreen(display->shell, window->surface);
|
|
||||||
break;
|
|
||||||
case TYPE_TOPLEVEL:
|
|
||||||
wl_shell_set_toplevel(display->shell, window->surface);
|
|
||||||
break;
|
|
||||||
case TYPE_TRANSIENT:
|
|
||||||
wl_shell_set_transient(display->shell, window->surface,
|
|
||||||
window->parent->surface,
|
|
||||||
window->x, window->y, 0);
|
|
||||||
break;
|
|
||||||
case TYPE_CUSTOM:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
wl_surface_damage(window->surface, 0, 0,
|
wl_surface_damage(window->surface, 0, 0,
|
||||||
window->allocation.width,
|
window->allocation.width,
|
||||||
window->allocation.height);
|
window->allocation.height);
|
||||||
@@ -1213,7 +1222,8 @@ window_handle_button(void *data,
|
|||||||
|
|
||||||
location = get_pointer_location(window, input->sx, input->sy);
|
location = get_pointer_location(window, input->sx, input->sy);
|
||||||
|
|
||||||
if (button == BTN_LEFT && state == 1) {
|
if (window->display->shell &&
|
||||||
|
button == BTN_LEFT && state == 1) {
|
||||||
switch (location) {
|
switch (location) {
|
||||||
case WINDOW_TITLEBAR:
|
case WINDOW_TITLEBAR:
|
||||||
wl_shell_move(window->display->shell,
|
wl_shell_move(window->display->shell,
|
||||||
@@ -1407,6 +1417,7 @@ window_create_drag(struct window *window)
|
|||||||
void
|
void
|
||||||
window_move(struct window *window, struct input *input, uint32_t time)
|
window_move(struct window *window, struct input *input, uint32_t time)
|
||||||
{
|
{
|
||||||
|
if (window->display->shell)
|
||||||
wl_shell_move(window->display->shell,
|
wl_shell_move(window->display->shell,
|
||||||
window->surface, input->input_device, time);
|
window->surface, input->input_device, time);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user