add a drag threshold
This commit is contained in:
parent
a38a8f0bac
commit
baaaed3dc1
2 changed files with 21 additions and 1 deletions
|
@ -14,13 +14,15 @@
|
|||
#include "otk/display.hh"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <algorithm>
|
||||
|
||||
namespace ob {
|
||||
|
||||
const int Actions::BUTTONS;
|
||||
|
||||
Actions::Actions()
|
||||
: _button(0)
|
||||
: _button(0),
|
||||
_dragging(false)
|
||||
{
|
||||
for (int i=0; i<BUTTONS; ++i)
|
||||
_posqueue[i] = new ButtonPressAction();
|
||||
|
@ -119,6 +121,7 @@ void Actions::buttonReleaseHandler(const XButtonEvent &e)
|
|||
if (_button != e.button) return;
|
||||
|
||||
_button = 0;
|
||||
_dragging = false;
|
||||
|
||||
// find the area of the window
|
||||
XWindowAttributes attr;
|
||||
|
@ -238,6 +241,20 @@ void Actions::motionHandler(const XMotionEvent &e)
|
|||
(openbox->findHandler(e.window));
|
||||
if (!w) return;
|
||||
|
||||
if (!_dragging) {
|
||||
long threshold;
|
||||
int dx = x_root - _posqueue[0]->pos.x();
|
||||
int dy = y_root - _posqueue[0]->pos.y();
|
||||
// XXX: dont get this from python every time!
|
||||
if (!python_get_long("drag_threshold", &threshold))
|
||||
threshold = 0;
|
||||
if (!(std::abs(dx) >= threshold || std::abs(dy) >= threshold))
|
||||
return; // not at the threshold yet
|
||||
}
|
||||
_dragging = true; // in a drag now
|
||||
|
||||
// check if the movement is more than the threshold
|
||||
|
||||
// run the MOTION python hook
|
||||
// kill off the Button1Mask etc, only want the modifiers
|
||||
unsigned int state = e.state & (ControlMask | ShiftMask | Mod1Mask |
|
||||
|
|
|
@ -55,6 +55,9 @@ private:
|
|||
Used for motion events as the starting position.
|
||||
*/
|
||||
ButtonPressAction *_posqueue[BUTTONS];
|
||||
//! This is set to true once a drag has started and false when done to make
|
||||
//! sure the threshold isnt checked anymore once a drag is underway
|
||||
bool _dragging;
|
||||
|
||||
|
||||
void insertPress(const XButtonEvent &e);
|
||||
|
|
Loading…
Reference in a new issue