| Summary: | NEWT: Window: Support non-resizable, minimize, maximize, alwaysOnBottom and sticky/all-desktop where supported | ||
|---|---|---|---|
| Product: | [JogAmp] Newt | Reporter: | Sven Gothel <sgothel> |
| Component: | core | Assignee: | Sven Gothel <sgothel> |
| Status: | RESOLVED FIXED | ||
| Severity: | enhancement | CC: | andres.colubri, gouessej, maxime-jogamp, monsieur.max, sorel.johann, xerxes |
| Priority: | --- | ||
| Version: | 2.3.2 | ||
| Hardware: | All | ||
| OS: | all | ||
| Type: | FEATURE | SCM Refs: |
2d837a7a7130702ad36b694875613fae77c7ef06
4a9f65b176d618a8816eff6d24e683c56a4d8086
9ad7f6d6ffe975dc0a10dac159b8de32773e1da1
3ac9eca843d119902a65fdeee5456d204fbabfa4
bb4e7c5d3e13d91810a7530d6ffa0a909fdfc233
2c23b1cb343a008621e3fe642c5b8abacca48b1a
23d8cbd413ac6aca737d7a7d062c8bb6f5ac1ca5
56f03908e476a4630d36282592e12bf20e589fa8
026ea7ed280bf4eb3a0e3c8434e5d993121f3eb4
417546510a93de533562b631caa4a75feeecd793
1d71a21d9d1da21c555207d30d202f724ae269f2
725e9acfcdd0e16a3533d097692a912383bae3fc
522fe5ac2ef057286e4cbfa170aa4292c4ffed2d
cc00d9b6c5a5c6b71ba14311fc6b17ce932d9a1e
fa3c55b8176b284752ed14a5a24f7fee36e588a3
|
| Workaround: | --- | ||
| Bug Depends on: | 637, 1186 | ||
| Bug Blocks: | 1208, 1209, 1214, 1222 | ||
|
Description
Sven Gothel
2015-08-10 15:49:55 CEST
*** Bug 637 has been marked as a duplicate of this bug. *** commit 2d837a7a7130702ad36b694875613fae77c7ef06:
NEWT Window: Support non-resizable, minimize, maximize, alwaysOnBottom
and sticky/all-desktop (Part 1)
Change also implements Bug 1186: 'NEWT Window: Use a Bitfield holding
all state flags and expose it accordingly',
since it is essential for an efficient implementation.
Part 1:
- Bug 1186
- Using Bitfield, holding public (Window) and private state bits/mask
- Bug 1188
- Window adds:
- [is|set]AlwaysOnBottom(..),
- [is|set]Resizable(..),
- [is|set]Sticky(..),
- [is|set]Maximized(..),
- isChildWindow(),
- Full implementation for X11
- TODO: Implement for OSX and Windows
- Manual tests:
- TestGearsES2NEWT, TestGearsES2NEWTSimple and TestGearsES2NewtCanvasAWT
utilize new NewtDemoListener, which has a key-listener to perform
all [new] actions. See source code of NewtDemoListener.
NEWT X11 impl. also queries the Atoms only once at window creation ..
reducing the server roundtrip.
commit 4a9f65b176d618a8816eff6d24e683c56a4d8086
Fix regression on X11 setVisible: in-visibility never reached on child windows
It has been experienced that UnmapNotify is not sent for child windows
when using IconicState!
Hence the visible:=false event never reaches the Window, causing an error.
This patch only uses IconicState for top-level windows and if requested.
commit 9ad7f6d6ffe975dc0a10dac159b8de32773e1da1
Fix regression on OSX setVisible: in-visibility never reached
on child windows / Fix [Un}Resizable style
- Fix regression on OSX setVisible: in-visibility never reached
on child windows
- Fix 'typo' while porting to bit-mask, i.e. '!=' -> '=='.
- Fix [Un}Resizable style
- Use NSResizableWindowMask only for !Undecorated and
if STATE_MASK_RESIZABLE is set.
commit 3ac9eca843d119902a65fdeee5456d204fbabfa4
OSX: Add maximize horz/vert, implemented manually
commit bb4e7c5d3e13d91810a7530d6ffa0a909fdfc233
NEWT OSX WindowDriver: Must wait for resize on main-thread (Related to Bug 1188)
If not waiting for resize on main-thread,
corruption may happen at continued rendering.
This has been experienced w/ maximize-horizontally (Bug 1188).
commit 2c23b1cb343a008621e3fe642c5b8abacca48b1a
Refine Maximized on X11 / Impl. Maximized and Iconify on Windows
WindowImpl
- remove updateMinMaxSize(..) - unused info
- fix appendStateToString: show all maximized state changes if reconfig
- add sizePosMaxInsetsChanged(..) and sendMouseEventRequestFocus(..)
accumulating multiple callbacks from impl.
- add: maximizedChanged(..) notification from native impl.
- refine manual maximized mode
used for OSX and Windows (single extent)
- reconfigMaximizedManual(..)
- resetMaximizedManual(..)
X11 WindowDriver:
- Update maximized at xreconfig, read from _NET_WM_STATE
- Use less Java callbacks from JNI
Windows WindowDriver:
- Use native maximized, if HORZ && VERT,
otherwise use manual maximized for single extent.
- Invisible of top-window -> MINIMIZED/ICONIFY
showing the app in task-bar.
commit 23d8cbd413ac6aca737d7a7d062c8bb6f5ac1ca5
Windows: Implement unresizable using appropriate windows styles
- to avoid resizing when toggling resizable (change of window border)
we maintain 'RECT insets' in our WindowUserData struct
and fix the client -> top position late
in NewtWindow_setVisiblePosSize(..)
after any style change.
Note: setVisible(false) will show the window in iconized mode where supported
w/ committed changes.
TODO: Add getSupportedStatesMask(), querying supported features.
Otherwise implementation is as completed on X11, OSX and Windows
as possible. Your test results are welcome.
56f03908e476a4630d36282592e12bf20e589fa8 Add @since 2.3.2 tag commit 026ea7ed280bf4eb3a0e3c8434e5d993121f3eb4
Bug 1188: Cleanup public/private[reconfig, non-reconfig] state bits
- STATE_BIT_FULLSCREEN_SPAN is private and used for reconfigure,
hence STATE_BIT_COUNT_RECONFIG is needed.
- STATE_BIT_FULLSCREEN_SPAN is added at the end of public state bits
- PSTATE_BIT_MINMAXSIZE_SET is unused.
commit 417546510a93de533562b631caa4a75feeecd793
Bug 1188: Refine reconfig state bits
commit 1d71a21d9d1da21c555207d30d202f724ae269f2
Bug 1188: Introduce getSupportedStateMask() implemented via WindowDriver's getSupportedReconfigMaskImpl()
- See getSupportedStateMask() for semantics
- getSupportedReconfigMaskImpl() result now used for isReconfigureMaskSupported()
- getSupportedReconfigMaskImpl() implementations:
- Full featured: X11, Windows and OSX
- X11: Use WindowManager Atoms for certain features (dynamic)
- Others: Use fixed features.
- TODO: Consider avoiding actions if not supported.
commit 725e9acfcdd0e16a3533d097692a912383bae3fc
Bug 1188: Fix API doc of getSupportedStateMask(); Misc Changes (see below)
- Fix STATE_MASK_CREATENATIVE
- Simplify resetStateMask()
- Windows WindowDriver: Remove STATE_MASK_STICKY from supported states
- TestGearsNEWT: Use NEWTDemoListener
commit 522fe5ac2ef057286e4cbfa170aa4292c4ffed2d
Bug 1188: NEWT WindowsWindow.c: Better support for 'isOnBottom' on Windows (Fullscreen on Bottom not working though)
- Terminology
- ALWAYSONBOTTOM -> isOnBottom
- ALWAYSONTOP -> isOnTop
- Better support for 'isOnBottom' on Windows
- Refine 'SetWindowPos(..)' calls to handle isOn[Top|Bottom]
- Refine 'ShowWindow(..)' calls to handle isOnBottom
- Intercept WM_WINDOWPOSCHANGING to enforce isOn[Top|Bottom],
i.e. change params (hwndInsertAfter and flags).
- Fullscreen on Bottom not working
- While we change all flags appropriately (NOACTIVATE, ..)
and don't issue CDS_FULLSCREEN is on bottom,
Windows seems to enforce the window to be on top
if it is sized to the screen maximum.
TODO: Consider avoiding actions if not supported. Bug 1208 will cont this task, i.e. consider avoiding operations if not supported, see getSupportedStateMask(). If severe bugs are still present - please reopen and report. Closing for now, since implementation is feature complete as much as possible for X11, Windows and OSX. cc00d9b6c5a5c6b71ba14311fc6b17ce932d9a1e Bug 1188: Refine getSupportedStateMask() semantics and minimum requirements (adding STATE_MASK_FULLSCREEN) Refine getSupportedStateMask(): - always for _after_ native creation, i.e. first visibility - removed STATE_MASK_AUTOPOSITION - adding STATE_MASK_FULLSCREEN to minimum requirements I have found a corner case with the new setResizable implementation that behave unexpected: https://github.com/xranby/jogl/commit/401a01ba31cf6c98d95a67dfa1021af854438044 Bug 1188: Add junit test test03WindowLargerThanScreenAndNonResizeable Test that the window do not auto-resize to fit inside the screeen when the user requests a non-resizable window that is larger than the screen. commit fa3c55b8176b284752ed14a5a24f7fee36e588a3:
Fix setMaximized(..) isReconfigureMaskSupported(..) query
setMaximized(..) isReconfigureMaskSupported(..) was using the state bit-number
instead of the state bit-mask!
Fixed.
|