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 "otk/display.hh"
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
namespace ob {
|
namespace ob {
|
||||||
|
|
||||||
const int Actions::BUTTONS;
|
const int Actions::BUTTONS;
|
||||||
|
|
||||||
Actions::Actions()
|
Actions::Actions()
|
||||||
: _button(0)
|
: _button(0),
|
||||||
|
_dragging(false)
|
||||||
{
|
{
|
||||||
for (int i=0; i<BUTTONS; ++i)
|
for (int i=0; i<BUTTONS; ++i)
|
||||||
_posqueue[i] = new ButtonPressAction();
|
_posqueue[i] = new ButtonPressAction();
|
||||||
|
@ -119,6 +121,7 @@ void Actions::buttonReleaseHandler(const XButtonEvent &e)
|
||||||
if (_button != e.button) return;
|
if (_button != e.button) return;
|
||||||
|
|
||||||
_button = 0;
|
_button = 0;
|
||||||
|
_dragging = false;
|
||||||
|
|
||||||
// find the area of the window
|
// find the area of the window
|
||||||
XWindowAttributes attr;
|
XWindowAttributes attr;
|
||||||
|
@ -238,6 +241,20 @@ void Actions::motionHandler(const XMotionEvent &e)
|
||||||
(openbox->findHandler(e.window));
|
(openbox->findHandler(e.window));
|
||||||
if (!w) return;
|
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
|
// run the MOTION python hook
|
||||||
// kill off the Button1Mask etc, only want the modifiers
|
// kill off the Button1Mask etc, only want the modifiers
|
||||||
unsigned int state = e.state & (ControlMask | ShiftMask | Mod1Mask |
|
unsigned int state = e.state & (ControlMask | ShiftMask | Mod1Mask |
|
||||||
|
|
|
@ -55,6 +55,9 @@ private:
|
||||||
Used for motion events as the starting position.
|
Used for motion events as the starting position.
|
||||||
*/
|
*/
|
||||||
ButtonPressAction *_posqueue[BUTTONS];
|
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);
|
void insertPress(const XButtonEvent &e);
|
||||||
|
|
Loading…
Reference in a new issue