you can bind buttons already about, and itll replace them
This commit is contained in:
parent
165601550c
commit
7db3ffecc9
5 changed files with 12 additions and 57 deletions
|
@ -17,18 +17,10 @@ theme = "/usr/local/share/openbox/styles/nyz"
|
||||||
### behaviors. ###
|
### behaviors. ###
|
||||||
#############################################################################
|
#############################################################################
|
||||||
|
|
||||||
# click_focus - '1' if clicking in a client will cause it to focus in the
|
# resize_nearest - 1 to resize from the corner nearest where the mouse is, 0
|
||||||
# default hook functions; else '0'.
|
# to resize always from the bottom right corner
|
||||||
click_focus = 0
|
resize_nearest = 1
|
||||||
# click_raise - '1' if clicking in a client will cause it to raise to the
|
|
||||||
# top of its stacking layer; else '0'.
|
|
||||||
click_raise = 0
|
|
||||||
# enter_focus - '1' if entering a client window will cause it to focus in the
|
|
||||||
# default hook functions; else '0'.
|
|
||||||
enter_focus = 1
|
|
||||||
# leave_unfocus - '1' if leaving a client window will cause it to unfocus in
|
|
||||||
# the default hook functions; else '0'.
|
|
||||||
leave_unfocus = 1
|
|
||||||
|
|
||||||
|
|
||||||
print "Loaded config.py"
|
print "Loaded config.py"
|
||||||
|
|
|
@ -386,10 +386,7 @@ bool OBBindings::addButton(const std::string &but, MouseContext context,
|
||||||
for (it = _buttons[context].begin(); it != end; ++it)
|
for (it = _buttons[context].begin(); it != end; ++it)
|
||||||
if ((*it)->binding.key == b.key &&
|
if ((*it)->binding.key == b.key &&
|
||||||
(*it)->binding.modifiers == b.modifiers) {
|
(*it)->binding.modifiers == b.modifiers) {
|
||||||
ButtonBinding::CallbackList::iterator c_it,
|
if ((*it)->callback[action] == callback)
|
||||||
c_end = (*it)->callback[action].end();
|
|
||||||
for (c_it = (*it)->callback[action].begin(); c_it != c_end; ++c_it)
|
|
||||||
if (*c_it == callback)
|
|
||||||
return true; // already bound
|
return true; // already bound
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -402,11 +399,11 @@ bool OBBindings::addButton(const std::string &but, MouseContext context,
|
||||||
bind->binding.key = b.key;
|
bind->binding.key = b.key;
|
||||||
bind->binding.modifiers = b.modifiers;
|
bind->binding.modifiers = b.modifiers;
|
||||||
_buttons[context].push_back(bind);
|
_buttons[context].push_back(bind);
|
||||||
printf("adding %d.%d to %d\n", b.key, b.modifiers, context);
|
|
||||||
// XXX GRAB the new button everywhere!
|
// XXX GRAB the new button everywhere!
|
||||||
} else
|
} else
|
||||||
bind = *it;
|
bind = *it;
|
||||||
bind->callback[action].push_back(callback);
|
Py_XDECREF(bind->callback[action]); // if it was already bound, unbind it
|
||||||
|
bind->callback[action] = callback;
|
||||||
Py_INCREF(callback);
|
Py_INCREF(callback);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -450,10 +447,8 @@ void OBBindings::fire(ButtonData *data)
|
||||||
for (it = _buttons[data->context].begin(); it != end; ++it)
|
for (it = _buttons[data->context].begin(); it != end; ++it)
|
||||||
if ((*it)->binding.key == data->button &&
|
if ((*it)->binding.key == data->button &&
|
||||||
(*it)->binding.modifiers == data->state) {
|
(*it)->binding.modifiers == data->state) {
|
||||||
ButtonBinding::CallbackList::iterator c_it,
|
if ((*it)->callback[data->action])
|
||||||
c_end = (*it)->callback[data->action].end();
|
python_callback((*it)->callback[data->action], (PyObject*)data);
|
||||||
for (c_it = (*it)->callback[data->action].begin(); c_it != c_end; ++c_it)
|
|
||||||
python_callback(*c_it, (PyObject*)data);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -52,9 +52,9 @@ typedef struct KeyBindingTree {
|
||||||
|
|
||||||
typedef struct ButtonBinding {
|
typedef struct ButtonBinding {
|
||||||
Binding binding;
|
Binding binding;
|
||||||
typedef std::list<PyObject*> CallbackList;
|
PyObject *callback[NUM_MOUSE_ACTION];
|
||||||
CallbackList callback[NUM_MOUSE_ACTION];
|
|
||||||
ButtonBinding() : binding(0, 0) {
|
ButtonBinding() : binding(0, 0) {
|
||||||
|
for(int i=0; i<NUM_MOUSE_ACTION; ++i) callback[i] = 0;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
29
src/frame.cc
29
src/frame.cc
|
@ -58,44 +58,15 @@ OBFrame::OBFrame(OBClient *client, otk::Style *style)
|
||||||
_plate.show(); // the other stuff is shown based on decor settings
|
_plate.show(); // the other stuff is shown based on decor settings
|
||||||
|
|
||||||
grabClient();
|
grabClient();
|
||||||
|
|
||||||
grabButtons(true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
OBFrame::~OBFrame()
|
OBFrame::~OBFrame()
|
||||||
{
|
{
|
||||||
grabButtons(false);
|
|
||||||
releaseClient(false);
|
releaseClient(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void OBFrame::grabButtons(bool grab)
|
|
||||||
{
|
|
||||||
/* _plate.grabButtons(grab);
|
|
||||||
|
|
||||||
// grab any requested buttons on the entire frame
|
|
||||||
std::vector<std::string> grabs;
|
|
||||||
if (python_get_stringlist("client_buttons", &grabs)) {
|
|
||||||
std::vector<std::string>::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)
|
void OBFrame::setTitle(const std::string &text)
|
||||||
{
|
{
|
||||||
_label.setText(text);
|
_label.setText(text);
|
||||||
|
|
|
@ -80,9 +80,6 @@ private:
|
||||||
//! Shape the frame window to the client window
|
//! Shape the frame window to the client window
|
||||||
void adjustShape();
|
void adjustShape();
|
||||||
|
|
||||||
//! Grabs or ungrabs buttons on the frame
|
|
||||||
void grabButtons(bool grab);
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
//! Constructs an OBFrame object, and reparents the client to itself
|
//! Constructs an OBFrame object, and reparents the client to itself
|
||||||
/*!
|
/*!
|
||||||
|
|
Loading…
Reference in a new issue