- move_step = 1;
- break;
- default:
- break;
- }
- if (move_step) {
- constrain_window(win, r, 0);
- update_window(win);
- store_float_geom(win, r);
- return;
- }
-
- cursor_font = xcb_generate_id(conn);
- xcb_open_font(conn, cursor_font, strlen("cursor"), "cursor");
-
- cursor = xcb_generate_id(conn);
- xcb_create_glyph_cursor(conn, cursor, cursor_font, cursor_font,
- XC_fleur, XC_fleur + 1, 0, 0, 0, 0xffff, 0xffff, 0xffff);
-
- xcb_grab_pointer(conn, 0, win->id, MOUSEMASK,
- XCB_GRAB_MODE_ASYNC, XCB_GRAB_MODE_ASYNC,
- XCB_WINDOW_NONE, cursor, XCB_CURRENT_TIME);
-
- /* get cursor offset from window root */
- qpr = xcb_query_pointer_reply(conn, xcb_query_pointer(conn, win->id),
- NULL);
- if (!qpr) {
- xcb_ungrab_pointer(conn, XCB_CURRENT_TIME);
- xcb_free_cursor(conn, cursor);
- xcb_close_font(conn, cursor_font);
- return;
- }
-
- xcb_flush(conn);
- moving = 1;
- while ((evt = xcb_wait_for_event(conn)) && moving) {
- switch (XCB_EVENT_RESPONSE_TYPE(evt)) {
- case XCB_BUTTON_RELEASE:
- DNPRINTF(SWM_D_EVENT, "move: BUTTON_RELEASE\n");
- moving = 0;
- break;
- case XCB_MOTION_NOTIFY:
- mne = (xcb_motion_notify_event_t *)evt;
- X(win) = mne->root_x - qpr->win_x - border_width;
- Y(win) = mne->root_y - qpr->win_y - border_width;
-
- constrain_window(win, r, 0);
-
- /* not free, don't sync more than 120 times / second */
- if ((mne->time - timestamp) > (1000 / 120) ) {
- timestamp = mne->time;
- update_window(win);
- xcb_flush(conn);
- }
- break;
- default:
- event_handle(evt);
- break;
- }
- free(evt);
- }
- if (timestamp) {
- update_window(win);
- xcb_flush(conn);
- }
- store_float_geom(win, r);
- free(qpr);
- xcb_free_cursor(conn, cursor);
- xcb_close_font(conn, cursor_font);
- xcb_ungrab_pointer(conn, XCB_CURRENT_TIME);
- DNPRINTF(SWM_D_EVENT, "move: done\n");
-}
-
-void
-move_step(struct swm_region *r, union arg *args)
-{
- struct ws_win *win = NULL;
-
- if (r && r->ws && r->ws->focus)
- win = r->ws->focus;
- else
- return;
-
- if (!(win->transient != 0 || win->floating != 0))
- return;
-
- move(win, args);
-}
-
-
-/* user/key callable function IDs */
-enum keyfuncid {
- KF_BAR_TOGGLE,
- KF_BUTTON2,
- KF_CYCLE_LAYOUT,
- KF_FLIP_LAYOUT,
- KF_FLOAT_TOGGLE,
- KF_FOCUS_MAIN,
- KF_FOCUS_NEXT,
- KF_FOCUS_PREV,
- KF_HEIGHT_GROW,
- KF_HEIGHT_SHRINK,
- KF_ICONIFY,
- KF_MASTER_SHRINK,
- KF_MASTER_GROW,
- KF_MASTER_ADD,
- KF_MASTER_DEL,
- KF_MOVE_DOWN,
- KF_MOVE_LEFT,
- KF_MOVE_RIGHT,
- KF_MOVE_UP,
- KF_MVWS_1,
- KF_MVWS_2,
- KF_MVWS_3,
- KF_MVWS_4,
- KF_MVWS_5,
- KF_MVWS_6,
- KF_MVWS_7,
- KF_MVWS_8,
- KF_MVWS_9,
- KF_MVWS_10,
- KF_MVWS_11,
- KF_MVWS_12,
- KF_MVWS_13,
- KF_MVWS_14,
- KF_MVWS_15,
- KF_MVWS_16,
- KF_MVWS_17,
- KF_MVWS_18,
- KF_MVWS_19,
- KF_MVWS_20,
- KF_MVWS_21,
- KF_MVWS_22,
- KF_NAME_WORKSPACE,
- KF_QUIT,
- KF_RAISE_TOGGLE,
- KF_RESTART,
- KF_SCREEN_NEXT,
- KF_SCREEN_PREV,
- KF_SEARCH_WIN,
- KF_SEARCH_WORKSPACE,
- KF_SPAWN_CUSTOM,
- KF_STACK_INC,
- KF_STACK_DEC,
- KF_STACK_RESET,
- KF_SWAP_MAIN,
- KF_SWAP_NEXT,
- KF_SWAP_PREV,
- KF_UNICONIFY,
- KF_VERSION,
- KF_WIDTH_GROW,
- KF_WIDTH_SHRINK,
- KF_WIND_DEL,
- KF_WIND_KILL,
- KF_WS_1,
- KF_WS_2,
- KF_WS_3,
- KF_WS_4,
- KF_WS_5,
- KF_WS_6,
- KF_WS_7,
- KF_WS_8,
- KF_WS_9,
- KF_WS_10,
- KF_WS_11,
- KF_WS_12,
- KF_WS_13,
- KF_WS_14,
- KF_WS_15,
- KF_WS_16,
- KF_WS_17,
- KF_WS_18,
- KF_WS_19,
- KF_WS_20,
- KF_WS_21,
- KF_WS_22,
- KF_WS_NEXT,
- KF_WS_NEXT_ALL,
- KF_WS_PREV,
- KF_WS_PREV_ALL,
- KF_WS_PRIOR,
- KF_DUMPWINS, /* MUST BE LAST */
- KF_INVALID
-};
+ move_stp = 1;
+ break;
+ default:
+ break;
+ }
+ if (move_stp) {
+ constrain_window(win, r, 0);
+ update_window(win);
+ store_float_geom(win, r);
+ return;
+ }
+
+ xcb_grab_pointer(conn, 0, win->id, MOUSEMASK,
+ XCB_GRAB_MODE_ASYNC, XCB_GRAB_MODE_ASYNC,
+ XCB_WINDOW_NONE, cursors[XC_FLEUR].cid, XCB_CURRENT_TIME);
+
+ /* get cursor offset from window root */
+ qpr = xcb_query_pointer_reply(conn, xcb_query_pointer(conn, win->id),
+ NULL);
+ if (!qpr) {
+ xcb_ungrab_pointer(conn, XCB_CURRENT_TIME);
+ return;
+ }
+
+ xcb_flush(conn);
+ moving = 1;
+ while ((evt = xcb_wait_for_event(conn)) && moving) {
+ switch (XCB_EVENT_RESPONSE_TYPE(evt)) {
+ case XCB_BUTTON_RELEASE:
+ DNPRINTF(SWM_D_EVENT, "move: BUTTON_RELEASE\n");
+ moving = 0;
+ break;
+ case XCB_MOTION_NOTIFY:
+ mne = (xcb_motion_notify_event_t *)evt;
+ X(win) = mne->root_x - qpr->win_x - border_width;
+ Y(win) = mne->root_y - qpr->win_y - border_width;
+
+ constrain_window(win, r, 0);
+
+ /* not free, don't sync more than 120 times / second */
+ if ((mne->time - timestamp) > (1000 / 120) ) {
+ timestamp = mne->time;
+ update_window(win);
+ xcb_flush(conn);
+ }
+ break;
+ default:
+ event_handle(evt);
+ break;
+ }
+ free(evt);
+ }
+ if (timestamp) {
+ update_window(win);
+ xcb_flush(conn);
+ }
+ store_float_geom(win, r);
+ free(qpr);
+ xcb_ungrab_pointer(conn, XCB_CURRENT_TIME);
+ DNPRINTF(SWM_D_EVENT, "move: done.\n");
+}
+
+void
+move_step(struct swm_region *r, union arg *args)
+{
+ struct ws_win *win = NULL;
+
+ if (r && r->ws && r->ws->focus)
+ win = r->ws->focus;
+ else
+ return;
+
+ if (!win->transient && !win->floating)
+ return;
+
+ move(win, args);
+ focus_flush();
+}