summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--FL/Fl_Double_Window.H5
-rw-r--r--FL/Fl_Overlay_Window.H2
-rw-r--r--FL/Fl_Window.H6
-rw-r--r--src/drivers/Cocoa/Fl_Cocoa_Window_Driver.cxx24
-rw-r--r--src/drivers/Cocoa/Fl_Cocoa_Window_Driver.h1
5 files changed, 22 insertions, 16 deletions
diff --git a/FL/Fl_Double_Window.H b/FL/Fl_Double_Window.H
index 46dd106f2..4ffcb65d1 100644
--- a/FL/Fl_Double_Window.H
+++ b/FL/Fl_Double_Window.H
@@ -23,6 +23,7 @@
#define Fl_Double_Window_H
#include "Fl_Window.H"
+class Fl_Overlay_Window;
/**
The Fl_Double_Window provides a double-buffered window.
@@ -44,8 +45,8 @@ public:
/**
Return non-null if this is an Fl_Overlay_Window object.
*/
- virtual Fl_Double_Window *as_overlay_window() {return NULL; }
-public:
+ virtual Fl_Overlay_Window *as_overlay_window() {return NULL; }
+ virtual Fl_Double_Window *as_double_window() {return this; }
void show();
void show(int a, char **b) {Fl_Window::show(a,b);}
void flush();
diff --git a/FL/Fl_Overlay_Window.H b/FL/Fl_Overlay_Window.H
index 5114d3029..32ce7cfa4 100644
--- a/FL/Fl_Overlay_Window.H
+++ b/FL/Fl_Overlay_Window.H
@@ -72,7 +72,7 @@ protected:
Fl_Overlay_Window(int X, int Y, int W, int H, const char *l=0);
public:
void show(int a, char **b) {Fl_Double_Window::show(a,b);}
- virtual Fl_Double_Window *as_overlay_window() {return this; }
+ virtual Fl_Overlay_Window *as_overlay_window() {return this; }
};
#endif
diff --git a/FL/Fl_Window.H b/FL/Fl_Window.H
index 88b3a0737..9dd443e8e 100644
--- a/FL/Fl_Window.H
+++ b/FL/Fl_Window.H
@@ -37,7 +37,7 @@ class Fl_X;
class Fl_Window_Driver;
class Fl_RGB_Image;
class Fl_Shared_Image;
-
+class Fl_Double_Window;
/**
This widget produces an actual window. This can either be a main
@@ -637,6 +637,10 @@ public:
void capture_titlebar_and_borders(Fl_Shared_Image*& top, Fl_Shared_Image*& left, Fl_Shared_Image*& bottom, Fl_Shared_Image*& right);
Fl_Window_Driver *driver() { return i; }
+ /**
+ Return non-null if this is an Fl_Overlay_Window object.
+ */
+ virtual Fl_Double_Window *as_double_window() {return NULL; }
};
#endif
diff --git a/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.cxx b/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.cxx
index 08a3184b9..685aebbd3 100644
--- a/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.cxx
+++ b/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.cxx
@@ -22,10 +22,22 @@
#include <FL/Fl_Double_Window.H>
#include <FL/fl_draw.H>
+// class used for Fl_Double_Window but not for Fl_Overlay_Window
+class Fl_Cocoa_Double_Window_Driver : public Fl_Cocoa_Window_Driver {
+public:
+ Fl_Cocoa_Double_Window_Driver(Fl_Window *w) : Fl_Cocoa_Window_Driver(w) {}
+ int double_flush(int eraseoverlay) {
+ draw();
+ return 0;
+ }
+};
Fl_Window_Driver *Fl_Window_Driver::newWindowDriver(Fl_Window *w)
{
- return new Fl_Cocoa_Window_Driver(w);
+ if (w->as_double_window() && !w->as_double_window()->as_overlay_window())
+ return new Fl_Cocoa_Double_Window_Driver(w);
+ else
+ return new Fl_Cocoa_Window_Driver(w);
}
@@ -43,16 +55,6 @@ void Fl_Cocoa_Window_Driver::take_focus()
set_key_window();
}
-int Fl_Cocoa_Window_Driver::double_flush(int eraseoverlay) {
- if ( ((Fl_Double_Window*)w)->as_overlay_window() ) {
- Fl_Window_Driver::double_flush(eraseoverlay);
- } else {
- draw();
- }
- return 0;
-}
-
-
//
// End of "$Id$".
//
diff --git a/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.h b/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.h
index e7f683689..b0c756aa1 100644
--- a/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.h
+++ b/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.h
@@ -47,7 +47,6 @@ class FL_EXPORT Fl_Cocoa_Window_Driver : public Fl_Window_Driver
public:
Fl_Cocoa_Window_Driver(Fl_Window*);
virtual void take_focus();
- int double_flush(int eraseoverlay);
};