Rewrite Fl_Window::iconize() under the driver model.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3-porting@11411 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
This commit is contained in:
parent
e3ee1e7b81
commit
fdaad858ba
@ -22,6 +22,7 @@
|
|||||||
#ifndef Fl_Window_H
|
#ifndef Fl_Window_H
|
||||||
#define Fl_Window_H
|
#define Fl_Window_H
|
||||||
|
|
||||||
|
#include <FL/Fl.H>
|
||||||
#include <FL/Fl_Group.H>
|
#include <FL/Fl_Group.H>
|
||||||
#include <FL/Fl_Bitmap.H>
|
#include <FL/Fl_Bitmap.H>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@ -54,6 +55,7 @@ class Fl_Double_Window;
|
|||||||
class FL_EXPORT Fl_Window : public Fl_Group {
|
class FL_EXPORT Fl_Window : public Fl_Group {
|
||||||
|
|
||||||
static char *default_xclass_;
|
static char *default_xclass_;
|
||||||
|
static char show_iconic_; // 1 means create next window in iconic form
|
||||||
|
|
||||||
int no_fullscreen_x;
|
int no_fullscreen_x;
|
||||||
int no_fullscreen_y;
|
int no_fullscreen_y;
|
||||||
@ -64,6 +66,7 @@ class FL_EXPORT Fl_Window : public Fl_Group {
|
|||||||
int fullscreen_screen_left;
|
int fullscreen_screen_left;
|
||||||
int fullscreen_screen_right;
|
int fullscreen_screen_right;
|
||||||
|
|
||||||
|
friend int Fl::arg(int argc, char **argv, int &i);
|
||||||
friend class Fl_X;
|
friend class Fl_X;
|
||||||
friend class Fl_Window_Driver;
|
friend class Fl_Window_Driver;
|
||||||
Fl_X *i; // points at the system-specific stuff, but exists only after the window is mapped
|
Fl_X *i; // points at the system-specific stuff, but exists only after the window is mapped
|
||||||
|
@ -95,6 +95,7 @@ public:
|
|||||||
virtual void fullscreen_off(int X, int Y, int W, int H) {}
|
virtual void fullscreen_off(int X, int Y, int W, int H) {}
|
||||||
virtual void use_border();
|
virtual void use_border();
|
||||||
virtual void size_range();
|
virtual void size_range();
|
||||||
|
virtual void iconize() {}
|
||||||
|
|
||||||
// --- window shape stuff
|
// --- window shape stuff
|
||||||
void shape_pixmap_(Fl_Image* pixmap); // TODO: check
|
void shape_pixmap_(Fl_Image* pixmap); // TODO: check
|
||||||
|
1
FL/mac.H
1
FL/mac.H
@ -177,7 +177,6 @@ public:
|
|||||||
static void GLcontext_makecurrent(NSOpenGLContext*);
|
static void GLcontext_makecurrent(NSOpenGLContext*);
|
||||||
static void GL_cleardrawable(void);
|
static void GL_cleardrawable(void);
|
||||||
void destroy(void);
|
void destroy(void);
|
||||||
void collapse(void);
|
|
||||||
WindowRef window_ref(void); // useless with cocoa GL windows
|
WindowRef window_ref(void); // useless with cocoa GL windows
|
||||||
void set_key_window(void);
|
void set_key_window(void);
|
||||||
// OS X doesn't have per window icons
|
// OS X doesn't have per window icons
|
||||||
|
@ -33,6 +33,8 @@
|
|||||||
|
|
||||||
char *Fl_Window::default_xclass_ = 0L;
|
char *Fl_Window::default_xclass_ = 0L;
|
||||||
|
|
||||||
|
char Fl_Window::show_iconic_ = 0;
|
||||||
|
|
||||||
Fl_Window *Fl_Window::current_;
|
Fl_Window *Fl_Window::current_;
|
||||||
|
|
||||||
void Fl_Window::_Fl_Window() {
|
void Fl_Window::_Fl_Window() {
|
||||||
|
@ -16,25 +16,15 @@
|
|||||||
// http://www.fltk.org/str.php
|
// http://www.fltk.org/str.php
|
||||||
//
|
//
|
||||||
|
|
||||||
#include <FL/x.H>
|
#include <FL/Fl_Window.H>
|
||||||
#include <FL/Fl_Window_Driver.H>
|
#include <FL/Fl_Window_Driver.H>
|
||||||
|
|
||||||
extern char fl_show_iconic; // in Fl_x.cxx
|
|
||||||
|
|
||||||
void Fl_Window::iconize() {
|
void Fl_Window::iconize() {
|
||||||
if (!shown()) {
|
if (!shown()) {
|
||||||
fl_show_iconic = 1;
|
show_iconic_ = 1;
|
||||||
show();
|
show();
|
||||||
} else {
|
} else {
|
||||||
#ifdef WIN32
|
pWindowDriver->iconize();
|
||||||
ShowWindow(i->xid, SW_SHOWMINNOACTIVE);
|
|
||||||
#elif defined(__APPLE__) // PORTME: Fl_Window_Driver - platform window driver
|
|
||||||
i->collapse();
|
|
||||||
#elif defined(FL_PORTING)
|
|
||||||
# pragma message "FL_PORTING: add code to iconify a window"
|
|
||||||
#else
|
|
||||||
XIconifyWindow(fl_display, i->xid, fl_screen);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -53,7 +53,6 @@ static int fl_match(const char *a, const char *s, int atleast = 1) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// flags set by previously parsed arguments:
|
// flags set by previously parsed arguments:
|
||||||
extern char fl_show_iconic; // in Fl_x.cxx
|
|
||||||
static char arg_called;
|
static char arg_called;
|
||||||
static char return_i;
|
static char return_i;
|
||||||
static const char *name;
|
static const char *name;
|
||||||
@ -148,7 +147,7 @@ int Fl::arg(int argc, char **argv, int &i) {
|
|||||||
s++; // point after the dash
|
s++; // point after the dash
|
||||||
|
|
||||||
if (fl_match(s, "iconic")) {
|
if (fl_match(s, "iconic")) {
|
||||||
fl_show_iconic = 1;
|
Fl_Window::show_iconic_ = 1;
|
||||||
i++;
|
i++;
|
||||||
return 1;
|
return 1;
|
||||||
} else if (fl_match(s, "kbd")) {
|
} else if (fl_match(s, "kbd")) {
|
||||||
|
@ -91,8 +91,6 @@ int fl_mac_os_version = Fl_X::calc_mac_os_version(); // the version number of t
|
|||||||
|
|
||||||
// public variables
|
// public variables
|
||||||
void *fl_capture = 0; // (NSWindow*) we need this to compensate for a missing(?) mouse capture
|
void *fl_capture = 0; // (NSWindow*) we need this to compensate for a missing(?) mouse capture
|
||||||
bool fl_show_iconic; // true if called from iconize() - shows the next created window in collapsed state
|
|
||||||
//int fl_disable_transient_for; // secret method of removing TRANSIENT_FOR
|
|
||||||
Window fl_window;
|
Window fl_window;
|
||||||
|
|
||||||
// forward declarations of variables in this file
|
// forward declarations of variables in this file
|
||||||
@ -2882,11 +2880,11 @@ void Fl_X::make(Fl_Window* w)
|
|||||||
NSUInteger winstyle;
|
NSUInteger winstyle;
|
||||||
if (w->parent()) {
|
if (w->parent()) {
|
||||||
w->border(0);
|
w->border(0);
|
||||||
fl_show_iconic = 0;
|
Fl_Window::show_iconic_ = 0;
|
||||||
}
|
}
|
||||||
if (w->border()) winstyle = NSTitledWindowMask | NSClosableWindowMask | NSMiniaturizableWindowMask;
|
if (w->border()) winstyle = NSTitledWindowMask | NSClosableWindowMask | NSMiniaturizableWindowMask;
|
||||||
else winstyle = NSBorderlessWindowMask;
|
else winstyle = NSBorderlessWindowMask;
|
||||||
if (fl_show_iconic && !w->parent()) { // prevent window from being out of work area when created iconized
|
if (Fl_Window::show_iconic_ && !w->parent()) { // prevent window from being out of work area when created iconized
|
||||||
int sx, sy, sw, sh;
|
int sx, sy, sw, sh;
|
||||||
Fl::screen_work_area (sx, sy, sw, sh, w->x(), w->y());
|
Fl::screen_work_area (sx, sy, sw, sh, w->x(), w->y());
|
||||||
if (w->x() < sx) w->x(sx);
|
if (w->x() < sx) w->x(sx);
|
||||||
@ -3047,8 +3045,8 @@ void Fl_X::make(Fl_Window* w)
|
|||||||
w->set_visible();
|
w->set_visible();
|
||||||
if ( w->border() || (!w->modal() && !w->tooltip_window()) ) Fl::handle(FL_FOCUS, w);
|
if ( w->border() || (!w->modal() && !w->tooltip_window()) ) Fl::handle(FL_FOCUS, w);
|
||||||
[cw setDelegate:[FLWindowDelegate singleInstance]];
|
[cw setDelegate:[FLWindowDelegate singleInstance]];
|
||||||
if (fl_show_iconic) {
|
if (Fl_Window::show_iconic_) {
|
||||||
fl_show_iconic = 0;
|
Fl_Window::show_iconic_ = 0;
|
||||||
w->handle(FL_SHOW); // create subwindows if any
|
w->handle(FL_SHOW); // create subwindows if any
|
||||||
[cw recursivelySendToSubwindows:@selector(display)]; // draw the window and its subwindows before its icon is computed
|
[cw recursivelySendToSubwindows:@selector(display)]; // draw the window and its subwindows before its icon is computed
|
||||||
[cw miniaturize:nil];
|
[cw miniaturize:nil];
|
||||||
@ -3560,8 +3558,8 @@ Fl_Region Fl_X::intersect_region_and_rect(Fl_Region current, int x,int y,int w,
|
|||||||
return outr;
|
return outr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Fl_X::collapse() {
|
void Fl_Cocoa_Window_Driver::iconize() {
|
||||||
[xid miniaturize:nil];
|
[fl_xid(pWindow) miniaturize:nil];
|
||||||
}
|
}
|
||||||
|
|
||||||
static NSImage *CGBitmapContextToNSImage(CGContextRef c)
|
static NSImage *CGBitmapContextToNSImage(CGContextRef c)
|
||||||
|
@ -1643,7 +1643,6 @@ private:
|
|||||||
|
|
||||||
void fl_fix_focus(); // in Fl.cxx
|
void fl_fix_focus(); // in Fl.cxx
|
||||||
|
|
||||||
char fl_show_iconic; // hack for Fl_Window::iconic()
|
|
||||||
// int fl_background_pixel = -1; // color to use for background
|
// int fl_background_pixel = -1; // color to use for background
|
||||||
UINT fl_wake_msg = 0;
|
UINT fl_wake_msg = 0;
|
||||||
int fl_disable_transient_for; // secret method of removing TRANSIENT_FOR
|
int fl_disable_transient_for; // secret method of removing TRANSIENT_FOR
|
||||||
@ -1846,7 +1845,7 @@ Fl_X* Fl_X::make(Fl_Window* w) {
|
|||||||
fl_clipboard_notify_target(x->xid);
|
fl_clipboard_notify_target(x->xid);
|
||||||
|
|
||||||
x->wait_for_expose = 1;
|
x->wait_for_expose = 1;
|
||||||
if (fl_show_iconic) {showit = 0; fl_show_iconic = 0;}
|
if (Fl_Window::show_iconic_) {showit = 0; Fl_Window::show_iconic_ = 0;}
|
||||||
if (showit) {
|
if (showit) {
|
||||||
w->set_visible();
|
w->set_visible();
|
||||||
int old_event = Fl::e_number;
|
int old_event = Fl::e_number;
|
||||||
|
@ -2313,7 +2313,6 @@ Fl_X* Fl_X::set_xid(Fl_Window* win, Window winxid) {
|
|||||||
// normally. The global variables like fl_show_iconic are so that
|
// normally. The global variables like fl_show_iconic are so that
|
||||||
// subclasses of *that* class may change the behavior...
|
// subclasses of *that* class may change the behavior...
|
||||||
|
|
||||||
char fl_show_iconic; // hack for iconize()
|
|
||||||
int fl_background_pixel = -1; // hack to speed up bg box drawing
|
int fl_background_pixel = -1; // hack to speed up bg box drawing
|
||||||
int fl_disable_transient_for; // secret method of removing TRANSIENT_FOR
|
int fl_disable_transient_for; // secret method of removing TRANSIENT_FOR
|
||||||
|
|
||||||
@ -2527,10 +2526,10 @@ void Fl_X::make_xid(Fl_Window* win, XVisualInfo *visual, Colormap colormap)
|
|||||||
XWMHints *hints = XAllocWMHints();
|
XWMHints *hints = XAllocWMHints();
|
||||||
hints->input = True;
|
hints->input = True;
|
||||||
hints->flags = InputHint;
|
hints->flags = InputHint;
|
||||||
if (fl_show_iconic) {
|
if (Fl_Window::show_iconic_) {
|
||||||
hints->flags |= StateHint;
|
hints->flags |= StateHint;
|
||||||
hints->initial_state = IconicState;
|
hints->initial_state = IconicState;
|
||||||
fl_show_iconic = 0;
|
Fl_Window::show_iconic_ = 0;
|
||||||
showit = 0;
|
showit = 0;
|
||||||
}
|
}
|
||||||
if (((Fl_X11_Window_Driver*)win->pWindowDriver)->icon_->legacy_icon) {
|
if (((Fl_X11_Window_Driver*)win->pWindowDriver)->icon_->legacy_icon) {
|
||||||
|
@ -83,6 +83,7 @@ public:
|
|||||||
virtual void fullscreen_on();
|
virtual void fullscreen_on();
|
||||||
virtual void fullscreen_off(int X, int Y, int W, int H);
|
virtual void fullscreen_off(int X, int Y, int W, int H);
|
||||||
virtual void size_range();
|
virtual void size_range();
|
||||||
|
virtual void iconize();
|
||||||
|
|
||||||
virtual void shape(const Fl_Image* img);
|
virtual void shape(const Fl_Image* img);
|
||||||
// that one is implemented in Fl_Cocoa.mm because it uses Objective-c
|
// that one is implemented in Fl_Cocoa.mm because it uses Objective-c
|
||||||
|
@ -87,6 +87,7 @@ public:
|
|||||||
virtual void unmap();
|
virtual void unmap();
|
||||||
virtual void fullscreen_on();
|
virtual void fullscreen_on();
|
||||||
virtual void fullscreen_off(int X, int Y, int W, int H);
|
virtual void fullscreen_off(int X, int Y, int W, int H);
|
||||||
|
virtual void iconize();
|
||||||
|
|
||||||
virtual void shape(const Fl_Image* img);
|
virtual void shape(const Fl_Image* img);
|
||||||
virtual void icons(const Fl_RGB_Image *icons[], int count);
|
virtual void icons(const Fl_RGB_Image *icons[], int count);
|
||||||
|
@ -608,6 +608,11 @@ void Fl_WinAPI_Window_Driver::fullscreen_off(int X, int Y, int W, int H) {
|
|||||||
Fl::handle(FL_FULLSCREEN, pWindow);
|
Fl::handle(FL_FULLSCREEN, pWindow);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Fl_WinAPI_Window_Driver::iconize() {
|
||||||
|
ShowWindow(fl_xid(pWindow), SW_SHOWMINNOACTIVE);
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// End of "$Id$".
|
// End of "$Id$".
|
||||||
//
|
//
|
||||||
|
@ -98,6 +98,7 @@ public:
|
|||||||
virtual void fullscreen_off(int X, int Y, int W, int H);
|
virtual void fullscreen_off(int X, int Y, int W, int H);
|
||||||
virtual void use_border();
|
virtual void use_border();
|
||||||
virtual void size_range();
|
virtual void size_range();
|
||||||
|
virtual void iconize();
|
||||||
|
|
||||||
virtual void shape(const Fl_Image* img);
|
virtual void shape(const Fl_Image* img);
|
||||||
virtual void icons(const Fl_RGB_Image *icons[], int count);
|
virtual void icons(const Fl_RGB_Image *icons[], int count);
|
||||||
|
@ -504,6 +504,10 @@ void Fl_X11_Window_Driver::size_range() {
|
|||||||
if (pWindow->shown()) Fl_X::i(pWindow)->sendxjunk();
|
if (pWindow->shown()) Fl_X::i(pWindow)->sendxjunk();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Fl_X11_Window_Driver::iconize() {
|
||||||
|
XIconifyWindow(fl_display, fl_xid(pWindow), fl_screen);
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// End of "$Id$".
|
// End of "$Id$".
|
||||||
//
|
//
|
||||||
|
Loading…
Reference in New Issue
Block a user