Skip to content

Commit

Permalink
Improved support for faulty X11 clients (STR #2385)
Browse files Browse the repository at this point in the history
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@7866 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
  • Loading branch information
Matthias Melcher committed Nov 17, 2010
1 parent eca6b3f commit bc66ca6
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 2 deletions.
1 change: 1 addition & 0 deletions CHANGES
@@ -1,5 +1,6 @@
CHANGES IN FLTK 1.3.0

- Improved support for faulty X11 clients (STR #2385)
- Fixed xclass support for Fl_Window (STR #2053)
- Fixed Caps Lock handling in X11/XIM (STR #2366)
- Fixed handling of missing fonts in Xft (STR #2355)
Expand Down
31 changes: 29 additions & 2 deletions src/Fl_x.cxx
Expand Up @@ -804,6 +804,27 @@ static Fl_Window* resize_bug_fix;
static char unknown[] = "<unknown>";
const int unknown_len = 10;

extern "C" {

static int xerror = 0;

static int ignoreXEvents(Display *display, XErrorEvent *event) {
xerror = 1;
return 0;
}

static XErrorHandler catchXExceptions() {
xerror = 0;
return ignoreXEvents;
}

static int wasXExceptionRaised() {
return xerror;
}

}


int fl_handle(const XEvent& thisevent)
{
XEvent xevent = thisevent;
Expand Down Expand Up @@ -1359,17 +1380,23 @@ int fl_handle(const XEvent& thisevent)
case ReparentNotify: {
int xpos, ypos;
Window junk;

// on some systems, the ReparentNotify event is not handled as we would expect.
XErrorHandler oldHandler = XSetErrorHandler(catchXExceptions());

//ReparentNotify gives the new position of the window relative to
//the new parent. FLTK cares about the position on the root window.
XTranslateCoordinates(fl_display, xevent.xreparent.parent,
XRootWindow(fl_display, fl_screen),
xevent.xreparent.x, xevent.xreparent.y,
&xpos, &ypos, &junk);
XSetErrorHandler(oldHandler);

// tell Fl_Window about it and set flag to prevent echoing:
resize_bug_fix = window;
window->position(xpos, ypos);
if ( !wasXExceptionRaised() ) {
resize_bug_fix = window;
window->position(xpos, ypos);
}
break;
}
}
Expand Down

0 comments on commit bc66ca6

Please sign in to comment.