summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Fl_x.cxx28
1 files changed, 12 insertions, 16 deletions
diff --git a/src/Fl_x.cxx b/src/Fl_x.cxx
index 67ed872dc..9f22b0847 100644
--- a/src/Fl_x.cxx
+++ b/src/Fl_x.cxx
@@ -1215,24 +1215,20 @@ static void react_to_screen_reconfiguration() {
#if USE_XFT
static void after_display_rescale(float *p_current_xft_dpi) {
- FILE *pipe = popen("xrdb -query", "r");
- if (!pipe) return;
- char line[100];
- while (fgets(line, sizeof(line), pipe) != NULL) {
- if (memcmp(line, "Xft.dpi:", 8)) continue;
- float dpi;
- if (sscanf(line+8, "%f", &dpi) == 1) {
- //fprintf(stderr," previous=%g dpi=%g \n", *p_current_xft_dpi, dpi);
- if (fabs(dpi - *p_current_xft_dpi) > 0.01) {
- *p_current_xft_dpi = dpi;
- float f = dpi/96.;
- for (int i = 0; i < Fl::screen_count(); i++)
- Fl::screen_driver()->rescale_all_windows_from_screen(i, f, f);
- }
+ Display *new_dpy = XOpenDisplay(XDisplayString(fl_display));
+ if (!new_dpy) return;
+ char *s = XGetDefault(new_dpy, "Xft", "dpi");
+ float dpi;
+ if (s && sscanf(s, "%f", &dpi) == 1) {
+ //printf("%s previous=%g dpi=%g \n", s, *p_current_xft_dpi, dpi);
+ if (fabs(dpi - *p_current_xft_dpi) > 0.1) {
+ *p_current_xft_dpi = dpi;
+ float f = dpi / 96.;
+ for (int i = 0; i < Fl::screen_count(); i++)
+ Fl::screen_driver()->rescale_all_windows_from_screen(i, f, f);
}
- break;
}
- pclose(pipe);
+ XCloseDisplay(new_dpy);
}
#endif // USE_XFT