mirror of
https://github.com/labwc/labwc.git
synced 2025-11-03 09:01:51 -05:00
Support xdg-toplevel-icon protocol
This patch also changes the semantics of scaled_icon_buffer: rather than calling scaled_icon_buffer_set_app_id() every time an app_id is set, we can now call scaled_icon_buffer_set_view() just once so that multiple scaled_icon_buffers bound to a window are automatically updated when an app_id is set or new icon is set via xdg-toplevel-icon-v1.
This commit is contained in:
parent
649773b4f8
commit
fb077c0095
12 changed files with 247 additions and 57 deletions
43
src/xdg.c
43
src/xdg.c
|
|
@ -2,7 +2,9 @@
|
|||
|
||||
#include <assert.h>
|
||||
#include <wlr/types/wlr_fractional_scale_v1.h>
|
||||
|
||||
#include <wlr/types/wlr_xdg_toplevel_icon_v1.h>
|
||||
#include "buffer.h"
|
||||
#include "common/array.h"
|
||||
#include "common/macros.h"
|
||||
#include "common/mem.h"
|
||||
#include "decorations.h"
|
||||
|
|
@ -999,6 +1001,38 @@ xdg_toplevel_new(struct wl_listener *listener, void *data)
|
|||
wl_list_insert(&server->views, &view->link);
|
||||
}
|
||||
|
||||
static void
|
||||
handle_xdg_toplevel_icon_set_icon(struct wl_listener *listener, void *data)
|
||||
{
|
||||
struct wlr_xdg_toplevel_icon_manager_v1_set_icon_event *event = data;
|
||||
|
||||
struct server *server =
|
||||
wl_container_of(listener, server, xdg_toplevel_icon_set_icon);
|
||||
struct wlr_xdg_surface *xdg_surface = event->toplevel->base;
|
||||
struct view *view = xdg_surface->data;
|
||||
assert(view);
|
||||
|
||||
char *icon_name = NULL;
|
||||
struct wl_array buffers;
|
||||
wl_array_init(&buffers);
|
||||
|
||||
if (event->icon) {
|
||||
icon_name = event->icon->name;
|
||||
|
||||
struct wlr_xdg_toplevel_icon_v1_buffer *icon_buffer;
|
||||
wl_list_for_each(icon_buffer, &event->icon->buffers, link) {
|
||||
struct lab_data_buffer *buffer =
|
||||
buffer_create_from_wlr_buffer(icon_buffer->buffer);
|
||||
if (buffer) {
|
||||
array_add(&buffers, buffer);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
view_set_icon(view, icon_name, &buffers);
|
||||
wl_array_release(&buffers);
|
||||
}
|
||||
|
||||
void
|
||||
xdg_shell_init(struct server *server)
|
||||
{
|
||||
|
|
@ -1025,6 +1059,12 @@ xdg_shell_init(struct server *server)
|
|||
server->xdg_activation_new_token.notify = handle_xdg_activation_new_token;
|
||||
wl_signal_add(&server->xdg_activation->events.new_token,
|
||||
&server->xdg_activation_new_token);
|
||||
|
||||
server->xdg_toplevel_icon_manager = wlr_xdg_toplevel_icon_manager_v1_create(
|
||||
server->wl_display, 1);
|
||||
server->xdg_toplevel_icon_set_icon.notify = handle_xdg_toplevel_icon_set_icon;
|
||||
wl_signal_add(&server->xdg_toplevel_icon_manager->events.set_icon,
|
||||
&server->xdg_toplevel_icon_set_icon);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -1033,4 +1073,5 @@ xdg_shell_finish(struct server *server)
|
|||
wl_list_remove(&server->new_xdg_toplevel.link);
|
||||
wl_list_remove(&server->xdg_activation_request.link);
|
||||
wl_list_remove(&server->xdg_activation_new_token.link);
|
||||
wl_list_remove(&server->xdg_toplevel_icon_set_icon.link);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue