Added parse_action option to dmenu
This commit is contained in:
parent
62861d3686
commit
c248461260
@ -44,6 +44,8 @@ struct cache_line {
|
|||||||
|
|
||||||
void wofi_init(struct map* config);
|
void wofi_init(struct map* config);
|
||||||
|
|
||||||
|
char* wofi_parse_image_escapes(const char* text);
|
||||||
|
|
||||||
void wofi_write_cache(const gchar* mode, const gchar* cmd);
|
void wofi_write_cache(const gchar* mode, const gchar* cmd);
|
||||||
|
|
||||||
struct wl_list* wofi_read_cache(char* mode);
|
struct wl_list* wofi_read_cache(char* mode);
|
||||||
|
@ -19,7 +19,13 @@
|
|||||||
|
|
||||||
#define MODE "dmenu"
|
#define MODE "dmenu"
|
||||||
|
|
||||||
void wofi_dmenu_init() {
|
static const char* arg_names[] = {"parse_action"};
|
||||||
|
|
||||||
|
static bool parse_action;
|
||||||
|
|
||||||
|
void wofi_dmenu_init(struct map* config) {
|
||||||
|
parse_action = strcmp(config_get(config, "parse_action", "false"), "true") == 0;
|
||||||
|
|
||||||
struct map* cached = map_init();
|
struct map* cached = map_init();
|
||||||
struct wl_list* cache = wofi_read_cache(MODE);
|
struct wl_list* cache = wofi_read_cache(MODE);
|
||||||
|
|
||||||
@ -51,7 +57,25 @@ void wofi_dmenu_init() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void wofi_dmenu_exec(const gchar* cmd) {
|
void wofi_dmenu_exec(const gchar* cmd) {
|
||||||
|
char* action = strdup(cmd);
|
||||||
|
if(parse_action) {
|
||||||
|
free(action);
|
||||||
|
action = wofi_parse_image_escapes(cmd);
|
||||||
|
char* out;
|
||||||
|
pango_parse_markup(action, -1, 0, NULL, &out, NULL, NULL);
|
||||||
|
free(action);
|
||||||
|
action = out;
|
||||||
|
}
|
||||||
wofi_write_cache(MODE, cmd);
|
wofi_write_cache(MODE, cmd);
|
||||||
printf("%s\n", cmd);
|
printf("%s\n", action);
|
||||||
|
free(action);
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char** wofi_dmenu_get_arg_names() {
|
||||||
|
return arg_names;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t wofi_dmenu_get_arg_count() {
|
||||||
|
return sizeof(arg_names) / sizeof(char*);
|
||||||
|
}
|
||||||
|
@ -95,7 +95,7 @@ static void get_search(GtkSearchEntry* entry, gpointer data) {
|
|||||||
gtk_flow_box_invalidate_sort(GTK_FLOW_BOX(inner_box));
|
gtk_flow_box_invalidate_sort(GTK_FLOW_BOX(inner_box));
|
||||||
}
|
}
|
||||||
|
|
||||||
static char* parse_images(WofiPropertyBox* box, char* text, bool create_widgets) {
|
static char* parse_images(WofiPropertyBox* box, const char* text, bool create_widgets) {
|
||||||
char* ret = strdup("");
|
char* ret = strdup("");
|
||||||
struct map* mode_map = map_init();
|
struct map* mode_map = map_init();
|
||||||
map_put(mode_map, "img", "true");
|
map_put(mode_map, "img", "true");
|
||||||
@ -214,6 +214,10 @@ static char* parse_images(WofiPropertyBox* box, char* text, bool create_widgets)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char* wofi_parse_image_escapes(const char* text) {
|
||||||
|
return parse_images(NULL, text, false);
|
||||||
|
}
|
||||||
|
|
||||||
static GtkWidget* create_label(char* mode, char* text, char* search_text, char* action) {
|
static GtkWidget* create_label(char* mode, char* text, char* search_text, char* action) {
|
||||||
GtkWidget* box = wofi_property_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
|
GtkWidget* box = wofi_property_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
|
||||||
gtk_widget_set_name(box, "unselected");
|
gtk_widget_set_name(box, "unselected");
|
||||||
|
Loading…
Reference in New Issue
Block a user