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
This commit is contained in:
Michael R Sweet 2006-10-30 14:16:08 +00:00
parent 117e22670d
commit 3ebd631cf0
4 changed files with 49 additions and 11 deletions

View File

@ -2,6 +2,8 @@ CHANGES IN FLTK 1.1.8
- Documentation fixes (STR #1454, STR #1455, STR #1456,
STR #1457, STR #1458, STR #1460, STR #1481)
- Fl::x(), Fl::y(), Fl::w(), and Fl::h() did not report
the desktop work area on X11 (STR #1482)
- Shortcut events could be sent to the wrong window (STR
#1451)
- Fl_Spinner did not handle the arrow keys properly (STR

View File

@ -3,7 +3,7 @@
//
// Main header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2005 by Bill Spitzak and others.
// Copyright 1998-2006 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
@ -194,13 +194,8 @@ public:
static void paste(Fl_Widget &receiver);
// screen size:
#if defined(WIN32) || defined(__APPLE__)
static int x();
static int y();
#else
static int x() {return 0;}
static int y() {return 0;}
#endif /* WIN32 || __APPLE__ */
static int w();
static int h();

View File

@ -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) {

View File

@ -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) {