[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [MiNT] wind_set(WF_TOPMOST) extension



Odd Skancke wrote:

Hello Olivier, Arnaud,

First let me say that I think I may have been a bit blind when it comes
to the usefulness of these features... they do infact look ok, good
work ;-)

ons, 26,.04.2006 kl. 23.39 +0200, skrev olivier.landemarre@utbm.fr:
Quoting Odd Skancke <ozk@atari.org>:

Hi Olivier,

What exactly have been implemented as of now? What other plans do you
have? Could you make an overview over whats been implemented upto now?

Yes of course

wind_set(WF_TOPMOST) with option 0,1 and 2 (see previous mail) are now avaible
and after test looks now ok. Just notice for 2 option now it is not need window
is close to have it (because some developpers dislike it), in this case for easy
implementation, I simply close window and then reopen it. I have a 2 tests
softwares for mode 1 and 2.
Thats all, we have not define how application can know if this feature is
avaible or not (absolutly need for option 2), you not said anything how do this
and my proposition that looks not satisfy all. This looks for me quite strange
to add a flag in appl_getinfo() for each new extension of wind_set() or
wind_get(), I prefer have a standard solution, I don't know if code from
Gerhard work really for all case, perhaps.

I went through some of the postings and wrote this documentation
proposition;

-----------------------------------------------------------------------
WF_TOPMOST

A class of windows that will always 'float' ontop of classical windows.
One key feature of windows in any WF_TOPMOST state is that they do not
disturb current keyboard focus, and can be used to issue important
messages, status raports, etc., without demanding user interaction.

wind_set(handle,WF_TOPMOST, parm1,...)

#define WF_TOPMOST 232
parm1:
       0 : Remove topmost state on the corresponding window.
       1 : Set topmost state on the corresponding window.
       2 : Set topmost state and link window visibility to the
           owner's focus. That is, when owner is untopped the
           window disappears, when owner regains focus, the
           window automatically reappears.

How to use:

handle = wind_create()
wind_set(handle,WF_TOPMOST, 1, dummy, dummy,dummy);
wind_open(handle);

Some common characteristics of windows with any WF_TOPMOST state set;

1) Changing the WF_TOPMOST state can not be done on open windows,
  i.e.,  the window have to be closed before changing the state, then
  reopened.
2) Windows which have TOPMOST state 1 or 2 never get keyboard focus.
3) Windows which have TOPMOST state 1 or 2 never get WM_TOPPED or
  WM_UNTOPPED AES messages.


WF_TOPMOST state 1:
 Setting state 1 will make the corresponding window 'float' ontop of
all other classical windows. State 1 windows will stay ontop until
closed by the user or the application itself.

WF_TOPMOST state 2:
 Setting state 1 will make the corresponding window act like windows
with state 1 set, with one important exception; The window is linked to
the window owner's focus status. This means that when the application
that owns the window looses focus, state 2 windows are automatically
made unvisible by the AES. When the application regains focus, the
window is automatically made visible again. This is done automatically,
and no application handling is necessary.
-----------------------------------------------------------------------
This exactly this. Just notice that devloppers ask me to be able to put new state on already open window, I have add this, by simply closing this window, apply new setting for the window and reopen it (if need to be open in state 2 case if the application have focus of course). I have add this because choice of position of windows is done in wind_open(). I have do an attention for popup and menu display, that are in all case above any other window, even on topmost. New window with topmost will be display before all other topmost windows, and windows with topmost flag can change position between each other topmost windows of course (I not remember if it is on request or automatic, I think better is automatic). wind_get(WF_TOP) answer first standard window of course, never topmost window.

I send you soon two tests applications from Arnaud for this feature, there is no test for avaibility in it.


regards
Olivier

Please see if this can be used in the documentation, and add/remove
things that you thing should be changed. I have not started implementing
this mode yet, altho XaAES now lets the user set "Keep over other",
"Keep under others", "Deny keyboard focus" and various other things on
each individual window via a window context popup. Ctrl+alt+right-click
on any part of any window give you access to this popup. But before
implementing WF_TOPMOST I think I need to know all details :)

I'm going to write documentation for this soon, sorry actually I'm very tired.

Combining work with hobby programming will do that to you, I know all
there is to know about that ;-)


Best Regards,
Odd Skancke