diff options
| author | Michael R Sweet <michael.r.sweet@gmail.com> | 2006-10-30 14:16:08 +0000 |
|---|---|---|
| committer | Michael R Sweet <michael.r.sweet@gmail.com> | 2006-10-30 14:16:08 +0000 |
| commit | 3ebd631cf09a3d04f7c9606b33dca40176928445 (patch) | |
| tree | 13ce6fd15d13d9c88bcd8a4ecb3df8ac6be99445 /src | |
| parent | 117e22670d08fb4b865ebe84fa779ae1acb16b1d (diff) | |
Fl::x(), Fl::y(), Fl::w(), and Fl::h() did not report the desktop
work area on X11 (STR #1482)
Fix another "missing sentinel" warning in the Xft code.
FL/Fl.H:
- Remove in-line x() and y() implementation for X11.
src/Fl_x.cxx:
- Fl::x(), Fl::y(): Added.
- fl_init_workarea(): Added to get _NET_WORKAREA property from the
root window; if none, is available, the code falls back to 0, 0,
DisplayWidth, and DisplayHeight.
src/fl_font_xft.cxx:
- Missing sentinel needs cast to void *.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.1@5535 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src')
| -rw-r--r-- | src/Fl_x.cxx | 49 | ||||
| -rw-r--r-- | src/fl_font_xft.cxx | 2 |
2 files changed, 46 insertions, 5 deletions
diff --git a/src/Fl_x.cxx b/src/Fl_x.cxx index 57c1719c8..85a43def0 100644 --- a/src/Fl_x.cxx +++ b/src/Fl_x.cxx @@ -367,14 +367,55 @@ void fl_close_display() { XCloseDisplay(fl_display); } -int Fl::h() { +static int fl_workarea_xywh[4] = { -1, -1, -1, -1 }; + +static void fl_init_workarea() { fl_open_display(); - return DisplayHeight(fl_display,fl_screen); + + Atom _NET_WORKAREA = XInternAtom(fl_display, "_NET_WORKAREA", 0); + Atom actual; + unsigned long count, remaining; + int format; + unsigned *xywh; + + if (XGetWindowProperty(fl_display, RootWindow(fl_display, fl_screen), + _NET_WORKAREA, 0, 4 * sizeof(unsigned), False, + XA_CARDINAL, &actual, &format, &count, &remaining, + (unsigned char **)&xywh)) + { + fl_workarea_xywh[0] = 0; + fl_workarea_xywh[1] = 0; + fl_workarea_xywh[2] = DisplayWidth(fl_display, fl_screen); + fl_workarea_xywh[3] = DisplayHeight(fl_display, fl_screen); + } + else + { + fl_workarea_xywh[0] = (int)xywh[0]; + fl_workarea_xywh[1] = (int)xywh[1]; + fl_workarea_xywh[2] = (int)xywh[2]; + fl_workarea_xywh[3] = (int)xywh[3]; + XFree(xywh); + } +} + +int Fl::x() { + if (fl_workarea_xywh[0] < 0) fl_init_workarea(); + return fl_workarea_xywh[0]; +} + +int Fl::y() { + if (fl_workarea_xywh[0] < 0) fl_init_workarea(); + return fl_workarea_xywh[1]; } int Fl::w() { - fl_open_display(); - return DisplayWidth(fl_display,fl_screen); + if (fl_workarea_xywh[0] < 0) fl_init_workarea(); + return fl_workarea_xywh[2]; +} + +int Fl::h() { + if (fl_workarea_xywh[0] < 0) fl_init_workarea(); + return fl_workarea_xywh[3]; } void Fl::get_mouse(int &xx, int &yy) { diff --git a/src/fl_font_xft.cxx b/src/fl_font_xft.cxx index 4c87ca23a..d84af32d6 100644 --- a/src/fl_font_xft.cxx +++ b/src/fl_font_xft.cxx @@ -145,7 +145,7 @@ static XftFont* fontopen(const char* name, bool core) { XFT_PIXEL_SIZE, XftTypeDouble, (double)fl_size_, core ? XFT_CORE : 0, XftTypeBool, true, XFT_RENDER, XftTypeBool, false, - 0); + (void *)0); } Fl_FontSize::Fl_FontSize(const char* name) { |
