mirror of
https://github.com/gnustep/libs-back.git
synced 2025-02-23 11:51:27 +00:00
Added support for WindowMaker's WMFHideApplication action.
This commit is contained in:
parent
f9958176db
commit
b492ac87cd
5 changed files with 67 additions and 10 deletions
13
ChangeLog
13
ChangeLog
|
@ -1,3 +1,16 @@
|
|||
2019-04-05 Sergii Stoian <stoyan255@gmail.com>
|
||||
|
||||
* Headers/x11/XGServerWindow.h (GSMaxWMProtocols): increased number to support
|
||||
WMFHideApplication.
|
||||
* Headers/x11/XGGeneric.h: Atoms _WINDOWMAKER_WM_FUNCTION, _GNUSTEP_WM_HIDE_APP
|
||||
were added.
|
||||
|
||||
* Source/x11/XGServerWindow.m (_setSupportedWMProtocols:): added
|
||||
_GNUSTEP_WM_HIDE_APP protocol suport to the window protocols.
|
||||
(hidewindow:): implementation of GSDisplayServer method.
|
||||
* Source/x11/XGServerEvent.m (processEvent:): process _GNUSTEP_WM_HIDE_APP
|
||||
client message.
|
||||
|
||||
2019-04-04 Sergii Stoian <stoyan255@ukr.net>
|
||||
|
||||
* Source/x11/XGServerEvent.m (processEvent:):
|
||||
|
|
|
@ -104,8 +104,10 @@ static char *atom_names[] = {
|
|||
"_WINDOWMAKER_WM_PROTOCOLS",
|
||||
"_WINDOWMAKER_NOTICEBOARD",
|
||||
"_WINDOWMAKER_ICON_TILE",
|
||||
"_WINDOWMAKER_WM_FUNCTION",
|
||||
"_RGBA_IMAGE",
|
||||
"_GNUSTEP_WM_MINIATURIZE_WINDOW",
|
||||
"_GNUSTEP_WM_HIDE_APP",
|
||||
"_GNUSTEP_WM_ATTR",
|
||||
"_GNUSTEP_TITLEBAR_STATE",
|
||||
"_GNUSTEP_FRAME_OFFSETS",
|
||||
|
@ -177,12 +179,14 @@ static char *atom_names[] = {
|
|||
#define _WINDOWMAKER_WM_PROTOCOLS_ATOM atoms[59]
|
||||
#define _WINDOWMAKER_NOTICEBOARD_ATOM atoms[60]
|
||||
#define _WINDOWMAKER_ICON_TILE_ATOM atoms[61]
|
||||
#define _RGBA_IMAGE_ATOM atoms[62]
|
||||
#define _GNUSTEP_WM_MINIATURIZE_WINDOW_ATOM atoms[63]
|
||||
#define _GNUSTEP_WM_ATTR_ATOM atoms[64]
|
||||
#define _GNUSTEP_TITLEBAR_STATE_ATOM atoms[65]
|
||||
#define _GNUSTEP_FRAME_OFFSETS_ATOM atoms[66]
|
||||
#define WM_IGNORE_FOCUS_EVENTS_ATOM atoms[67]
|
||||
#define _WINDOWMAKER_WM_FUNCTION_ATOM atoms[62]
|
||||
#define _RGBA_IMAGE_ATOM atoms[63]
|
||||
#define _GNUSTEP_WM_MINIATURIZE_WINDOW_ATOM atoms[64]
|
||||
#define _GNUSTEP_WM_HIDE_APP_ATOM atoms[65]
|
||||
#define _GNUSTEP_WM_ATTR_ATOM atoms[66]
|
||||
#define _GNUSTEP_TITLEBAR_STATE_ATOM atoms[67]
|
||||
#define _GNUSTEP_FRAME_OFFSETS_ATOM atoms[68]
|
||||
#define WM_IGNORE_FOCUS_EVENTS_ATOM atoms[69]
|
||||
|
||||
/*
|
||||
* Frame offsets for window inside parent decoration window.
|
||||
|
|
|
@ -72,7 +72,7 @@ typedef struct {
|
|||
#define WMFHideOtherApplications 10
|
||||
#define WMFHideApplication 12
|
||||
|
||||
#define GSMaxWMProtocols 5
|
||||
#define GSMaxWMProtocols 6
|
||||
|
||||
/* Graphics Driver protocol. Setup in [NSGraphicsContext-contextDevice:] */
|
||||
enum {
|
||||
|
|
|
@ -621,6 +621,21 @@ posixFileDescriptor: (NSPosixFileDescriptor*)fileDescriptor
|
|||
data1: 0
|
||||
data2: 0];
|
||||
}
|
||||
else if ((Atom)xEvent.xclient.data.l[0]
|
||||
== generic._GNUSTEP_WM_HIDE_APP_ATOM)
|
||||
{
|
||||
NSDebugLLog(@"Hide", @"%lu application will be hidden", cWin->number);
|
||||
eventLocation = NSMakePoint(0,0);
|
||||
e = [NSEvent otherEventWithType: NSAppKitDefined
|
||||
location: eventLocation
|
||||
modifierFlags: 0
|
||||
timestamp: 0
|
||||
windowNumber: cWin->number
|
||||
context: gcontext
|
||||
subtype: GSAppKitAppHide
|
||||
data1: 0
|
||||
data2: 0];
|
||||
}
|
||||
else if ((Atom)xEvent.xclient.data.l[0]
|
||||
== generic.WM_TAKE_FOCUS_ATOM)
|
||||
{
|
||||
|
|
|
@ -1396,11 +1396,14 @@ _get_next_prop_new_event(Display *display, XEvent *event, char *arg)
|
|||
window->protocols[window->numProtocols++] = generic._NET_WM_SYNC_REQUEST_ATOM;
|
||||
#endif
|
||||
}
|
||||
if ((generic.wm & XGWM_WINDOWMAKER) != 0
|
||||
&& (window->win_attrs.window_style & NSMiniaturizableWindowMask) != 0)
|
||||
if ((generic.wm & XGWM_WINDOWMAKER) != 0)
|
||||
{
|
||||
if ((window->win_attrs.window_style & NSMiniaturizableWindowMask) != 0)
|
||||
{
|
||||
window->protocols[window->numProtocols++] = generic._GNUSTEP_WM_MINIATURIZE_WINDOW_ATOM;
|
||||
}
|
||||
window->protocols[window->numProtocols++] = generic._GNUSTEP_WM_HIDE_APP_ATOM;
|
||||
}
|
||||
NSAssert1(window->numProtocols <= GSMaxWMProtocols,
|
||||
@"Too many protocols (%d > GSMaxWMProtocols)",
|
||||
window->numProtocols);
|
||||
|
@ -2602,6 +2605,28 @@ _get_next_prop_new_event(Display *display, XEvent *event, char *arg)
|
|||
XIconifyWindow(dpy, window->ident, window->screen);
|
||||
}
|
||||
|
||||
/* Actually this is "hide application" action.
|
||||
However, key press may be received by particular window. */
|
||||
- (BOOL) hidewindow: (int)win
|
||||
{
|
||||
gswindow_device_t *window;
|
||||
|
||||
if ((generic.wm & XGWM_WINDOWMAKER) == 0)
|
||||
return NO;
|
||||
|
||||
window = [XGServer _windowWithTag: win];
|
||||
[self _sendRoot: window->root
|
||||
type: generic._WINDOWMAKER_WM_FUNCTION_ATOM
|
||||
window: window->ident
|
||||
data0: WMFHideApplication
|
||||
data1: CurrentTime
|
||||
data2: 0
|
||||
data3: 0];
|
||||
XSync(dpy, False);
|
||||
|
||||
return YES;
|
||||
}
|
||||
|
||||
/**
|
||||
Make sure we have the most up-to-date window information and then
|
||||
make sure the context has our new information
|
||||
|
|
Loading…
Reference in a new issue