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:
parent
893faed7b1
commit
16a952c35d
4 changed files with 48 additions and 20 deletions
|
@ -3,6 +3,11 @@
|
|||
#include "config.h"
|
||||
|
||||
#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" {
|
||||
#include <Python.h>
|
||||
|
@ -51,8 +56,11 @@ bool python_get_stringlist(const char *name, std::vector<otk::ustring> *value)
|
|||
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
|
||||
PyObject *obmodule = PyImport_ImportModule("config");
|
||||
obdict = PyModule_GetDict(obmodule);
|
||||
|
@ -61,6 +69,12 @@ Config::Config()
|
|||
python_get_stringlist("DESKTOP_NAMES", &desktop_names);
|
||||
|
||||
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)) {
|
||||
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");
|
||||
::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()
|
||||
|
|
|
@ -13,7 +13,10 @@
|
|||
|
||||
namespace ob {
|
||||
|
||||
struct Config {
|
||||
class Config {
|
||||
int _screen;
|
||||
|
||||
public:
|
||||
std::vector<otk::ustring> desktop_names;
|
||||
otk::ustring theme;
|
||||
otk::ustring titlebar_layout;
|
||||
|
@ -21,8 +24,10 @@ struct Config {
|
|||
long drag_threshold;
|
||||
long num_desktops;
|
||||
|
||||
Config();
|
||||
Config(int screen);
|
||||
~Config();
|
||||
|
||||
void load();
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -40,7 +40,8 @@ namespace ob {
|
|||
|
||||
|
||||
Screen::Screen(int screen)
|
||||
: _number(screen)
|
||||
: _number(screen),
|
||||
_config(screen)
|
||||
{
|
||||
assert(screen >= 0); assert(screen < ScreenCount(**otk::display));
|
||||
_info = otk::display->screenInfo(screen);
|
||||
|
@ -67,12 +68,6 @@ Screen::Screen(int screen)
|
|||
XDefineCursor(**otk::display, _info->rootWindow(),
|
||||
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
|
||||
changeSupportedAtoms();
|
||||
|
||||
|
@ -83,17 +78,9 @@ Screen::Screen(int screen)
|
|||
otk::Property::atoms.net_desktop_geometry,
|
||||
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;
|
||||
|
||||
changeNumDesktops(_config.num_desktops); // set the hint
|
||||
|
||||
changeNumDesktops(1); // set the hint
|
||||
changeDesktop(0); // set the hint
|
||||
|
||||
// don't start in showing-desktop mode
|
||||
|
|
|
@ -165,7 +165,7 @@ public:
|
|||
inline bool managed() const { return _managed; }
|
||||
|
||||
//! 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
|
||||
inline Window focuswindow() const { return _focuswindow; }
|
||||
|
|
Loading…
Reference in a new issue