Richard Frith-Macdonald wrote:
On 16 Oct 2009, at 19:16, Wolfgang Lux wrote:
IMHO Richard's proposal is much too complicated. I'd suggest
something
radically simpler: If an application does not have an appicon the
hide
command should just minimize all application windows. As far as I
understand this also was the solution used by Apple in OpenStep
4.2 for
Windows. See, e.g., http://support.apple.com/kb/TA45871 and search
for
the term "hide" (with quotation marks) in that document. This can be
implemented trivially with the three-line patch below in
NSApplication.m.
Good idea, but unfortunately that approach does not really work and
is not really that simple:
1. the app is not properly hidden ... there are potentially loads
of miniwindows left visible
2. the app is potentially 'lost' (as at present) if it has no
windows (and hence no miniwindows)
3. there is no consideration of unhiding ... allowing for that
would require a lot more code (to track which windows were
miniaturised as part of the hide process, and automatically
deminiaturise them when you click on any of the miniwindows of the
'hidden' app).
Problem (2) is the problem we currently have ... so this approach
actually adds an issue (1) without solving the original issue.
You are right with issue (1), but this is only for the case where an
application
deliberately hides its appicon. On the other hand, in Phillipe's case
I feel that
GSSupressAppIcon is abused (somewhat) as a workaround for the lack of
better
integration with the foreign environment. Maybe it would be a better
idea to make
use of the current interface style instead of checking the
_app_icon_window
attribute. Then, assuming that, e.g., an interface style
NSWindows95InterfaceStyle
indicates the presence of a taskbar, the application should suppress
its appicon
*and* not manage any miniwindows on itself. Thus, problem (1) would
go away.
With respect to problem (2), I think that this could be handled by
terminating
applications by default when their last window is closed and the
application
delegate does not respond to -
applicationShouldTerminateAfterLastWindowClosed:.
I see issue (3) as rather unproblematic. If the app is properly
hidden, the user
cannot invoke -unhide: in the first place except by selecting the
Show All menu
command from another GNUstep application. We could simply ignore this
request
since the native applications of the foreign gui environment do not
understand
that request and we would at least be consistent with our environment.
But even if you are not happy with that suggestion, I'd really prefer
to add the
additional flag to every window that would allow distinguishing
whether a window
was miniaturized or "hidden" than to delve into the hairy interaction
with lots
of different window managers out there and trying to convince them to
manage the
offscreen appicon. In my opinion back is already bloated too much
with conditional
code that is supposed to work with WindowMaker, KDE, Gnome, and whats
not. Yet,
it nevertheless does not really work with, e.g., Apple's quartz-wm
(Apple managed
to implement the NETWM specification in completely weird ways, but
that is a
different story).
Wolfgang
_______________________________________________
Gnustep-dev mailing list
Gnustep-dev@gnu.org
http://lists.gnu.org/mailman/listinfo/gnustep-dev