diff --git a/src/menu.c b/src/menu.c index 06de61e..a3319c1 100644 --- a/src/menu.c +++ b/src/menu.c @@ -188,6 +188,10 @@ void dispatch_menu_result(const char *input) */ void context_menu(void) { + if (settings.dmenu_cmd == NULL) { + fprintf(stderr, "dmenu command not set properly. Cowardly refusing to open the context menu.\n"); + return; + } char *dmenu_input = NULL; for (GList * iter = g_queue_peek_head_link(displayed); iter; diff --git a/src/settings.c b/src/settings.c index 1b5432a..9826167 100644 --- a/src/settings.c +++ b/src/settings.c @@ -325,7 +325,16 @@ void load_settings(char *cmdline_config_path) "path to dmenu" ); - settings.dmenu_cmd = string_to_argv(settings.dmenu); + { + GError *error = NULL; + if (!g_shell_parse_argv(settings.dmenu, NULL, &settings.dmenu_cmd, &error)) { + fprintf(stderr, "Unable to parse dmenu command: %s\n", error->message); + fprintf(stderr, "dmenu functionality will be disabled.\n"); + g_error_free(error); + settings.dmenu_cmd = NULL; + } + } + settings.browser = option_get_string( "global", diff --git a/test/utils.c b/test/utils.c index d510d5f..509bf78 100644 --- a/test/utils.c +++ b/test/utils.c @@ -74,31 +74,6 @@ TEST test_string_append(void) PASS(); } -TEST test_string_to_argv(void) -{ - char **argv = string_to_argv("argv"); - ASSERT_STR_EQ("argv", argv[0]); - ASSERT_EQ( NULL, argv[1]); - free(argv[0]); - free(argv); - argv = NULL; - - argv = string_to_argv("echo test"); - ASSERT_STR_EQ("echo", argv[0]); - ASSERT_STR_EQ("test", argv[1]); - ASSERT_EQ( NULL, argv[2]); - free(argv[0]); - free(argv[1]); - free(argv); - argv = NULL; - - argv = string_to_argv(""); - ASSERT_EQ( NULL, argv[0]); - free(argv); - - PASS(); -} - TEST test_string_strip_delimited(void) { char *text = malloc(128 * sizeof(char)); @@ -133,7 +108,6 @@ SUITE(suite_utils) RUN_TEST(test_string_replace_all); RUN_TEST(test_string_replace); RUN_TEST(test_string_append); - RUN_TEST(test_string_to_argv); RUN_TEST(test_string_strip_delimited); } /* vim: set tabstop=8 shiftwidth=8 expandtab textwidth=0: */