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:
parent
a459a29ca1
commit
436c1ad0cd
@ -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;
|
|
||||||
}
|
|
||||||
|
16
src/main.c
16
src/main.c
@ -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);
|
||||||
|
|
||||||
|
11
src/wofi.c
11
src/wofi.c
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user