diff options
| author | Dana Jansens <danakj@orodu.net> | 2003-02-10 16:56:03 +0000 |
|---|---|---|
| committer | Dana Jansens <danakj@orodu.net> | 2003-02-10 16:56:03 +0000 |
| commit | 265cf6c9478860336816570a141198d9257a27a1 (patch) | |
| tree | 0b41108bd976adc4fb6ce0bc64f7e8c82d8798d7 /src/screen.cc | |
| parent | f305e7f18dd9745e99518da7ca70183c3084a991 (diff) | |
show desktop mode works!
Diffstat (limited to 'src/screen.cc')
| -rw-r--r-- | src/screen.cc | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/src/screen.cc b/src/screen.cc index dfcc8375..3a064560 100644 --- a/src/screen.cc +++ b/src/screen.cc @@ -44,6 +44,8 @@ Screen::Screen(int screen) assert(screen >= 0); assert(screen < ScreenCount(**otk::display)); _info = otk::display->screenInfo(screen); + _showing_desktop = false; + ::running = false; XErrorHandler old = XSetErrorHandler(::anotherWMRunning); XSelectInput(**otk::display, _info->rootWindow(), @@ -397,13 +399,13 @@ void Screen::changeSupportedAtoms() otk::Property::atoms.net_client_list_stacking, otk::Property::atoms.net_desktop_names, otk::Property::atoms.net_close_window, + otk::Property::atoms.net_desktop_layout, + otk::Property::atoms.net_showing_desktop, otk::Property::atoms.net_wm_name, otk::Property::atoms.net_wm_visible_name, otk::Property::atoms.net_wm_icon_name, otk::Property::atoms.net_wm_visible_icon_name, -/* otk::Property::atoms.net_wm_desktop, -*/ otk::Property::atoms.net_wm_strut, otk::Property::atoms.net_wm_window_type, otk::Property::atoms.net_wm_window_type_desktop, @@ -878,6 +880,15 @@ void Screen::installColormap(bool install) const XUninstallColormap(**otk::display, _info->colormap()); } +void Screen::showDesktop(bool show) +{ + if (show == _showing_desktop) return; // no change + + _showing_desktop = show; + ClientList::iterator it, end = clients.end(); + for (it = clients.begin(); it != end; ++it) + (*it)->showhide(); +} void Screen::propertyHandler(const XPropertyEvent &e) { @@ -912,6 +923,8 @@ void Screen::clientMessageHandler(const XClientMessageEvent &e) changeDesktop(e.data.l[0]); } else if (e.message_type == otk::Property::atoms.net_number_of_desktops) { changeNumDesktops(e.data.l[0]); + } else if (e.message_type == otk::Property::atoms.net_showing_desktop) { + showDesktop(e.data.l[0] != 0); } } @@ -929,8 +942,11 @@ void Screen::mapRequestHandler(const XMapRequestEvent &e) #ifdef DEBUG printf("DEBUG: MAP REQUEST CAUGHT IN SCREEN. IGNORED.\n"); #endif - } else + } else { + if (_showing_desktop) + showDesktop(false); // leave showing-the-desktop mode manageWindow(e.window); + } } } |
