]> git.sur5r.net Git - i3/i3/commitdiff
only LOG() the DPI when it changes, DLOG() it otherwise (Thanks lkraav)
authorMichael Stapelberg <michael@stapelberg.de>
Tue, 24 Dec 2013 09:35:56 +0000 (10:35 +0100)
committerMichael Stapelberg <michael@stapelberg.de>
Tue, 24 Dec 2013 09:35:56 +0000 (10:35 +0100)
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
i3-input/main.c
i3-nagbar/main.c
i3bar/include/util.h
i3bar/src/main.c
include/libi3.h
include/log.h
libi3/font.c

index 880b80ed8b4b84124c41325b9e733cd85856d57a..09b94841d28430db851e25bf316d94b85de4cad1 100644 (file)
@@ -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
index da95c903fae825cf762d7633bcc7dd0bac2fa555..1c0d68568401b74bbde622a2c05d4f7c550c1848 100644 (file)
@@ -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
index 952270e78e51b5502a819ba9627b0c6faab1d620..791da97bb5b19ef016e1b63ba90f32b2357cade3 100644 (file)
@@ -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),
index 6ae97815384049ec87d95ec94fd6788c19b648d4..468eff3eec59c955107629535e9a70f4558ed95e 100644 (file)
@@ -48,6 +48,9 @@
     } \
 } while (0)
 
+#if defined(DLOG)
+#undef DLOG
+#endif
 /* Use cool logging-macros */
 #define DLOG(fmt, ...) do { \
     if (config.verbose) { \
index c62f7b3c96d74c8a1d0a802caf4ac9aeb455fcd5..9ae69e3c7d4efc12804d08e3eb2c503241851b9f 100644 (file)
@@ -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 ~
  *
index 18c64690fef407b643f96f17c6120a55ce2ed888..8c580da8388da1a97533e02e4108591349f82df6 100644 (file)
@@ -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
index c8e3c8ef7dd5a26f1bc8faa60406e34bf832c5dc..ef4dbd3ce08f618a98965a4e01d6a5f5cd3df205 100644 (file)
@@ -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__)
index 4c064f2bdc038d0c5e99053718eb72c9ab4c559a..e1e5b82667f3c67be5905659cf37d19ea8cc957d 100644 (file)
@@ -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);