Browse Source

add x11 allowed actions atom

x11_allowed_actions
Emmanuel Hansen 2 years ago
parent
commit
6cf8ff66dc
  1. 10
      src/Avalonia.X11/X11Atoms.cs
  2. 32
      src/Avalonia.X11/X11Window.cs

10
src/Avalonia.X11/X11Atoms.cs

@ -179,6 +179,16 @@ namespace Avalonia.X11
public IntPtr _NET_WM_WINDOW_TYPE_SPLASH;
public IntPtr _NET_WM_WINDOW_TYPE_DIALOG;
public IntPtr _NET_WM_WINDOW_TYPE_NORMAL;
public IntPtr _NET_WM_ACTION_MOVE;
public IntPtr _NET_WM_ACTION_RESIZE;
public IntPtr _NET_WM_ACTION_MINIMIZE;
public IntPtr _NET_WM_ACTION_SHADE;
public IntPtr _NET_WM_ACTION_STICK;
public IntPtr _NET_WM_ACTION_MAXIMIZE_HORZ;
public IntPtr _NET_WM_ACTION_MAXIMIZE_VERT;
public IntPtr _NET_WM_ACTION_FULLSCREEN;
public IntPtr _NET_WM_ACTION_CHANGE_DESKTOP;
public IntPtr _NET_WM_ACTION_CLOSE;
public IntPtr CLIPBOARD;
public IntPtr CLIPBOARD_MANAGER;
public IntPtr SAVE_TARGETS;

32
src/Avalonia.X11/X11Window.cs

@ -567,7 +567,7 @@ namespace Avalonia.X11
{
if (ev.ClientMessageEvent.ptr1 == _x11.Atoms.WM_DELETE_WINDOW)
{
if (Closing?.Invoke(WindowCloseReason.WindowClosing) != true)
if (!_disabled && Closing?.Invoke(WindowCloseReason.WindowClosing) != true)
Dispose();
}
else if (ev.ClientMessageEvent.ptr1 == _x11.Atoms._NET_WM_SYNC_REQUEST)
@ -1298,6 +1298,8 @@ namespace Avalonia.X11
{
XFree(wmHintsPtr);
}
UpdateNetAllowedActions();
}
public void SetExtendClientAreaToDecorationsHint(bool extendIntoClientAreaHint)
@ -1369,6 +1371,34 @@ namespace Avalonia.X11
);
}
private void UpdateNetAllowedActions()
{
var allowedActions = new HashSet<IntPtr>()
{
_x11.Atoms._NET_WM_ACTION_MOVE,
_x11.Atoms._NET_WM_ACTION_RESIZE,
_x11.Atoms._NET_WM_ACTION_MINIMIZE,
_x11.Atoms._NET_WM_ACTION_SHADE,
_x11.Atoms._NET_WM_ACTION_STICK,
_x11.Atoms._NET_WM_ACTION_MAXIMIZE_HORZ,
_x11.Atoms._NET_WM_ACTION_MAXIMIZE_VERT,
_x11.Atoms._NET_WM_ACTION_FULLSCREEN,
_x11.Atoms._NET_WM_ACTION_CHANGE_DESKTOP,
_x11.Atoms._NET_WM_ACTION_CLOSE,
};
if(_disabled)
{
allowedActions.Remove(_x11.Atoms._NET_WM_ACTION_MINIMIZE);
allowedActions.Remove(_x11.Atoms._NET_WM_ACTION_MAXIMIZE_HORZ);
allowedActions.Remove(_x11.Atoms._NET_WM_ACTION_MAXIMIZE_VERT);
allowedActions.Remove(_x11.Atoms._NET_WM_ACTION_CLOSE);
}
XChangeProperty(_x11.Display, _handle, _x11.Atoms._NET_WM_ALLOWED_ACTIONS, (IntPtr)Atom.XA_ATOM, 32,
PropertyMode.Replace, allowedActions.ToArray(), allowedActions.Count);
}
public IPopupPositioner? PopupPositioner { get; }
public void SetTransparencyLevelHint(IReadOnlyList<WindowTransparencyLevel> transparencyLevels)

Loading…
Cancel
Save