From 0883dfbe14628430caaeefdb00e282a008d30d76 Mon Sep 17 00:00:00 2001 From: Michael Stapelberg Date: Tue, 24 Dec 2013 10:35:56 +0100 Subject: [PATCH] only LOG() the DPI when it changes, DLOG() it otherwise (Thanks lkraav) MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit This avoids flooding stdout every time some text (e.g. a window decoration) is drawn, yet leaves the message in place when it’s actually relevant (upon DPI changes). fixes #1115 --- i3-config-wizard/main.c | 5 ++++- i3-input/main.c | 5 ++++- i3-nagbar/main.c | 5 ++++- i3bar/include/util.h | 3 +++ i3bar/src/main.c | 5 ++++- include/libi3.h | 11 +++++++++-- include/log.h | 3 +++ libi3/font.c | 11 ++++++++++- 8 files changed, 41 insertions(+), 7 deletions(-) diff --git a/i3-config-wizard/main.c b/i3-config-wizard/main.c index 880b80ed..09b94841 100644 --- a/i3-config-wizard/main.c +++ b/i3-config-wizard/main.c @@ -420,7 +420,7 @@ static char *rewrite_binding(const char *input) { /* - * Having verboselog() and errorlog() is necessary when using libi3. + * Having verboselog(), errorlog() and debuglog() is necessary when using libi3. * */ void verboselog(char *fmt, ...) { @@ -439,6 +439,9 @@ void errorlog(char *fmt, ...) { va_end(args); } +void debuglog(char *fmt, ...) { +} + /* * This function resolves ~ in pathnames. * It may resolve wildcards in the first part of the path, but if no match diff --git a/i3-input/main.c b/i3-input/main.c index da95c903..1c0d6856 100644 --- a/i3-input/main.c +++ b/i3-input/main.c @@ -57,7 +57,7 @@ xcb_screen_t *root_screen; static xcb_get_input_focus_cookie_t focus_cookie; /* - * Having verboselog() and errorlog() is necessary when using libi3. + * Having verboselog(), errorlog() and debuglog() is necessary when using libi3. * */ void verboselog(char *fmt, ...) { @@ -76,6 +76,9 @@ void errorlog(char *fmt, ...) { va_end(args); } +void debuglog(char *fmt, ...) { +} + /* * Restores the X11 input focus to whereever it was before. * This is necessary because i3-input’s window has override_redirect=1 diff --git a/i3-nagbar/main.c b/i3-nagbar/main.c index 952270e7..791da97b 100644 --- a/i3-nagbar/main.c +++ b/i3-nagbar/main.c @@ -61,7 +61,7 @@ xcb_connection_t *conn; xcb_screen_t *root_screen; /* - * Having verboselog() and errorlog() is necessary when using libi3. + * Having verboselog(), errorlog() and debuglog() is necessary when using libi3. * */ void verboselog(char *fmt, ...) { @@ -80,6 +80,9 @@ void errorlog(char *fmt, ...) { va_end(args); } +void debuglog(char *fmt, ...) { +} + /* * Starts the given application by passing it through a shell. We use double fork * to avoid zombie processes. As the started application’s parent exits (immediately), diff --git a/i3bar/include/util.h b/i3bar/include/util.h index 6ae97815..468eff3e 100644 --- a/i3bar/include/util.h +++ b/i3bar/include/util.h @@ -48,6 +48,9 @@ } \ } while (0) +#if defined(DLOG) +#undef DLOG +#endif /* Use cool logging-macros */ #define DLOG(fmt, ...) do { \ if (config.verbose) { \ diff --git a/i3bar/src/main.c b/i3bar/src/main.c index c62f7b3c..9ae69e3c 100644 --- a/i3bar/src/main.c +++ b/i3bar/src/main.c @@ -18,7 +18,7 @@ #include "common.h" /* - * Having verboselog() and errorlog() is necessary when using libi3. + * Having verboselog(), errorlog() and debuglog() is necessary when using libi3. * */ void verboselog(char *fmt, ...) { @@ -37,6 +37,9 @@ void errorlog(char *fmt, ...) { va_end(args); } +void debuglog(char *fmt, ...) { +} + /* * Glob path, i.e. expand ~ * diff --git a/include/libi3.h b/include/libi3.h index 18c64690..8c580da8 100644 --- a/include/libi3.h +++ b/include/libi3.h @@ -72,13 +72,20 @@ struct Font { /* Since this file also gets included by utilities which don’t use the i3 log * infrastructure, we define a fallback. */ #if !defined(LOG) -void verboselog(char *fmt, ...); +void verboselog(char *fmt, ...) + __attribute__ ((format (printf, 1, 2))); #define LOG(fmt, ...) verboselog("[libi3] " __FILE__ " " fmt, ##__VA_ARGS__) #endif #if !defined(ELOG) -void errorlog(char *fmt, ...); +void errorlog(char *fmt, ...) + __attribute__ ((format (printf, 1, 2))); #define ELOG(fmt, ...) errorlog("[libi3] ERROR: " fmt, ##__VA_ARGS__) #endif +#if !defined(DLOG) +void debuglog(char *fmt, ...) + __attribute__ ((format (printf, 1, 2))); +#define DLOG(fmt, ...) debuglog("%s:%s:%d - " fmt, I3__FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__) +#endif /** * Try to get the contents of the given atom (for example I3_SOCKET_PATH) from diff --git a/include/log.h b/include/log.h index c8e3c8ef..ef4dbd3c 100644 --- a/include/log.h +++ b/include/log.h @@ -21,6 +21,9 @@ #if defined(ELOG) #undef ELOG #endif +#if defined(DLOG) +#undef DLOG +#endif /** ##__VA_ARGS__ means: leave out __VA_ARGS__ completely if it is empty, that is, delete the preceding comma */ #define LOG(fmt, ...) verboselog(fmt, ##__VA_ARGS__) diff --git a/libi3/font.c b/libi3/font.c index 4c064f2b..e1e5b826 100644 --- a/libi3/font.c +++ b/libi3/font.c @@ -30,6 +30,10 @@ static double pango_font_red; static double pango_font_green; static double pango_font_blue; +/* Necessary to track whether the dpi changes and trigger a LOG() message, + * which is more easily visible to users. */ +static double logged_dpi = 0.0; + static PangoLayout *create_layout_with_dpi(cairo_t *cr) { PangoLayout *layout; PangoContext *context; @@ -37,7 +41,12 @@ static PangoLayout *create_layout_with_dpi(cairo_t *cr) { context = pango_cairo_create_context(cr); const double dpi = (double)root_screen->height_in_pixels * 25.4 / (double)root_screen->height_in_millimeters; - LOG("X11 root window dictates %f DPI\n", dpi); + if (logged_dpi != dpi) { + logged_dpi = dpi; + LOG("X11 root window dictates %f DPI\n", dpi); + } else { + DLOG("X11 root window dictates %f DPI\n", dpi); + } pango_cairo_context_set_resolution(context, dpi); layout = pango_layout_new(context); g_object_unref(context); -- 2.39.5