+ ObCursor cur;
+ gboolean mv = (cnr == prop_atoms.net_wm_moveresize_move ||
+ cnr == prop_atoms.net_wm_moveresize_move_keyboard);
+
+ if (moveresize_in_progress || !c->frame->visible ||
+ !(mv ?
+ (c->functions & OB_CLIENT_FUNC_MOVE) :
+ (c->functions & OB_CLIENT_FUNC_RESIZE)))
+ return;
+
+ if (cnr == prop_atoms.net_wm_moveresize_size_topleft)
+ cur = OB_CURSOR_NORTHWEST;
+ else if (cnr == prop_atoms.net_wm_moveresize_size_top)
+ cur = OB_CURSOR_NORTH;
+ else if (cnr == prop_atoms.net_wm_moveresize_size_topright)
+ cur = OB_CURSOR_NORTHEAST;
+ else if (cnr == prop_atoms.net_wm_moveresize_size_right)
+ cur = OB_CURSOR_EAST;
+ else if (cnr == prop_atoms.net_wm_moveresize_size_bottomright)
+ cur = OB_CURSOR_SOUTHEAST;
+ else if (cnr == prop_atoms.net_wm_moveresize_size_bottom)
+ cur = OB_CURSOR_SOUTH;
+ else if (cnr == prop_atoms.net_wm_moveresize_size_bottomleft)
+ cur = OB_CURSOR_SOUTHWEST;
+ else if (cnr == prop_atoms.net_wm_moveresize_size_left)
+ cur = OB_CURSOR_WEST;
+ else if (cnr == prop_atoms.net_wm_moveresize_size_keyboard)
+ cur = OB_CURSOR_SOUTHEAST;
+ else if (cnr == prop_atoms.net_wm_moveresize_move)
+ cur = OB_CURSOR_MOVE;
+ else if (cnr == prop_atoms.net_wm_moveresize_move_keyboard)
+ cur = OB_CURSOR_MOVE;
+ else
+ g_assert_not_reached();
+
+ /* keep the pointer bounded to the screen for move/resize */
+ if (!grab_pointer(FALSE, TRUE, cur))
+ return;
+ if (!grab_keyboard()) {
+ ungrab_pointer();
+ return;
+ }