summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2003-02-14 05:48:31 +0000
committerDana Jansens <danakj@orodu.net>2003-02-14 05:48:31 +0000
commit50002f2ceb4234145f3977bb14752dc930ada26c (patch)
treebfc1195dbe4d02c19e64fbb37a7a12ba55a804d5 /src
parente936cba57ee8d749d7c559dadff1ba09e886d2ec (diff)
add a default icon
Diffstat (limited to 'src')
-rw-r--r--src/client.cc44
-rw-r--r--src/config.cc31
-rw-r--r--src/config.hh6
3 files changed, 60 insertions, 21 deletions
diff --git a/src/client.cc b/src/client.cc
index bd7f7b83..70671442 100644
--- a/src/client.cc
+++ b/src/client.cc
@@ -708,6 +708,7 @@ void Client::updateIcons()
unsigned long num = (unsigned) -1;
unsigned long *data;
unsigned long w, h, i = 0;
+ bool freeit = false;
for (int j = 0; j < _nicons; ++j)
delete [] _icons[j].data;
@@ -715,35 +716,40 @@ void Client::updateIcons()
delete [] _icons;
_nicons = 0;
- if (otk::Property::get(_window, otk::Property::atoms.net_wm_icon,
- otk::Property::atoms.cardinal, &num, &data)) {
- // figure out how man valid icons are in here
- while (num - i > 2) {
- w = data[i++];
- h = data[i++];
- i += w * h;
- if (i > num) break;
- ++_nicons;
- }
+ if (!otk::Property::get(_window, otk::Property::atoms.net_wm_icon,
+ otk::Property::atoms.cardinal, &num, &data)) {
+ // use default icon(s)
+ num = openbox->screen(_screen)->config().icon_length;
+ data = openbox->screen(_screen)->config().default_icon;
+ } else
+ freeit = true;
+
+ // figure out how man valid icons are in here
+ while (num - i > 2) {
+ w = data[i++];
+ h = data[i++];
+ i += w * h;
+ if (i > num) break;
+ ++_nicons;
+ }
- _icons = new Icon[_nicons];
+ _icons = new Icon[_nicons];
- // store the icons
- i = 0;
- for (int j = 0; j < _nicons; ++j) {
- w = _icons[j].w = data[i++];
+ // store the icons
+ i = 0;
+ for (int j = 0; j < _nicons; ++j) {
+ w = _icons[j].w = data[i++];
h = _icons[j].h = data[i++];
_icons[j].data = new unsigned long[w * h];
::memcpy(_icons[j].data, &data[i], w * h * sizeof(unsigned long));
i += w * h;
assert(i <= num);
- }
-
- delete [] data;
}
+ if (freeit)
+ delete [] data;
+
if (_nicons <= 0) {
- // set the default icon(s) XXX load these from the py
_nicons = 1;
_icons = new Icon[1];
_icons[i].w = 0;
diff --git a/src/config.cc b/src/config.cc
index e4df70e1..79250e3d 100644
--- a/src/config.cc
+++ b/src/config.cc
@@ -8,6 +8,8 @@ extern "C" {
#include <Python.h>
}
+#include <cstring>
+
namespace ob {
static PyObject *obdict = NULL;
@@ -25,8 +27,10 @@ bool python_get_string(const char *name, otk::ustring *value)
{
PyObject *val = PyDict_GetItemString(obdict, const_cast<char*>(name));
if (!(val && PyString_Check(val))) return false;
-
- *value = PyString_AsString(val);
+
+ printf("PYLENGTH %d\n", PyString_Size(val));
+ std::string temp(PyString_AsString(val), PyString_Size(val));
+ *value = temp;
return true;
}
@@ -66,6 +70,29 @@ Config::Config()
drag_threshold = 3;
if (!python_get_long("NUMBER_OF_DESKTOPS", (long*)&num_desktops))
num_desktops = 1;
+
+ otk::ustring s;
+ long w, h;
+ if (python_get_string("DEFAULT_ICON", &s) && s.bytes() > 2 &&
+ python_get_long("DEFAULT_ICON_WIDTH", &w) &&
+ python_get_long("DEFAULT_ICON_HEIGHT", &h) &&
+ (unsigned)(w * h) == s.bytes() / sizeof(unsigned long)) {
+ default_icon = new unsigned long[s.bytes() / sizeof(unsigned long) + 2];
+ default_icon[0] = w;
+ default_icon[1] = h;
+ memcpy(default_icon + 2, s.data(), s.bytes());
+ printf("%d %d\n", default_icon[0], default_icon[1]);
+ } else {
+ default_icon = 0;
+ }
+
+ icon_length = s.bytes();
+ printf("LENGTH %d\n", icon_length);
+}
+
+Config::~Config()
+{
+ if (default_icon) delete [] default_icon;
}
}
diff --git a/src/config.hh b/src/config.hh
index 8f8144e3..cfa0adc5 100644
--- a/src/config.hh
+++ b/src/config.hh
@@ -21,7 +21,13 @@ struct Config {
long drag_threshold;
long num_desktops;
+ unsigned long *default_icon;
+ long icon_w;
+ long icon_h;
+ long icon_length;
+
Config();
+ ~Config();
};
}