remove _NET_WM_DESKTOP, _NET_WM_STATE, and Gnome hints on client close

This commit is contained in:
markt 2007-07-08 22:49:12 +00:00
parent 135019abf9
commit 857a6d0a6a
4 changed files with 24 additions and 1 deletions

View file

@ -1,5 +1,8 @@
(Format: Year/Month/Day) (Format: Year/Month/Day)
Changes for 1.0.0: Changes for 1.0.0:
*07/07/08:
* Clean up state and workspace window properties on client close (Mark)
Ewmh.cc Gnome.cc/hh
*07/07/07: *07/07/07:
* Don't overwrite changes to init file on reconfigure (Mark) * Don't overwrite changes to init file on reconfigure (Mark)
Workspace.cc fluxbox.cc/hh Workspace.cc fluxbox.cc/hh

View file

@ -382,8 +382,17 @@ void Ewmh::updateFocusedWindow(BScreen &screen, Window win) {
(unsigned char *)&win, 1); (unsigned char *)&win, 1);
} }
// EWMH says, regarding _NET_WM_STATE and _NET_WM_DESKTOP
// The Window Manager should remove the property whenever a window is withdrawn
// but it should leave the property in place when it is shutting down
void Ewmh::updateClientClose(WinClient &winclient){ void Ewmh::updateClientClose(WinClient &winclient){
updateClientList(winclient.screen()); updateClientList(winclient.screen());
if (!winclient.screen().isShuttingdown()) {
XDeleteProperty(FbTk::App::instance()->display(), winclient.window(),
m_net_wm_state);
XDeleteProperty(FbTk::App::instance()->display(), winclient.window(),
m_net_wm_desktop);
}
} }
void Ewmh::updateClientList(BScreen &screen) { void Ewmh::updateClientList(BScreen &screen) {

View file

@ -215,6 +215,17 @@ void Gnome::updateClientList(BScreen &screen) {
delete[] wl; delete[] wl;
} }
void Gnome::updateClientClose(WinClient &client) {
if (client.screen().isShuttingdown()) {
XDeleteProperty(FbTk::App::instance()->display(), client.window(),
m_gnome_wm_win_workspace);
XDeleteProperty(FbTk::App::instance()->display(), client.window(),
m_gnome_wm_win_layer);
XDeleteProperty(FbTk::App::instance()->display(), client.window(),
m_gnome_wm_win_state);
}
}
void Gnome::updateWorkspaceNames(BScreen &screen) { void Gnome::updateWorkspaceNames(BScreen &screen) {
size_t number_of_desks = screen.getWorkspaceNames().size(); size_t number_of_desks = screen.getWorkspaceNames().size();

View file

@ -72,6 +72,7 @@ public:
void updateWorkarea(BScreen &) { } void updateWorkarea(BScreen &) { }
void updateFocusedWindow(BScreen &, Window) { } void updateFocusedWindow(BScreen &, Window) { }
void updateClientList(BScreen &screen); void updateClientList(BScreen &screen);
void updateClientClose(WinClient &winclient);
void updateWorkspaceNames(BScreen &screen); void updateWorkspaceNames(BScreen &screen);
void updateCurrentWorkspace(BScreen &screen); void updateCurrentWorkspace(BScreen &screen);
void updateWorkspaceCount(BScreen &screen); void updateWorkspaceCount(BScreen &screen);
@ -85,7 +86,6 @@ public:
// ignore these ones // ignore these ones
void updateFrameClose(FluxboxWindow &win) {} void updateFrameClose(FluxboxWindow &win) {}
void updateClientClose(WinClient &winclient) {}
bool propertyNotify(WinClient &winclient, Atom the_property); bool propertyNotify(WinClient &winclient, Atom the_property);
private: private: