Loop your X cursor around the screen 👉😎👉
git clone https://github.com/m-col/xoop
Files | Refs | Readme | License

Commit 42111d36b71a149d03b8e5babe3a30c9a8118a43
Parent: 90671c6b44281f7b83110c3c419ccee9ae0dffa9
Author: mcol <mcol@posteo.net>
Date: 2020-08-23 19:01:12 +0100
Committer: mcol <mcol@posteo.net>
Committed: 2020-08-23 19:01:12 +0100

move debug mode into runtime flag

xoop.c Modified

@@ -36,6 +36,7 @@
 xcb_screen_t	    *screen;
 xcb_window_t	     wid;
 
+int debug = 0;
 int randr_base = 0;
 
 
@@ -121,14 +122,14 @@
 	conn, XCB_SHAPE_SO_SUBTRACT, XCB_SHAPE_SK_INPUT, wid, 0, 0, pixmap2
     );
 
-#ifdef DEBUG
-    xcb_shape_mask(
-	conn, XCB_SHAPE_SO_SET, XCB_SHAPE_SK_BOUNDING, wid, 0, 0, pixmap
-    );
-    xcb_shape_mask(
-	conn, XCB_SHAPE_SO_SUBTRACT, XCB_SHAPE_SK_BOUNDING, wid, 0, 0, pixmap2
-    );
-#endif
+    if (debug) {
+	xcb_shape_mask(
+	    conn, XCB_SHAPE_SO_SET, XCB_SHAPE_SK_BOUNDING, wid, 0, 0, pixmap
+	);
+	xcb_shape_mask(
+	    conn, XCB_SHAPE_SO_SUBTRACT, XCB_SHAPE_SK_BOUNDING, wid, 0, 0, pixmap2
+	);
+    };
 
     xcb_free_pixmap(conn, pixmap);
     xcb_free_pixmap(conn, pixmap2);
@@ -139,8 +140,19 @@
 
 void setup_window()
 {
-    wid = xcb_generate_id(conn);
+    int class = XCB_WINDOW_CLASS_INPUT_ONLY;
+    uint32_t value_mask = XCB_CW_EVENT_MASK;
+    uint32_t value_list[1] = {XCB_EVENT_MASK_ENTER_WINDOW};
+    uint32_t value_list_debug[2] = {screen->white_pixel, XCB_EVENT_MASK_ENTER_WINDOW};
+    uint32_t *values = value_list;
+
+    if (debug) {
+	class = XCB_WINDOW_CLASS_INPUT_OUTPUT;
+	value_mask |= XCB_CW_BACK_PIXEL;
+	values = value_list_debug;
+    };
 
+    wid = xcb_generate_id(conn);
     xcb_create_window(
 	conn,
 	XCB_COPY_FROM_PARENT,
@@ -151,17 +163,10 @@
 	screen->width_in_pixels,
 	screen->height_in_pixels,
 	0,
-#ifdef DEBUG
-	XCB_WINDOW_CLASS_INPUT_OUTPUT,
-	XCB_COPY_FROM_PARENT,
-	XCB_CW_BACK_PIXEL | XCB_CW_EVENT_MASK,
-	(uint32_t []){screen->white_pixel, XCB_EVENT_MASK_ENTER_WINDOW}
-#else
-	XCB_WINDOW_CLASS_INPUT_ONLY,
+	class,
 	XCB_COPY_FROM_PARENT,
-	XCB_CW_EVENT_MASK,
-	(uint32_t []){XCB_EVENT_MASK_ENTER_WINDOW}
-#endif
+	value_mask,
+	values
     );
 
     set_window_type();
@@ -197,39 +202,37 @@
 	switch (event->response_type) {
 
 	    case XCB_ENTER_NOTIFY:
-	    entry = (xcb_enter_notify_event_t *)event;
-	    if (entry->event_x == 0) {
-		x = far_x;
-		y = entry->event_y;
-	    } else if (entry->event_y == 0){
-		x = entry->event_x;
-		y = far_y;
-	    } else if (entry->event_x == far_x){
-		x = 0;
-		y = entry->event_y;
-	    } else if (entry->event_y == far_y){
-		x = entry->event_x;
-		y = 0;
-	    };
-	    xcb_warp_pointer(conn, XCB_NONE, screen->root, 0, 0, 0, 0, x, y);
-#ifdef DEBUG
-	    printf("Entry: %d, %d\n", entry->event_x, entry->event_y);
-	    printf("Warp: (%d, %d) to (%d, %d)\n", entry->event_x, entry->event_y, x, y);
-#endif
-	    break;
+		entry = (xcb_enter_notify_event_t *)event;
+		if (entry->event_x == 0) {
+		    x = far_x;
+		    y = entry->event_y;
+		} else if (entry->event_y == 0){
+		    x = entry->event_x;
+		    y = far_y;
+		} else if (entry->event_x == far_x){
+		    x = 0;
+		    y = entry->event_y;
+		} else if (entry->event_y == far_y){
+		    x = entry->event_x;
+		    y = 0;
+		};
+		xcb_warp_pointer(conn, XCB_NONE, screen->root, 0, 0, 0, 0, x, y);
+		if (debug) {
+		    printf("Entry: %d, %d\n", entry->event_x, entry->event_y);
+		    printf("Warp: (%d, %d) to (%d, %d)\n", entry->event_x, entry->event_y, x, y);
+		};
+		break;
 
 	    default:
-	    if (event->response_type == randr_base + XCB_RANDR_SCREEN_CHANGE_NOTIFY) {
-		change = (xcb_randr_screen_change_notify_event_t *)event;
-		set_window_shape(change->width, change->height);
-		far_x = change->width - 1;
-		far_y = change->height - 1;
-#ifdef DEBUG
-		printf("Screen changed.\n");
-#endif
-	    } else {
-		printf("Unknown event: %d\n", event->response_type);
-	    };
+		if (event->response_type == randr_base + XCB_RANDR_SCREEN_CHANGE_NOTIFY) {
+		    change = (xcb_randr_screen_change_notify_event_t *)event;
+		    set_window_shape(change->width, change->height);
+		    far_x = change->width - 1;
+		    far_y = change->height - 1;
+		    if (debug) printf("Screen changed.\n");
+		} else {
+		    printf("Unknown event: %d\n", event->response_type);
+		};
 
 	}
 	xcb_flush(conn);
@@ -250,10 +253,11 @@
 void print_help()
 {
     printf(
-	PROGNAME " [-h|-f]\n"
+	PROGNAME " [-h|-f|-d]\n"
 	"\n"
 	"    -h    print help\n"
 	"    -f    fork\n"
+	"    -d    print debug information\n"
     );
 }
 
@@ -264,7 +268,7 @@
     int to_fork = 0;
     int pid;
 
-    while ((opt = getopt(argc, argv, "hf")) != -1) {
+    while ((opt = getopt(argc, argv, "hfd")) != -1) {
         switch (opt) {
 	    case 'h':
 		print_help();
@@ -272,6 +276,9 @@
 	    case 'f':
 		to_fork = 1;
 		break;
+	    case 'd':
+		debug = 1;
+		break;
         }
     }
 

makefile Modified

@@ -6,9 +6,6 @@
 
 all: clean $(OUT)
 
-debug: CFLAGS += -g -DDEBUG
-debug: all
-
 clean:
 	$(RM) $(OUT) $(OBJ)