fixed event mask, netwm and gnome workspace and workspace_count atoms

This commit is contained in:
fluxgen 2002-02-04 07:01:06 +00:00
parent 466e2980cc
commit 60c51badc4

View file

@ -230,7 +230,7 @@ resource(rm, screenname, altscreenname)
event_mask = ColormapChangeMask | EnterWindowMask | PropertyChangeMask | event_mask = ColormapChangeMask | EnterWindowMask | PropertyChangeMask |
SubstructureRedirectMask | KeyPressMask | KeyReleaseMask | SubstructureRedirectMask | KeyPressMask | KeyReleaseMask |
ButtonPressMask | ButtonReleaseMask; ButtonPressMask | ButtonReleaseMask| SubstructureNotifyMask;
XErrorHandler old = XSetErrorHandler((XErrorHandler) anotherWMRunning); XErrorHandler old = XSetErrorHandler((XErrorHandler) anotherWMRunning);
XSelectInput(getBaseDisplay()->getXDisplay(), getRootWindow(), event_mask); XSelectInput(getBaseDisplay()->getXDisplay(), getRootWindow(), event_mask);
@ -294,6 +294,7 @@ resource(rm, screenname, altscreenname)
image_control, fluxbox->getStyleFilename(), getRootCommand().c_str()); image_control, fluxbox->getStyleFilename(), getRootCommand().c_str());
#ifdef GNOME #ifdef GNOME
/* create the GNOME window */ /* create the GNOME window */
Window gnome_win = XCreateSimpleWindow(getBaseDisplay()->getXDisplay(), Window gnome_win = XCreateSimpleWindow(getBaseDisplay()->getXDisplay(),
getRootWindow(), 0, 0, 5, 5, 0, 0, 0); getRootWindow(), 0, 0, 5, 5, 0, 0, 0);
@ -307,14 +308,30 @@ resource(rm, screenname, altscreenname)
getBaseDisplay()->getGnomeSupportingWMCheckAtom(), getBaseDisplay()->getGnomeSupportingWMCheckAtom(),
XA_CARDINAL, 32, PropModeReplace, (unsigned char *) &gnome_win, 1); XA_CARDINAL, 32, PropModeReplace, (unsigned char *) &gnome_win, 1);
Atom gnomeatomlist[1] = {getBaseDisplay()->getGnomeWorkspaceAtom()}; Atom gnomeatomlist[] = {
getBaseDisplay()->getGnomeWorkspaceAtom(),
getBaseDisplay()->getGnomeWorkspaceCountAtom(),
getBaseDisplay()->getGnomeStateAtom()
};
XChangeProperty(getBaseDisplay()->getXDisplay(), getRootWindow(),
getBaseDisplay()->getGnomeProtAtom(), XA_ATOM, 32, PropModeReplace,
(unsigned char *)gnomeatomlist, (sizeof gnomeatomlist)/sizeof gnomeatomlist[0]);
XChangeProperty(getBaseDisplay()->getXDisplay(),
getRootWindow(), getBaseDisplay()->getGnomeProtAtom(),
XA_ATOM, 32, PropModeReplace,
(unsigned char *)gnomeatomlist, 1);
#endif #endif
#ifdef NEWWMSPEC
Atom netwmsupported[] = {
// getBaseDisplay()->getNETWMStateAtom(),
getBaseDisplay()->getNETNumberOfDesktopsAtom(),
getBaseDisplay()->getNETCurrentDesktopAtom(),
getBaseDisplay()->getNETSupportingWMCheckAtom(),
};
XChangeProperty(getBaseDisplay()->getXDisplay(), getRootWindow(),
getBaseDisplay()->getNETSupportedAtom(), XA_ATOM, 32, PropModeReplace,
(unsigned char *)netwmsupported, (sizeof netwmsupported)/sizeof netwmsupported[0]);
#endif //!NEWWMSPEC
const char *s = i18n->getMessage( const char *s = i18n->getMessage(
#ifdef NLS #ifdef NLS
@ -423,6 +440,7 @@ resource(rm, screenname, altscreenname)
rootmenu->update(); rootmenu->update();
changeWorkspaceID(0); changeWorkspaceID(0);
updateNetizenWorkspaceCount();
int i; int i;
unsigned int nchild; unsigned int nchild;
@ -432,6 +450,7 @@ resource(rm, screenname, altscreenname)
// preen the window list of all icon windows... for better dockapp support // preen the window list of all icon windows... for better dockapp support
for (i = 0; i < (int) nchild; i++) { for (i = 0; i < (int) nchild; i++) {
if (children[i] == None) continue; if (children[i] == None) continue;
XWMHints *wmhints = XGetWMHints(getBaseDisplay()->getXDisplay(), XWMHints *wmhints = XGetWMHints(getBaseDisplay()->getXDisplay(),
@ -440,13 +459,12 @@ resource(rm, screenname, altscreenname)
if (wmhints) { if (wmhints) {
if ((wmhints->flags & IconWindowHint) && if ((wmhints->flags & IconWindowHint) &&
(wmhints->icon_window != children[i])) (wmhints->icon_window != children[i]))
for (int j = 0; j < (int) nchild; j++) for (int j = 0; j < (int) nchild; j++) {
if (children[j] == wmhints->icon_window) { if (children[j] == wmhints->icon_window) {
children[j] = None; children[j] = None;
break; break;
} }
}
XFree(wmhints); XFree(wmhints);
} }
} }
@ -840,9 +858,29 @@ void BScreen::removeNetizen(Window w) {
void BScreen::updateNetizenCurrentWorkspace(void) { void BScreen::updateNetizenCurrentWorkspace(void) {
#ifdef NEWWMSPEC
//update _NET_WM_CURRENT_DESKTOP
int workspace = getCurrentWorkspaceID();
XChangeProperty(getBaseDisplay()->getXDisplay(), getRootWindow(),
getBaseDisplay()->getNETCurrentDesktopAtom(), XA_CARDINAL, 32, PropModeReplace,
(unsigned char *)&workspace, 1);
#endif
#ifdef GNOME
//update _WIN_WORKSPACE
int gnome_workspace = getCurrentWorkspaceID();
XChangeProperty(getBaseDisplay()->getXDisplay(), getRootWindow(),
getBaseDisplay()->getGnomeWorkspaceAtom(), XA_CARDINAL, 32, PropModeReplace,
(unsigned char *)&gnome_workspace, 1);
#endif
LinkedListIterator<Netizen> it(netizenList); LinkedListIterator<Netizen> it(netizenList);
for (; it.current(); it++) for (; it.current(); it++)
it.current()->sendCurrentWorkspace(); it.current()->sendCurrentWorkspace();
#ifdef DEBUG
cerr<<__FILE__<<"("<<__LINE__<<"): Update Current Workspace"<<endl;
#endif
} }
@ -850,6 +888,27 @@ void BScreen::updateNetizenWorkspaceCount(void) {
LinkedListIterator<Netizen> it(netizenList); LinkedListIterator<Netizen> it(netizenList);
for (; it.current(); it++) for (; it.current(); it++)
it.current()->sendWorkspaceCount(); it.current()->sendWorkspaceCount();
#ifdef NEWWMSPEC
//update _NET_WM_NUMBER_OF_DESKTOPS
int numworkspaces = getCount()-1;
XChangeProperty(getBaseDisplay()->getXDisplay(), getRootWindow(),
getBaseDisplay()->getNETNumberOfDesktopsAtom(), XA_CARDINAL, 32, PropModeReplace,
(unsigned char *)&numworkspaces, 1);
#endif
#ifdef GNOME
{
int numworkspaces = getCount();
XChangeProperty(getBaseDisplay()->getXDisplay(), getRootWindow(),
getBaseDisplay()->getGnomeWorkspaceCountAtom(), XA_CARDINAL, 32, PropModeReplace,
(unsigned char *)&numworkspaces, 1);
}
#endif
#ifdef DEBUG
cerr<<__FILE__<<"("<<__LINE__<<"): Update Workspace Count"<<endl;
#endif
} }