mirror of
https://github.com/gnustep/libs-back.git
synced 2025-02-22 19:31:19 +00:00
wayland: Add wayland integration and use stable protocol.
non functional, all changes just make it compile again. Configure changes by Ivan Vučica.
This commit is contained in:
parent
81456203b2
commit
05f362d528
8 changed files with 2094 additions and 635 deletions
|
@ -16,7 +16,7 @@
|
|||
#include <xkbcommon/xkbcommon.h>
|
||||
|
||||
#include "cairo/WaylandCairoSurface.h"
|
||||
#include "wayland/xdg-shell-unstable-v5-client-protocol.h"
|
||||
#include "wayland/xdg-shell-client-protocol.h"
|
||||
|
||||
struct pointer {
|
||||
struct wl_pointer *wlpointer;
|
||||
|
@ -36,14 +36,14 @@ typedef struct _WaylandConfig {
|
|||
struct wl_registry *registry;
|
||||
struct wl_compositor *compositor;
|
||||
struct wl_shell *shell;
|
||||
struct xdg_shell *xdg_shell;
|
||||
struct xdg_wm_base *wm_base;
|
||||
struct wl_shm *shm;
|
||||
struct wl_seat *seat;
|
||||
struct wl_keyboard *keyboard;
|
||||
struct wl_surface *surface;
|
||||
struct wl_shell_surface *shell_surface;
|
||||
struct wl_buffer *buffer;
|
||||
|
||||
|
||||
struct wl_list output_list;
|
||||
int output_count;
|
||||
struct wl_list window_list;
|
||||
|
|
1842
Headers/wayland/xdg-shell-client-protocol.h
Normal file
1842
Headers/wayland/xdg-shell-client-protocol.h
Normal file
File diff suppressed because it is too large
Load diff
|
@ -1,559 +0,0 @@
|
|||
/*
|
||||
* Copyright © 2008-2013 Kristian Høgsberg
|
||||
* Copyright © 2013 Rafael Antognolli
|
||||
* Copyright © 2013 Jasper St. Pierre
|
||||
* Copyright © 2010-2013 Intel Corporation
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the next
|
||||
* paragraph) shall be included in all copies or substantial portions of the
|
||||
* Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef XDG_SHELL_UNSTABLE_V5_CLIENT_PROTOCOL_H
|
||||
#define XDG_SHELL_UNSTABLE_V5_CLIENT_PROTOCOL_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stddef.h>
|
||||
#include "wayland-client.h"
|
||||
|
||||
struct wl_client;
|
||||
struct wl_resource;
|
||||
|
||||
struct wl_output;
|
||||
struct wl_seat;
|
||||
struct wl_surface;
|
||||
struct xdg_popup;
|
||||
struct xdg_shell;
|
||||
struct xdg_surface;
|
||||
|
||||
extern const struct wl_interface xdg_shell_interface;
|
||||
extern const struct wl_interface xdg_surface_interface;
|
||||
extern const struct wl_interface xdg_popup_interface;
|
||||
|
||||
#ifndef XDG_SHELL_VERSION_ENUM
|
||||
#define XDG_SHELL_VERSION_ENUM
|
||||
/**
|
||||
* xdg_shell_version - latest protocol version
|
||||
* @XDG_SHELL_VERSION_CURRENT: Always the latest version
|
||||
*
|
||||
* The 'current' member of this enum gives the version of the protocol.
|
||||
* Implementations can compare this to the version they implement using
|
||||
* static_assert to ensure the protocol and implementation versions match.
|
||||
*/
|
||||
enum xdg_shell_version {
|
||||
XDG_SHELL_VERSION_CURRENT = 5,
|
||||
};
|
||||
#endif /* XDG_SHELL_VERSION_ENUM */
|
||||
|
||||
#ifndef XDG_SHELL_ERROR_ENUM
|
||||
#define XDG_SHELL_ERROR_ENUM
|
||||
enum xdg_shell_error {
|
||||
XDG_SHELL_ERROR_ROLE = 0,
|
||||
XDG_SHELL_ERROR_DEFUNCT_SURFACES = 1,
|
||||
XDG_SHELL_ERROR_NOT_THE_TOPMOST_POPUP = 2,
|
||||
XDG_SHELL_ERROR_INVALID_POPUP_PARENT = 3,
|
||||
};
|
||||
#endif /* XDG_SHELL_ERROR_ENUM */
|
||||
|
||||
/**
|
||||
* xdg_shell - create desktop-style surfaces
|
||||
* @ping: check if the client is alive
|
||||
*
|
||||
* xdg_shell allows clients to turn a wl_surface into a "real window"
|
||||
* which can be dragged, resized, stacked, and moved around by the user.
|
||||
* Everything about this interface is suited towards traditional desktop
|
||||
* environments.
|
||||
*/
|
||||
struct xdg_shell_listener {
|
||||
/**
|
||||
* ping - check if the client is alive
|
||||
* @serial: pass this to the pong request
|
||||
*
|
||||
* The ping event asks the client if it's still alive. Pass the
|
||||
* serial specified in the event back to the compositor by sending
|
||||
* a "pong" request back with the specified serial.
|
||||
*
|
||||
* Compositors can use this to determine if the client is still
|
||||
* alive. It's unspecified what will happen if the client doesn't
|
||||
* respond to the ping request, or in what timeframe. Clients
|
||||
* should try to respond in a reasonable amount of time.
|
||||
*
|
||||
* A compositor is free to ping in any way it wants, but a client
|
||||
* must always respond to any xdg_shell object it created.
|
||||
*/
|
||||
void (*ping)(void *data,
|
||||
struct xdg_shell *xdg_shell,
|
||||
uint32_t serial);
|
||||
};
|
||||
|
||||
static inline int
|
||||
xdg_shell_add_listener(struct xdg_shell *xdg_shell,
|
||||
const struct xdg_shell_listener *listener, void *data)
|
||||
{
|
||||
return wl_proxy_add_listener((struct wl_proxy *) xdg_shell,
|
||||
(void (**)(void)) listener, data);
|
||||
}
|
||||
|
||||
#define XDG_SHELL_DESTROY 0
|
||||
#define XDG_SHELL_USE_UNSTABLE_VERSION 1
|
||||
#define XDG_SHELL_GET_XDG_SURFACE 2
|
||||
#define XDG_SHELL_GET_XDG_SURFACE_SPECIAL 3
|
||||
#define XDG_SHELL_GET_XDG_POPUP 4
|
||||
#define XDG_SHELL_PONG 5
|
||||
|
||||
static inline void
|
||||
xdg_shell_set_user_data(struct xdg_shell *xdg_shell, void *user_data)
|
||||
{
|
||||
wl_proxy_set_user_data((struct wl_proxy *) xdg_shell, user_data);
|
||||
}
|
||||
|
||||
static inline void *
|
||||
xdg_shell_get_user_data(struct xdg_shell *xdg_shell)
|
||||
{
|
||||
return wl_proxy_get_user_data((struct wl_proxy *) xdg_shell);
|
||||
}
|
||||
|
||||
static inline void
|
||||
xdg_shell_destroy(struct xdg_shell *xdg_shell)
|
||||
{
|
||||
wl_proxy_marshal((struct wl_proxy *) xdg_shell,
|
||||
XDG_SHELL_DESTROY);
|
||||
|
||||
wl_proxy_destroy((struct wl_proxy *) xdg_shell);
|
||||
}
|
||||
|
||||
static inline void
|
||||
xdg_shell_use_unstable_version(struct xdg_shell *xdg_shell, int32_t version)
|
||||
{
|
||||
wl_proxy_marshal((struct wl_proxy *) xdg_shell,
|
||||
XDG_SHELL_USE_UNSTABLE_VERSION, version);
|
||||
}
|
||||
|
||||
static inline struct xdg_surface *
|
||||
xdg_shell_get_xdg_surface(struct xdg_shell *xdg_shell, struct wl_surface *surface)
|
||||
{
|
||||
struct wl_proxy *id;
|
||||
|
||||
id = wl_proxy_marshal_constructor((struct wl_proxy *) xdg_shell,
|
||||
XDG_SHELL_GET_XDG_SURFACE, &xdg_surface_interface, NULL, surface);
|
||||
|
||||
return (struct xdg_surface *) id;
|
||||
}
|
||||
|
||||
static inline struct xdg_surface *
|
||||
xdg_shell_get_xdg_surface_special(struct xdg_shell *xdg_shell, struct wl_surface *surface, uint32_t type)
|
||||
{
|
||||
struct wl_proxy *id;
|
||||
|
||||
id = wl_proxy_marshal_constructor((struct wl_proxy *) xdg_shell,
|
||||
XDG_SHELL_GET_XDG_SURFACE_SPECIAL, &xdg_surface_interface, NULL, surface, type);
|
||||
|
||||
return (struct xdg_surface *) id;
|
||||
}
|
||||
|
||||
static inline struct xdg_popup *
|
||||
xdg_shell_get_xdg_popup(struct xdg_shell *xdg_shell, struct wl_surface *surface, struct wl_surface *parent, struct wl_seat *seat, uint32_t serial, int32_t x, int32_t y)
|
||||
{
|
||||
struct wl_proxy *id;
|
||||
|
||||
id = wl_proxy_marshal_constructor((struct wl_proxy *) xdg_shell,
|
||||
XDG_SHELL_GET_XDG_POPUP, &xdg_popup_interface, NULL, surface, parent, seat, serial, x, y);
|
||||
|
||||
return (struct xdg_popup *) id;
|
||||
}
|
||||
|
||||
static inline void
|
||||
xdg_shell_pong(struct xdg_shell *xdg_shell, uint32_t serial)
|
||||
{
|
||||
wl_proxy_marshal((struct wl_proxy *) xdg_shell,
|
||||
XDG_SHELL_PONG, serial);
|
||||
}
|
||||
|
||||
#ifndef XDG_SURFACE_RESIZE_EDGE_ENUM
|
||||
#define XDG_SURFACE_RESIZE_EDGE_ENUM
|
||||
/**
|
||||
* xdg_surface_resize_edge - edge values for resizing
|
||||
* @XDG_SURFACE_RESIZE_EDGE_NONE: (none)
|
||||
* @XDG_SURFACE_RESIZE_EDGE_TOP: (none)
|
||||
* @XDG_SURFACE_RESIZE_EDGE_BOTTOM: (none)
|
||||
* @XDG_SURFACE_RESIZE_EDGE_LEFT: (none)
|
||||
* @XDG_SURFACE_RESIZE_EDGE_TOP_LEFT: (none)
|
||||
* @XDG_SURFACE_RESIZE_EDGE_BOTTOM_LEFT: (none)
|
||||
* @XDG_SURFACE_RESIZE_EDGE_RIGHT: (none)
|
||||
* @XDG_SURFACE_RESIZE_EDGE_TOP_RIGHT: (none)
|
||||
* @XDG_SURFACE_RESIZE_EDGE_BOTTOM_RIGHT: (none)
|
||||
*
|
||||
* These values are used to indicate which edge of a surface is being
|
||||
* dragged in a resize operation.
|
||||
*/
|
||||
enum xdg_surface_resize_edge {
|
||||
XDG_SURFACE_RESIZE_EDGE_NONE = 0,
|
||||
XDG_SURFACE_RESIZE_EDGE_TOP = 1,
|
||||
XDG_SURFACE_RESIZE_EDGE_BOTTOM = 2,
|
||||
XDG_SURFACE_RESIZE_EDGE_LEFT = 4,
|
||||
XDG_SURFACE_RESIZE_EDGE_TOP_LEFT = 5,
|
||||
XDG_SURFACE_RESIZE_EDGE_BOTTOM_LEFT = 6,
|
||||
XDG_SURFACE_RESIZE_EDGE_RIGHT = 8,
|
||||
XDG_SURFACE_RESIZE_EDGE_TOP_RIGHT = 9,
|
||||
XDG_SURFACE_RESIZE_EDGE_BOTTOM_RIGHT = 10,
|
||||
};
|
||||
#endif /* XDG_SURFACE_RESIZE_EDGE_ENUM */
|
||||
|
||||
#ifndef XDG_SURFACE_STATE_ENUM
|
||||
#define XDG_SURFACE_STATE_ENUM
|
||||
/**
|
||||
* xdg_surface_state - the surface is now activated
|
||||
* @XDG_SURFACE_STATE_MAXIMIZED: the surface is maximized
|
||||
* @XDG_SURFACE_STATE_FULLSCREEN: the surface is fullscreen
|
||||
* @XDG_SURFACE_STATE_RESIZING: the surface is being resized
|
||||
* @XDG_SURFACE_STATE_ACTIVATED: the surface is now activated
|
||||
*
|
||||
* Client window decorations should be painted as if the window is
|
||||
* active. Do not assume this means that the window actually has keyboard
|
||||
* or pointer focus.
|
||||
*/
|
||||
enum xdg_surface_state {
|
||||
XDG_SURFACE_STATE_MAXIMIZED = 1,
|
||||
XDG_SURFACE_STATE_FULLSCREEN = 2,
|
||||
XDG_SURFACE_STATE_RESIZING = 3,
|
||||
XDG_SURFACE_STATE_ACTIVATED = 4,
|
||||
};
|
||||
#endif /* XDG_SURFACE_STATE_ENUM */
|
||||
|
||||
/**
|
||||
* xdg_surface - A desktop window
|
||||
* @configure: suggest a surface change
|
||||
* @close: surface wants to be closed
|
||||
*
|
||||
* An interface that may be implemented by a wl_surface, for
|
||||
* implementations that provide a desktop-style user interface.
|
||||
*
|
||||
* It provides requests to treat surfaces like windows, allowing to set
|
||||
* properties like maximized, fullscreen, minimized, and to move and resize
|
||||
* them, and associate metadata like title and app id.
|
||||
*
|
||||
* The client must call wl_surface.commit on the corresponding wl_surface
|
||||
* for the xdg_surface state to take effect. Prior to committing the new
|
||||
* state, it can set up initial configuration, such as maximizing or
|
||||
* setting a window geometry.
|
||||
*
|
||||
* Even without attaching a buffer the compositor must respond to initial
|
||||
* committed configuration, for instance sending a configure event with
|
||||
* expected window geometry if the client maximized its surface during
|
||||
* initialization.
|
||||
*
|
||||
* For a surface to be mapped by the compositor the client must have
|
||||
* committed both an xdg_surface state and a buffer.
|
||||
*/
|
||||
struct xdg_surface_listener {
|
||||
/**
|
||||
* configure - suggest a surface change
|
||||
* @x: (none)
|
||||
* @y: (none)
|
||||
* @width: (none)
|
||||
* @height: (none)
|
||||
* @states: (none)
|
||||
* @serial: (none)
|
||||
*
|
||||
* The configure event asks the client to resize its surface or
|
||||
* to change its state.
|
||||
*
|
||||
* The width and height arguments specify a hint to the window
|
||||
* about how its surface should be resized in window geometry
|
||||
* coordinates. See set_window_geometry.
|
||||
*
|
||||
* If the width or height arguments are zero, it means the client
|
||||
* should decide its own window dimension. This may happen when the
|
||||
* compositor need to configure the state of the surface but
|
||||
* doesn't have any information about any previous or expected
|
||||
* dimension.
|
||||
*
|
||||
* The states listed in the event specify how the width/height
|
||||
* arguments should be interpreted, and possibly how it should be
|
||||
* drawn.
|
||||
*
|
||||
* Clients should arrange their surface for the new size and
|
||||
* states, and then send a ack_configure request with the serial
|
||||
* sent in this configure event at some point before committing the
|
||||
* new surface.
|
||||
*
|
||||
* If the client receives multiple configure events before it can
|
||||
* respond to one, it is free to discard all but the last event it
|
||||
* received.
|
||||
*/
|
||||
void (*configure)(void *data,
|
||||
struct xdg_surface *xdg_surface,
|
||||
int32_t x,
|
||||
int32_t y,
|
||||
int32_t width,
|
||||
int32_t height,
|
||||
struct wl_array *states,
|
||||
uint32_t serial);
|
||||
/**
|
||||
* close - surface wants to be closed
|
||||
*
|
||||
* The close event is sent by the compositor when the user wants
|
||||
* the surface to be closed. This should be equivalent to the user
|
||||
* clicking the close button in client-side decorations, if your
|
||||
* application has any...
|
||||
*
|
||||
* This is only a request that the user intends to close your
|
||||
* window. The client may choose to ignore this request, or show a
|
||||
* dialog to ask the user to save their data...
|
||||
*/
|
||||
void (*close)(void *data,
|
||||
struct xdg_surface *xdg_surface);
|
||||
};
|
||||
|
||||
static inline int
|
||||
xdg_surface_add_listener(struct xdg_surface *xdg_surface,
|
||||
const struct xdg_surface_listener *listener, void *data)
|
||||
{
|
||||
return wl_proxy_add_listener((struct wl_proxy *) xdg_surface,
|
||||
(void (**)(void)) listener, data);
|
||||
}
|
||||
|
||||
#define XDG_SURFACE_DESTROY 0
|
||||
#define XDG_SURFACE_SET_PARENT 1
|
||||
#define XDG_SURFACE_SET_TITLE 2
|
||||
#define XDG_SURFACE_SET_APP_ID 3
|
||||
#define XDG_SURFACE_SHOW_WINDOW_MENU 4
|
||||
#define XDG_SURFACE_MOVE 5
|
||||
#define XDG_SURFACE_RESIZE 6
|
||||
#define XDG_SURFACE_ACK_CONFIGURE 7
|
||||
#define XDG_SURFACE_SET_WINDOW_GEOMETRY 8
|
||||
#define XDG_SURFACE_SET_MAXIMIZED 9
|
||||
#define XDG_SURFACE_UNSET_MAXIMIZED 10
|
||||
#define XDG_SURFACE_SET_FULLSCREEN 11
|
||||
#define XDG_SURFACE_UNSET_FULLSCREEN 12
|
||||
#define XDG_SURFACE_SET_MINIMIZED 13
|
||||
|
||||
static inline void
|
||||
xdg_surface_set_user_data(struct xdg_surface *xdg_surface, void *user_data)
|
||||
{
|
||||
wl_proxy_set_user_data((struct wl_proxy *) xdg_surface, user_data);
|
||||
}
|
||||
|
||||
static inline void *
|
||||
xdg_surface_get_user_data(struct xdg_surface *xdg_surface)
|
||||
{
|
||||
return wl_proxy_get_user_data((struct wl_proxy *) xdg_surface);
|
||||
}
|
||||
|
||||
static inline void
|
||||
xdg_surface_destroy(struct xdg_surface *xdg_surface)
|
||||
{
|
||||
wl_proxy_marshal((struct wl_proxy *) xdg_surface,
|
||||
XDG_SURFACE_DESTROY);
|
||||
|
||||
wl_proxy_destroy((struct wl_proxy *) xdg_surface);
|
||||
}
|
||||
|
||||
static inline void
|
||||
xdg_surface_set_parent(struct xdg_surface *xdg_surface, struct xdg_surface *parent)
|
||||
{
|
||||
wl_proxy_marshal((struct wl_proxy *) xdg_surface,
|
||||
XDG_SURFACE_SET_PARENT, parent);
|
||||
}
|
||||
|
||||
static inline void
|
||||
xdg_surface_set_title(struct xdg_surface *xdg_surface, const char *title)
|
||||
{
|
||||
wl_proxy_marshal((struct wl_proxy *) xdg_surface,
|
||||
XDG_SURFACE_SET_TITLE, title);
|
||||
}
|
||||
|
||||
static inline void
|
||||
xdg_surface_set_app_id(struct xdg_surface *xdg_surface, const char *app_id)
|
||||
{
|
||||
wl_proxy_marshal((struct wl_proxy *) xdg_surface,
|
||||
XDG_SURFACE_SET_APP_ID, app_id);
|
||||
}
|
||||
|
||||
static inline void
|
||||
xdg_surface_show_window_menu(struct xdg_surface *xdg_surface, struct wl_seat *seat, uint32_t serial, int32_t x, int32_t y)
|
||||
{
|
||||
wl_proxy_marshal((struct wl_proxy *) xdg_surface,
|
||||
XDG_SURFACE_SHOW_WINDOW_MENU, seat, serial, x, y);
|
||||
}
|
||||
|
||||
static inline void
|
||||
xdg_surface_move(struct xdg_surface *xdg_surface, struct wl_seat *seat, uint32_t serial)
|
||||
{
|
||||
wl_proxy_marshal((struct wl_proxy *) xdg_surface,
|
||||
XDG_SURFACE_MOVE, seat, serial);
|
||||
}
|
||||
|
||||
static inline void
|
||||
xdg_surface_resize(struct xdg_surface *xdg_surface, struct wl_seat *seat, uint32_t serial, uint32_t edges)
|
||||
{
|
||||
wl_proxy_marshal((struct wl_proxy *) xdg_surface,
|
||||
XDG_SURFACE_RESIZE, seat, serial, edges);
|
||||
}
|
||||
|
||||
static inline void
|
||||
xdg_surface_ack_configure(struct xdg_surface *xdg_surface, uint32_t serial)
|
||||
{
|
||||
wl_proxy_marshal((struct wl_proxy *) xdg_surface,
|
||||
XDG_SURFACE_ACK_CONFIGURE, serial);
|
||||
}
|
||||
|
||||
static inline void
|
||||
xdg_surface_set_window_geometry(struct xdg_surface *xdg_surface, int32_t x, int32_t y, int32_t width, int32_t height)
|
||||
{
|
||||
wl_proxy_marshal((struct wl_proxy *) xdg_surface,
|
||||
XDG_SURFACE_SET_WINDOW_GEOMETRY, x, y, width, height);
|
||||
}
|
||||
|
||||
static inline void
|
||||
xdg_surface_set_maximized(struct xdg_surface *xdg_surface)
|
||||
{
|
||||
wl_proxy_marshal((struct wl_proxy *) xdg_surface,
|
||||
XDG_SURFACE_SET_MAXIMIZED);
|
||||
}
|
||||
|
||||
static inline void
|
||||
xdg_surface_unset_maximized(struct xdg_surface *xdg_surface)
|
||||
{
|
||||
wl_proxy_marshal((struct wl_proxy *) xdg_surface,
|
||||
XDG_SURFACE_UNSET_MAXIMIZED);
|
||||
}
|
||||
|
||||
static inline void
|
||||
xdg_surface_set_fullscreen(struct xdg_surface *xdg_surface, struct wl_output *output)
|
||||
{
|
||||
wl_proxy_marshal((struct wl_proxy *) xdg_surface,
|
||||
XDG_SURFACE_SET_FULLSCREEN, output);
|
||||
}
|
||||
|
||||
static inline void
|
||||
xdg_surface_unset_fullscreen(struct xdg_surface *xdg_surface)
|
||||
{
|
||||
wl_proxy_marshal((struct wl_proxy *) xdg_surface,
|
||||
XDG_SURFACE_UNSET_FULLSCREEN);
|
||||
}
|
||||
|
||||
static inline void
|
||||
xdg_surface_set_minimized(struct xdg_surface *xdg_surface)
|
||||
{
|
||||
wl_proxy_marshal((struct wl_proxy *) xdg_surface,
|
||||
XDG_SURFACE_SET_MINIMIZED);
|
||||
}
|
||||
|
||||
/**
|
||||
* xdg_popup - short-lived, popup surfaces for menus
|
||||
* @popup_done: popup interaction is done
|
||||
*
|
||||
* A popup surface is a short-lived, temporary surface that can be used
|
||||
* to implement menus. It takes an explicit grab on the surface that will
|
||||
* be dismissed when the user dismisses the popup. This can be done by the
|
||||
* user clicking outside the surface, using the keyboard, or even locking
|
||||
* the screen through closing the lid or a timeout.
|
||||
*
|
||||
* When the popup is dismissed, a popup_done event will be sent out, and at
|
||||
* the same time the surface will be unmapped. The xdg_popup object is now
|
||||
* inert and cannot be reactivated, so clients should destroy it.
|
||||
* Explicitly destroying the xdg_popup object will also dismiss the popup
|
||||
* and unmap the surface.
|
||||
*
|
||||
* Clients will receive events for all their surfaces during this grab
|
||||
* (which is an "owner-events" grab in X11 parlance). This is done so that
|
||||
* users can navigate through submenus and other "nested" popup windows
|
||||
* without having to dismiss the topmost popup.
|
||||
*
|
||||
* Clients that want to dismiss the popup when another surface of their own
|
||||
* is clicked should dismiss the popup using the destroy request.
|
||||
*
|
||||
* The parent surface must have either an xdg_surface or xdg_popup role.
|
||||
*
|
||||
* Specifying an xdg_popup for the parent means that the popups are nested,
|
||||
* with this popup now being the topmost popup. Nested popups must be
|
||||
* destroyed in the reverse order they were created in, e.g. the only popup
|
||||
* you are allowed to destroy at all times is the topmost one.
|
||||
*
|
||||
* If there is an existing popup when creating a new popup, the parent must
|
||||
* be the current topmost popup.
|
||||
*
|
||||
* A parent surface must be mapped before the new popup is mapped.
|
||||
*
|
||||
* When compositors choose to dismiss a popup, they will likely dismiss
|
||||
* every nested popup as well. When a compositor dismisses popups, it will
|
||||
* follow the same dismissing order as required from the client.
|
||||
*
|
||||
* The x and y arguments passed when creating the popup object specify
|
||||
* where the top left of the popup should be placed, relative to the local
|
||||
* surface coordinates of the parent surface. See xdg_shell.get_xdg_popup.
|
||||
*
|
||||
* The client must call wl_surface.commit on the corresponding wl_surface
|
||||
* for the xdg_popup state to take effect.
|
||||
*
|
||||
* For a surface to be mapped by the compositor the client must have
|
||||
* committed both the xdg_popup state and a buffer.
|
||||
*/
|
||||
struct xdg_popup_listener {
|
||||
/**
|
||||
* popup_done - popup interaction is done
|
||||
*
|
||||
* The popup_done event is sent out when a popup is dismissed by
|
||||
* the compositor. The client should destroy the xdg_popup object
|
||||
* at this point.
|
||||
*/
|
||||
void (*popup_done)(void *data,
|
||||
struct xdg_popup *xdg_popup);
|
||||
};
|
||||
|
||||
static inline int
|
||||
xdg_popup_add_listener(struct xdg_popup *xdg_popup,
|
||||
const struct xdg_popup_listener *listener, void *data)
|
||||
{
|
||||
return wl_proxy_add_listener((struct wl_proxy *) xdg_popup,
|
||||
(void (**)(void)) listener, data);
|
||||
}
|
||||
|
||||
#define XDG_POPUP_DESTROY 0
|
||||
|
||||
static inline void
|
||||
xdg_popup_set_user_data(struct xdg_popup *xdg_popup, void *user_data)
|
||||
{
|
||||
wl_proxy_set_user_data((struct wl_proxy *) xdg_popup, user_data);
|
||||
}
|
||||
|
||||
static inline void *
|
||||
xdg_popup_get_user_data(struct xdg_popup *xdg_popup)
|
||||
{
|
||||
return wl_proxy_get_user_data((struct wl_proxy *) xdg_popup);
|
||||
}
|
||||
|
||||
static inline void
|
||||
xdg_popup_destroy(struct xdg_popup *xdg_popup)
|
||||
{
|
||||
wl_proxy_marshal((struct wl_proxy *) xdg_popup,
|
||||
XDG_POPUP_DESTROY);
|
||||
|
||||
wl_proxy_destroy((struct wl_proxy *) xdg_popup);
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -37,7 +37,7 @@ wayland_LOCALIZED_RESOURCE_FILES = \
|
|||
|
||||
# The C source files to be compiled
|
||||
wayland_C_FILES = \
|
||||
xdg-shell-unstable-v5-protocol.c \
|
||||
xdg-shell-protocol.c \
|
||||
|
||||
# The Objective-C source files to be compiled
|
||||
wayland_OBJC_FILES = \
|
||||
|
|
|
@ -623,24 +623,22 @@ static const struct wl_shell_surface_listener shell_surface_listener = {
|
|||
};
|
||||
|
||||
static void
|
||||
xdg_shell_ping(void *data, struct xdg_shell *shell, uint32_t serial)
|
||||
xdg_wm_base_ping(void *data, struct xdg_wm_base *shell, uint32_t serial)
|
||||
{
|
||||
WaylandConfig *wlconfig = data;
|
||||
xdg_shell_pong(shell, serial);
|
||||
xdg_wm_base_pong(shell, serial);
|
||||
wl_display_dispatch_pending(wlconfig->display);
|
||||
wl_display_flush(wlconfig->display);
|
||||
|
||||
}
|
||||
|
||||
static const struct xdg_shell_listener xdg_shell_listener = {
|
||||
xdg_shell_ping,
|
||||
static const struct xdg_wm_base_listener wm_base_listener = {
|
||||
xdg_wm_base_ping,
|
||||
};
|
||||
|
||||
static void
|
||||
handle_surface_configure(void *data, struct xdg_surface *xdg_surface,
|
||||
int32_t x, int32_t y,
|
||||
int32_t width, int32_t height,
|
||||
struct wl_array *states, uint32_t serial)
|
||||
uint32_t serial)
|
||||
{
|
||||
struct window *window = data;
|
||||
WaylandConfig *wlconfig = window->wlconfig;
|
||||
|
@ -706,15 +704,8 @@ handle_surface_configure(void *data, struct xdg_surface *xdg_surface,
|
|||
#endif
|
||||
}
|
||||
|
||||
static void
|
||||
handle_surface_delete(void *data, struct xdg_surface *xdg_surface)
|
||||
{
|
||||
NSDebugLog(@"handle_surface_delete");
|
||||
}
|
||||
|
||||
static const struct xdg_surface_listener xdg_surface_listener = {
|
||||
handle_surface_configure,
|
||||
handle_surface_delete,
|
||||
};
|
||||
|
||||
static void
|
||||
|
@ -734,11 +725,10 @@ handle_global(void *data, struct wl_registry *registry,
|
|||
&wl_shell_interface, 1);
|
||||
*/
|
||||
} else if (strcmp(interface, "xdg_shell") == 0) {
|
||||
wlconfig->xdg_shell = wl_registry_bind(registry, name,
|
||||
&xdg_shell_interface, 1);
|
||||
xdg_shell_use_unstable_version(wlconfig->xdg_shell, 5);
|
||||
xdg_shell_add_listener(wlconfig->xdg_shell,
|
||||
&xdg_shell_listener, wlconfig);
|
||||
wlconfig->wm_base = wl_registry_bind(registry, name,
|
||||
&xdg_wm_base_interface, 1);
|
||||
xdg_shell_add_listener(wlconfig->wm_base,
|
||||
&wm_base_listener, wlconfig);
|
||||
} else if (strcmp(interface, "wl_shm") == 0) {
|
||||
wlconfig->shm = wl_registry_bind(wlconfig->registry, name,
|
||||
&wl_shm_interface, 1);
|
||||
|
@ -982,6 +972,7 @@ int NSToWayland(struct window *window, int ns_y)
|
|||
window->height = height = NSHeight(frame);
|
||||
window->pos_x = frame.origin.x;
|
||||
window->pos_y = NSToWayland(window, frame.origin.y);
|
||||
window->window_id = wlconfig->last_window_id;
|
||||
|
||||
wlsurface = wl_compositor_create_surface(wlconfig->compositor);
|
||||
if (wlsurface == NULL) {
|
||||
|
@ -1001,18 +992,17 @@ int NSToWayland(struct window *window, int ns_y)
|
|||
}
|
||||
*/
|
||||
|
||||
window->xdg_surface = xdg_wm_base_get_xdg_surface(wlconfig->wm_base,
|
||||
wlsurface);
|
||||
// TODO: xdg_shell_get_xdg_surface_special() no longer exists,
|
||||
// so we need to find another way
|
||||
if (style & NSMainMenuWindowMask) {
|
||||
window->xdg_surface =
|
||||
xdg_shell_get_xdg_surface_special(wlconfig->xdg_shell, wlsurface, 2);
|
||||
NSDebugLog(@"window id=%d will be a panel", wlconfig->last_window_id);
|
||||
NSDebugLog(@"window id=%d will be a panel", window->window_id);
|
||||
} else if (style & NSBackgroundWindowMask) {
|
||||
NSDebugLog(@"window id=%d will be a ?", window->window_id);
|
||||
} else {
|
||||
NSDebugLog(@"window id=%d will be ordinary", window->window_id);
|
||||
}
|
||||
else if (style & NSBackgroundWindowMask)
|
||||
window->xdg_surface =
|
||||
xdg_shell_get_xdg_surface_special(wlconfig->xdg_shell, wlsurface, 1);
|
||||
else
|
||||
window->xdg_surface =
|
||||
xdg_shell_get_xdg_surface_special(wlconfig->xdg_shell, wlsurface, 0);
|
||||
|
||||
|
||||
xdg_surface_set_user_data(window->xdg_surface, window);
|
||||
xdg_surface_add_listener(window->xdg_surface,
|
||||
|
|
|
@ -1,20 +1,24 @@
|
|||
/*
|
||||
/* Generated by wayland-scanner 1.17.0 */
|
||||
|
||||
/*
|
||||
* Copyright © 2008-2013 Kristian Høgsberg
|
||||
* Copyright © 2013 Rafael Antognolli
|
||||
* Copyright © 2013 Jasper St. Pierre
|
||||
* Copyright © 2010-2013 Intel Corporation
|
||||
*
|
||||
* Copyright © 2015-2017 Samsung Electronics Co., Ltd
|
||||
* Copyright © 2015-2017 Red Hat Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the next
|
||||
* paragraph) shall be included in all copies or substantial portions of the
|
||||
* Software.
|
||||
*
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
|
@ -32,28 +36,23 @@ extern const struct wl_interface wl_output_interface;
|
|||
extern const struct wl_interface wl_seat_interface;
|
||||
extern const struct wl_interface wl_surface_interface;
|
||||
extern const struct wl_interface xdg_popup_interface;
|
||||
extern const struct wl_interface xdg_positioner_interface;
|
||||
extern const struct wl_interface xdg_surface_interface;
|
||||
extern const struct wl_interface xdg_toplevel_interface;
|
||||
|
||||
static const struct wl_interface *types[] = {
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
&xdg_positioner_interface,
|
||||
&xdg_surface_interface,
|
||||
&wl_surface_interface,
|
||||
&xdg_surface_interface,
|
||||
&wl_surface_interface,
|
||||
NULL,
|
||||
&xdg_toplevel_interface,
|
||||
&xdg_popup_interface,
|
||||
&wl_surface_interface,
|
||||
&wl_surface_interface,
|
||||
&wl_seat_interface,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
&xdg_surface_interface,
|
||||
&xdg_positioner_interface,
|
||||
&xdg_toplevel_interface,
|
||||
&wl_seat_interface,
|
||||
NULL,
|
||||
NULL,
|
||||
|
@ -64,66 +63,102 @@ static const struct wl_interface *types[] = {
|
|||
NULL,
|
||||
NULL,
|
||||
&wl_output_interface,
|
||||
&wl_seat_interface,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static const struct wl_message xdg_shell_requests[] = {
|
||||
static const struct wl_message xdg_wm_base_requests[] = {
|
||||
{ "destroy", "", types + 0 },
|
||||
{ "use_unstable_version", "i", types + 0 },
|
||||
{ "get_xdg_surface", "no", types + 6 },
|
||||
{ "get_xdg_surface_special", "nou", types + 8 },
|
||||
{ "get_xdg_popup", "nooouii", types + 11 },
|
||||
{ "create_positioner", "n", types + 4 },
|
||||
{ "get_xdg_surface", "no", types + 5 },
|
||||
{ "pong", "u", types + 0 },
|
||||
};
|
||||
|
||||
static const struct wl_message xdg_shell_events[] = {
|
||||
static const struct wl_message xdg_wm_base_events[] = {
|
||||
{ "ping", "u", types + 0 },
|
||||
};
|
||||
|
||||
WL_EXPORT const struct wl_interface xdg_shell_interface = {
|
||||
"xdg_shell", 1,
|
||||
6, xdg_shell_requests,
|
||||
1, xdg_shell_events,
|
||||
WL_EXPORT const struct wl_interface xdg_wm_base_interface = {
|
||||
"xdg_wm_base", 2,
|
||||
4, xdg_wm_base_requests,
|
||||
1, xdg_wm_base_events,
|
||||
};
|
||||
|
||||
static const struct wl_message xdg_positioner_requests[] = {
|
||||
{ "destroy", "", types + 0 },
|
||||
{ "set_size", "ii", types + 0 },
|
||||
{ "set_anchor_rect", "iiii", types + 0 },
|
||||
{ "set_anchor", "u", types + 0 },
|
||||
{ "set_gravity", "u", types + 0 },
|
||||
{ "set_constraint_adjustment", "u", types + 0 },
|
||||
{ "set_offset", "ii", types + 0 },
|
||||
};
|
||||
|
||||
WL_EXPORT const struct wl_interface xdg_positioner_interface = {
|
||||
"xdg_positioner", 2,
|
||||
7, xdg_positioner_requests,
|
||||
0, NULL,
|
||||
};
|
||||
|
||||
static const struct wl_message xdg_surface_requests[] = {
|
||||
{ "destroy", "", types + 0 },
|
||||
{ "set_parent", "?o", types + 18 },
|
||||
{ "get_toplevel", "n", types + 7 },
|
||||
{ "get_popup", "n?oo", types + 8 },
|
||||
{ "set_window_geometry", "iiii", types + 0 },
|
||||
{ "ack_configure", "u", types + 0 },
|
||||
};
|
||||
|
||||
static const struct wl_message xdg_surface_events[] = {
|
||||
{ "configure", "u", types + 0 },
|
||||
};
|
||||
|
||||
WL_EXPORT const struct wl_interface xdg_surface_interface = {
|
||||
"xdg_surface", 2,
|
||||
5, xdg_surface_requests,
|
||||
1, xdg_surface_events,
|
||||
};
|
||||
|
||||
static const struct wl_message xdg_toplevel_requests[] = {
|
||||
{ "destroy", "", types + 0 },
|
||||
{ "set_parent", "?o", types + 11 },
|
||||
{ "set_title", "s", types + 0 },
|
||||
{ "set_app_id", "s", types + 0 },
|
||||
{ "show_window_menu", "ouii", types + 19 },
|
||||
{ "move", "ou", types + 23 },
|
||||
{ "resize", "ouu", types + 25 },
|
||||
{ "ack_configure", "u", types + 0 },
|
||||
{ "set_window_geometry", "iiii", types + 0 },
|
||||
{ "show_window_menu", "ouii", types + 12 },
|
||||
{ "move", "ou", types + 16 },
|
||||
{ "resize", "ouu", types + 18 },
|
||||
{ "set_max_size", "ii", types + 0 },
|
||||
{ "set_min_size", "ii", types + 0 },
|
||||
{ "set_maximized", "", types + 0 },
|
||||
{ "unset_maximized", "", types + 0 },
|
||||
{ "set_fullscreen", "?o", types + 28 },
|
||||
{ "set_fullscreen", "?o", types + 21 },
|
||||
{ "unset_fullscreen", "", types + 0 },
|
||||
{ "set_minimized", "", types + 0 },
|
||||
};
|
||||
|
||||
static const struct wl_message xdg_surface_events[] = {
|
||||
{ "configure", "iiiiau", types + 0 },
|
||||
static const struct wl_message xdg_toplevel_events[] = {
|
||||
{ "configure", "iia", types + 0 },
|
||||
{ "close", "", types + 0 },
|
||||
};
|
||||
|
||||
WL_EXPORT const struct wl_interface xdg_surface_interface = {
|
||||
"xdg_surface", 1,
|
||||
14, xdg_surface_requests,
|
||||
2, xdg_surface_events,
|
||||
WL_EXPORT const struct wl_interface xdg_toplevel_interface = {
|
||||
"xdg_toplevel", 2,
|
||||
14, xdg_toplevel_requests,
|
||||
2, xdg_toplevel_events,
|
||||
};
|
||||
|
||||
static const struct wl_message xdg_popup_requests[] = {
|
||||
{ "destroy", "", types + 0 },
|
||||
{ "grab", "ou", types + 22 },
|
||||
};
|
||||
|
||||
static const struct wl_message xdg_popup_events[] = {
|
||||
{ "configure", "iiii", types + 0 },
|
||||
{ "popup_done", "", types + 0 },
|
||||
};
|
||||
|
||||
WL_EXPORT const struct wl_interface xdg_popup_interface = {
|
||||
"xdg_popup", 1,
|
||||
1, xdg_popup_requests,
|
||||
1, xdg_popup_events,
|
||||
"xdg_popup", 2,
|
||||
2, xdg_popup_requests,
|
||||
2, xdg_popup_events,
|
||||
};
|
||||
|
146
configure
vendored
146
configure
vendored
|
@ -707,6 +707,7 @@ infodir
|
|||
docdir
|
||||
oldincludedir
|
||||
includedir
|
||||
runstatedir
|
||||
localstatedir
|
||||
sharedstatedir
|
||||
sysconfdir
|
||||
|
@ -819,6 +820,7 @@ datadir='${datarootdir}'
|
|||
sysconfdir='${prefix}/etc'
|
||||
sharedstatedir='${prefix}/com'
|
||||
localstatedir='${prefix}/var'
|
||||
runstatedir='${localstatedir}/run'
|
||||
includedir='${prefix}/include'
|
||||
oldincludedir='/usr/include'
|
||||
docdir='${datarootdir}/doc/${PACKAGE}'
|
||||
|
@ -1071,6 +1073,15 @@ do
|
|||
| -silent | --silent | --silen | --sile | --sil)
|
||||
silent=yes ;;
|
||||
|
||||
-runstatedir | --runstatedir | --runstatedi | --runstated \
|
||||
| --runstate | --runstat | --runsta | --runst | --runs \
|
||||
| --run | --ru | --r)
|
||||
ac_prev=runstatedir ;;
|
||||
-runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
|
||||
| --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
|
||||
| --run=* | --ru=* | --r=*)
|
||||
runstatedir=$ac_optarg ;;
|
||||
|
||||
-sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
|
||||
ac_prev=sbindir ;;
|
||||
-sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
|
||||
|
@ -1208,7 +1219,7 @@ fi
|
|||
for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
|
||||
datadir sysconfdir sharedstatedir localstatedir includedir \
|
||||
oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
|
||||
libdir localedir mandir
|
||||
libdir localedir mandir runstatedir
|
||||
do
|
||||
eval ac_val=\$$ac_var
|
||||
# Remove trailing slashes.
|
||||
|
@ -1361,6 +1372,7 @@ Fine tuning of the installation directories:
|
|||
--sysconfdir=DIR read-only single-machine data [PREFIX/etc]
|
||||
--sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
|
||||
--localstatedir=DIR modifiable single-machine data [PREFIX/var]
|
||||
--runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run]
|
||||
--libdir=DIR object code libraries [EPREFIX/lib]
|
||||
--includedir=DIR C header files [PREFIX/include]
|
||||
--oldincludedir=DIR C header files for non-gcc [/usr/include]
|
||||
|
@ -1401,7 +1413,7 @@ Optional Features:
|
|||
--disable-xim Disable XIM support
|
||||
--disable-wgl Disable WGL support
|
||||
--enable-glitz Enable Glitz support
|
||||
--enable-server=SRV Build server type: x11, win32
|
||||
--enable-server=SRV Build server type: x11, win32, wayland
|
||||
--enable-graphics=GPH Build graphics: xlib, xdps, winlib, art, cairo, opal
|
||||
|
||||
Optional Packages:
|
||||
|
@ -7159,6 +7171,8 @@ if test x"$BUILD_GRAPHICS" = "xcairo"; then
|
|||
$as_echo "$as_me: WARNING: can't find freetype, required for graphics=cairo" >&2;}
|
||||
if test $BUILD_SERVER = win32; then
|
||||
BUILD_GRAPHICS=winlib
|
||||
elif test $BUILD_SERVER = wayland; then
|
||||
as_fn_error $? "wayland backend requires cairo" "$LINENO" 5
|
||||
else
|
||||
BUILD_GRAPHICS=xlib
|
||||
fi
|
||||
|
@ -7169,6 +7183,8 @@ $as_echo "$as_me: Switching to $BUILD_GRAPHICS" >&6;}
|
|||
$as_echo "$as_me: WARNING: can't find cairo, required for graphics=cairo!" >&2;}
|
||||
if test $BUILD_SERVER = win32; then
|
||||
BUILD_GRAPHICS=winlib
|
||||
elif test $BUILD_SERVER = wayland; then
|
||||
as_fn_error $? "wayland backend requires cairo" "$LINENO" 5
|
||||
else
|
||||
BUILD_GRAPHICS=art
|
||||
fi
|
||||
|
@ -7232,6 +7248,132 @@ $as_echo "winlib" >&6; }
|
|||
CAIRO_CFLAGS="$CAIRO_CFLAGS $CAIRO_XLIB_CFLAGS"
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: xlib" >&5
|
||||
$as_echo "xlib" >&6; }
|
||||
elif test $BUILD_SERVER = wayland; then
|
||||
for ac_header in wayland-util.h
|
||||
do :
|
||||
ac_fn_c_check_header_mongrel "$LINENO" "wayland-util.h" "ac_cv_header_wayland_util_h" "$ac_includes_default"
|
||||
if test "x$ac_cv_header_wayland_util_h" = xyes; then :
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
#define HAVE_WAYLAND_UTIL_H 1
|
||||
_ACEOF
|
||||
|
||||
else
|
||||
as_fn_error $? "**** No wayland-util.h. Install libwayland-dev or equivalent." "$LINENO" 5
|
||||
fi
|
||||
|
||||
done
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for wl_display_flush in -lwayland-client" >&5
|
||||
$as_echo_n "checking for wl_display_flush in -lwayland-client... " >&6; }
|
||||
if ${ac_cv_lib_wayland_client_wl_display_flush+:} false; then :
|
||||
$as_echo_n "(cached) " >&6
|
||||
else
|
||||
ac_check_lib_save_LIBS=$LIBS
|
||||
LIBS="-lwayland-client $LIBS"
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
|
||||
/* Override any GCC internal prototype to avoid an error.
|
||||
Use char because int might match the return type of a GCC
|
||||
builtin and then its argument prototype would still apply. */
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
#endif
|
||||
char wl_display_flush ();
|
||||
int
|
||||
main ()
|
||||
{
|
||||
return wl_display_flush ();
|
||||
;
|
||||
return 0;
|
||||
}
|
||||
_ACEOF
|
||||
if ac_fn_c_try_link "$LINENO"; then :
|
||||
ac_cv_lib_wayland_client_wl_display_flush=yes
|
||||
else
|
||||
ac_cv_lib_wayland_client_wl_display_flush=no
|
||||
fi
|
||||
rm -f core conftest.err conftest.$ac_objext \
|
||||
conftest$ac_exeext conftest.$ac_ext
|
||||
LIBS=$ac_check_lib_save_LIBS
|
||||
fi
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_wayland_client_wl_display_flush" >&5
|
||||
$as_echo "$ac_cv_lib_wayland_client_wl_display_flush" >&6; }
|
||||
if test "x$ac_cv_lib_wayland_client_wl_display_flush" = xyes; then :
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
#define HAVE_LIBWAYLAND_CLIENT 1
|
||||
_ACEOF
|
||||
|
||||
LIBS="-lwayland-client $LIBS"
|
||||
|
||||
else
|
||||
as_fn_error $? "**** No wl_display_flush in libwayland-client. Install correct version of libwayland-dev or equivalent." "$LINENO" 5
|
||||
fi
|
||||
|
||||
for ac_header in xkbcommon/xkbcommon.h
|
||||
do :
|
||||
ac_fn_c_check_header_mongrel "$LINENO" "xkbcommon/xkbcommon.h" "ac_cv_header_xkbcommon_xkbcommon_h" "$ac_includes_default"
|
||||
if test "x$ac_cv_header_xkbcommon_xkbcommon_h" = xyes; then :
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
#define HAVE_XKBCOMMON_XKBCOMMON_H 1
|
||||
_ACEOF
|
||||
|
||||
else
|
||||
as_fn_error $? "**** No xkbcommon/xkbcommon.h. Required for wayland. Install libxkbcommon-dev or equivalent." "$LINENO" 5
|
||||
fi
|
||||
|
||||
done
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for xkb_context_new in -lxkbcommon" >&5
|
||||
$as_echo_n "checking for xkb_context_new in -lxkbcommon... " >&6; }
|
||||
if ${ac_cv_lib_xkbcommon_xkb_context_new+:} false; then :
|
||||
$as_echo_n "(cached) " >&6
|
||||
else
|
||||
ac_check_lib_save_LIBS=$LIBS
|
||||
LIBS="-lxkbcommon $LIBS"
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
|
||||
/* Override any GCC internal prototype to avoid an error.
|
||||
Use char because int might match the return type of a GCC
|
||||
builtin and then its argument prototype would still apply. */
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
#endif
|
||||
char xkb_context_new ();
|
||||
int
|
||||
main ()
|
||||
{
|
||||
return xkb_context_new ();
|
||||
;
|
||||
return 0;
|
||||
}
|
||||
_ACEOF
|
||||
if ac_fn_c_try_link "$LINENO"; then :
|
||||
ac_cv_lib_xkbcommon_xkb_context_new=yes
|
||||
else
|
||||
ac_cv_lib_xkbcommon_xkb_context_new=no
|
||||
fi
|
||||
rm -f core conftest.err conftest.$ac_objext \
|
||||
conftest$ac_exeext conftest.$ac_ext
|
||||
LIBS=$ac_check_lib_save_LIBS
|
||||
fi
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_xkbcommon_xkb_context_new" >&5
|
||||
$as_echo "$ac_cv_lib_xkbcommon_xkb_context_new" >&6; }
|
||||
if test "x$ac_cv_lib_xkbcommon_xkb_context_new" = xyes; then :
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
#define HAVE_LIBXKBCOMMON 1
|
||||
_ACEOF
|
||||
|
||||
LIBS="-lxkbcommon $LIBS"
|
||||
|
||||
else
|
||||
as_fn_error $? "**** No xkb_context_new in libxkbcommon. Install correct version of libxkbcommon-dev or equivalent." "$LINENO" 5
|
||||
fi
|
||||
|
||||
CAIRO_LIBS="$CAIRO_LIBS $XFT_LIBS"
|
||||
CAIRO_CFLAGS="$CAIRO_CFLAGS"
|
||||
LIBS="-lwayland-client -lxkbcommon $LIBS"
|
||||
else
|
||||
as_fn_error $? "Invalid Cairo installation" "$LINENO" 5
|
||||
fi
|
||||
|
|
|
@ -647,8 +647,17 @@ if test x"$BUILD_GRAPHICS" = "xcairo"; then
|
|||
CAIRO_CFLAGS="$CAIRO_CFLAGS $CAIRO_XLIB_CFLAGS"
|
||||
AC_MSG_RESULT(xlib)
|
||||
elif test $BUILD_SERVER = wayland; then
|
||||
AC_CHECK_HEADERS(wayland-util.h,,
|
||||
[AC_MSG_ERROR([**** No wayland-util.h. Install libwayland-dev or equivalent.])])
|
||||
AC_CHECK_LIB(wayland-client, wl_display_flush,,
|
||||
[AC_MSG_ERROR([**** No wl_display_flush in libwayland-client. Install correct version of libwayland-dev or equivalent.])])
|
||||
AC_CHECK_HEADERS(xkbcommon/xkbcommon.h,,
|
||||
[AC_MSG_ERROR([**** No xkbcommon/xkbcommon.h. Required for wayland. Install libxkbcommon-dev or equivalent.])])
|
||||
AC_CHECK_LIB(xkbcommon, xkb_context_new,,
|
||||
[AC_MSG_ERROR([**** No xkb_context_new in libxkbcommon. Install correct version of libxkbcommon-dev or equivalent.])])
|
||||
CAIRO_LIBS="$CAIRO_LIBS $XFT_LIBS"
|
||||
CAIRO_CFLAGS="$CAIRO_CFLAGS"
|
||||
LIBS="-lwayland-client -lxkbcommon $LIBS"
|
||||
else
|
||||
AC_MSG_ERROR([Invalid Cairo installation])
|
||||
fi
|
||||
|
|
Loading…
Reference in a new issue