X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2Futil.c;h=32c3c57e15d5bd2f206bab5a1984a00e19dff06a;hb=5f9a5e8d7d0eb3123fd7068452090b72b9096bea;hp=67dc5c92206ac778d44df861d5c1b7c58bfe5071;hpb=6fefe836d465f2b1f045a73335c71403d7cc568f;p=i3%2Fi3 diff --git a/src/util.c b/src/util.c index 67dc5c92..32c3c57e 100644 --- a/src/util.c +++ b/src/util.c @@ -1,5 +1,3 @@ -#undef I3__FILE__ -#define I3__FILE__ "util.c" /* * vim:ts=4:sw=4:expandtab * @@ -68,6 +66,34 @@ __attribute__((pure)) bool name_is_digits(const char *name) { return true; } +/* + * Set 'out' to the layout_t value for the given layout. The function + * returns true on success or false if the passed string is not a valid + * layout name. + * + */ +bool layout_from_name(const char *layout_str, layout_t *out) { + if (strcmp(layout_str, "default") == 0) { + *out = L_DEFAULT; + return true; + } else if (strcasecmp(layout_str, "stacked") == 0 || + strcasecmp(layout_str, "stacking") == 0) { + *out = L_STACKED; + return true; + } else if (strcasecmp(layout_str, "tabbed") == 0) { + *out = L_TABBED; + return true; + } else if (strcasecmp(layout_str, "splitv") == 0) { + *out = L_SPLITV; + return true; + } else if (strcasecmp(layout_str, "splith") == 0) { + *out = L_SPLITH; + return true; + } + + return false; +} + /* * Parses the workspace name as a number. Returns -1 if the workspace should be * interpreted as a "named workspace". @@ -145,20 +171,6 @@ void exec_i3_utility(char *name, char *argv[]) { _exit(2); } -/* - * Checks a generic cookie for errors and quits with the given message if there - * was an error. - * - */ -void check_error(xcb_connection_t *conn, xcb_void_cookie_t cookie, char *err_message) { - xcb_generic_error_t *error = xcb_request_check(conn, cookie); - if (error != NULL) { - fprintf(stderr, "ERROR: %s (X error %d)\n", err_message, error->error_code); - xcb_disconnect(conn); - exit(-1); - } -} - /* * Checks if the given path exists by calling stat(). * @@ -275,7 +287,7 @@ void i3_restart(bool forget_layout) { restore_geometry(); - ipc_shutdown(); + ipc_shutdown(SHUTDOWN_REASON_RESTART); LOG("restarting \"%s\"...\n", start_argv[0]); /* make sure -a is in the argument list or add it */ @@ -343,6 +355,7 @@ char *pango_escape_markup(char *input) { char *escaped = g_markup_escape_text(input, -1); FREE(input); + return escaped; } @@ -445,3 +458,20 @@ void kill_nagbar(pid_t *nagbar_pid, bool wait_for_it) { * waitpid() here. */ waitpid(*nagbar_pid, NULL, 0); } + +/* + * Converts a string into a long using strtol(). + * This is a convenience wrapper checking the parsing result. It returns true + * if the number could be parsed. + */ +bool parse_long(const char *str, long *out, int base) { + char *end; + long result = strtol(str, &end, base); + if (result == LONG_MIN || result == LONG_MAX || result < 0 || (end != NULL && *end != '\0')) { + *out = result; + return false; + } + + *out = result; + return true; +}