mirror of
https://github.com/swaywm/sway.git
synced 2024-11-24 08:51:27 +00:00
swaybar: add SNI Title, Category, Id support
This commit is contained in:
parent
0626e975fa
commit
5820299278
|
@ -52,6 +52,9 @@ struct swaybar_sni {
|
||||||
bool item_is_menu;
|
bool item_is_menu;
|
||||||
char *menu;
|
char *menu;
|
||||||
struct swaybar_sni_tool_tip *tool_tip;
|
struct swaybar_sni_tool_tip *tool_tip;
|
||||||
|
char *title;
|
||||||
|
char *category;
|
||||||
|
char *id;
|
||||||
char *icon_theme_path; // non-standard KDE property
|
char *icon_theme_path; // non-standard KDE property
|
||||||
|
|
||||||
struct wl_list slots; // swaybar_sni_slot::link
|
struct wl_list slots; // swaybar_sni_slot::link
|
||||||
|
|
|
@ -306,6 +306,29 @@ static int handle_new_status(sd_bus_message *msg, void *data, sd_bus_error *erro
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int handle_new_title(sd_bus_message *msg, void *data, sd_bus_error *error) {
|
||||||
|
// NOTE(nms): unsure if sni_check_msg_sender is valid (I assume this is to check if title property is sent with the
|
||||||
|
// NewTitle message)
|
||||||
|
struct swaybar_sni *sni = data;
|
||||||
|
int ret = sni_check_msg_sender(sni, msg, "title");
|
||||||
|
if (ret == 1) {
|
||||||
|
char *title;
|
||||||
|
int r = sd_bus_message_read(msg, "s", &title);
|
||||||
|
if (r < 0) {
|
||||||
|
sway_log(SWAY_ERROR, "%s new title error: %s", sni->watcher_id, strerror(-ret));
|
||||||
|
ret = r;
|
||||||
|
} else {
|
||||||
|
free(sni->title);
|
||||||
|
sni->title = strdup(title);
|
||||||
|
sway_log(SWAY_DEBUG, "%s has new title = '%s'", sni->watcher_id, title);
|
||||||
|
set_sni_dirty(sni);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
sni_get_property_async(sni, "Title", "s", &sni->title);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static void sni_match_signal_async(struct swaybar_sni *sni, char *signal,
|
static void sni_match_signal_async(struct swaybar_sni *sni, char *signal,
|
||||||
sd_bus_message_handler_t callback) {
|
sd_bus_message_handler_t callback) {
|
||||||
struct swaybar_sni_slot *slot = calloc(1, sizeof(struct swaybar_sni_slot));
|
struct swaybar_sni_slot *slot = calloc(1, sizeof(struct swaybar_sni_slot));
|
||||||
|
@ -340,8 +363,7 @@ struct swaybar_sni *create_sni(char *id, struct swaybar_tray *tray) {
|
||||||
sni_get_property_async(sni, "IconThemePath", "s", &sni->icon_theme_path);
|
sni_get_property_async(sni, "IconThemePath", "s", &sni->icon_theme_path);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ignored: Category, Id, Title, WindowId, OverlayIconName,
|
// Ignored: WindowId, OverlayIconName, OverlayIconPixmap, AttentionMovieName
|
||||||
// OverlayIconPixmap, AttentionMovieName
|
|
||||||
sni_get_property_async(sni, "Status", "s", &sni->status);
|
sni_get_property_async(sni, "Status", "s", &sni->status);
|
||||||
sni_get_property_async(sni, "IconName", "s", &sni->icon_name);
|
sni_get_property_async(sni, "IconName", "s", &sni->icon_name);
|
||||||
sni_get_property_async(sni, "IconPixmap", NULL, &sni->icon_pixmap);
|
sni_get_property_async(sni, "IconPixmap", NULL, &sni->icon_pixmap);
|
||||||
|
@ -349,11 +371,15 @@ struct swaybar_sni *create_sni(char *id, struct swaybar_tray *tray) {
|
||||||
sni_get_property_async(sni, "AttentionIconPixmap", NULL, &sni->attention_icon_pixmap);
|
sni_get_property_async(sni, "AttentionIconPixmap", NULL, &sni->attention_icon_pixmap);
|
||||||
sni_get_property_async(sni, "ItemIsMenu", "b", &sni->item_is_menu);
|
sni_get_property_async(sni, "ItemIsMenu", "b", &sni->item_is_menu);
|
||||||
sni_get_property_async(sni, "Menu", "o", &sni->menu);
|
sni_get_property_async(sni, "Menu", "o", &sni->menu);
|
||||||
|
sni_get_property_async(sni, "Title", "s", &sni->title);
|
||||||
sni_get_property_async(sni, "ToolTip", NULL, &sni->tool_tip);
|
sni_get_property_async(sni, "ToolTip", NULL, &sni->tool_tip);
|
||||||
|
sni_get_property_async(sni, "Category", "s", &sni->category);
|
||||||
|
sni_get_property_async(sni, "Id", "s", &sni->id);
|
||||||
|
|
||||||
sni_match_signal_async(sni, "NewIcon", handle_new_icon);
|
sni_match_signal_async(sni, "NewIcon", handle_new_icon);
|
||||||
sni_match_signal_async(sni, "NewAttentionIcon", handle_new_attention_icon);
|
sni_match_signal_async(sni, "NewAttentionIcon", handle_new_attention_icon);
|
||||||
sni_match_signal_async(sni, "NewStatus", handle_new_status);
|
sni_match_signal_async(sni, "NewStatus", handle_new_status);
|
||||||
|
sni_match_signal_async(sni, "NewTitle", handle_new_title);
|
||||||
//sni_match_signal_async(sni, "NewToolTip", handle_new_tool_tip);
|
//sni_match_signal_async(sni, "NewToolTip", handle_new_tool_tip);
|
||||||
|
|
||||||
return sni;
|
return sni;
|
||||||
|
@ -374,7 +400,10 @@ void destroy_sni(struct swaybar_sni *sni) {
|
||||||
free(sni->attention_icon_name);
|
free(sni->attention_icon_name);
|
||||||
list_free_items_and_destroy(sni->attention_icon_pixmap);
|
list_free_items_and_destroy(sni->attention_icon_pixmap);
|
||||||
free(sni->menu);
|
free(sni->menu);
|
||||||
|
free(sni->title);
|
||||||
free(sni->tool_tip);
|
free(sni->tool_tip);
|
||||||
|
free(sni->category);
|
||||||
|
free(sni->id);
|
||||||
free(sni->icon_theme_path);
|
free(sni->icon_theme_path);
|
||||||
|
|
||||||
struct swaybar_sni_slot *slot, *slot_tmp;
|
struct swaybar_sni_slot *slot, *slot_tmp;
|
||||||
|
|
Loading…
Reference in a new issue