GSList *actions[OB_MOUSE_NUM_ACTIONS]; /* lists of Action pointers */
} ObMouseBinding;
+#define FRAME_CONTEXT(co, cl) ((cl && cl->type != OB_CLIENT_TYPE_DESKTOP) ? \
+ co == OB_FRAME_CONTEXT_FRAME : FALSE)
#define CLIENT_CONTEXT(co, cl) ((cl && cl->type == OB_CLIENT_TYPE_DESKTOP) ? \
- co == OB_FRAME_CONTEXT_ROOT : \
+ co == OB_FRAME_CONTEXT_DESKTOP : \
co == OB_FRAME_CONTEXT_CLIENT)
/* Array of GSList*s of PointerBinding*s. */
int mode;
unsigned int mask;
- if (i == OB_FRAME_CONTEXT_FRAME) {
+ if (FRAME_CONTEXT(i, client)) {
win = client->frame->window;
mode = GrabModeAsync;
mask = ButtonPressMask | ButtonMotionMask | ButtonReleaseMask;
} else continue;
if (grab)
- grab_button_full(b->button, b->state, win, mask, mode, None);
+ grab_button_full(b->button, b->state, win, mask, mode,
+ OB_CURSOR_NONE);
else
ungrab_button(b->button, b->state, win);
}
g_free(b);
}
g_slist_free(bound_contexts[i]);
+ bound_contexts[i] = NULL;
}
}
act->data.showmenu.y = y;
}
- if (act->func == action_desktop_dir)
- {
- act->data.desktopdir.final = FALSE;
- act->data.desktopdir.cancel = FALSE;
- }
- if (act->func == action_send_to_desktop_dir)
- {
- act->data.sendtodir.final = FALSE;
- act->data.sendtodir.cancel = FALSE;
- }
-
- if (config_desktop_popup &&
- (act->func == action_desktop_dir ||
- act->func == action_send_to_desktop_dir))
- {
+ if (act->data.any.interactive) {
+ act->data.inter.cancel = FALSE;
+ act->data.inter.final = FALSE;
keyboard_interactive_grab(state, c, context, act);
}
static int px, py;
gboolean click = FALSE;
gboolean dclick = FALSE;
-
+
switch (e->type) {
case ButtonPress:
px = e->xbutton.x_root;
int junk1, junk2;
Window wjunk;
guint ujunk, b, w, h;
- Status s;
xerror_set_ignore(TRUE);
- s = XGetGeometry(ob_display, e->xbutton.window,
- &wjunk, &junk1, &junk2, &w, &h, &b, &ujunk);
+ junk1 = XGetGeometry(ob_display, e->xbutton.window,
+ &wjunk, &junk1, &junk2, &w, &h, &b, &ujunk);
xerror_set_ignore(FALSE);
- if (s == Success) {
+ if (junk1) {
if (e->xbutton.x >= (signed)-b &&
e->xbutton.y >= (signed)-b &&
e->xbutton.x < (signed)(w+b) &&
grab_all_clients(FALSE);
+ /* when there are no modifiers in the binding, then the action cannot
+ be interactive */
+ if (!state && action->data.any.interactive) {
+ action->data.any.interactive = FALSE;
+ action->data.inter.final = TRUE;
+ }
+
/* add the binding */
b = g_new0(ObMouseBinding, 1);
b->state = state;
return TRUE;
}
-void mouse_startup()
+void mouse_startup(gboolean reconfig)
{
}
-void mouse_shutdown()
+void mouse_shutdown(gboolean reconfig)
{
grab_all_clients(FALSE);
clearall();