diff options
Diffstat (limited to 'src/Config.cpp')
-rw-r--r-- | src/Config.cpp | 31 |
1 files changed, 20 insertions, 11 deletions
diff --git a/src/Config.cpp b/src/Config.cpp index 266c45c..ada2113 100644 --- a/src/Config.cpp +++ b/src/Config.cpp @@ -2,6 +2,8 @@ #include "../include/Storage.hpp" #include <json/value.h> #include <assert.h> +#include <X11/Xlib.h> +#include <X11/Xresource.h> namespace QuickMedia { static bool config_initialized = false; @@ -14,20 +16,27 @@ namespace QuickMedia { // Returns XFT_DPI_DEFAULT on error static int xrdb_get_dpi() { int xft_dpi = XFT_DPI_DEFAULT; - - FILE *xrdb_query = popen("xrdb -get Xft.dpi", "r"); - if(!xrdb_query) + Display *display = XOpenDisplay(nullptr); + if(!display) { + fprintf(stderr, "Failed to open x display\n"); return xft_dpi; + } - char line[32]; - line[0] = '\0'; - fread(line, 1, sizeof(line), xrdb_query); - - const int xft_dpi_file = atoi(line); - if(xft_dpi_file > 0) - xft_dpi = xft_dpi_file; + XrmInitialize(); + + char *resource_manager = XResourceManagerString(display); + if(resource_manager) { + XrmDatabase db = XrmGetStringDatabase(resource_manager); + if(db) { + char *type; + XrmValue val; + if(XrmGetResource(db, "Xft.dpi", "*", &type, &val)) + xft_dpi = strtol(val.addr, nullptr, 10); + XrmDestroyDatabase(db); + } + } - pclose(xrdb_query); + XCloseDisplay(display); return xft_dpi; } |