Example #1
0
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);
}
Example #2
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);
}
Example #3
0
void TEST_desktop_count() {
    char *routine = "TEST_desktop_count";
    printf(testing, routine);
    assert(desktop_count());
    printf(done, routine);
}