Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ gudev_req = '>= 232'

# wayland version requirements
wayland_server_req = '>= 1.20'
wayland_protocols_req = '>= 1.36'
wayland_protocols_req = '>= 1.38'

# native backend version requirements
libinput_req = '>= 1.19.0'
Expand Down
3 changes: 3 additions & 0 deletions src/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -559,6 +559,8 @@ if have_wayland
'wayland/meta-wayland-surface.c',
'wayland/meta-wayland-surface.h',
'wayland/meta-wayland-tablet.c',
'wayland/meta-wayland-system-bell.c',
'wayland/meta-wayland-system-bell.h',
'wayland/meta-wayland-tablet-cursor-surface.c',
'wayland/meta-wayland-tablet-cursor-surface.h',
'wayland/meta-wayland-tablet.h',
Expand Down Expand Up @@ -812,6 +814,7 @@ if have_wayland
['pointer-gestures', 'unstable', 'v1', ],
['primary-selection', 'unstable', 'v1', ],
['relative-pointer', 'unstable', 'v1', ],
['xdg-system-bell', 'staging', 'v1', ],
['tablet', 'unstable', 'v2', ],
['text-input', 'unstable', 'v3', ],
['viewporter', 'stable', ],
Expand Down
96 changes: 96 additions & 0 deletions src/wayland/meta-wayland-system-bell.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
/*
* Copyright (C) 2024 Red Hat Inc.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
*
*/

#include "compositor/compositor-private.h"
#include "config.h"

#include "wayland/meta-wayland-system-bell.h"

#include "core/bell.h"
#include "wayland/meta-wayland-private.h"
#include "wayland/meta-wayland-surface.h"
#include "wayland/meta-wayland-versions.h"
#include "wayland/meta-wayland.h"

#include "xdg-system-bell-v1-server-protocol.h"

static void
system_bell_destroy (struct wl_client *client,
struct wl_resource *resource)
{
wl_resource_destroy (resource);
}

static MetaWindow *
find_window_from_resource (struct wl_resource *surface_resource)
{
MetaWaylandSurface *surface;

surface = wl_resource_get_user_data (surface_resource);
if (!surface)
return NULL;

return meta_wayland_surface_get_window (surface);
}

static void
system_bell_ring (struct wl_client *client,
struct wl_resource *resource,
struct wl_resource *surface_resource)
{
MetaDisplay *display = meta_get_display ();

if (surface_resource)
meta_bell_notify (display, find_window_from_resource (surface_resource));
else
meta_bell_notify (display, NULL);
}

static const struct xdg_system_bell_v1_interface system_bell_implementation =
{
system_bell_destroy,
system_bell_ring,
};

static void
system_bell_bind (struct wl_client *client,
void *user_data,
uint32_t version,
uint32_t id)
{
MetaWaylandCompositor *compositor = user_data;
struct wl_resource *resource;

resource = wl_resource_create (client,
&xdg_system_bell_v1_interface,
version, id);
wl_resource_set_implementation (resource,
&system_bell_implementation,
compositor, NULL);
}

void
meta_wayland_init_system_bell (MetaWaylandCompositor *compositor)
{
if (wl_global_create (compositor->wayland_display,
&xdg_system_bell_v1_interface,
META_WP_SYSTEM_BELL_V1_VERSION,
compositor,
system_bell_bind) == NULL)
g_error ("Failed to create xdg_system_bell_v1 global");
}
23 changes: 23 additions & 0 deletions src/wayland/meta-wayland-system-bell.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
/*
* Copyright (C) 2024 Red Hat Inc.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
*
*/

#pragma once

#include "wayland/meta-wayland-types.h"

void meta_wayland_init_system_bell (MetaWaylandCompositor *compositor);
1 change: 1 addition & 0 deletions src/wayland/meta-wayland-versions.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,5 +59,6 @@
#define META_XDG_DIALOG_VERSION 1
#define META_ZWP_PRIMARY_SELECTION_V1_VERSION 1
#define META_XDG_TOPLEVEL_TAG_V1_VERSION 1
#define META_WP_SYSTEM_BELL_V1_VERSION 1

#endif
2 changes: 2 additions & 0 deletions src/wayland/meta-wayland.c
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@
#include "wayland/meta-wayland-region.h"
#include "wayland/meta-wayland-seat.h"
#include "wayland/meta-wayland-subsurface.h"
#include "wayland/meta-wayland-system-bell.h"
#include "wayland/meta-wayland-tablet-manager.h"
#include "wayland/meta-wayland-xdg-dialog.h"
#include "wayland/meta-wayland-xdg-foreign.h"
Expand Down Expand Up @@ -447,6 +448,7 @@ meta_wayland_compositor_setup (MetaWaylandCompositor *wayland_compositor)
meta_wayland_idle_inhibit_init (compositor);
meta_wayland_init_xdg_wm_dialog (compositor);
meta_wayland_xdg_toplevel_tag_init (compositor);
meta_wayland_init_system_bell (compositor);

/* Xwayland specific protocol, needs to be filtered out for all other clients */
if (meta_xwayland_grab_keyboard_init (compositor))
Expand Down
Loading