From a3aceae87aac159c3a93f88c39d7edf933abb9cc Mon Sep 17 00:00:00 2001 From: Johan Malm Date: Wed, 20 May 2020 22:04:22 +0100 Subject: [PATCH] Add meson.build --- .gitignore | 2 + Makefile | 30 --- meson.build | 81 ++++++ protocols/meson.build | 39 +++ protocols/wlr-layer-shell-unstable-v1.xml | 301 ++++++++++++++++++++++ 5 files changed, 423 insertions(+), 30 deletions(-) delete mode 100644 Makefile create mode 100644 meson.build create mode 100644 protocols/meson.build create mode 100644 protocols/wlr-layer-shell-unstable-v1.xml diff --git a/.gitignore b/.gitignore index 1c6cc66a..81c739b8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ *.o xdg-shell-protocol.* labwc +build/ +subprojects/ diff --git a/Makefile b/Makefile deleted file mode 100644 index cbb31be6..00000000 --- a/Makefile +++ /dev/null @@ -1,30 +0,0 @@ -CFLAGS += -g -O3 -Wall -std=c11 -I. -DWLR_USE_UNSTABLE -CFLAGS += `pkg-config --cflags wlroots wayland-server xkbcommon` -CFLAGS += -Wextra -Wno-format-zero-length -Wold-style-definition -Woverflow \ - -Wpointer-arith -Wstrict-prototypes -Wvla -Wunused-result \ - -Wno-unused-parameter - -LDFLAGS += `pkg-config --libs wlroots wayland-server xkbcommon` - -ASAN_FLAGS = -O0 -fsanitize=address -fno-common -fno-omit-frame-pointer -rdynamic -#CFLAGS += $(ASAN_FLAGS) -#LDFLAGS += $(ASAN_FLAGS) -fuse-ld=gold - -WP = `pkg-config --variable=pkgdatadir wayland-protocols` -WS = `pkg-config --variable=wayland_scanner wayland-scanner` - -OBJS = main.o xdg.o view.o xwl.o server.o output.o dbg.o deco.o - -all: labwc - -labwc: xdg-shell-protocol.o $(OBJS) - $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) - -xdg-shell-protocol.h: - $(WS) server-header $(WP)/stable/xdg-shell/xdg-shell.xml $@ - -xdg-shell-protocol.c: xdg-shell-protocol.h - $(WS) private-code $(WP)/stable/xdg-shell/xdg-shell.xml $@ - -clean: - rm -f labwc xdg-shell-protocol.* *.o diff --git a/meson.build b/meson.build new file mode 100644 index 00000000..a8ec163d --- /dev/null +++ b/meson.build @@ -0,0 +1,81 @@ +project( + 'labwc', + 'c', + license: 'GPL-2', + default_options: [ + 'c_std=c11', + 'warning_level=2', + 'werror=true', + ], +) + +add_project_arguments( + [ + '-DWLR_USE_UNSTABLE', + ], + language: 'c', +) + +cc = meson.get_compiler('c') + +add_project_arguments(cc.get_supported_arguments([ + '-Wundef', + '-Wlogical-op', + '-Wmissing-include-dirs', + '-Wold-style-definition', + '-Wpointer-arith', + '-Winit-self', + '-Wstrict-prototypes', + '-Wimplicit-fallthrough=2', + '-Wendif-labels', + '-Wstrict-aliasing=2', + '-Woverflow', + '-Wmissing-prototypes', + '-Wno-missing-braces', + '-Wno-missing-field-initializers', + '-Wno-unused-parameter', +]), language: 'c') + +wlroots_proj = subproject( + 'wlroots', + default_options: ['examples=false'], + required: false, +) +if wlroots_proj.found() + wlroots = wlroots_proj.get_variable('wlroots') +else + wlroots = dependency('wlroots', version: '>= 0.10.0') +endif + +wayland_protos = dependency('wayland-protocols') +wayland_server = dependency('wayland-server') +xkbcommon = dependency('xkbcommon') + +subdir('protocols') + +labwc_sources = [ + 'main.c', + 'server.c', + 'output.c', + 'view.c', + 'xdg.c', + 'xwl.c', + 'deco.c', + 'dbg.c', +] + +labwc_headers = [ + 'labwc.h', +] + +executable( + meson.project_name(), + labwc_sources + labwc_headers, + dependencies: [ + server_protos, + wayland_server, + wlroots, + xkbcommon, + ], + install: true, +) diff --git a/protocols/meson.build b/protocols/meson.build new file mode 100644 index 00000000..e4841906 --- /dev/null +++ b/protocols/meson.build @@ -0,0 +1,39 @@ +wl_protocol_dir = wayland_protos.get_pkgconfig_variable('pkgdatadir') +wayland_scanner = find_program('wayland-scanner') + +wayland_scanner_code = generator( + wayland_scanner, + output: '@BASENAME@-protocol.c', + arguments: ['private-code', '@INPUT@', '@OUTPUT@'], +) + +wayland_scanner_server = generator( + wayland_scanner, + output: '@BASENAME@-protocol.h', + arguments: ['server-header', '@INPUT@', '@OUTPUT@'], +) + +server_protocols = [ + [wl_protocol_dir, 'stable/xdg-shell/xdg-shell.xml'], + ['wlr-layer-shell-unstable-v1.xml'], +] + +server_protos_src = [] +server_protos_headers = [] + +foreach p : server_protocols + xml = join_paths(p) + server_protos_src += wayland_scanner_code.process(xml) + server_protos_headers += wayland_scanner_server.process(xml) +endforeach + +lib_server_protos = static_library( + 'server_protos', + server_protos_src + server_protos_headers, + dependencies: [wayland_server] +) + +server_protos = declare_dependency( + link_with: lib_server_protos, + sources: server_protos_headers, +) diff --git a/protocols/wlr-layer-shell-unstable-v1.xml b/protocols/wlr-layer-shell-unstable-v1.xml new file mode 100644 index 00000000..adc6a176 --- /dev/null +++ b/protocols/wlr-layer-shell-unstable-v1.xml @@ -0,0 +1,301 @@ + + + + Copyright © 2017 Drew DeVault + + Permission to use, copy, modify, distribute, and sell this + software and its documentation for any purpose is hereby granted + without fee, provided that the above copyright notice appear in + all copies and that both that copyright notice and this permission + notice appear in supporting documentation, and that the name of + the copyright holders not be used in advertising or publicity + pertaining to distribution of the software without specific, + written prior permission. The copyright holders make no + representations about the suitability of this software for any + purpose. It is provided "as is" without express or implied + warranty. + + THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS + SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY + SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, + ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF + THIS SOFTWARE. + + + + + Clients can use this interface to assign the surface_layer role to + wl_surfaces. Such surfaces are assigned to a "layer" of the output and + rendered with a defined z-depth respective to each other. They may also be + anchored to the edges and corners of a screen and specify input handling + semantics. This interface should be suitable for the implementation of + many desktop shell components, and a broad number of other applications + that interact with the desktop. + + + + + Create a layer surface for an existing surface. This assigns the role of + layer_surface, or raises a protocol error if another role is already + assigned. + + Creating a layer surface from a wl_surface which has a buffer attached + or committed is a client error, and any attempts by a client to attach + or manipulate a buffer prior to the first layer_surface.configure call + must also be treated as errors. + + You may pass NULL for output to allow the compositor to decide which + output to use. Generally this will be the one that the user most + recently interacted with. + + Clients can specify a namespace that defines the purpose of the layer + surface. + + + + + + + + + + + + + + + + + These values indicate which layers a surface can be rendered in. They + are ordered by z depth, bottom-most first. Traditional shell surfaces + will typically be rendered between the bottom and top layers. + Fullscreen shell surfaces are typically rendered at the top layer. + Multiple surfaces can share a single layer, and ordering within a + single layer is undefined. + + + + + + + + + + + + An interface that may be implemented by a wl_surface, for surfaces that + are designed to be rendered as a layer of a stacked desktop-like + environment. + + Layer surface state (layer, size, anchor, exclusive zone, + margin, interactivity) is double-buffered, and will be applied at the + time wl_surface.commit of the corresponding wl_surface is called. + + + + + Sets the size of the surface in surface-local coordinates. The + compositor will display the surface centered with respect to its + anchors. + + If you pass 0 for either value, the compositor will assign it and + inform you of the assignment in the configure event. You must set your + anchor to opposite edges in the dimensions you omit; not doing so is a + protocol error. Both values are 0 by default. + + Size is double-buffered, see wl_surface.commit. + + + + + + + + Requests that the compositor anchor the surface to the specified edges + and corners. If two orthogonal edges are specified (e.g. 'top' and + 'left'), then the anchor point will be the intersection of the edges + (e.g. the top left corner of the output); otherwise the anchor point + will be centered on that edge, or in the center if none is specified. + + Anchor is double-buffered, see wl_surface.commit. + + + + + + + Requests that the compositor avoids occluding an area with other + surfaces. The compositor's use of this information is + implementation-dependent - do not assume that this region will not + actually be occluded. + + A positive value is only meaningful if the surface is anchored to one + edge or an edge and both perpendicular edges. If the surface is not + anchored, anchored to only two perpendicular edges (a corner), anchored + to only two parallel edges or anchored to all edges, a positive value + will be treated the same as zero. + + A positive zone is the distance from the edge in surface-local + coordinates to consider exclusive. + + Surfaces that do not wish to have an exclusive zone may instead specify + how they should interact with surfaces that do. If set to zero, the + surface indicates that it would like to be moved to avoid occluding + surfaces with a positive exclusive zone. If set to -1, the surface + indicates that it would not like to be moved to accommodate for other + surfaces, and the compositor should extend it all the way to the edges + it is anchored to. + + For example, a panel might set its exclusive zone to 10, so that + maximized shell surfaces are not shown on top of it. A notification + might set its exclusive zone to 0, so that it is moved to avoid + occluding the panel, but shell surfaces are shown underneath it. A + wallpaper or lock screen might set their exclusive zone to -1, so that + they stretch below or over the panel. + + The default value is 0. + + Exclusive zone is double-buffered, see wl_surface.commit. + + + + + + + Requests that the surface be placed some distance away from the anchor + point on the output, in surface-local coordinates. Setting this value + for edges you are not anchored to has no effect. + + The exclusive zone includes the margin. + + Margin is double-buffered, see wl_surface.commit. + + + + + + + + + + Set to 1 to request that the seat send keyboard events to this layer + surface. For layers below the shell surface layer, the seat will use + normal focus semantics. For layers above the shell surface layers, the + seat will always give exclusive keyboard focus to the top-most layer + which has keyboard interactivity set to true. + + Layer surfaces receive pointer, touch, and tablet events normally. If + you do not want to receive them, set the input region on your surface + to an empty region. + + Events is double-buffered, see wl_surface.commit. + + + + + + + This assigns an xdg_popup's parent to this layer_surface. This popup + should have been created via xdg_surface::get_popup with the parent set + to NULL, and this request must be invoked before committing the popup's + initial state. + + See the documentation of xdg_popup for more details about what an + xdg_popup is and how it is used. + + + + + + + When a configure event is received, if a client commits the + surface in response to the configure event, then the client + must make an ack_configure request sometime before the commit + request, passing along the serial of the configure event. + + If the client receives multiple configure events before it + can respond to one, it only has to ack the last configure event. + + A client is not required to commit immediately after sending + an ack_configure request - it may even ack_configure several times + before its next surface commit. + + A client may send multiple ack_configure requests before committing, but + only the last request sent before a commit indicates which configure + event the client really is responding to. + + + + + + + This request destroys the layer surface. + + + + + + The configure event asks the client to resize its surface. + + Clients should arrange their surface for the new states, and then send + an ack_configure request with the serial sent in this configure event at + some point before committing the new surface. + + The client is free to dismiss all but the last configure event it + received. + + The width and height arguments specify the size of the window in + surface-local coordinates. + + The size is a hint, in the sense that the client is free to ignore it if + it doesn't resize, pick a smaller size (to satisfy aspect ratio or + resize in steps of NxM pixels). If the client picks a smaller size and + is anchored to two opposite anchors (e.g. 'top' and 'bottom'), the + surface will be centered on this axis. + + If the width or height arguments are zero, it means the client should + decide its own window dimension. + + + + + + + + + The closed event is sent by the compositor when the surface will no + longer be shown. The output may have been destroyed or the user may + have asked for it to be removed. Further changes to the surface will be + ignored. The client should destroy the resource after receiving this + event, and create a new surface if they so choose. + + + + + + + + + + + + + + + + + + + + + Change the layer that the surface is rendered on. + + Layer is double-buffered, see wl_surface.commit. + + + + +