X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=src%2Fscreen.cc;h=fcbe2ea6a4991dae3115e0b7f97ae9af84fa77bf;hb=c33ccf60cba94249b4a4d1e1832aa0ea0e28a22c;hp=f38a38fc2fab25ae2571689ecc418992034d597c;hpb=126d9fc846adfc6aee3d4cdd566f9b712b82f98c;p=chaz%2Fopenbox diff --git a/src/screen.cc b/src/screen.cc index f38a38fc..fcbe2ea6 100644 --- a/src/screen.cc +++ b/src/screen.cc @@ -90,7 +90,10 @@ OBScreen::OBScreen(int screen) } _style.load(sconfig); - // Set the netwm atoms for geomtery and viewport + // set up notification of netwm support + setSupportedAtoms(); + + // Set the netwm properties for geometry and viewport unsigned long geometry[] = { _info->width(), _info->height() }; Openbox::instance->property()->set(_info->rootWindow(), @@ -103,6 +106,11 @@ OBScreen::OBScreen(int screen) otk::OBProperty::Atom_Cardinal, viewport, 2); + // Set the net_desktop_names property + std::vector names; + python_get_stringlist("desktop_names", &names); + _root.setDesktopNames(names); + // create the window which gets focus when no clients get it XSetWindowAttributes attr; attr.override_redirect = true; @@ -129,6 +137,7 @@ OBScreen::~OBScreen() unmanageWindow(clients.front()); XDestroyWindow(otk::OBDisplay::display, _focuswindow); + XDestroyWindow(otk::OBDisplay::display, _supportwindow); delete _image_control; } @@ -264,6 +273,107 @@ void OBScreen::calcArea() } +void OBScreen::setSupportedAtoms() +{ + // create the netwm support window + _supportwindow = XCreateSimpleWindow(otk::OBDisplay::display, + _info->rootWindow(), + 0, 0, 1, 1, 0, 0, 0); + assert(_supportwindow != None); + + // set supporting window + Openbox::instance->property()->set(_info->rootWindow(), + otk::OBProperty::net_supporting_wm_check, + otk::OBProperty::Atom_Window, + _supportwindow); + + //set properties on the supporting window + Openbox::instance->property()->set(_supportwindow, + otk::OBProperty::net_wm_name, + otk::OBProperty::utf8, + "Openbox"); + Openbox::instance->property()->set(_supportwindow, + otk::OBProperty::net_supporting_wm_check, + otk::OBProperty::Atom_Window, + _supportwindow); + + + Atom supported[] = { +/* + otk::OBProperty::net_current_desktop, + otk::OBProperty::net_number_of_desktops, +*/ + otk::OBProperty::net_desktop_geometry, + otk::OBProperty::net_desktop_viewport, + otk::OBProperty::net_active_window, + otk::OBProperty::net_workarea, + otk::OBProperty::net_client_list, + otk::OBProperty::net_client_list_stacking, + otk::OBProperty::net_desktop_names, + otk::OBProperty::net_close_window, + otk::OBProperty::net_wm_name, + otk::OBProperty::net_wm_visible_name, + otk::OBProperty::net_wm_icon_name, + otk::OBProperty::net_wm_visible_icon_name, +/* + otk::OBProperty::net_wm_desktop, +*/ +/* + otk::OBProperty::net_wm_strut, +*/ + otk::OBProperty::net_wm_window_type, + otk::OBProperty::net_wm_window_type_desktop, + otk::OBProperty::net_wm_window_type_dock, + otk::OBProperty::net_wm_window_type_toolbar, + otk::OBProperty::net_wm_window_type_menu, + otk::OBProperty::net_wm_window_type_utility, + otk::OBProperty::net_wm_window_type_splash, + otk::OBProperty::net_wm_window_type_dialog, + otk::OBProperty::net_wm_window_type_normal, +/* + otk::OBProperty::net_wm_moveresize, + otk::OBProperty::net_wm_moveresize_size_topleft, + otk::OBProperty::net_wm_moveresize_size_topright, + otk::OBProperty::net_wm_moveresize_size_bottomleft, + otk::OBProperty::net_wm_moveresize_size_bottomright, + otk::OBProperty::net_wm_moveresize_move, +*/ +/* + otk::OBProperty::net_wm_allowed_actions, + otk::OBProperty::net_wm_action_move, + otk::OBProperty::net_wm_action_resize, + otk::OBProperty::net_wm_action_shade, + otk::OBProperty::net_wm_action_maximize_horz, + otk::OBProperty::net_wm_action_maximize_vert, + otk::OBProperty::net_wm_action_change_desktop, + otk::OBProperty::net_wm_action_close, +*/ + otk::OBProperty::net_wm_state, + otk::OBProperty::net_wm_state_modal, + otk::OBProperty::net_wm_state_maximized_vert, + otk::OBProperty::net_wm_state_maximized_horz, + otk::OBProperty::net_wm_state_shaded, + otk::OBProperty::net_wm_state_skip_taskbar, + otk::OBProperty::net_wm_state_skip_pager, + otk::OBProperty::net_wm_state_hidden, + otk::OBProperty::net_wm_state_fullscreen, + otk::OBProperty::net_wm_state_above, + otk::OBProperty::net_wm_state_below, + }; + const int num_supported = sizeof(supported)/sizeof(Atom); + + // convert to the atom values + for (int i = 0; i < num_supported; ++i) + supported[i] = + Openbox::instance->property()->atom((otk::OBProperty::Atoms)supported[i]); + + Openbox::instance->property()->set(_info->rootWindow(), + otk::OBProperty::net_supported, + otk::OBProperty::Atom_Atom, + supported, num_supported); +} + + void OBScreen::setClientList() { Window *windows;