diff --git a/src/core/util.c b/src/core/util.c index 681529b16..0c9a31d82 100644 --- a/src/core/util.c +++ b/src/core/util.c @@ -285,6 +285,18 @@ topic_name (MetaDebugTopic topic) static int sync_count = 0; +gboolean +meta_is_topic_enabled (MetaDebugTopic topic) +{ + if (verbose_topics == 0) + return FALSE; + + if (topic == META_DEBUG_VERBOSE && verbose_topics != META_DEBUG_VERBOSE) + return FALSE; + + return !!(verbose_topics & topic); +} + static void meta_topic_real_valist (MetaDebugTopic topic, const char *format, @@ -295,9 +307,7 @@ meta_topic_real_valist (MetaDebugTopic topic, g_return_if_fail (format != NULL); - if (verbose_topics == 0 - || (topic == META_DEBUG_VERBOSE && verbose_topics != META_DEBUG_VERBOSE) - || (!(verbose_topics & topic))) + if (!meta_is_topic_enabled (topic)) return; str = g_strdup_vprintf (format, args); diff --git a/src/meta/util.h b/src/meta/util.h index 6d06ea572..5fddf0873 100644 --- a/src/meta/util.h +++ b/src/meta/util.h @@ -112,6 +112,9 @@ typedef enum META_DEBUG_PAINT_OPAQUE_REGION = 1 << 0, } MetaDebugPaintFlag; +META_EXPORT +gboolean meta_is_topic_enabled (MetaDebugTopic topic); + META_EXPORT void meta_topic_real (MetaDebugTopic topic, const char *format, @@ -162,8 +165,21 @@ GPid meta_show_dialog (const char *type, /* To disable verbose mode, we make these functions into no-ops */ #ifdef WITH_VERBOSE_MODE -#define meta_verbose meta_verbose_real -#define meta_topic meta_topic_real +#define meta_verbose(...) \ + G_STMT_START \ + { \ + if (meta_is_topic_enabled (META_DEBUG_VERBOSE)) \ + meta_verbose_real (__VA_ARGS__); \ + } \ + G_STMT_END + +#define meta_topic(debug_topic,...) \ + G_STMT_START \ + { \ + if (meta_is_topic_enabled (debug_topic)) \ + meta_topic_real (debug_topic, __VA_ARGS__); \ + } \ + G_STMT_END #else