Opened 6 years ago
Closed 4 years ago
#772 closed enhancement (fixed)
_NET_WM_MOVERESIZE for win32 and osx
Reported by: | Antoine Martin | Owned by: | alas |
---|---|---|---|
Priority: | minor | Milestone: | 1.0 |
Component: | client | Version: | trunk |
Keywords: | win32 osx window resize | Cc: | johnss1221@… |
Description (last modified by )
Split from #765.
Chrome now runs borderless, but it expects the desktop environment to handle its "initiate move or resize" requests... Which we do on X11 by just forwarding the original _NET_WM_MOVERESIZE X11 message.
On MS Windows, looks like we will need SetCapture and the WM_CAPTURECHANGED event. We can then resize our window until the button is released, emulating what the window manager is expected to do for us.
On OSX, no idea.
Attachments (2)
Change History (13)
comment:1 Changed 6 years ago by
Owner: | changed from Antoine Martin to Antoine Martin |
---|---|
Status: | new → assigned |
comment:2 Changed 6 years ago by
Cc: | johnss1221@… added |
---|
comment:3 Changed 6 years ago by
- Note clicking the minimize button in the chrome window itself locks the button on, making the window non-responsive until a right click in the taskbar minimizes/restores the window. Windows client 0.15.0 r8622 against a fedora 20 0.15.0 r8555 server. (Not sure if this should have a ticket of its own, or share real estate with this other chrome specific ticket?)
comment:4 Changed 6 years ago by
afarr: the problem you describe is fixed in recent servers. (just verified with a 0.14.20 beta build at both ends, I believe this was in 0.14.19 and maybe even earlier versions too)
Changed 6 years ago by
Attachment: | emulate-moveresize.patch added |
---|
most of the code required for emulating _NET_WM_MOVERESIZE
comment:5 Changed 6 years ago by
Description: | modified (diff) |
---|
Most of the code required should be in the patch above, and can be tested on posix by setting XPRA_EMULATE_MOVERESIZE=1
(which defaults to "1" on platforms without the X11 bindings).
Still TODO:
- probably a good idea to grab the keyboard and cancel if ESC is pressed
- need to capture the mouse motion events even when it is not hovering over the window (I thought that's what the
win32api.SetCapture
would do..) - need to keep track of the button state when we start, so we can cancel when it changes
- need to catch focus-out events and cancel the moveresize state
- need to catch window state changes and cancel (ie: maximize, minimize, etc)
- our resize code triggers new motion events, which makes it go into a loop
- honour
width_inc
,base_width
, etc..
comment:6 Changed 5 years ago by
Milestone: | 0.16 → 0.17 |
---|---|
Owner: | changed from Antoine Martin to Antoine Martin |
Status: | assigned → new |
re-scheduling
comment:7 Changed 5 years ago by
Milestone: | 0.17 → 0.18 |
---|---|
Status: | new → assigned |
comment:9 Changed 4 years ago by
Owner: | changed from Antoine Martin to alas |
---|---|
Status: | assigned → new |
Done in r13720 + r13721 + r13722 + r13723 (chrome compat).
This can be tested with:
- browser/xpra/trunk/src/tests/xpra/test_apps/test_window_initiatemoveresize.py
- applications with client side decorations like chromium (previously unmovable on win32 and osx)
The exact same emulation code can be used on posix platforms using the env var XPRA_MOVERESIZE_X11=0
.
The move-resize can be stopped by pressing the break key, which can be configured with the env var XPRA_BREAK_MOVERESIZE
(it defaults to "Escape").
@afarr: mostly a FYI since your application uses regular window decorations, but the ability to run google-chrome could come in handy.
comment:10 Changed 4 years ago by
Testing with 1.0 r13888 win32 client against 1.0 r13912 fedora 23 server...
The test application resizes as expected.
Google-chrome also moves/re-sizes as hoped (though there are sometimes scrolling issues, but that's an issue for somewhere else).
All that said, I think this is ready to be closed. So, I'll do so.
comment:11 Changed 4 years ago by
Resolution: | → fixed |
---|---|
Status: | new → closed |
#801 closed as duplicate of this bug.