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 |
SubstructureRedirectMask | KeyPressMask | KeyReleaseMask |
ButtonPressMask | ButtonReleaseMask;
ButtonPressMask | ButtonReleaseMask| SubstructureNotifyMask;
XErrorHandler old = XSetErrorHandler((XErrorHandler) anotherWMRunning);
XSelectInput(getBaseDisplay()->getXDisplay(), getRootWindow(), event_mask);
@ -294,6 +294,7 @@ resource(rm, screenname, altscreenname)
image_control, fluxbox->getStyleFilename(), getRootCommand().c_str());
#ifdef GNOME
/* create the GNOME window */
Window gnome_win = XCreateSimpleWindow(getBaseDisplay()->getXDisplay(),
getRootWindow(), 0, 0, 5, 5, 0, 0, 0);
@ -307,14 +308,30 @@ resource(rm, screenname, altscreenname)
getBaseDisplay()->getGnomeSupportingWMCheckAtom(),
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
#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(
#ifdef NLS
@ -399,11 +416,11 @@ resource(rm, screenname, altscreenname)
workspacemenu->insert(i18n->
getMessage(
#ifdef NLS
#ifdef NLS
IconSet, IconIcons,
#else // !NLS
#else // !NLS
0, 0,
#endif // NLS
#endif // NLS
"Icons"),
iconmenu);
workspacemenu->update();
@ -413,9 +430,9 @@ resource(rm, screenname, altscreenname)
toolbar = new Toolbar(this);
#ifdef SLIT
#ifdef SLIT
slit = new Slit(this);
#endif // SLIT
#endif // SLIT
InitMenu();
@ -423,6 +440,7 @@ resource(rm, screenname, altscreenname)
rootmenu->update();
changeWorkspaceID(0);
updateNetizenWorkspaceCount();
int i;
unsigned int nchild;
@ -432,6 +450,7 @@ resource(rm, screenname, altscreenname)
// preen the window list of all icon windows... for better dockapp support
for (i = 0; i < (int) nchild; i++) {
if (children[i] == None) continue;
XWMHints *wmhints = XGetWMHints(getBaseDisplay()->getXDisplay(),
@ -440,13 +459,12 @@ resource(rm, screenname, altscreenname)
if (wmhints) {
if ((wmhints->flags & IconWindowHint) &&
(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) {
children[j] = None;
break;
}
}
XFree(wmhints);
}
}
@ -840,9 +858,29 @@ void BScreen::removeNetizen(Window w) {
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);
for (; it.current(); it++)
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);
for (; it.current(); it++)
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
}