X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=src%2Fframe.cc;h=e7f310a0f69721cfeddd9761f34b9e9fb3b01ab5;hb=7071b1f094f7b4b5e09ed329d13d2d1454a9cacf;hp=3d290bc9133049ce4957ef7575393775fad39be9;hpb=3a4f91b53700093f6f577c309a746ede44652e4f;p=chaz%2Fopenbox diff --git a/src/frame.cc b/src/frame.cc index 3d290bc9..e7f310a0 100644 --- a/src/frame.cc +++ b/src/frame.cc @@ -13,6 +13,8 @@ extern "C" { #include "openbox.hh" #include "frame.hh" #include "client.hh" +#include "python.hh" +#include "bindings.hh" #include "otk/display.hh" #include @@ -56,15 +58,44 @@ OBFrame::OBFrame(OBClient *client, otk::Style *style) _plate.show(); // the other stuff is shown based on decor settings grabClient(); + + grabButtons(true); } OBFrame::~OBFrame() { + grabButtons(false); releaseClient(false); } +void OBFrame::grabButtons(bool grab) +{ +/* _plate.grabButtons(grab); + + // grab any requested buttons on the entire frame + std::vector grabs; + if (python_get_stringlist("client_buttons", &grabs)) { + std::vector::iterator grab_it, grab_end = grabs.end(); + for (grab_it = grabs.begin(); grab_it != grab_end; ++grab_it) { + Binding b; + if (!Openbox::instance->bindings()->translate(*grab_it, b, false)) + continue; + printf("grabbing %d %d\n", b.key, b.modifiers); + if (grab) { + otk::OBDisplay::grabButton(b.key, b.modifiers, _window, true, + ButtonPressMask | ButtonMotionMask | + ButtonReleaseMask, GrabModeAsync, + GrabModeAsync, _window, None, false); + } else { + otk::OBDisplay::ungrabButton(b.key, b.modifiers, _window); + } + } + }*/ +} + + void OBFrame::setTitle(const std::string &text) { _label.setText(text); @@ -116,6 +147,7 @@ void OBFrame::unfocus() void OBFrame::adjust() { + // the party all happens in adjustSize } @@ -128,6 +160,7 @@ void OBFrame::adjustSize() int width; // the width of the client and its border int bwidth; // width to make borders int cbwidth; // width of the inner client border + const int bevel = _style->getBevelWidth(); if (_decorations & OBClient::Decor_Border) { bwidth = _style->getBorderWidth(); @@ -151,33 +184,31 @@ void OBFrame::adjustSize() _titlebar.setGeometry(-bwidth, -bwidth, width, - (_style->getFont()->height() + - _style->getBevelWidth() * 2)); + _style->getFont()->height() + bevel * 2); _innersize.top += _titlebar.height() + bwidth; // set the label size - _label.setGeometry(0, _style->getBevelWidth(), - width, _style->getFont()->height()); + _label.setGeometry(0, bevel, width, _style->getFont()->height()); // set the buttons sizes if (_decorations & OBClient::Decor_Iconify) - _button_iconify.setGeometry(0, _style->getBevelWidth() + 1, + _button_iconify.setGeometry(0, bevel + 1, _label.height() - 2, _label.height() - 2); if (_decorations & OBClient::Decor_Maximize) - _button_max.setGeometry(0, _style->getBevelWidth() + 1, + _button_max.setGeometry(0, bevel + 1, _label.height() - 2, _label.height() - 2); if (_decorations & OBClient::Decor_Sticky) - _button_stick.setGeometry(0, _style->getBevelWidth() + 1, + _button_stick.setGeometry(0, bevel + 1, _label.height() - 2, _label.height() - 2); if (_decorations & OBClient::Decor_Close) - _button_close.setGeometry(0, _style->getBevelWidth() + 1, + _button_close.setGeometry(0, bevel + 1, _label.height() - 2, _label.height() - 2); // separation between titlebar elements - const int sep = _style->getBevelWidth() + 1; + const int sep = bevel + 1; std::string layout = "SLIMC"; // XXX: get this from somewhere // XXX: it is REQUIRED that by this point, the string only has one of each @@ -284,8 +315,6 @@ void OBFrame::adjustSize() else _handle.hide(true); - // XXX: more is gunna have to happen here - _size.left = _innersize.left + bwidth; _size.right = _innersize.right + bwidth; _size.top = _innersize.top + bwidth;