commit
a376d1e52f
|
@ -246,8 +246,8 @@ int main(int argc, char *argv[]) {
|
||||||
sigaction(SIGINT, &action, NULL);
|
sigaction(SIGINT, &action, NULL);
|
||||||
|
|
||||||
/* Since pthread_cond_wait() expects a mutex, we need to provide one.
|
/* Since pthread_cond_wait() expects a mutex, we need to provide one.
|
||||||
* To not lock i3 (that’s bad, mhkay?) we just define one outside of
|
* To not lock i3 (that’s bad, mhkay?) we just define one outside of
|
||||||
* the shared memory. */
|
* the shared memory. */
|
||||||
pthread_mutex_t dummy_mutex = PTHREAD_MUTEX_INITIALIZER;
|
pthread_mutex_t dummy_mutex = PTHREAD_MUTEX_INITIALIZER;
|
||||||
pthread_mutex_lock(&dummy_mutex);
|
pthread_mutex_lock(&dummy_mutex);
|
||||||
while (!interrupted) {
|
while (!interrupted) {
|
||||||
|
|
|
@ -114,7 +114,7 @@ static int workspaces_string_cb(void *params_, const unsigned char *val, size_t
|
||||||
|
|
||||||
if ((config.strip_ws_numbers || config.strip_ws_name) && params->workspaces_walk->num >= 0) {
|
if ((config.strip_ws_numbers || config.strip_ws_name) && params->workspaces_walk->num >= 0) {
|
||||||
/* Special case: strip off the workspace number/name */
|
/* Special case: strip off the workspace number/name */
|
||||||
static char ws_num[10];
|
static char ws_num[32];
|
||||||
|
|
||||||
snprintf(ws_num, sizeof(ws_num), "%d", params->workspaces_walk->num);
|
snprintf(ws_num, sizeof(ws_num), "%d", params->workspaces_walk->num);
|
||||||
|
|
||||||
|
|
|
@ -145,9 +145,9 @@ void ipc_send_barconfig_update_event(Barconfig *barconfig);
|
||||||
void ipc_send_binding_event(const char *event_type, Binding *bind);
|
void ipc_send_binding_event(const char *event_type, Binding *bind);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the maximum duration that we allow for a connection with an unwriteable
|
* Set the maximum duration that we allow for a connection with an unwriteable
|
||||||
* socket.
|
* socket.
|
||||||
*/
|
*/
|
||||||
void ipc_set_kill_timeout(ev_tstamp new);
|
void ipc_set_kill_timeout(ev_tstamp new);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -86,7 +86,7 @@ bool layout_from_name(const char *layout_str, layout_t *out);
|
||||||
* interpreted as a "named workspace".
|
* interpreted as a "named workspace".
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
long ws_name_to_number(const char *name);
|
int ws_name_to_number(const char *name);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Updates *destination with new_value and returns true if it was changed or false
|
* Updates *destination with new_value and returns true if it was changed or false
|
||||||
|
|
|
@ -49,8 +49,8 @@
|
||||||
#define ROOT_EVENT_MASK (XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT | \
|
#define ROOT_EVENT_MASK (XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT | \
|
||||||
XCB_EVENT_MASK_BUTTON_PRESS | \
|
XCB_EVENT_MASK_BUTTON_PRESS | \
|
||||||
XCB_EVENT_MASK_STRUCTURE_NOTIFY | /* when the user adds a screen (e.g. video \
|
XCB_EVENT_MASK_STRUCTURE_NOTIFY | /* when the user adds a screen (e.g. video \
|
||||||
projector), the root window gets a \
|
* projector), the root window gets a \
|
||||||
ConfigureNotify */ \
|
* ConfigureNotify */ \
|
||||||
XCB_EVENT_MASK_POINTER_MOTION | \
|
XCB_EVENT_MASK_POINTER_MOTION | \
|
||||||
XCB_EVENT_MASK_PROPERTY_CHANGE | \
|
XCB_EVENT_MASK_PROPERTY_CHANGE | \
|
||||||
XCB_EVENT_MASK_FOCUS_CHANGE | \
|
XCB_EVENT_MASK_FOCUS_CHANGE | \
|
||||||
|
|
|
@ -91,7 +91,7 @@ char *get_exe_path(const char *argv0) {
|
||||||
free(destpath);
|
free(destpath);
|
||||||
sasprintf(&destpath, "%s/%s", component, argv0);
|
sasprintf(&destpath, "%s/%s", component, argv0);
|
||||||
/* Of course this is not 100% equivalent to actually exec()ing the
|
/* Of course this is not 100% equivalent to actually exec()ing the
|
||||||
* binary, but meh. */
|
* binary, but meh. */
|
||||||
if (access(destpath, X_OK) == 0) {
|
if (access(destpath, X_OK) == 0) {
|
||||||
free(path);
|
free(path);
|
||||||
free(tmp);
|
free(tmp);
|
||||||
|
|
|
@ -98,7 +98,8 @@ void display_running_version(void) {
|
||||||
if (state != yajl_status_ok)
|
if (state != yajl_status_ok)
|
||||||
errx(EXIT_FAILURE, "Could not parse my own reply. That's weird. reply is %.*s", (int)reply_length, reply);
|
errx(EXIT_FAILURE, "Could not parse my own reply. That's weird. reply is %.*s", (int)reply_length, reply);
|
||||||
|
|
||||||
printf("\rRunning i3 version: %s (pid %s)\n", human_readable_version, pid_from_atom);
|
printf("\r\x1b[K");
|
||||||
|
printf("Running i3 version: %s (pid %s)\n", human_readable_version, pid_from_atom);
|
||||||
|
|
||||||
if (loaded_config_file_name) {
|
if (loaded_config_file_name) {
|
||||||
struct stat sb;
|
struct stat sb;
|
||||||
|
|
|
@ -29,7 +29,7 @@ static xcb_window_t _match_depth(i3Window *win, Con *con) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Remove all match criteria, the first swallowed window wins.
|
* Remove all match criteria, the first swallowed window wins.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
static void _remove_matches(Con *con) {
|
static void _remove_matches(Con *con) {
|
||||||
|
|
10
src/util.c
10
src/util.c
|
@ -109,14 +109,12 @@ bool layout_from_name(const char *layout_str, layout_t *out) {
|
||||||
* interpreted as a "named workspace".
|
* interpreted as a "named workspace".
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
long ws_name_to_number(const char *name) {
|
int ws_name_to_number(const char *name) {
|
||||||
/* positive integers and zero are interpreted as numbers */
|
/* positive integers and zero are interpreted as numbers */
|
||||||
char *endptr = NULL;
|
char *endptr = NULL;
|
||||||
long parsed_num = strtol(name, &endptr, 10);
|
errno = 0;
|
||||||
if (parsed_num == LONG_MIN ||
|
long long parsed_num = strtoll(name, &endptr, 10);
|
||||||
parsed_num == LONG_MAX ||
|
if (errno != 0 || parsed_num > INT32_MAX || parsed_num < 0 || endptr == name) {
|
||||||
parsed_num < 0 ||
|
|
||||||
endptr == name) {
|
|
||||||
parsed_num = -1;
|
parsed_num = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -59,7 +59,7 @@ struct connstate {
|
||||||
ev_io *clientw;
|
ev_io *clientw;
|
||||||
|
|
||||||
/* serverw is a libev watcher for the connection to X11 which we initiated
|
/* serverw is a libev watcher for the connection to X11 which we initiated
|
||||||
* on behalf of the client. */
|
* on behalf of the client. */
|
||||||
ev_io *serverw;
|
ev_io *serverw;
|
||||||
|
|
||||||
/* sequence is the client-side sequence number counter. In X11’s wire
|
/* sequence is the client-side sequence number counter. In X11’s wire
|
||||||
|
|
|
@ -130,6 +130,21 @@ $ws = get_ws("aa: $tmp");
|
||||||
ok(defined($ws), "workspace aa: $tmp was created");
|
ok(defined($ws), "workspace aa: $tmp was created");
|
||||||
is($ws->{num}, -1, 'workspace number is -1');
|
is($ws->{num}, -1, 'workspace number is -1');
|
||||||
|
|
||||||
|
cmd "workspace -42: $tmp";
|
||||||
|
$ws = get_ws("-42: $tmp");
|
||||||
|
ok(defined($ws), "workspace -42: $tmp was created");
|
||||||
|
is($ws->{num}, -1, 'negative workspace number is ignored');
|
||||||
|
|
||||||
|
cmd "workspace 2147483647: $tmp";
|
||||||
|
$ws = get_ws("2147483647: $tmp");
|
||||||
|
ok(defined($ws), "workspace 2147483647: $tmp was created");
|
||||||
|
is($ws->{num}, 2147483647, 'workspace number is 2147483647');
|
||||||
|
|
||||||
|
cmd "workspace 2147483648: $tmp";
|
||||||
|
$ws = get_ws("2147483648: $tmp");
|
||||||
|
ok(defined($ws), "workspace 2147483648: $tmp was created");
|
||||||
|
is($ws->{num}, -1, 'workspace number past the limit is ignored');
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
# Check that we can go to workspace "4: foo" with the command
|
# Check that we can go to workspace "4: foo" with the command
|
||||||
# "workspace number 4".
|
# "workspace number 4".
|
||||||
|
|
Loading…
Reference in New Issue