Skip to content

Commit

Permalink
Create an empty app icon window before eventually checking the window
Browse files Browse the repository at this point in the history
frame offsets when using WindowMaker. This fixes the issue that the
first GNUstep application started under WindowMaker did not get a
proper application menu.


git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/back/trunk@39171 72102866-910b-0410-8b05-ffd578937521
  • Loading branch information
wlux committed Nov 13, 2015
1 parent 2478d0b commit 1e1185a
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 0 deletions.
8 changes: 8 additions & 0 deletions ChangeLog
@@ -1,3 +1,11 @@
2015-11-13 Wolfgang Lux <wolfgang.lux@gmail.com>

* Source/x11/XGServerWindow.m (_setupRootWindow, window::::):
Create an empty app icon window before eventually checking the
window frame offsets when using WindowMaker. This fixes the issue
that the first GNUstep application started under WindowMaker did
not get a proper application menu.

2015-11-03 Fred Kiefer <FredKiefer@gmx.de>

* Source/x11/XGServerEvent.m (-processEvent:): For repeated keys
Expand Down
32 changes: 32 additions & 0 deletions Source/x11/XGServerWindow.m
Expand Up @@ -74,6 +74,7 @@


static BOOL handlesWindowDecorations = YES;
static int _wmAppIcon = -1;


/*
Expand Down Expand Up @@ -1708,6 +1709,24 @@ - (void) _setupRootWindow
// FIXME: Need to set WM_CLIENT_MACHINE as well.
}

/* WindowMaker hack: We want to display our own app icon window in the
* icon window provided by WindowMaker. However, this only works when
* the icon window is the first window being mapped. For that reason,
* we create an empty icon window here before the code below eventually
* generates some temporary windows to determine the window frame offsets
* and reuse the icon window once the real app icon window is allocated.
*/
if ((generic.wm & XGWM_WINDOWMAKER) == XGWM_WINDOWMAKER
&& generic.flags.useWindowMakerIcons == 1)
{
NSDebugLLog(@"XGTrace", @"WindowMaker hack: Preparing app icon window");
_wmAppIcon =
[self window: NSZeroRect : NSBackingStoreBuffered
: NSIconWindowMask : defScreen];
[self orderwindow: NSWindowAbove : -1 : _wmAppIcon];
NSDebugLLog(@"XGTrace", @"WindowMaker hack: icon window = %d", _wmAppIcon);
}

/* We need to determine the offsets between the actual decorated window
* and the window we draw into.
*/
Expand Down Expand Up @@ -1996,6 +2015,19 @@ - (int) window: (NSRect)frame : (NSBackingStoreType)type : (unsigned int)style
RContext *context;

NSDebugLLog(@"XGTrace", @"DPSwindow: %@ %d", NSStringFromRect(frame), (int)type);
/* WindowMaker hack: Reuse the empty app icon allocated in _setupRootWindow
* for the real app icon.
*/
if ((generic.wm & XGWM_WINDOWMAKER) == XGWM_WINDOWMAKER
&& generic.flags.useWindowMakerIcons == 1
&& (style & NSIconWindowMask) == NSIconWindowMask
&& _wmAppIcon != -1)
{
int win = _wmAppIcon;
NSDebugLLog(@"XGTrace", @"WindowMaker hack: Returning window %d as app icon window", win);
_wmAppIcon = -1;
return win;
}
root = [self _rootWindowForScreen: screen];
context = [self xrContextForScreen: screen];

Expand Down

0 comments on commit 1e1185a

Please sign in to comment.