dmenu mode no longer uses the search bar contents when enter is pressed, this can be overridden for all modes with -e. Additionally all modes now get the search contents if no results are found.

This commit is contained in:
Scoopta 2019-11-04 17:46:39 -08:00
parent a459a29ca1
commit 436c1ad0cd
3 changed files with 20 additions and 11 deletions

View File

@ -52,7 +52,3 @@ void wofi_dmenu_exec(const gchar* cmd) {
printf("%s\n", cmd); printf("%s\n", cmd);
exit(0); exit(0);
} }
bool wofi_dmenu_exec_search() {
return true;
}

View File

@ -66,6 +66,7 @@ static void print_usage(char** argv) {
printf("--cache-file\t-k\tSets the cache file to use\n"); printf("--cache-file\t-k\tSets the cache file to use\n");
printf("--term\t\t-t\tSpecifies the terminal to use when running in a term\n"); printf("--term\t\t-t\tSpecifies the terminal to use when running in a term\n");
printf("--password\t-P\tRuns in password mode\n"); printf("--password\t-P\tRuns in password mode\n");
printf("--exec-search\t-e\tMakes enter always use the search contents not the first result\n");
exit(0); exit(0);
} }
@ -277,6 +278,12 @@ int main(int argc, char** argv) {
.flag = NULL, .flag = NULL,
.val = 'P' .val = 'P'
}, },
{
.name = "exec-search",
.has_arg = no_argument,
.flag = NULL,
.val = 'e'
},
{ {
.name = NULL, .name = NULL,
.has_arg = 0, .has_arg = 0,
@ -300,8 +307,9 @@ int main(int argc, char** argv) {
char* cache_file = NULL; char* cache_file = NULL;
char* terminal = NULL; char* terminal = NULL;
char* password_char = "false"; char* password_char = "false";
char* exec_search = NULL;
int opt; int opt;
while((opt = getopt_long(argc, argv, "hfc:s:C:dS:W:H:p:x:y:nimk:t:P::", opts, NULL)) != -1) { while((opt = getopt_long(argc, argv, "hfc:s:C:dS:W:H:p:x:y:nimk:t:P::e", opts, NULL)) != -1) {
switch(opt) { switch(opt) {
case 'h': case 'h':
print_usage(argv); print_usage(argv);
@ -362,6 +370,9 @@ int main(int argc, char** argv) {
case 'P': case 'P':
password_char = optarg; password_char = optarg;
break; break;
case 'e':
exec_search = "true";
break;
} }
} }
@ -491,6 +502,9 @@ int main(int argc, char** argv) {
} }
map_put(config, "password_char", password_char); map_put(config, "password_char", password_char);
} }
if(exec_search != NULL) {
map_put(config, "exec_search", exec_search);
}
gtk_init(&argc, &argv); gtk_init(&argc, &argv);

View File

@ -34,8 +34,8 @@ static char* config_dir;
static bool run_in_term; static bool run_in_term;
static char* terminal; static char* terminal;
static GtkOrientation outer_orientation; static GtkOrientation outer_orientation;
static bool exec_search;
static void (*mode_exec)(const gchar* cmd); static void (*mode_exec)(const gchar* cmd);
static bool (*exec_search)();
struct node { struct node {
char* text, *search_text, *action; char* text, *search_text, *action;
@ -311,7 +311,7 @@ static GtkWidget* get_first_child(GtkContainer* container) {
GtkWidget* child = list->data; GtkWidget* child = list->data;
GtkAllocation alloc; GtkAllocation alloc;
gtk_widget_get_allocation(child, &alloc); gtk_widget_get_allocation(child, &alloc);
if(alloc.x <= x && alloc.y <= y && alloc.x != -1 && alloc.y != -1 && alloc.width != 1 && alloc.height != 1) { if(alloc.x <= x && alloc.y <= y && alloc.x != -1 && alloc.y != -1 && alloc.width != 1 && alloc.height != 1 && gtk_widget_get_child_visible(child)) {
x = alloc.x; x = alloc.x;
y = alloc.y; y = alloc.y;
min_child = child; min_child = child;
@ -323,10 +323,10 @@ static GtkWidget* get_first_child(GtkContainer* container) {
static void activate_search(GtkEntry* entry, gpointer data) { static void activate_search(GtkEntry* entry, gpointer data) {
(void) data; (void) data;
if(exec_search != NULL && exec_search()) { GtkWidget* child = get_first_child(GTK_CONTAINER(inner_box));
if(exec_search || child == NULL) {
execute_action(mode, gtk_entry_get_text(entry)); execute_action(mode, gtk_entry_get_text(entry));
} else { } else {
GtkWidget* child = get_first_child(GTK_CONTAINER(inner_box));
GtkWidget* box = gtk_bin_get_child(GTK_BIN(child)); GtkWidget* box = gtk_bin_get_child(GTK_BIN(child));
execute_action(mode, wofi_property_box_get_property(WOFI_PROPERTY_BOX(box), "action")); execute_action(mode, wofi_property_box_get_property(WOFI_PROPERTY_BOX(box), "action"));
} }
@ -408,7 +408,6 @@ static void* start_thread(void* data) {
if(dso == NULL) { if(dso == NULL) {
init = get_plugin_proc(mode, "_init"); init = get_plugin_proc(mode, "_init");
mode_exec = get_plugin_proc(mode, "_exec"); mode_exec = get_plugin_proc(mode, "_exec");
exec_search = get_plugin_proc(mode, "_exec_search");
} else { } else {
char* plugins_dir = utils_concat(2, config_dir, "/plugins/"); char* plugins_dir = utils_concat(2, config_dir, "/plugins/");
char* full_name = utils_concat(2, plugins_dir, mode); char* full_name = utils_concat(2, plugins_dir, mode);
@ -417,7 +416,6 @@ static void* start_thread(void* data) {
free(plugins_dir); free(plugins_dir);
init = dlsym(plugin, "init"); init = dlsym(plugin, "init");
mode_exec = dlsym(plugin, "exec"); mode_exec = dlsym(plugin, "exec");
exec_search = dlsym(plugin, "exec_search");
} }
if(init != NULL) { if(init != NULL) {
@ -455,6 +453,7 @@ void wofi_init(struct map* config) {
config_dir = map_get(config, "config_dir"); config_dir = map_get(config, "config_dir");
terminal = map_get(config, "term"); terminal = map_get(config, "term");
char* password_char = map_get(config, "password_char"); char* password_char = map_get(config, "password_char");
exec_search = strcmp(config_get(config, "exec_search", "false"), "true") == 0;
window = gtk_window_new(GTK_WINDOW_TOPLEVEL); window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_widget_realize(window); gtk_widget_realize(window);