summaryrefslogtreecommitdiff
path: root/src/drivers/Cocoa
diff options
context:
space:
mode:
authorManolo Gouy <Manolo>2016-03-23 07:08:17 +0000
committerManolo Gouy <Manolo>2016-03-23 07:08:17 +0000
commit270b437500552cba0d082363f9124456f16a1fda (patch)
treeac7245b95a138a5f64c6e6b8318632fd4dc45075 /src/drivers/Cocoa
parentbf7e4de688fc1f0e3008049a41c07543a7da0752 (diff)
Rewrite Fl_Window::hide() under the driver model.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3-porting@11402 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src/drivers/Cocoa')
-rw-r--r--src/drivers/Cocoa/Fl_Cocoa_Window_Driver.H1
-rw-r--r--src/drivers/Cocoa/Fl_Cocoa_Window_Driver.cxx16
2 files changed, 17 insertions, 0 deletions
diff --git a/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.H b/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.H
index 46428962b..bd5a0e79e 100644
--- a/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.H
+++ b/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.H
@@ -77,6 +77,7 @@ public:
virtual void label(const char *name, const char *mininame);
virtual void show();
virtual void resize(int X,int Y,int W,int H);
+ virtual void hide();
virtual void shape(const Fl_Image* img);
// that one is implemented in Fl_Cocoa.mm because it uses Objective-c
diff --git a/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.cxx b/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.cxx
index 127a84d6d..5d97ac91d 100644
--- a/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.cxx
+++ b/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.cxx
@@ -223,6 +223,22 @@ void Fl_Cocoa_Window_Driver::shape(const Fl_Image* img) {
#endif
}
+
+void Fl_Cocoa_Window_Driver::hide() {
+ Fl_X* ip = Fl_X::i(pWindow);
+ // 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 (ip && !pWindow->parent()) pWindow->cursor(FL_CURSOR_DEFAULT);
+ if ( hide_common() ) return;
+ Fl_X::q_release_context(ip);
+ if ( ip->xid == fl_window )
+ fl_window = 0;
+ if (ip->region) XDestroyRegion(ip->region);
+ ip->destroy();
+ delete ip;
+}
+
//
// End of "$Id$".
//