summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMatthias Melcher <fltk@matthiasm.com>2007-02-02 13:52:37 +0000
committerMatthias Melcher <fltk@matthiasm.com>2007-02-02 13:52:37 +0000
commit3df9bdf5c5919d99d054aba61319d4672d5da311 (patch)
tree8db3bff14c1a4860066cbd89e153152293c72884 /src
parent6bc5329935e352e222383f94512eb490b781dbac (diff)
Avoiding a hidden mouse pointer after a window is hidden
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.1@5654 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src')
-rw-r--r--src/Fl.cxx4
-rw-r--r--src/fl_cursor.cxx34
2 files changed, 22 insertions, 16 deletions
diff --git a/src/Fl.cxx b/src/Fl.cxx
index b6f0fe69b..dde61972d 100644
--- a/src/Fl.cxx
+++ b/src/Fl.cxx
@@ -927,6 +927,10 @@ void Fl_Window::hide() {
*pp = ip->next;
#ifdef __APPLE__
MacUnlinkWindow(ip);
+ // MacOS X manages a single pointer per application. Make sure that hiding
+ // a toplevel window will not leave us with some random pointer shape, or
+ // worst case, an invisible pointer
+ if (!parent()) cursor(FL_CURSOR_DEFAULT);
#endif
i = 0;
diff --git a/src/fl_cursor.cxx b/src/fl_cursor.cxx
index ae60787ce..fb0d33b3e 100644
--- a/src/fl_cursor.cxx
+++ b/src/fl_cursor.cxx
@@ -202,36 +202,38 @@ static Cursor crsrARROW =
#undef E
void Fl_Window::cursor(Fl_Cursor c, Fl_Color, Fl_Color) {
- if (!shown()) return;
if (c == FL_CURSOR_DEFAULT) {
c = cursor_default;
}
+ CursHandle icrsr = fl_default_cursor;
switch (c) {
- case FL_CURSOR_CROSS: i->cursor = GetCursor( crossCursor ); break;
- case FL_CURSOR_WAIT: i->cursor = GetCursor( watchCursor ); break;
- case FL_CURSOR_INSERT: i->cursor = GetCursor( iBeamCursor ); break;
+ case FL_CURSOR_CROSS: icrsr = GetCursor( crossCursor ); break;
+ case FL_CURSOR_WAIT: icrsr = GetCursor( watchCursor ); break;
+ case FL_CURSOR_INSERT: icrsr = GetCursor( iBeamCursor ); break;
case FL_CURSOR_N:
case FL_CURSOR_S:
- case FL_CURSOR_NS: i->cursor = &crsrNSptr; break;
- case FL_CURSOR_HELP: i->cursor = &crsrHELPptr; break;
- case FL_CURSOR_HAND: i->cursor = &crsrHANDptr; break;
- case FL_CURSOR_MOVE: i->cursor = &crsrMOVEptr; break;
+ case FL_CURSOR_NS: icrsr = &crsrNSptr; break;
+ case FL_CURSOR_HELP: icrsr = &crsrHELPptr; break;
+ case FL_CURSOR_HAND: icrsr = &crsrHANDptr; break;
+ case FL_CURSOR_MOVE: icrsr = &crsrMOVEptr; break;
case FL_CURSOR_NE:
case FL_CURSOR_SW:
- case FL_CURSOR_NESW: i->cursor = &crsrNESWptr; break;
+ case FL_CURSOR_NESW: icrsr = &crsrNESWptr; break;
case FL_CURSOR_E:
case FL_CURSOR_W:
- case FL_CURSOR_WE: i->cursor = &crsrWEptr; break;
+ case FL_CURSOR_WE: icrsr = &crsrWEptr; break;
case FL_CURSOR_SE:
case FL_CURSOR_NW:
- case FL_CURSOR_NWSE: i->cursor = &crsrNWSEptr; break;
- case FL_CURSOR_NONE: i->cursor = &crsrNONEptr; break;
- case FL_CURSOR_ARROW: i->cursor = &crsrARROWptr; break;
+ case FL_CURSOR_NWSE: icrsr = &crsrNWSEptr; break;
+ case FL_CURSOR_NONE: icrsr = &crsrNONEptr; break;
+ case FL_CURSOR_ARROW: icrsr = &crsrARROWptr; break;
case FL_CURSOR_DEFAULT:
- default:
- i->cursor = fl_default_cursor; break;
+ default: break;
+ }
+ SetCursor( *icrsr );
+ if (i) {
+ i->cursor = icrsr;
}
- SetCursor( *i->cursor );
}
#else