mirror of
https://github.com/gnustep/libs-back.git
synced 2025-04-23 08:07:07 +00:00
Prevent some window types from showing up in the taskbar for old window
managers that cannot handle window types. Patch by Yen-Ju Chen <yjchenx@gmail.com>. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/back/trunk@24246 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
782df5561f
commit
45e9de2ee8
3 changed files with 48 additions and 0 deletions
|
@ -1,3 +1,11 @@
|
|||
2006-12-26 Fred Kiefer <FredKiefer@gmx.de>
|
||||
|
||||
* Headers/x11/XGGeneric.h: Added XGWMNetStates.
|
||||
* Source/x11/XGServerWindow.m (-_checkWindowManager,
|
||||
-setwindowlevel::): Prevent some window types from showing up in
|
||||
the taskbar for old window managers that cannot handle window types.
|
||||
Patch by Yen-Ju Chen <yjchenx@gmail.com>.
|
||||
|
||||
2006-12-26 Fred Kiefer <FredKiefer@gmx.de>
|
||||
|
||||
* Headers/cairo/XGCairoXImageSurface.h:
|
||||
|
|
|
@ -51,6 +51,11 @@ typedef struct {
|
|||
Atom win_topmenu_atom;
|
||||
} XGWMWinTypes;
|
||||
|
||||
typedef struct {
|
||||
Atom net_wm_state_atom;
|
||||
Atom net_wm_state_skip_taskbar_atom;
|
||||
} XGWMNetStates;
|
||||
|
||||
/*
|
||||
* Frame offsets for window inside parent decoration window.
|
||||
*/
|
||||
|
@ -101,6 +106,7 @@ struct XGGeneric {
|
|||
void *cachedWindow; // last gswindow_device_t used.
|
||||
Offsets offsets[16];
|
||||
XGWMWinTypes wintypes;
|
||||
XGWMNetStates netstates;
|
||||
};
|
||||
|
||||
/* GNOME Window layers */
|
||||
|
|
|
@ -1041,6 +1041,12 @@ static void setWindowHintsForStyle (Display *dpy, Window window,
|
|||
XInternAtom(dpy, "_KDE_NET_WM_WINDOW_TYPE_OVERRIDE", False);
|
||||
generic.wintypes.win_topmenu_atom =
|
||||
XInternAtom(dpy, "_KDE_NET_WM_WINDOW_TYPE_TOPMENU", False);
|
||||
|
||||
// Window state
|
||||
generic.netstates.net_wm_state_atom =
|
||||
XInternAtom(dpy, "_NET_WM_STATE", False);
|
||||
generic.netstates.net_wm_state_skip_taskbar_atom =
|
||||
XInternAtom(dpy, "_NET_WM_STATE_SKIP_TASKBAR", False);
|
||||
}
|
||||
if (win1)
|
||||
{
|
||||
|
@ -2924,6 +2930,7 @@ static BOOL didCreatePixmaps;
|
|||
{
|
||||
int len;
|
||||
long data[2];
|
||||
BOOL skipTaskbar = NO;
|
||||
|
||||
data[0] = generic.wintypes.win_normal_atom;
|
||||
data[1] = None;
|
||||
|
@ -2932,6 +2939,7 @@ static BOOL didCreatePixmaps;
|
|||
if (level == NSModalPanelWindowLevel)
|
||||
{
|
||||
data[0] = generic.wintypes.win_modal_atom;
|
||||
skipTaskbar = YES;
|
||||
}
|
||||
else if (level == NSMainMenuWindowLevel)
|
||||
{
|
||||
|
@ -2940,6 +2948,7 @@ static BOOL didCreatePixmaps;
|
|||
//data[0] = generic.wintypes.win_topmenu_atom;
|
||||
data[0] = generic.wintypes.win_dock_atom;
|
||||
//len = 2;
|
||||
skipTaskbar = YES;
|
||||
}
|
||||
else if (level == NSSubmenuWindowLevel
|
||||
|| level == NSFloatingWindowLevel
|
||||
|
@ -2954,11 +2963,13 @@ static BOOL didCreatePixmaps;
|
|||
data[0] = generic.wintypes.win_menu_atom;
|
||||
len = 1;
|
||||
#endif
|
||||
skipTaskbar = YES;
|
||||
}
|
||||
else if (level == NSDockWindowLevel
|
||||
|| level == NSStatusWindowLevel)
|
||||
{
|
||||
data[0] =generic.wintypes.win_dock_atom;
|
||||
skipTaskbar = YES;
|
||||
}
|
||||
// Does this belong into a different category?
|
||||
else if (level == NSPopUpMenuWindowLevel)
|
||||
|
@ -2971,10 +2982,12 @@ static BOOL didCreatePixmaps;
|
|||
data[0] = generic.wintypes.win_modal_atom;
|
||||
len = 1;
|
||||
#endif
|
||||
skipTaskbar = YES;
|
||||
}
|
||||
else if (level == NSDesktopWindowLevel)
|
||||
{
|
||||
data[0] = generic.wintypes.win_desktop_atom;
|
||||
skipTaskbar = YES;
|
||||
}
|
||||
|
||||
/* Warning ... X-bug .. when we specify 32bit data X actually expects data
|
||||
|
@ -2984,6 +2997,27 @@ static BOOL didCreatePixmaps;
|
|||
XChangeProperty(dpy, window->ident, generic.wintypes.win_type_atom,
|
||||
XA_ATOM, 32, PropModeReplace,
|
||||
(unsigned char *)&data, len);
|
||||
|
||||
/*
|
||||
* Change _NET_WM_STATE based on window level.
|
||||
* This should be based on real window type (NSMenu, NSPanel, etc).
|
||||
* This feature is only needed for window managers that cannot properly
|
||||
* handle the window type set above.
|
||||
*/
|
||||
if (skipTaskbar)
|
||||
{
|
||||
len = 1;
|
||||
data[0] = generic.netstates.net_wm_state_skip_taskbar_atom;
|
||||
XChangeProperty(dpy, window->ident,
|
||||
generic.netstates.net_wm_state_atom,
|
||||
XA_ATOM, 32, PropModeReplace,
|
||||
(unsigned char *)&data, len);
|
||||
}
|
||||
else
|
||||
{
|
||||
XDeleteProperty(dpy, window->ident,
|
||||
generic.netstates.net_wm_state_atom);
|
||||
}
|
||||
}
|
||||
else if ((generic.wm & XGWM_GNOME) != 0)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue