Merge pull request #1700 from mh21/tray-icon-size-cleanup

Tray icon size cleanup.
This commit is contained in:
Michael Stapelberg 2015-05-12 22:44:08 +02:00
commit 79e7e69939
1 changed files with 18 additions and 11 deletions

View File

@ -60,6 +60,9 @@ xcb_connection_t *conn;
/* The font we'll use */ /* The font we'll use */
static i3Font font; static i3Font font;
/* Icon size (based on font size) */
int icon_size;
/* Overall height of the bar (based on font size) */ /* Overall height of the bar (based on font size) */
int bar_height; int bar_height;
@ -122,6 +125,9 @@ static const int sb_hoff_px = 4;
/* Additional offset between the tray and the statusline, if the tray is not empty */ /* Additional offset between the tray and the statusline, if the tray is not empty */
static const int tray_loff_px = 2; static const int tray_loff_px = 2;
/* Padding around the tray icons */
static const int tray_spacing_px = 2;
/* Vertical offset between the bar and a separator */ /* Vertical offset between the bar and a separator */
static const int sep_voff_px = 4; static const int sep_voff_px = 4;
@ -148,7 +154,7 @@ int get_tray_width(struct tc_head *trayclients) {
TAILQ_FOREACH_REVERSE(trayclient, trayclients, tc_head, tailq) { TAILQ_FOREACH_REVERSE(trayclient, trayclients, tc_head, tailq) {
if (!trayclient->mapped) if (!trayclient->mapped)
continue; continue;
tray_width += font.height + logical_px(2); tray_width += icon_size + logical_px(tray_spacing_px);
} }
if (tray_width > 0) if (tray_width > 0)
tray_width += logical_px(tray_loff_px); tray_width += logical_px(tray_loff_px);
@ -591,8 +597,8 @@ static void configure_trayclients(void) {
clients++; clients++;
DLOG("Configuring tray window %08x to x=%d\n", DLOG("Configuring tray window %08x to x=%d\n",
trayclient->win, output->rect.w - (clients * (font.height + logical_px(2)))); trayclient->win, output->rect.w - (clients * (icon_size + logical_px(tray_spacing_px))));
uint32_t x = output->rect.w - (clients * (font.height + logical_px(2))); uint32_t x = output->rect.w - (clients * (icon_size + logical_px(tray_spacing_px)));
xcb_configure_window(xcb_connection, xcb_configure_window(xcb_connection,
trayclient->win, trayclient->win,
XCB_CONFIG_WINDOW_X, XCB_CONFIG_WINDOW_X,
@ -702,16 +708,16 @@ static void handle_client_message(xcb_client_message_event_t *event) {
xcb_reparent_window(xcb_connection, xcb_reparent_window(xcb_connection,
client, client,
output->bar, output->bar,
output->rect.w - font.height - 2, output->rect.w - icon_size - logical_px(tray_spacing_px),
2); logical_px(tray_spacing_px));
/* We reconfigure the window to use a reasonable size. The systray /* We reconfigure the window to use a reasonable size. The systray
* specification explicitly says: * specification explicitly says:
* Tray icons may be assigned any size by the system tray, and * Tray icons may be assigned any size by the system tray, and
* should do their best to cope with any size effectively * should do their best to cope with any size effectively
*/ */
mask = XCB_CONFIG_WINDOW_WIDTH | XCB_CONFIG_WINDOW_HEIGHT; mask = XCB_CONFIG_WINDOW_WIDTH | XCB_CONFIG_WINDOW_HEIGHT;
values[0] = font.height; values[0] = icon_size;
values[1] = font.height; values[1] = icon_size;
xcb_configure_window(xcb_connection, xcb_configure_window(xcb_connection,
client, client,
mask, mask,
@ -941,10 +947,10 @@ static void handle_configure_request(xcb_configure_request_event_t *event) {
continue; continue;
xcb_rectangle_t rect; xcb_rectangle_t rect;
rect.x = output->rect.w - (clients * (font.height + 2)); rect.x = output->rect.w - (clients * (icon_size + logical_px(tray_spacing_px)));
rect.y = 2; rect.y = logical_px(tray_spacing_px);
rect.width = font.height; rect.width = icon_size;
rect.height = font.height; rect.height = icon_size;
DLOG("This is a tray window. x = %d\n", rect.x); DLOG("This is a tray window. x = %d\n", rect.x);
fake_configure_notify(xcb_connection, rect, event->window, 0); fake_configure_notify(xcb_connection, rect, event->window, 0);
@ -1215,6 +1221,7 @@ void init_xcb_late(char *fontname) {
set_font(&font); set_font(&font);
DLOG("Calculated font height: %d\n", font.height); DLOG("Calculated font height: %d\n", font.height);
bar_height = font.height + 2 * logical_px(ws_voff_px); bar_height = font.height + 2 * logical_px(ws_voff_px);
icon_size = bar_height - 2 * logical_px(tray_spacing_px);
if (config.separator_symbol) if (config.separator_symbol)
separator_symbol_width = predict_text_width(config.separator_symbol); separator_symbol_width = predict_text_width(config.separator_symbol);