mirror of
https://github.com/gryf/wmaker.git
synced 2025-12-20 21:08:08 +01:00
Added support for client message to set window levels and added partial
support for client message to set window titlebar decoration.
This commit is contained in:
@@ -46,6 +46,12 @@
|
|||||||
|
|
||||||
#define GNUSTEP_WM_ATTR_NAME "_GNUSTEP_WM_ATTR"
|
#define GNUSTEP_WM_ATTR_NAME "_GNUSTEP_WM_ATTR"
|
||||||
|
|
||||||
|
#define GNUSTEP_TITLEBAR_STATE "_GNUSTEP_TITLEBAR_STATE"
|
||||||
|
enum {
|
||||||
|
WMTitleBarKey = 0,
|
||||||
|
WMTitleBarNormal = 1,
|
||||||
|
WMTitleBarMain = 2
|
||||||
|
};
|
||||||
|
|
||||||
#ifndef _WINGS_H_
|
#ifndef _WINGS_H_
|
||||||
/* window stacking level */
|
/* window stacking level */
|
||||||
|
|||||||
29
src/event.c
29
src/event.c
@@ -85,7 +85,9 @@ extern Atom _XA_WM_COLORMAP_NOTIFY;
|
|||||||
|
|
||||||
extern Atom _XA_WM_CHANGE_STATE;
|
extern Atom _XA_WM_CHANGE_STATE;
|
||||||
extern Atom _XA_WM_DELETE_WINDOW;
|
extern Atom _XA_WM_DELETE_WINDOW;
|
||||||
|
extern Atom _XA_GNUSTEP_WM_ATTR;
|
||||||
extern Atom _XA_GNUSTEP_WM_MINIATURIZE_WINDOW;
|
extern Atom _XA_GNUSTEP_WM_MINIATURIZE_WINDOW;
|
||||||
|
extern Atom _XA_GNUSTEP_TITLEBAR_STATE;
|
||||||
extern Atom _XA_WINDOWMAKER_WM_FUNCTION;
|
extern Atom _XA_WINDOWMAKER_WM_FUNCTION;
|
||||||
extern Atom _XA_WINDOWMAKER_COMMAND;
|
extern Atom _XA_WINDOWMAKER_COMMAND;
|
||||||
|
|
||||||
@@ -888,6 +890,33 @@ handleClientMessage(XEvent *event)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if (event->xclient.message_type == _XA_GNUSTEP_WM_ATTR) {
|
||||||
|
wwin = wWindowFor(event->xclient.window);
|
||||||
|
if (!wwin) return;
|
||||||
|
switch (event->xclient.data.l[0]) {
|
||||||
|
case GSWindowLevelAttr:
|
||||||
|
{
|
||||||
|
int level = (int)event->xclient.data.l[0];
|
||||||
|
if (WINDOW_LEVEL(wwin) != level) {
|
||||||
|
ChangeStackingLevel(wwin->frame->core, level);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else if (event->xclient.message_type == _XA_GNUSTEP_TITLEBAR_STATE) {
|
||||||
|
wwin = wWindowFor(event->xclient.window);
|
||||||
|
if (!wwin) return;
|
||||||
|
switch (event->xclient.data.l[0]) {
|
||||||
|
case WMTitleBarNormal:
|
||||||
|
wFrameWindowChangeState(wwin->frame, WS_UNFOCUSED);
|
||||||
|
break;
|
||||||
|
case WMTitleBarMain:
|
||||||
|
wFrameWindowChangeState(wwin->frame, WS_PFOCUSED);
|
||||||
|
break;
|
||||||
|
case WMTitleBarKey:
|
||||||
|
wFrameWindowChangeState(wwin->frame, WS_FOCUSED);
|
||||||
|
break;
|
||||||
|
}
|
||||||
#ifdef GNOME_STUFF
|
#ifdef GNOME_STUFF
|
||||||
} else if (wGNOMEProcessClientMessage(&event->xclient)) {
|
} else if (wGNOMEProcessClientMessage(&event->xclient)) {
|
||||||
/* do nothing */
|
/* do nothing */
|
||||||
|
|||||||
@@ -101,6 +101,7 @@ Atom _XA_WM_COLORMAP_NOTIFY;
|
|||||||
Atom _XA_GNUSTEP_WM_ATTR;
|
Atom _XA_GNUSTEP_WM_ATTR;
|
||||||
Atom _XA_GNUSTEP_WM_MINIATURIZE_WINDOW;
|
Atom _XA_GNUSTEP_WM_MINIATURIZE_WINDOW;
|
||||||
Atom _XA_GNUSTEP_WM_RESIZEBAR;
|
Atom _XA_GNUSTEP_WM_RESIZEBAR;
|
||||||
|
Atom _XA_GNUSTEP_TITLEBAR_STATE;
|
||||||
|
|
||||||
Atom _XA_WINDOWMAKER_MENU;
|
Atom _XA_WINDOWMAKER_MENU;
|
||||||
Atom _XA_WINDOWMAKER_WM_PROTOCOLS;
|
Atom _XA_WINDOWMAKER_WM_PROTOCOLS;
|
||||||
|
|||||||
@@ -130,6 +130,7 @@ extern Atom _XA_WINDOWMAKER_ICON_SIZE;
|
|||||||
extern Atom _XA_WINDOWMAKER_ICON_TILE;
|
extern Atom _XA_WINDOWMAKER_ICON_TILE;
|
||||||
|
|
||||||
extern Atom _XA_GNUSTEP_WM_MINIATURIZE_WINDOW;
|
extern Atom _XA_GNUSTEP_WM_MINIATURIZE_WINDOW;
|
||||||
|
extern Atom _XA_GNUSTEP_TITLEBAR_STATE;
|
||||||
|
|
||||||
#ifdef OFFIX_DND
|
#ifdef OFFIX_DND
|
||||||
extern Atom _XA_DND_PROTOCOL;
|
extern Atom _XA_DND_PROTOCOL;
|
||||||
@@ -648,6 +649,7 @@ static char *atomNames[] = {
|
|||||||
"_WINDOWMAKER_COMMAND",
|
"_WINDOWMAKER_COMMAND",
|
||||||
"_WINDOWMAKER_ICON_SIZE",
|
"_WINDOWMAKER_ICON_SIZE",
|
||||||
"_WINDOWMAKER_ICON_TILE"
|
"_WINDOWMAKER_ICON_TILE"
|
||||||
|
GNUSTEP_TITLEBAR_STATE,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -720,6 +722,8 @@ StartUp(Bool defaultScreenOnly)
|
|||||||
_XA_WINDOWMAKER_ICON_SIZE = atom[17];
|
_XA_WINDOWMAKER_ICON_SIZE = atom[17];
|
||||||
_XA_WINDOWMAKER_ICON_TILE = atom[18];
|
_XA_WINDOWMAKER_ICON_TILE = atom[18];
|
||||||
|
|
||||||
|
_XA_GNUSTEP_TITLEBAR_STATE = atom[99];
|
||||||
|
|
||||||
#ifdef OFFIX_DND
|
#ifdef OFFIX_DND
|
||||||
_XA_DND_SELECTION = XInternAtom(dpy, "DndSelection", False);
|
_XA_DND_SELECTION = XInternAtom(dpy, "DndSelection", False);
|
||||||
_XA_DND_PROTOCOL = XInternAtom(dpy, "DndProtocol", False);
|
_XA_DND_PROTOCOL = XInternAtom(dpy, "DndProtocol", False);
|
||||||
|
|||||||
Reference in New Issue
Block a user