diff options
| author | Dana Jansens <danakj@orodu.net> | 2003-01-23 04:49:42 +0000 |
|---|---|---|
| committer | Dana Jansens <danakj@orodu.net> | 2003-01-23 04:49:42 +0000 |
| commit | 7b7ae097a0d389a35967fdab4ea310effcfc42c2 (patch) | |
| tree | 853d2ba50e8ef50754a26e33473c13ebb5e3ef55 /src | |
| parent | 7b9d92b2e75cab137ca3bfaf48ce40b5cbbaacf4 (diff) | |
make the 'toggle all desktops' button work
Diffstat (limited to 'src')
| -rw-r--r-- | src/buttonwidget.cc | 51 | ||||
| -rw-r--r-- | src/buttonwidget.hh | 9 | ||||
| -rw-r--r-- | src/client.cc | 5 | ||||
| -rw-r--r-- | src/frame.cc | 19 | ||||
| -rw-r--r-- | src/frame.hh | 3 | ||||
| -rw-r--r-- | src/openbox.py | 1 | ||||
| -rw-r--r-- | src/openbox_wrap.cc | 17 |
7 files changed, 93 insertions, 12 deletions
diff --git a/src/buttonwidget.cc b/src/buttonwidget.cc index eb864ba2..c6677861 100644 --- a/src/buttonwidget.cc +++ b/src/buttonwidget.cc @@ -5,16 +5,19 @@ #endif #include "buttonwidget.hh" -#include "otk/gccache.hh" // otk::BPen +#include "client.hh" namespace ob { ButtonWidget::ButtonWidget(otk::Widget *parent, - WidgetBase::WidgetType type) + WidgetBase::WidgetType type, + Client *client) : otk::Widget(parent), WidgetBase(type), + _client(client), _pressed(false), - _button(0) + _button(0), + _state(false) { } @@ -26,6 +29,21 @@ ButtonWidget::~ButtonWidget() void ButtonWidget::setTextures() { + bool p = _pressed; + + switch (type()) { + case Type_StickyButton: + if (_client->desktop() == (signed)0xffffffff) + p = true; + break; + case Type_MaximizeButton: + if (_client->maxHorz() || _client->maxVert()) + p = true; + break; + default: + break; + } + switch (type()) { case Type_LeftGrip: case Type_RightGrip: @@ -35,10 +53,10 @@ void ButtonWidget::setTextures() setTexture(_style->gripUnfocusBackground()); break; case Type_StickyButton: - case Type_CloseButton: case Type_MaximizeButton: + case Type_CloseButton: case Type_IconifyButton: - if (_pressed) { + if (p) { if (_focused) setTexture(_style->buttonPressFocusBackground()); else @@ -77,6 +95,29 @@ void ButtonWidget::setStyle(otk::RenderStyle *style) } +void ButtonWidget::update() +{ + switch (type()) { + case Type_StickyButton: + if ((_client->desktop() == (signed)0xffffffff) != _state) { + _state = !_state; + setTextures(); + } + break; + case Type_MaximizeButton: + if ((_client->maxHorz() || _client->maxVert()) != _state) { + _state = !_state; + setTextures(); + } + break; + default: + break; + } + + otk::Widget::update(); +} + + void ButtonWidget::renderForeground() { otk::PixmapMask *pm; diff --git a/src/buttonwidget.hh b/src/buttonwidget.hh index a888a3d5..0d546f73 100644 --- a/src/buttonwidget.hh +++ b/src/buttonwidget.hh @@ -7,21 +7,28 @@ namespace ob { +class Client; + class ButtonWidget : public otk::Widget, public WidgetBase { private: void setTextures(); + Client *_client; bool _pressed; unsigned int _button; + bool _state; public: - ButtonWidget(otk::Widget *parent, WidgetBase::WidgetType type); + ButtonWidget(otk::Widget *parent, WidgetBase::WidgetType type, + Client *client); virtual ~ButtonWidget(); virtual void setStyle(otk::RenderStyle *style); virtual void adjust(); + virtual void update(); + virtual void renderForeground(); virtual void focus(); diff --git a/src/client.cc b/src/client.cc index 4f6fe4a2..54afbc9a 100644 --- a/src/client.cc +++ b/src/client.cc @@ -655,6 +655,8 @@ void Client::setDesktop(long target) frame->show(); else frame->hide(); + + frame->adjustState(); } @@ -1072,6 +1074,9 @@ void Client::changeState() otk::Property::atoms.atom, netstate, num); calcLayer(); + + if (frame) + frame->adjustState(); } diff --git a/src/frame.cc b/src/frame.cc index cd73f29a..531db48d 100644 --- a/src/frame.cc +++ b/src/frame.cc @@ -30,14 +30,14 @@ Frame::Frame(Client *client, otk::RenderStyle *style) _screen(otk::display->screenInfo(client->screen())), _plate(this, WidgetBase::Type_Plate), _titlebar(this, WidgetBase::Type_Titlebar), - _button_close(&_titlebar, WidgetBase::Type_CloseButton), - _button_iconify(&_titlebar, WidgetBase::Type_IconifyButton), - _button_max(&_titlebar, WidgetBase::Type_MaximizeButton), - _button_stick(&_titlebar, WidgetBase::Type_StickyButton), + _button_close(&_titlebar, WidgetBase::Type_CloseButton, client), + _button_iconify(&_titlebar, WidgetBase::Type_IconifyButton, client), + _button_max(&_titlebar, WidgetBase::Type_MaximizeButton, client), + _button_stick(&_titlebar, WidgetBase::Type_StickyButton, client), _label(&_titlebar, WidgetBase::Type_Label), _handle(this, WidgetBase::Type_Handle), - _grip_left(&_handle, WidgetBase::Type_LeftGrip), - _grip_right(&_handle, WidgetBase::Type_RightGrip), + _grip_left(&_handle, WidgetBase::Type_LeftGrip, client), + _grip_right(&_handle, WidgetBase::Type_RightGrip, client), _decorations(client->decorations()) { assert(client); @@ -399,6 +399,13 @@ void Frame::adjustShape() } +void Frame::adjustState() +{ + _button_stick.update(); + _button_max.update(); +} + + void Frame::grabClient() { // reparent the client to the frame diff --git a/src/frame.hh b/src/frame.hh index 35c884fa..40c08199 100644 --- a/src/frame.hh +++ b/src/frame.hh @@ -102,6 +102,9 @@ public: void adjustPosition(); //! Shape the frame window to the client window void adjustShape(); + //! Update the frame to match the client's new state (for things like toggle + //! buttons) + void adjustState(); //! Applies gravity to the client's position to find where the frame should //! be positioned. diff --git a/src/openbox.py b/src/openbox.py index 2a7a8c38..ac8b0c6c 100644 --- a/src/openbox.py +++ b/src/openbox.py @@ -860,6 +860,7 @@ class Frame(_object): def adjustSize(*args): return apply(_openbox.Frame_adjustSize,args) def adjustPosition(*args): return apply(_openbox.Frame_adjustPosition,args) def adjustShape(*args): return apply(_openbox.Frame_adjustShape,args) + def adjustState(*args): return apply(_openbox.Frame_adjustState,args) def clientGravity(*args): return apply(_openbox.Frame_clientGravity,args) def frameGravity(*args): return apply(_openbox.Frame_frameGravity,args) def plate(*args): return apply(_openbox.Frame_plate,args) diff --git a/src/openbox_wrap.cc b/src/openbox_wrap.cc index 5143dd1e..523e8451 100644 --- a/src/openbox_wrap.cc +++ b/src/openbox_wrap.cc @@ -9801,6 +9801,22 @@ static PyObject *_wrap_Frame_adjustShape(PyObject *self, PyObject *args) { } +static PyObject *_wrap_Frame_adjustState(PyObject *self, PyObject *args) { + PyObject *resultobj; + ob::Frame *arg1 = (ob::Frame *) 0 ; + PyObject * obj0 = 0 ; + + if(!PyArg_ParseTuple(args,(char *)"O:Frame_adjustState",&obj0)) goto fail; + if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_ob__Frame,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail; + (arg1)->adjustState(); + + Py_INCREF(Py_None); resultobj = Py_None; + return resultobj; + fail: + return NULL; +} + + static PyObject *_wrap_Frame_clientGravity(PyObject *self, PyObject *args) { PyObject *resultobj; ob::Frame *arg1 = (ob::Frame *) 0 ; @@ -11699,6 +11715,7 @@ static PyMethodDef SwigMethods[] = { { (char *)"Frame_adjustSize", _wrap_Frame_adjustSize, METH_VARARGS }, { (char *)"Frame_adjustPosition", _wrap_Frame_adjustPosition, METH_VARARGS }, { (char *)"Frame_adjustShape", _wrap_Frame_adjustShape, METH_VARARGS }, + { (char *)"Frame_adjustState", _wrap_Frame_adjustState, METH_VARARGS }, { (char *)"Frame_clientGravity", _wrap_Frame_clientGravity, METH_VARARGS }, { (char *)"Frame_frameGravity", _wrap_Frame_frameGravity, METH_VARARGS }, { (char *)"Frame_plate", _wrap_Frame_plate, METH_VARARGS }, |
