~ruther/dwl

1eb8a82ac4d3a0fa76affff591c6a6667cb12cae — Leonardo Hernández Hernández 1 year, 11 months ago 24a337e
Revert "avoid setting duplicate cursor image"

This reverts commit b5776e5180010ead5232efb36b2490f4fc9e1366.

See next commit for details
1 files changed, 8 insertions(+), 12 deletions(-)

M dwl.c
M dwl.c => dwl.c +8 -12
@@ 329,7 329,6 @@ static void zoom(const Arg *arg);

/* variables */
static const char broken[] = "broken";
static const char *cursor_image = "left_ptr";
static pid_t child_pid = -1;
static int locked;
static void *exclusive_focus;


@@ 613,13 612,10 @@ buttonpress(struct wl_listener *listener, void *data)
		break;
	case WLR_BUTTON_RELEASED:
		/* If you released any buttons, we exit interactive move/resize mode. */
		/* TODO should reset to the pointer focus's current setcursor */
		if (!locked && cursor_mode != CurNormal && cursor_mode != CurPressed) {
			wlr_xcursor_manager_set_cursor_image(cursor_mgr, "left_ptr", cursor);
			cursor_mode = CurNormal;
			/* Clear the pointer focus, this way if the cursor is over a surface
			 * we will send an enter event after which the client will provide us
			 * a cursor surface */
			wlr_seat_pointer_clear_focus(seat);
			motionnotify(0);
			/* Drop the window off on its new monitor */
			selmon = xytomon(cursor->x, cursor->y);
			setmon(grabc, selmon, 0);


@@ 1694,8 1690,8 @@ motionnotify(uint32_t time)
	/* If there's no client surface under the cursor, set the cursor image to a
	 * default. This is what makes the cursor image appear when you move it
	 * off of a client or over its border. */
	if (!surface && !seat->drag && (!cursor_image || strcmp(cursor_image, "left_ptr")))
		wlr_xcursor_manager_set_cursor_image(cursor_mgr, (cursor_image = "left_ptr"), cursor);
	if (!surface && !seat->drag)
		wlr_xcursor_manager_set_cursor_image(cursor_mgr, "left_ptr", cursor);

	pointerfocus(c, surface, sx, sy, time);
}


@@ 1730,7 1726,7 @@ moveresize(const Arg *arg)
	case CurMove:
		grabcx = cursor->x - grabc->geom.x;
		grabcy = cursor->y - grabc->geom.y;
		wlr_xcursor_manager_set_cursor_image(cursor_mgr, (cursor_image = "fleur"), cursor);
		wlr_xcursor_manager_set_cursor_image(cursor_mgr, "fleur", cursor);
		break;
	case CurResize:
		/* Doesn't work for X11 output - the next absolute motion event


@@ 1739,7 1735,7 @@ moveresize(const Arg *arg)
				grabc->geom.x + grabc->geom.width,
				grabc->geom.y + grabc->geom.height);
		wlr_xcursor_manager_set_cursor_image(cursor_mgr,
				(cursor_image = "bottom_right_corner"), cursor);
				"bottom_right_corner", cursor);
		break;
	}
}


@@ 1840,6 1836,7 @@ pointerfocus(Client *c, struct wlr_surface *surface, double sx, double sy,
	 * wlroots makes this a no-op if surface is already focused */
	wlr_seat_pointer_notify_enter(seat, surface, sx, sy);
	wlr_seat_pointer_notify_motion(seat, time, sx, sy);

}

void


@@ 2008,7 2005,7 @@ run(char *startup_cmd)
	 * initialized, as the image/coordinates are not transformed for the
	 * monitor when displayed here */
	wlr_cursor_warp_closest(cursor, NULL, cursor->x, cursor->y);
	wlr_xcursor_manager_set_cursor_image(cursor_mgr, cursor_image, cursor);
	wlr_xcursor_manager_set_cursor_image(cursor_mgr, "left_ptr", cursor);

	/* Run the Wayland event loop. This does not return until you exit the
	 * compositor. Starting the backend rigged up all of the necessary event


@@ 2027,7 2024,6 @@ setcursor(struct wl_listener *listener, void *data)
	 * event, which will result in the client requesting set the cursor surface */
	if (cursor_mode != CurNormal && cursor_mode != CurPressed)
		return;
	cursor_image = NULL;
	/* This can be sent by any client, so we check to make sure this one is
	 * actually has pointer focus first. If so, we can tell the cursor to
	 * use the provided surface as the cursor image. It will set the

Do not follow this link