BOOL set_current_desktop(long desktop) { if (!_check_init()) { return FALSE; } if (!_is_supported_feature("_NET_WM_DESKTOP")) { fprintf(stderr, "Apparently your window manager doesn't support " "_NET_WM_DESKTOP so I'm leaving you where you are.\n"); return FALSE; } logit(LOG_LEVEL_VERBOSE, "Switching to desktop %ld\n", desktop); desktop--; //Force desktop to be one based rather than zero based if(desktop < 0) { char *msg = "This software starts desktop indexes at 1, so your" " request for desktop %ld failed\n"; fprintf(stderr, msg, (desktop +1)); return FALSE; } if((desktop +1) > desktop_count()) { char *msg = "You have specified desktop %ld, but you have only %ld" " desktops available\n"; fprintf(stderr, msg, (desktop +1), desktop_count()); return FALSE; } Window root = RootWindow(defaults->display, 0); XEvent event; memset(&event, 0, sizeof(event)); event.xclient.format = 32; event.xclient.data.l[0] = desktop; event.xclient.data.l[1] = CurrentTime; event.type = ClientMessage; event.xclient.display = defaults->display; event.xclient.window = root; event.xclient.message_type = XInternAtom(defaults->display, "_NET_CURRENT_DESKTOP", FALSE); long mask = SubstructureNotifyMask | SubstructureRedirectMask; Status status = XSendEvent(defaults->display, root, FALSE, mask, &event ); XFlush(defaults->display); return (status != 0); }
void TEST_set_current_desktop() { char *routine = "TEST_set_current_desktop"; printf(testing, routine); long max = desktop_count(); if(max == 1) { return; } long before = get_current_desktop(); if(before < max) { assert(set_current_desktop(max)); sleep(1); assert(desktop_count() == get_current_desktop()); } else { assert(set_current_desktop(max -1)); assert(desktop_count() != get_current_desktop()); } set_current_desktop(before); printf(done, routine); }
void TEST_desktop_count() { char *routine = "TEST_desktop_count"; printf(testing, routine); assert(desktop_count()); printf(done, routine); }