adjust how the config is loaded. it is not loaded at all during the screen's constructor, it is loaded afterwards and applied, but before windows are managed

This commit is contained in:
Dana Jansens 2003-02-16 18:14:05 +00:00
parent 893faed7b1
commit 16a952c35d
4 changed files with 48 additions and 20 deletions

View file

@ -3,6 +3,11 @@
#include "config.h" #include "config.h"
#include "config.hh" #include "config.hh"
#include "otk/screeninfo.hh"
#include "otk/renderstyle.hh"
#include "otk/util.hh"
#include "otk/property.hh"
#include "otk/display.hh"
extern "C" { extern "C" {
#include <Python.h> #include <Python.h>
@ -51,8 +56,11 @@ bool python_get_stringlist(const char *name, std::vector<otk::ustring> *value)
return true; return true;
} }
Config::Config() void Config::load()
{ {
const otk::ScreenInfo *info = otk::display->screenInfo(_screen);
Window root = info->rootWindow();
// set up access to the python global variables // set up access to the python global variables
PyObject *obmodule = PyImport_ImportModule("config"); PyObject *obmodule = PyImport_ImportModule("config");
obdict = PyModule_GetDict(obmodule); obdict = PyModule_GetDict(obmodule);
@ -61,6 +69,12 @@ Config::Config()
python_get_stringlist("DESKTOP_NAMES", &desktop_names); python_get_stringlist("DESKTOP_NAMES", &desktop_names);
python_get_string("THEME", &theme); python_get_string("THEME", &theme);
// initialize the screen's style
otk::RenderStyle::setStyle(_screen, theme);
// draw the root window
otk::bexec("obsetroot " + otk::RenderStyle::style(_screen)->rootArgs(),
info->displayString());
if (!python_get_string("TITLEBAR_LAYOUT", &titlebar_layout)) { if (!python_get_string("TITLEBAR_LAYOUT", &titlebar_layout)) {
fprintf(stderr, _("Unable to load config.%s\n"), "TITLEBAR_LAYOUT"); fprintf(stderr, _("Unable to load config.%s\n"), "TITLEBAR_LAYOUT");
@ -79,6 +93,28 @@ Config::Config()
fprintf(stderr, _("Unable to load config.%s\n"), "NUMBER_OF_DESKTOPS"); fprintf(stderr, _("Unable to load config.%s\n"), "NUMBER_OF_DESKTOPS");
::exit(1); ::exit(1);
} }
// Set the net_desktop_names property
otk::Property::set(root,
otk::Property::atoms.net_desktop_names,
otk::Property::utf8, desktop_names);
// the above set() will cause screen::updateDesktopNames to fire right away
// so we have a list of desktop names
XEvent ce;
ce.xclient.type = ClientMessage;
ce.xclient.message_type = otk::Property::atoms.net_number_of_desktops;
ce.xclient.display = **otk::display;
ce.xclient.window = root;
ce.xclient.format = 32;
ce.xclient.data.l[0] = num_desktops;
XSendEvent(**otk::display, root, False,
SubstructureNotifyMask | SubstructureRedirectMask, &ce);
}
Config::Config(int screen)
: _screen(screen)
{
} }
Config::~Config() Config::~Config()

View file

@ -13,7 +13,10 @@
namespace ob { namespace ob {
struct Config { class Config {
int _screen;
public:
std::vector<otk::ustring> desktop_names; std::vector<otk::ustring> desktop_names;
otk::ustring theme; otk::ustring theme;
otk::ustring titlebar_layout; otk::ustring titlebar_layout;
@ -21,8 +24,10 @@ struct Config {
long drag_threshold; long drag_threshold;
long num_desktops; long num_desktops;
Config(); Config(int screen);
~Config(); ~Config();
void load();
}; };
} }

View file

@ -40,7 +40,8 @@ namespace ob {
Screen::Screen(int screen) Screen::Screen(int screen)
: _number(screen) : _number(screen),
_config(screen)
{ {
assert(screen >= 0); assert(screen < ScreenCount(**otk::display)); assert(screen >= 0); assert(screen < ScreenCount(**otk::display));
_info = otk::display->screenInfo(screen); _info = otk::display->screenInfo(screen);
@ -67,12 +68,6 @@ Screen::Screen(int screen)
XDefineCursor(**otk::display, _info->rootWindow(), XDefineCursor(**otk::display, _info->rootWindow(),
openbox->cursors().session); openbox->cursors().session);
// initialize the screen's style
otk::RenderStyle::setStyle(_number, _config.theme);
// draw the root window
otk::bexec("obsetroot " + otk::RenderStyle::style(_number)->rootArgs(),
_info->displayString());
// set up notification of netwm support // set up notification of netwm support
changeSupportedAtoms(); changeSupportedAtoms();
@ -83,17 +78,9 @@ Screen::Screen(int screen)
otk::Property::atoms.net_desktop_geometry, otk::Property::atoms.net_desktop_geometry,
otk::Property::atoms.cardinal, geometry, 2); otk::Property::atoms.cardinal, geometry, 2);
// Set the net_desktop_names property
otk::Property::set(_info->rootWindow(),
otk::Property::atoms.net_desktop_names,
otk::Property::utf8, _config.desktop_names);
// the above set() will cause the updateDesktopNames to fire right away so
// we have a list of desktop names
_desktop = 0; _desktop = 0;
changeNumDesktops(_config.num_desktops); // set the hint changeNumDesktops(1); // set the hint
changeDesktop(0); // set the hint changeDesktop(0); // set the hint
// don't start in showing-desktop mode // don't start in showing-desktop mode

View file

@ -165,7 +165,7 @@ public:
inline bool managed() const { return _managed; } inline bool managed() const { return _managed; }
//! Returns the config options set by the user scripts //! Returns the config options set by the user scripts
const Config& config() const { return _config; } Config& config() { return _config; }
//! An offscreen window which gets focus when nothing else has it //! An offscreen window which gets focus when nothing else has it
inline Window focuswindow() const { return _focuswindow; } inline Window focuswindow() const { return _focuswindow; }