aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--common/list.c10
-rw-r--r--include/config.h2
-rw-r--r--include/list.h5
-rw-r--r--sway/commands.c12
-rw-r--r--sway/config.c8
5 files changed, 21 insertions, 16 deletions
diff --git a/common/list.c b/common/list.c
index d6f6f2ea..850c8569 100644
--- a/common/list.c
+++ b/common/list.c
@@ -50,14 +50,8 @@ void list_cat(list_t *list, list_t *source) {
50 } 50 }
51} 51}
52 52
53// pass the pointer of the object we care about to the comparison function 53void list_qsort(list_t* list, int compare(const void *left, const void *right)) {
54static int list_cmp(const void *l, const void *r, void *_cmp) { 54 qsort(list->items, list->length, sizeof(void *), compare);
55 int (*cmp)(const void *, const void *) = _cmp;
56 return cmp(*(void**)l, *(void**)r);
57}
58
59void list_sort(list_t *list, int compare(const void *left, const void *right)) {
60 qsort_r(list->items, list->length, sizeof(void *), list_cmp, compare);
61} 55}
62 56
63int list_seq_find(list_t *list, int compare(const void *item, const void *data), const void *data) { 57int list_seq_find(list_t *list, int compare(const void *item, const void *data), const void *data) {
diff --git a/include/config.h b/include/config.h
index b97acb57..a915fbed 100644
--- a/include/config.h
+++ b/include/config.h
@@ -179,10 +179,12 @@ void free_output_config(struct output_config *oc);
179int workspace_output_cmp_workspace(const void *a, const void *b); 179int workspace_output_cmp_workspace(const void *a, const void *b);
180 180
181int sway_binding_cmp(const void *a, const void *b); 181int sway_binding_cmp(const void *a, const void *b);
182int sway_binding_cmp_qsort(const void *a, const void *b);
182int sway_binding_cmp_keys(const void *a, const void *b); 183int sway_binding_cmp_keys(const void *a, const void *b);
183void free_sway_binding(struct sway_binding *sb); 184void free_sway_binding(struct sway_binding *sb);
184 185
185int sway_mouse_binding_cmp(const void *a, const void *b); 186int sway_mouse_binding_cmp(const void *a, const void *b);
187int sway_mouse_binding_cmp_qsort(const void *a, const void *b);
186int sway_mouse_binding_cmp_buttons(const void *a, const void *b); 188int sway_mouse_binding_cmp_buttons(const void *a, const void *b);
187void free_sway_mouse_binding(struct sway_mouse_binding *smb); 189void free_sway_mouse_binding(struct sway_mouse_binding *smb);
188 190
diff --git a/include/list.h b/include/list.h
index 90d0ad36..d18d3f54 100644
--- a/include/list.h
+++ b/include/list.h
@@ -13,8 +13,9 @@ void list_add(list_t *list, void *item);
13void list_insert(list_t *list, int index, void *item); 13void list_insert(list_t *list, int index, void *item);
14void list_del(list_t *list, int index); 14void list_del(list_t *list, int index);
15void list_cat(list_t *list, list_t *source); 15void list_cat(list_t *list, list_t *source);
16// See qsort 16// See qsort. Remember to use *_qsort functions as compare functions,
17void list_sort(list_t *list, int compare(const void *left, const void *right)); 17// because they dereference the left and right arguments first!
18void list_qsort(list_t *list, int compare(const void *left, const void *right));
18// Return index for first item in list that returns 0 for given compare 19// Return index for first item in list that returns 0 for given compare
19// function or -1 if none matches. 20// function or -1 if none matches.
20int list_seq_find(list_t *list, int compare(const void *item, const void *cmp_to), const void *cmp_to); 21int list_seq_find(list_t *list, int compare(const void *item, const void *cmp_to), const void *cmp_to);
diff --git a/sway/commands.c b/sway/commands.c
index 3d882a7b..f6d9b947 100644
--- a/sway/commands.c
+++ b/sway/commands.c
@@ -219,7 +219,7 @@ static struct cmd_results *cmd_bindsym(int argc, char **argv) {
219 } 219 }
220 binding->order = binding_order++; 220 binding->order = binding_order++;
221 list_add(mode->bindings, binding); 221 list_add(mode->bindings, binding);
222 list_sort(mode->bindings, sway_binding_cmp); 222 list_qsort(mode->bindings, sway_binding_cmp_qsort);
223 223
224 sway_log(L_DEBUG, "bindsym - Bound %s to command %s", argv[0], binding->command); 224 sway_log(L_DEBUG, "bindsym - Bound %s to command %s", argv[0], binding->command);
225 return cmd_results_new(CMD_SUCCESS, NULL, NULL); 225 return cmd_results_new(CMD_SUCCESS, NULL, NULL);
@@ -1255,9 +1255,9 @@ static struct cmd_results *cmd_scratchpad(int argc, char **argv) {
1255} 1255}
1256 1256
1257// sort in order of longest->shortest 1257// sort in order of longest->shortest
1258static int compare_set(const void *_l, const void *_r) { 1258static int compare_set_qsort(const void *_l, const void *_r) {
1259 struct sway_variable const *l = _l; 1259 struct sway_variable const *l = *(void **)_l;
1260 struct sway_variable const *r = _r; 1260 struct sway_variable const *r = *(void **)_r;
1261 return strlen(r->name) - strlen(l->name); 1261 return strlen(r->name) - strlen(l->name);
1262} 1262}
1263 1263
@@ -1284,7 +1284,7 @@ static struct cmd_results *cmd_set(int argc, char **argv) {
1284 var = malloc(sizeof(struct sway_variable)); 1284 var = malloc(sizeof(struct sway_variable));
1285 var->name = strdup(argv[0]); 1285 var->name = strdup(argv[0]);
1286 list_add(config->symbols, var); 1286 list_add(config->symbols, var);
1287 list_sort(config->symbols, compare_set); 1287 list_qsort(config->symbols, compare_set_qsort);
1288 } 1288 }
1289 var->value = join_args(argv + 1, argc - 1); 1289 var->value = join_args(argv + 1, argc - 1);
1290 return cmd_results_new(CMD_SUCCESS, NULL, NULL); 1290 return cmd_results_new(CMD_SUCCESS, NULL, NULL);
@@ -1620,7 +1620,7 @@ static struct cmd_results *bar_cmd_bindsym(int argc, char **argv) {
1620 list_del(bar->bindings, i); 1620 list_del(bar->bindings, i);
1621 } 1621 }
1622 list_add(bar->bindings, binding); 1622 list_add(bar->bindings, binding);
1623 list_sort(bar->bindings, sway_mouse_binding_cmp); 1623 list_qsort(bar->bindings, sway_mouse_binding_cmp_qsort);
1624 1624
1625 sway_log(L_DEBUG, "bindsym - Bound %s to command %s when clicking swaybar", argv[0], binding->command); 1625 sway_log(L_DEBUG, "bindsym - Bound %s to command %s when clicking swaybar", argv[0], binding->command);
1626 return cmd_results_new(CMD_SUCCESS, NULL, NULL); 1626 return cmd_results_new(CMD_SUCCESS, NULL, NULL);
diff --git a/sway/config.c b/sway/config.c
index 4b1bf01a..e86eda53 100644
--- a/sway/config.c
+++ b/sway/config.c
@@ -642,6 +642,10 @@ int sway_binding_cmp(const void *a, const void *b) {
642 return lenient_strcmp(binda->command, bindb->command); 642 return lenient_strcmp(binda->command, bindb->command);
643} 643}
644 644
645int sway_binding_cmp_qsort(const void *a, const void *b) {
646 return sway_binding_cmp(*(void **)a, *(void **)b);
647}
648
645void free_sway_binding(struct sway_binding *binding) { 649void free_sway_binding(struct sway_binding *binding) {
646 if (binding->keys) { 650 if (binding->keys) {
647 for (int i = 0; i < binding->keys->length; i++) { 651 for (int i = 0; i < binding->keys->length; i++) {
@@ -675,6 +679,10 @@ int sway_mouse_binding_cmp(const void *a, const void *b) {
675 return lenient_strcmp(binda->command, bindb->command); 679 return lenient_strcmp(binda->command, bindb->command);
676} 680}
677 681
682int sway_mouse_binding_cmp_qsort(const void *a, const void *b) {
683 return sway_mouse_binding_cmp(*(void **)a, *(void **)b);
684}
685
678void free_sway_mouse_binding(struct sway_mouse_binding *binding) { 686void free_sway_mouse_binding(struct sway_mouse_binding *binding) {
679 if (binding->command) { 687 if (binding->command) {
680 free(binding->command); 688 free(binding->command);