mirror of
https://github.com/labwc/labwc.git
synced 2025-10-31 22:25:34 -04:00
osd: support app icons in window switcher
Example configuration:
<windowSwitcher>
<fields>
<field content="icon" width="5%" />
<field content="title" width="95%" />
</fields>
</windowSwitcher>
This commit is contained in:
parent
84ba60f453
commit
4ef881bb3e
4 changed files with 26 additions and 9 deletions
|
|
@ -303,6 +303,8 @@ this is for compatibility with Openbox.
|
||||||
- *trimmed_identifier* Show trimmed identifier. Trimming removes
|
- *trimmed_identifier* Show trimmed identifier. Trimming removes
|
||||||
the first two nodes of 'org.' strings.
|
the first two nodes of 'org.' strings.
|
||||||
|
|
||||||
|
- *icon* Show application icon
|
||||||
|
|
||||||
- *desktop_entry_name* Show application name from freedesktop.org
|
- *desktop_entry_name* Show application name from freedesktop.org
|
||||||
desktop entry/file. Falls back to trimmed identifier
|
desktop entry/file. Falls back to trimmed identifier
|
||||||
(trimmed_identifier).
|
(trimmed_identifier).
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ enum window_switcher_field_content {
|
||||||
LAB_FIELD_TYPE_SHORT,
|
LAB_FIELD_TYPE_SHORT,
|
||||||
LAB_FIELD_IDENTIFIER,
|
LAB_FIELD_IDENTIFIER,
|
||||||
LAB_FIELD_TRIMMED_IDENTIFIER,
|
LAB_FIELD_TRIMMED_IDENTIFIER,
|
||||||
|
LAB_FIELD_ICON,
|
||||||
LAB_FIELD_DESKTOP_ENTRY_NAME,
|
LAB_FIELD_DESKTOP_ENTRY_NAME,
|
||||||
LAB_FIELD_TITLE,
|
LAB_FIELD_TITLE,
|
||||||
LAB_FIELD_TITLE_SHORT,
|
LAB_FIELD_TITLE_SHORT,
|
||||||
|
|
|
||||||
|
|
@ -319,6 +319,8 @@ osd_field_arg_from_xml_node(struct window_switcher_field *field,
|
||||||
field->content = LAB_FIELD_IDENTIFIER;
|
field->content = LAB_FIELD_IDENTIFIER;
|
||||||
} else if (!strcmp(content, "trimmed_identifier")) {
|
} else if (!strcmp(content, "trimmed_identifier")) {
|
||||||
field->content = LAB_FIELD_TRIMMED_IDENTIFIER;
|
field->content = LAB_FIELD_TRIMMED_IDENTIFIER;
|
||||||
|
} else if (!strcmp(content, "icon")) {
|
||||||
|
field->content = LAB_FIELD_ICON;
|
||||||
} else if (!strcmp(content, "desktop_entry_name")) {
|
} else if (!strcmp(content, "desktop_entry_name")) {
|
||||||
field->content = LAB_FIELD_DESKTOP_ENTRY_NAME;
|
field->content = LAB_FIELD_DESKTOP_ENTRY_NAME;
|
||||||
} else if (!strcmp(content, "title")) {
|
} else if (!strcmp(content, "title")) {
|
||||||
|
|
|
||||||
30
src/osd.c
30
src/osd.c
|
|
@ -6,8 +6,8 @@
|
||||||
#include "common/array.h"
|
#include "common/array.h"
|
||||||
#include "common/buf.h"
|
#include "common/buf.h"
|
||||||
#include "common/font.h"
|
#include "common/font.h"
|
||||||
#include "common/macros.h"
|
|
||||||
#include "common/scaled-font-buffer.h"
|
#include "common/scaled-font-buffer.h"
|
||||||
|
#include "common/scaled-icon-buffer.h"
|
||||||
#include "common/scaled-rect-buffer.h"
|
#include "common/scaled-rect-buffer.h"
|
||||||
#include "common/scene-helpers.h"
|
#include "common/scene-helpers.h"
|
||||||
#include "config/rcxml.h"
|
#include "config/rcxml.h"
|
||||||
|
|
@ -350,17 +350,29 @@ create_osd_scene(struct output *output, struct wl_array *views)
|
||||||
int field_width = (available_width - (nr_fields + 1)
|
int field_width = (available_width - (nr_fields + 1)
|
||||||
* theme->osd_window_switcher_item_padding_x)
|
* theme->osd_window_switcher_item_padding_x)
|
||||||
* field->width / 100.0;
|
* field->width / 100.0;
|
||||||
|
struct wlr_scene_node *node = NULL;
|
||||||
|
|
||||||
buf_clear(&buf);
|
if (field->content == LAB_FIELD_ICON) {
|
||||||
osd_field_get_content(field, &buf, *view);
|
int icon_size = font_height(&rc.font_osd);
|
||||||
|
struct scaled_icon_buffer *icon_buffer =
|
||||||
|
scaled_icon_buffer_create(item_root,
|
||||||
|
server, icon_size, icon_size);
|
||||||
|
scaled_icon_buffer_set_app_id(icon_buffer,
|
||||||
|
view_get_string_prop(*view, "app_id"));
|
||||||
|
node = &icon_buffer->scene_buffer->node;
|
||||||
|
} else {
|
||||||
|
buf_clear(&buf);
|
||||||
|
osd_field_get_content(field, &buf, *view);
|
||||||
|
|
||||||
struct scaled_font_buffer *font_buffer =
|
struct scaled_font_buffer *font_buffer =
|
||||||
scaled_font_buffer_create(item_root);
|
scaled_font_buffer_create(item_root);
|
||||||
scaled_font_buffer_update(font_buffer, buf.data, field_width,
|
scaled_font_buffer_update(font_buffer, buf.data, field_width,
|
||||||
&rc.font_osd, text_color, bg_color);
|
&rc.font_osd, text_color, bg_color);
|
||||||
|
node = &font_buffer->scene_buffer->node;
|
||||||
|
}
|
||||||
|
|
||||||
wlr_scene_node_set_position(&font_buffer->scene_buffer->node,
|
wlr_scene_node_set_position(node, x,
|
||||||
x, y + theme->osd_window_switcher_item_padding_y
|
y + theme->osd_window_switcher_item_padding_y
|
||||||
+ theme->osd_window_switcher_item_active_border_width);
|
+ theme->osd_window_switcher_item_active_border_width);
|
||||||
x += field_width + theme->osd_window_switcher_item_padding_x;
|
x += field_width + theme->osd_window_switcher_item_padding_x;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue