aboutsummaryrefslogtreecommitdiff
path: root/src/Config.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Config.cpp')
-rw-r--r--src/Config.cpp31
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;
}