case OB_FRAME_CONTEXT_MOVE_RESIZE:
case OB_FRAME_CONTEXT_LEFT:
case OB_FRAME_CONTEXT_RIGHT:
+ case OB_FRAME_CONTEXT_DOCK:
break;
case OB_FRAME_CONTEXT_ROOT:
x = OB_FRAME_CONTEXT_DESKTOP;
actions_act_unref(jt->data);
g_slist_free(b->actions[j]);
}
- g_free(b);
+ g_slice_free(ObMouseBinding, b);
}
g_slist_free(bound_contexts[i]);
bound_contexts[i] = NULL;
{
if (replay_pointer_needed) {
/* replay the pointer event before any windows move */
- XAllowEvents(obt_display, ReplayPointer, event_curtime);
+ XAllowEvents(obt_display, ReplayPointer, event_time());
replay_pointer_needed = FALSE;
}
}
static Time ltime;
static guint button = 0, state = 0, lbutton = 0;
static Window lwindow = None;
- static gint px, py, pwx = -1, pwy = -1;
+ static gint px, py, pwx = -1, pwy = -1, lx = -10, ly = -10;
gboolean used = FALSE;
ObFrameContext context;
if (e->xbutton.x >= (signed)-b &&
e->xbutton.y >= (signed)-b &&
e->xbutton.x < (signed)(w+b) &&
- e->xbutton.y < (signed)(h+b)) {
+ e->xbutton.y < (signed)(h+b))
+ {
click = TRUE;
/* double clicks happen if there were 2 in a row! */
if (lbutton == button &&
lwindow == e->xbutton.window &&
e->xbutton.time - config_mouse_dclicktime <=
- ltime) {
+ ltime &&
+ ABS(e->xbutton.x - lx) < 8 &&
+ ABS(e->xbutton.y - ly) < 8)
+ {
dclick = TRUE;
lbutton = 0;
} else {
lbutton = button;
lwindow = e->xbutton.window;
+ lx = e->xbutton.x;
+ ly = e->xbutton.y;
}
} else {
lbutton = 0;
return used;
}
-gboolean mouse_bind(const gchar *buttonstr, const gchar *contextstr,
+gboolean mouse_bind(const gchar *buttonstr, ObFrameContext context,
ObMouseAction mact, ObActionsAct *action)
{
guint state, button;
- ObFrameContext context;
ObMouseBinding *b;
GSList *it;
+ g_assert(context != OB_FRAME_CONTEXT_NONE);
+
if (!translate_button(buttonstr, &state, &button)) {
g_message(_("Invalid button \"%s\" in mouse binding"), buttonstr);
return FALSE;
}
- context = frame_context_from_string(contextstr);
- if (!context) {
- g_message(_("Invalid context \"%s\" in mouse binding"), contextstr);
- return FALSE;
- }
-
for (it = bound_contexts[context]; it; it = g_slist_next(it)) {
b = it->data;
if (b->state == state && b->button == button) {
}
/* add the binding */
- b = g_new0(ObMouseBinding, 1);
+ b = g_slice_new0(ObMouseBinding);
b->state = state;
b->button = button;
b->actions[mact] = g_slist_append(NULL, action);