fix up support for moveresize. make keyboard grabs Async so that i can hit escape to cancel a moveresize process.
This commit is contained in:
parent
de70d9ffc5
commit
c4af950903
6 changed files with 12 additions and 9 deletions
|
@ -689,9 +689,13 @@ static void event_handle_client(Client *client, XEvent *e)
|
||||||
(Atom)e->xclient.data.l[2] ==
|
(Atom)e->xclient.data.l[2] ==
|
||||||
prop_atoms.net_wm_moveresize_move_keyboard) {
|
prop_atoms.net_wm_moveresize_move_keyboard) {
|
||||||
|
|
||||||
|
g_message("client %lx x %d y %d button %d corner %d",
|
||||||
|
client, e->xclient.data.l[0],
|
||||||
|
e->xclient.data.l[1], e->xclient.data.l[3],
|
||||||
|
e->xclient.data.l[2]);
|
||||||
moveresize_start(client, e->xclient.data.l[0],
|
moveresize_start(client, e->xclient.data.l[0],
|
||||||
e->xclient.data.l[1], e->xclient.data.l[2],
|
e->xclient.data.l[1], e->xclient.data.l[3],
|
||||||
e->xclient.data.l[3]);
|
e->xclient.data.l[2]);
|
||||||
}
|
}
|
||||||
} else if (msgtype == prop_atoms.net_moveresize_window) {
|
} else if (msgtype == prop_atoms.net_moveresize_window) {
|
||||||
int oldg = client->gravity;
|
int oldg = client->gravity;
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
#include <X11/Xlib.h>
|
#include <X11/Xlib.h>
|
||||||
|
|
||||||
#define GRAB_PTR_MASK (ButtonPressMask | ButtonReleaseMask | ButtonMotionMask)
|
#define GRAB_PTR_MASK (ButtonPressMask | ButtonReleaseMask | ButtonMotionMask)
|
||||||
|
#define GRAB_KEY_MASK (KeyPressMask | KeyReleaseMask)
|
||||||
|
|
||||||
#define MASK_LIST_SIZE 8
|
#define MASK_LIST_SIZE 8
|
||||||
|
|
||||||
|
@ -17,8 +18,8 @@ int grab_keyboard(gboolean grab)
|
||||||
static guint kgrabs = 0;
|
static guint kgrabs = 0;
|
||||||
if (grab) {
|
if (grab) {
|
||||||
if (kgrabs++ == 0)
|
if (kgrabs++ == 0)
|
||||||
XGrabKeyboard(ob_display, ob_root, 0, GrabModeAsync, GrabModeSync,
|
XGrabKeyboard(ob_display, ob_root, FALSE, GrabModeAsync,
|
||||||
event_lasttime);
|
GrabModeAsync, event_lasttime);
|
||||||
} else if (kgrabs > 0) {
|
} else if (kgrabs > 0) {
|
||||||
if (--kgrabs == 0)
|
if (--kgrabs == 0)
|
||||||
XUngrabKeyboard(ob_display, event_lasttime);
|
XUngrabKeyboard(ob_display, event_lasttime);
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
void grab_startup();
|
void grab_startup();
|
||||||
void grab_shutdown();
|
void grab_shutdown();
|
||||||
|
|
||||||
void grab_keyboard(gboolean grab);
|
int grab_keyboard(gboolean grab);
|
||||||
void grab_pointer(gboolean grab, Cursor cur);
|
void grab_pointer(gboolean grab, Cursor cur);
|
||||||
void grab_pointer_window(gboolean grab, Cursor cur, Window win);
|
void grab_pointer_window(gboolean grab, Cursor cur, Window win);
|
||||||
void grab_server(gboolean grab);
|
void grab_server(gboolean grab);
|
||||||
|
|
|
@ -117,8 +117,8 @@ void moveresize_start(Client *c, int x, int y, guint b, guint32 cnr)
|
||||||
else
|
else
|
||||||
g_assert_not_reached();
|
g_assert_not_reached();
|
||||||
|
|
||||||
grab_keyboard(TRUE);
|
|
||||||
grab_pointer(TRUE, cur);
|
grab_pointer(TRUE, cur);
|
||||||
|
grab_keyboard(TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void end_moveresize(gboolean cancel)
|
static void end_moveresize(gboolean cancel)
|
||||||
|
|
|
@ -9,7 +9,7 @@ extern gboolean moveresize_in_progress;
|
||||||
|
|
||||||
void moveresize_startup();
|
void moveresize_startup();
|
||||||
|
|
||||||
void moveresize_start(Client *c, int x, int y, guint b, guint32 corner);
|
void moveresize_start(Client *c, int x, int y, guint button, guint32 corner);
|
||||||
|
|
||||||
void moveresize_event(XEvent *e);
|
void moveresize_event(XEvent *e);
|
||||||
|
|
||||||
|
|
|
@ -69,8 +69,6 @@ void mouseparse(ParseToken *token)
|
||||||
action = action_from_string(token->data.identifier);
|
action = action_from_string(token->data.identifier);
|
||||||
|
|
||||||
/* check for valid actions for motion events */
|
/* check for valid actions for motion events */
|
||||||
if (action->func == action_moveresize)
|
|
||||||
g_message("%d", action->data.moveresize.corner);
|
|
||||||
if (event == MouseAction_Motion) {
|
if (event == MouseAction_Motion) {
|
||||||
if (action && (action->func != action_moveresize ||
|
if (action && (action->func != action_moveresize ||
|
||||||
action->data.moveresize.corner ==
|
action->data.moveresize.corner ==
|
||||||
|
|
Loading…
Reference in a new issue