parent
32eea9ab37
commit
a3832d7e8f
2
src/E.h
2
src/E.h
|
@ -2064,6 +2064,8 @@ void BeginNewDeskFocus(void);
|
||||||
void NewDeskFocus(void);
|
void NewDeskFocus(void);
|
||||||
|
|
||||||
/* icccm.c functions */
|
/* icccm.c functions */
|
||||||
|
void ICCCM_Init(void);
|
||||||
|
void ICCCM_ProcessClientMessage(XClientMessageEvent * event);
|
||||||
void ICCCM_GetTitle(EWin * ewin, Atom atom_change);
|
void ICCCM_GetTitle(EWin * ewin, Atom atom_change);
|
||||||
void ICCCM_GetColormap(EWin * ewin);
|
void ICCCM_GetColormap(EWin * ewin);
|
||||||
void ICCCM_Delete(EWin * ewin);
|
void ICCCM_Delete(EWin * ewin);
|
||||||
|
|
|
@ -40,6 +40,8 @@ static Time last_time = 0;
|
||||||
static int last_button = 0;
|
static int last_button = 0;
|
||||||
static int pgd_x = 0, pgd_y = 0;
|
static int pgd_x = 0, pgd_y = 0;
|
||||||
|
|
||||||
|
static Atom xa_ENL_MSG = 0;
|
||||||
|
|
||||||
static void
|
static void
|
||||||
ToolTipTimeout(int val, void *data)
|
ToolTipTimeout(int val, void *data)
|
||||||
{
|
{
|
||||||
|
@ -97,11 +99,7 @@ ToolTipTimeout(int val, void *data)
|
||||||
void
|
void
|
||||||
HandleClientMessage(XEvent * ev)
|
HandleClientMessage(XEvent * ev)
|
||||||
{
|
{
|
||||||
EWin *ewin;
|
#if DEBUG_HINTS
|
||||||
|
|
||||||
static Atom a1 = 0, a6 = 0;
|
|
||||||
|
|
||||||
#if DEBUG_EWMH
|
|
||||||
char *name = XGetAtomName(disp, ev->xclient.message_type);
|
char *name = XGetAtomName(disp, ev->xclient.message_type);
|
||||||
|
|
||||||
printf
|
printf
|
||||||
|
@ -111,38 +109,15 @@ HandleClientMessage(XEvent * ev)
|
||||||
ev->xclient.data.l[3]);
|
ev->xclient.data.l[3]);
|
||||||
XFree(name);
|
XFree(name);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
EDBUG(5, "HandleClientMessage");
|
EDBUG(5, "HandleClientMessage");
|
||||||
if (!a1)
|
|
||||||
a1 = XInternAtom(disp, "ENL_MSG", False);
|
if (!xa_ENL_MSG)
|
||||||
if (!a6)
|
xa_ENL_MSG = XInternAtom(disp, "ENL_MSG", False);
|
||||||
a6 = XInternAtom(disp, "WM_CHANGE_STATE", False);
|
if (ev->xclient.message_type == xa_ENL_MSG)
|
||||||
if (ev->xclient.message_type == a1)
|
|
||||||
{
|
{
|
||||||
HandleComms(ev);
|
HandleComms(ev);
|
||||||
EDBUG_RETURN_;
|
EDBUG_RETURN_;
|
||||||
}
|
}
|
||||||
if (ev->xclient.message_type == a6)
|
|
||||||
{
|
|
||||||
ewin =
|
|
||||||
FindItem(NULL, ev->xclient.window, LIST_FINDBY_ID, LIST_TYPE_EWIN);
|
|
||||||
if (ewin == NULL)
|
|
||||||
EDBUG_RETURN_;
|
|
||||||
if (ev->xclient.data.l[0] == IconicState)
|
|
||||||
{
|
|
||||||
if (!(ewin->iconified))
|
|
||||||
IconifyEwin(ewin);
|
|
||||||
}
|
|
||||||
#if 0
|
|
||||||
else if (ev->xclient.data.l[0] == NormalState)
|
|
||||||
{
|
|
||||||
if (ewin->iconified)
|
|
||||||
DeIconifyEwin(ewin);
|
|
||||||
}
|
|
||||||
HintsSetWindowState(ewin);
|
|
||||||
#endif
|
|
||||||
EDBUG_RETURN_;
|
|
||||||
}
|
|
||||||
|
|
||||||
HintsProcessClientMessage(&(ev->xclient));
|
HintsProcessClientMessage(&(ev->xclient));
|
||||||
|
|
||||||
|
@ -1145,7 +1120,16 @@ HandleProperty(XEvent * ev)
|
||||||
char title[10240];
|
char title[10240];
|
||||||
int desktop;
|
int desktop;
|
||||||
|
|
||||||
|
#if DEBUG_HINTS
|
||||||
|
char *name = XGetAtomName(disp, ev->xproperty.atom);
|
||||||
|
|
||||||
|
printf("HandleProperty: Atom=%s(%d) id=%#x\n",
|
||||||
|
name, (unsigned)ev->xproperty.atom, (unsigned)ev->xproperty.window);
|
||||||
|
XFree(name);
|
||||||
|
#endif
|
||||||
|
|
||||||
EDBUG(5, "HandleProperty");
|
EDBUG(5, "HandleProperty");
|
||||||
|
|
||||||
win = ev->xproperty.window;
|
win = ev->xproperty.window;
|
||||||
ewin = FindItem(NULL, win, LIST_FINDBY_ID, LIST_TYPE_EWIN);
|
ewin = FindItem(NULL, win, LIST_FINDBY_ID, LIST_TYPE_EWIN);
|
||||||
if (ewin)
|
if (ewin)
|
||||||
|
|
18
src/ewmh.c
18
src/ewmh.c
|
@ -675,15 +675,6 @@ EWMH_ProcessClientMessage(XClientMessageEvent * event)
|
||||||
{
|
{
|
||||||
EWin *ewin;
|
EWin *ewin;
|
||||||
|
|
||||||
#if DEBUG_EWMH
|
|
||||||
char *name = XGetAtomName(disp, event->message_type);
|
|
||||||
|
|
||||||
printf
|
|
||||||
("EWMH_ProcessClientMessage: ev_type=%s(%d) ev_win=%#x data[0-3]= %08lx %08lx %08lx %08lx\n",
|
|
||||||
name, (unsigned)event->message_type, (unsigned)event->window,
|
|
||||||
event->data.l[0], event->data.l[1], event->data.l[2], event->data.l[3]);
|
|
||||||
XFree(name);
|
|
||||||
#endif
|
|
||||||
EDBUG(6, "EWMH_ProcessClientMessage");
|
EDBUG(6, "EWMH_ProcessClientMessage");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -692,10 +683,12 @@ EWMH_ProcessClientMessage(XClientMessageEvent * event)
|
||||||
if (event->message_type == _NET_CURRENT_DESKTOP)
|
if (event->message_type == _NET_CURRENT_DESKTOP)
|
||||||
{
|
{
|
||||||
GotoDesktop(event->data.l[0]);
|
GotoDesktop(event->data.l[0]);
|
||||||
|
goto exit;
|
||||||
}
|
}
|
||||||
else if (event->message_type == _NET_DESKTOP_VIEWPORT)
|
else if (event->message_type == _NET_DESKTOP_VIEWPORT)
|
||||||
{
|
{
|
||||||
SetCurrentArea(event->data.l[0] / root.w, event->data.l[1] / root.h);
|
SetCurrentArea(event->data.l[0] / root.w, event->data.l[1] / root.h);
|
||||||
|
goto exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -864,13 +857,6 @@ EWMH_ProcessClientMessage(XClientMessageEvent * event)
|
||||||
void
|
void
|
||||||
EWMH_ProcessPropertyChange(EWin * ewin, Atom atom_change)
|
EWMH_ProcessPropertyChange(EWin * ewin, Atom atom_change)
|
||||||
{
|
{
|
||||||
#if DEBUG_EWMH
|
|
||||||
char *name = XGetAtomName(disp, atom_change);
|
|
||||||
|
|
||||||
printf("EWMH_ProcessPropertyChange: Atom=%s(%d) id=%#x\n",
|
|
||||||
name, atom_change, (ewin) ? ewin->client.win : 0);
|
|
||||||
XFree(name);
|
|
||||||
#endif
|
|
||||||
EDBUG(6, "EWMH_ProcessPropertyChange");
|
EDBUG(6, "EWMH_ProcessPropertyChange");
|
||||||
|
|
||||||
if (atom_change == _NET_WM_DESKTOP)
|
if (atom_change == _NET_WM_DESKTOP)
|
||||||
|
|
22
src/hints.c
22
src/hints.c
|
@ -33,6 +33,7 @@ void
|
||||||
HintsInit(void)
|
HintsInit(void)
|
||||||
{
|
{
|
||||||
EDBUG(6, "HintsInit");
|
EDBUG(6, "HintsInit");
|
||||||
|
ICCCM_Init();
|
||||||
#if ENABLE_KDE
|
#if ENABLE_KDE
|
||||||
/* ??? */
|
/* ??? */
|
||||||
#endif
|
#endif
|
||||||
|
@ -187,7 +188,6 @@ HintsSetWindowHints(EWin * ewin)
|
||||||
#if ENABLE_KDE
|
#if ENABLE_KDE
|
||||||
int kde_support = 0;
|
int kde_support = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
EDBUG(6, "HintsSetWindowHints");
|
EDBUG(6, "HintsSetWindowHints");
|
||||||
#if ENABLE_KDE
|
#if ENABLE_KDE
|
||||||
kde_support = mode.kde_support;
|
kde_support = mode.kde_support;
|
||||||
|
@ -265,16 +265,26 @@ HintsProcessPropertyChange(EWin * ewin, Atom atom_change)
|
||||||
void
|
void
|
||||||
HintsProcessClientMessage(XClientMessageEvent * event)
|
HintsProcessClientMessage(XClientMessageEvent * event)
|
||||||
{
|
{
|
||||||
|
char *name = XGetAtomName(disp, event->message_type);
|
||||||
|
|
||||||
EDBUG(6, "HintsHandleClientMessage");
|
EDBUG(6, "HintsHandleClientMessage");
|
||||||
#if ENABLE_KDE
|
|
||||||
if (mode.kde_support)
|
if (!memcmp(name, "WM_", 3))
|
||||||
KDE_ProcessClientMessage(event);
|
ICCCM_ProcessClientMessage(event);
|
||||||
|
#if ENABLE_EWMH
|
||||||
|
else if (!memcmp(name, "_NET_", 5))
|
||||||
|
EWMH_ProcessClientMessage(event);
|
||||||
#endif
|
#endif
|
||||||
#if ENABLE_GNOME
|
#if ENABLE_GNOME
|
||||||
|
else if (!memcmp(name, "_WIN_", 5))
|
||||||
GNOME_ProcessClientMessage(event);
|
GNOME_ProcessClientMessage(event);
|
||||||
#endif
|
#endif
|
||||||
#if ENABLE_EWMH
|
#if ENABLE_KDE
|
||||||
EWMH_ProcessClientMessage(event);
|
else if (!memcmp(name, "KWM_", 4))
|
||||||
|
{
|
||||||
|
if (mode.kde_support)
|
||||||
|
KDE_ProcessClientMessage(event);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
EDBUG_RETURN_;
|
EDBUG_RETURN_;
|
||||||
}
|
}
|
||||||
|
|
37
src/icccm.c
37
src/icccm.c
|
@ -23,6 +23,43 @@
|
||||||
*/
|
*/
|
||||||
#include "E.h"
|
#include "E.h"
|
||||||
|
|
||||||
|
static Atom xa_WM_CHANGE_STATE = 0;
|
||||||
|
|
||||||
|
void
|
||||||
|
ICCCM_Init(void)
|
||||||
|
{
|
||||||
|
xa_WM_CHANGE_STATE = XInternAtom(disp, "WM_CHANGE_STATE", False);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ICCCM_ProcessClientMessage(XClientMessageEvent * event)
|
||||||
|
{
|
||||||
|
EWin *ewin;
|
||||||
|
|
||||||
|
if (event->message_type == xa_WM_CHANGE_STATE)
|
||||||
|
{
|
||||||
|
ewin = FindItem(NULL, event->window, LIST_FINDBY_ID, LIST_TYPE_EWIN);
|
||||||
|
if (ewin == NULL)
|
||||||
|
goto exit;
|
||||||
|
|
||||||
|
if (event->data.l[0] == IconicState)
|
||||||
|
{
|
||||||
|
if (!(ewin->iconified))
|
||||||
|
IconifyEwin(ewin);
|
||||||
|
}
|
||||||
|
#if 0
|
||||||
|
else if (event->data.l[0] == NormalState)
|
||||||
|
{
|
||||||
|
if (ewin->iconified)
|
||||||
|
DeIconifyEwin(ewin);
|
||||||
|
}
|
||||||
|
HintsSetWindowState(ewin);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
exit:
|
||||||
|
EDBUG_RETURN_;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ICCCM_GetTitle(EWin * ewin, Atom atom_change)
|
ICCCM_GetTitle(EWin * ewin, Atom atom_change)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue