diff --git a/README.md b/README.md index 47b6f2e..a52ee3a 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ This project's development is based on [dwl](https://codeberg.org/dwl/dwl/). - Base tags not workspaces (supports separate window layouts for each tag) - Smooth and customizable complete animations (window open/move/close, tag enter/leave,layer open/close/move) - Excellent input method support (text input v2/v3) - - Flexible window layouts with easy switching (scroller, master-slave, monocle,center-master, etc.) + - Flexible window layouts with easy switching (scroller, master-stack, monocle,center-master, etc.) - Rich window states (swallow, minimize, maximize, unglobal, global, fakefullscreen, overlay, etc.) - Simple yet powerful external configuration(support shortcuts hot-reload) - Sway-like scratchpad and named scratchpad diff --git a/config.conf b/config.conf index e354ec9..48e3bae 100644 --- a/config.conf +++ b/config.conf @@ -224,7 +224,7 @@ bind=ALT+SHIFT,Z,incgaps,-1 bind=ALT+SHIFT,R,togglegaps # adjust tile window size -# change master fact for master-slave layout +# change master fact for master-stack layout bind=ALT+SUPER,h,setmfact,-0.05 bind=ALT+SUPER,l,setmfact,+0.05 diff --git a/src/config/parse_config.h b/src/config/parse_config.h index 7454028..dd4a071 100644 --- a/src/config/parse_config.h +++ b/src/config/parse_config.h @@ -204,7 +204,7 @@ typedef struct { float default_mfact; unsigned int default_nmaster; int center_master_overspread; - int center_when_single_slave; + int center_when_single_stack; unsigned int hotarea_size; unsigned int enable_hotarea; @@ -1262,8 +1262,8 @@ void parse_option(Config *config, char *key, char *value) { config->default_nmaster = atoi(value); } else if (strcmp(key, "center_master_overspread") == 0) { config->center_master_overspread = atoi(value); - } else if (strcmp(key, "center_when_single_slave") == 0) { - config->center_when_single_slave = atoi(value); + } else if (strcmp(key, "center_when_single_stack") == 0) { + config->center_when_single_stack = atoi(value); } else if (strcmp(key, "hotarea_size") == 0) { config->hotarea_size = atoi(value); } else if (strcmp(key, "enable_hotarea") == 0) { @@ -2474,7 +2474,7 @@ void override_config(void) { default_mfact = CLAMP_FLOAT(config.default_mfact, 0.1f, 0.9f); default_nmaster = CLAMP_INT(config.default_nmaster, 1, 1000); center_master_overspread = CLAMP_INT(config.center_master_overspread, 0, 1); - center_when_single_slave = CLAMP_INT(config.center_when_single_slave, 0, 1); + center_when_single_stack = CLAMP_INT(config.center_when_single_stack, 0, 1); new_is_master = CLAMP_INT(config.new_is_master, 0, 1); // 概述模式设置 @@ -2623,8 +2623,8 @@ void set_value_default() { config.default_nmaster = default_nmaster; // 默认master数量 config.center_master_overspread = center_master_overspread; // 中心master时是否铺满 - config.center_when_single_slave = - center_when_single_slave; // 单个slave时是否居中 + config.center_when_single_stack = + center_when_single_stack; // 单个stack时是否居中 config.numlockon = numlockon; // 是否打开右边小键盘 diff --git a/src/config/preset.h b/src/config/preset.h index c1ef189..a6bde57 100644 --- a/src/config/preset.h +++ b/src/config/preset.h @@ -37,7 +37,7 @@ unsigned int new_is_master = 1; // 新窗口是否插在头部 double default_mfact = 0.55f; // master 窗口比例 unsigned int default_nmaster = 1; // 默认master数量 int center_master_overspread = 0; // 中心master时是否铺满 -int center_when_single_slave = 1; // 单个slave时是否居中 +int center_when_single_stack = 1; // 单个stack时是否居中 /* logging */ int log_level = WLR_ERROR; unsigned int numlockon = 1; // 是否打开右边小键盘 diff --git a/src/layout/arrange.h b/src/layout/arrange.h index 6b35c6c..3dcc4f2 100644 --- a/src/layout/arrange.h +++ b/src/layout/arrange.h @@ -5,7 +5,7 @@ void set_size_per(Monitor *m, Client *c) { if (VISIBLEON(fc, m) && ISTILED(fc) && fc != c) { c->master_mfact_per = fc->master_mfact_per; c->master_inner_per = fc->master_inner_per; - c->slave_innder_per = fc->slave_innder_per; + c->stack_innder_per = fc->stack_innder_per; found = true; break; } @@ -14,7 +14,7 @@ void set_size_per(Monitor *m, Client *c) { if (!found) { c->master_mfact_per = 0.5f; c->master_inner_per = 1.0f; - c->slave_innder_per = 1.0f; + c->stack_innder_per = 1.0f; } } @@ -71,7 +71,7 @@ void resize_tile_master_horizontal(Client *grabc, bool isdrag, int offsetx, // 记录初始状态 grabc->old_master_mfact_per = grabc->master_mfact_per; grabc->old_master_inner_per = grabc->master_inner_per; - grabc->old_slave_innder_per = grabc->slave_innder_per; + grabc->old_stack_innder_per = grabc->stack_innder_per; grabc->cursor_in_upper_half = cursor->y < grabc->geom.y + grabc->geom.height / 2; grabc->cursor_in_left_half = @@ -87,7 +87,7 @@ void resize_tile_master_horizontal(Client *grabc, bool isdrag, int offsetx, } else { grabc->old_master_mfact_per = grabc->master_mfact_per; grabc->old_master_inner_per = grabc->master_inner_per; - grabc->old_slave_innder_per = grabc->slave_innder_per; + grabc->old_stack_innder_per = grabc->stack_innder_per; grabc->drag_begin_geom = grabc->geom; grabc->cursor_in_upper_half = false; grabc->cursor_in_left_half = false; @@ -101,7 +101,7 @@ void resize_tile_master_horizontal(Client *grabc, bool isdrag, int offsetx, } else { delta_x = (float)(offsetx) * (1 - grabc->old_master_mfact_per) / grabc->drag_begin_geom.width; - delta_y = (float)(offsety) * (grabc->old_slave_innder_per) / + delta_y = (float)(offsety) * (grabc->old_stack_innder_per) / grabc->drag_begin_geom.height; } bool moving_up; @@ -163,7 +163,7 @@ void resize_tile_master_horizontal(Client *grabc, bool isdrag, int offsetx, delta_y = delta_y * 2; } - if (!grabc->ismaster && grabc->isleftslave && type == CENTER_TILE) { + if (!grabc->ismaster && grabc->isleftstack && type == CENTER_TILE) { delta_x = delta_x * -1.0f; } @@ -179,12 +179,12 @@ void resize_tile_master_horizontal(Client *grabc, bool isdrag, int offsetx, // 直接设置新的比例,基于初始值 + 变化量 float new_master_mfact_per = grabc->old_master_mfact_per + delta_x; float new_master_inner_per = grabc->old_master_inner_per + delta_y; - float new_slave_innder_per = grabc->old_slave_innder_per + delta_y; + float new_stack_innder_per = grabc->old_stack_innder_per + delta_y; // 应用限制,确保比例在合理范围内 new_master_mfact_per = fmaxf(0.1f, fminf(0.9f, new_master_mfact_per)); new_master_inner_per = fmaxf(0.1f, fminf(0.9f, new_master_inner_per)); - new_slave_innder_per = fmaxf(0.1f, fminf(0.9f, new_slave_innder_per)); + new_stack_innder_per = fmaxf(0.1f, fminf(0.9f, new_stack_innder_per)); // 应用到所有平铺窗口 wl_list_for_each(tc, &clients, link) { @@ -194,7 +194,7 @@ void resize_tile_master_horizontal(Client *grabc, bool isdrag, int offsetx, } grabc->master_inner_per = new_master_inner_per; - grabc->slave_innder_per = new_slave_innder_per; + grabc->stack_innder_per = new_stack_innder_per; if (!isdrag) { arrange(grabc->mon, false); @@ -248,7 +248,7 @@ void resize_tile_master_vertical(Client *grabc, bool isdrag, int offsetx, // 记录初始状态 grabc->old_master_mfact_per = grabc->master_mfact_per; grabc->old_master_inner_per = grabc->master_inner_per; - grabc->old_slave_innder_per = grabc->slave_innder_per; + grabc->old_stack_innder_per = grabc->stack_innder_per; grabc->cursor_in_upper_half = cursor->y < grabc->geom.y + grabc->geom.height / 2; grabc->cursor_in_left_half = @@ -265,7 +265,7 @@ void resize_tile_master_vertical(Client *grabc, bool isdrag, int offsetx, } else { grabc->old_master_mfact_per = grabc->master_mfact_per; grabc->old_master_inner_per = grabc->master_inner_per; - grabc->old_slave_innder_per = grabc->slave_innder_per; + grabc->old_stack_innder_per = grabc->stack_innder_per; grabc->drag_begin_geom = grabc->geom; grabc->cursor_in_upper_half = false; grabc->cursor_in_left_half = false; @@ -278,7 +278,7 @@ void resize_tile_master_vertical(Client *grabc, bool isdrag, int offsetx, delta_y = (float)(offsety) * (grabc->old_master_mfact_per) / grabc->drag_begin_geom.height; } else { - delta_x = (float)(offsetx) * (grabc->old_slave_innder_per) / + delta_x = (float)(offsetx) * (grabc->old_stack_innder_per) / grabc->drag_begin_geom.width; delta_y = (float)(offsety) * (1 - grabc->old_master_mfact_per) / grabc->drag_begin_geom.height; @@ -336,13 +336,13 @@ void resize_tile_master_vertical(Client *grabc, bool isdrag, int offsetx, delta_y; // 垂直:delta_y调整主区域高度 float new_master_inner_per = grabc->old_master_inner_per + delta_x; // 垂直:delta_x调整主区域内部宽度 - float new_slave_innder_per = grabc->old_slave_innder_per + + float new_stack_innder_per = grabc->old_stack_innder_per + delta_x; // 垂直:delta_x调整栈区域内部宽度 // 应用限制,确保比例在合理范围内 new_master_mfact_per = fmaxf(0.1f, fminf(0.9f, new_master_mfact_per)); new_master_inner_per = fmaxf(0.1f, fminf(0.9f, new_master_inner_per)); - new_slave_innder_per = fmaxf(0.1f, fminf(0.9f, new_slave_innder_per)); + new_stack_innder_per = fmaxf(0.1f, fminf(0.9f, new_stack_innder_per)); // 应用到所有平铺窗口 wl_list_for_each(tc, &clients, link) { @@ -352,7 +352,7 @@ void resize_tile_master_vertical(Client *grabc, bool isdrag, int offsetx, } grabc->master_inner_per = new_master_inner_per; - grabc->slave_innder_per = new_slave_innder_per; + grabc->stack_innder_per = new_stack_innder_per; if (!isdrag) { arrange(grabc->mon, false); @@ -397,7 +397,7 @@ void resize_tile_scroller(Client *grabc, bool isdrag, int offsetx, int offsety, } else { grabc->old_master_mfact_per = grabc->master_mfact_per; grabc->old_master_inner_per = grabc->master_inner_per; - grabc->old_slave_innder_per = grabc->slave_innder_per; + grabc->old_stack_innder_per = grabc->stack_innder_per; grabc->drag_begin_geom = grabc->geom; grabc->old_scroller_pproportion = grabc->scroller_proportion; grabc->cursor_in_upper_half = false; @@ -489,11 +489,11 @@ void resize_tile_client(Client *grabc, bool isdrag, int offsetx, int offsety, } void reset_size_per_mon(Monitor *m, int tile_cilent_num, - double total_left_slave_hight_percent, - double total_right_slave_hight_percent, - double total_slave_hight_percent, + double total_left_stack_hight_percent, + double total_right_stack_hight_percent, + double total_stack_hight_percent, double total_master_inner_percent, int master_num, - int slave_num) { + int stack_num) { Client *c; int i = 0; unsigned int stack_index; @@ -508,15 +508,15 @@ void reset_size_per_mon(Monitor *m, int tile_cilent_num, return; if (i < m->pertag->nmasters[m->pertag->curtag]) { c->ismaster = true; - c->slave_innder_per = slave_num ? 1.0f / slave_num : 1.0f; + c->stack_innder_per = stack_num ? 1.0f / stack_num : 1.0f; c->master_inner_per = c->master_inner_per / total_master_inner_percent; } else { c->ismaster = false; c->master_inner_per = 1.0f / master_num; - c->slave_innder_per = - total_slave_hight_percent - ? c->slave_innder_per / total_slave_hight_percent + c->stack_innder_per = + total_stack_hight_percent + ? c->stack_innder_per / total_stack_hight_percent : 1.0f; } i++; @@ -530,8 +530,8 @@ void reset_size_per_mon(Monitor *m, int tile_cilent_num, return; if (i < m->pertag->nmasters[m->pertag->curtag]) { c->ismaster = true; - c->slave_innder_per = - slave_num > 1 ? 2.0f / slave_num : 1.0f; + c->stack_innder_per = + stack_num > 1 ? 2.0f / stack_num : 1.0f; c->master_inner_per = c->master_inner_per / total_master_inner_percent; } else { @@ -540,16 +540,16 @@ void reset_size_per_mon(Monitor *m, int tile_cilent_num, c->ismaster = false; c->master_inner_per = 1.0f / master_num; if ((stack_index % 2) ^ (tile_cilent_num % 2 == 0)) { - c->slave_innder_per = - total_right_slave_hight_percent - ? c->slave_innder_per / - total_right_slave_hight_percent + c->stack_innder_per = + total_right_stack_hight_percent + ? c->stack_innder_per / + total_right_stack_hight_percent : 1.0f; } else { - c->slave_innder_per = - total_left_slave_hight_percent - ? c->slave_innder_per / - total_left_slave_hight_percent + c->stack_innder_per = + total_left_stack_hight_percent + ? c->stack_innder_per / + total_left_stack_hight_percent : 1.0f; } } @@ -562,15 +562,15 @@ void reset_size_per_mon(Monitor *m, int tile_cilent_num, void // 17 arrange(Monitor *m, bool want_animation) { Client *c = NULL; - double total_slave_innder_percent = 0; + double total_stack_innder_percent = 0; double total_master_inner_percent = 0; - double total_right_slave_hight_percent = 0; - double total_left_slave_hight_percent = 0; + double total_right_stack_hight_percent = 0; + double total_left_stack_hight_percent = 0; int i = 0; int nmasters = 0; int stack_index = 0; int master_num = 0; - int slave_num = 0; + int stack_num = 0; if (!m) return; @@ -609,18 +609,18 @@ arrange(Monitor *m, bool want_animation) { master_num++; total_master_inner_percent += c->master_inner_per; } else { - slave_num++; - total_slave_innder_percent += c->slave_innder_per; + stack_num++; + total_stack_innder_percent += c->stack_innder_per; stack_index = i - nmasters; if ((stack_index % 2) ^ (m->visible_tiling_clients % 2 == 0)) { - c->isleftslave = false; - total_right_slave_hight_percent += - c->slave_innder_per; + c->isleftstack = false; + total_right_stack_hight_percent += + c->stack_innder_per; } else { - c->isleftslave = true; - total_left_slave_hight_percent += - c->slave_innder_per; + c->isleftstack = true; + total_left_stack_hight_percent += + c->stack_innder_per; } } @@ -640,9 +640,9 @@ arrange(Monitor *m, bool want_animation) { } reset_size_per_mon( - m, m->visible_tiling_clients, total_left_slave_hight_percent, - total_right_slave_hight_percent, total_slave_innder_percent, - total_master_inner_percent, master_num, slave_num); + m, m->visible_tiling_clients, total_left_stack_hight_percent, + total_right_stack_hight_percent, total_stack_innder_percent, + total_master_inner_percent, master_num, stack_num); if (m->isoverview) { overviewlayout.arrange(m); diff --git a/src/layout/horizontal.h b/src/layout/horizontal.h index e73d262..69b6930 100644 --- a/src/layout/horizontal.h +++ b/src/layout/horizontal.h @@ -328,11 +328,11 @@ void center_tile(Monitor *m) { Client *fc = NULL; double mfact = 0; int master_num = 0; - int slave_num = 0; + int stack_num = 0; n = m->visible_tiling_clients; master_num = m->pertag->nmasters[m->pertag->curtag]; - slave_num = n - master_num; + stack_num = n - master_num; if (n == 0) return; @@ -379,12 +379,12 @@ void center_tile(Monitor *m) { mx = cur_gappoh + tw + cur_gappih * ie; } else if (n - nmasters == 1) { // 单个堆叠窗口的处理 - if (center_when_single_slave) { - // slave在右边,master居中,左边空着 + if (center_when_single_stack) { + // stack在右边,master居中,左边空着 tw = (m->w.width - mw) / 2 - cur_gappoh - cur_gappih * ie; mx = cur_gappoh + tw + cur_gappih * ie; // master居中 } else { - // slave在右边,master在左边 + // stack在右边,master在左边 tw = m->w.width - mw - 2 * cur_gappoh - cur_gappih * ie; mx = cur_gappoh; // master在左边 } @@ -439,26 +439,26 @@ void center_tile(Monitor *m) { if (n - nmasters == 1) { // 单个堆叠窗口 r = n - i; - if (c->slave_innder_per > 0.0f) { + if (c->stack_innder_per > 0.0f) { h = (m->w.height - 2 * cur_gappov - - cur_gappiv * ie * (slave_num - 1)) * - c->slave_innder_per; + cur_gappiv * ie * (stack_num - 1)) * + c->stack_innder_per; c->master_mfact_per = mfact; } else { h = (m->w.height - ety - cur_gappov - cur_gappiv * ie * (r - 1)) / r; - c->slave_innder_per = h / (m->w.height - ety - cur_gappov - + c->stack_innder_per = h / (m->w.height - ety - cur_gappov - cur_gappiv * ie * (r - 1)); c->master_mfact_per = mfact; } int stack_x; - if (center_when_single_slave) { - // 放在右侧(master居中时,slave在右边) + if (center_when_single_stack) { + // 放在右侧(master居中时,stack在右边) stack_x = m->w.x + mx + mw + cur_gappih * ie; } else { - // 放在右侧(master在左边时,slave在右边) + // 放在右侧(master在左边时,stack在右边) stack_x = m->w.x + mx + mw + cur_gappih * ie; } @@ -475,16 +475,16 @@ void center_tile(Monitor *m) { if ((stack_index % 2) ^ (n % 2 == 0)) { // 右侧堆叠窗口 - if (c->slave_innder_per > 0.0f) { + if (c->stack_innder_per > 0.0f) { h = (m->w.height - 2 * cur_gappov - - cur_gappiv * ie * (slave_num / 2 - 1)) * - c->slave_innder_per; + cur_gappiv * ie * (stack_num / 2 - 1)) * + c->stack_innder_per; c->master_mfact_per = mfact; } else { h = (m->w.height - ety - cur_gappov - cur_gappiv * ie * (r - 1)) / r; - c->slave_innder_per = + c->stack_innder_per = h / (m->w.height - ety - cur_gappov - cur_gappiv * ie * (r - 1)); c->master_mfact_per = mfact; @@ -500,16 +500,16 @@ void center_tile(Monitor *m) { ety += c->geom.height + cur_gappiv * ie; } else { // 左侧堆叠窗口 - if (c->slave_innder_per > 0.0f) { + if (c->stack_innder_per > 0.0f) { h = (m->w.height - 2 * cur_gappov - - cur_gappiv * ie * (slave_num / 2 - 1)) * - c->slave_innder_per; + cur_gappiv * ie * (stack_num / 2 - 1)) * + c->stack_innder_per; c->master_mfact_per = mfact; } else { h = (m->w.height - oty - cur_gappov - cur_gappiv * ie * (r - 1)) / r; - c->slave_innder_per = + c->stack_innder_per = h / (m->w.height - oty - cur_gappov - cur_gappiv * ie * (r - 1)); c->master_mfact_per = mfact; @@ -536,11 +536,11 @@ void tile(Monitor *m) { Client *fc = NULL; double mfact = 0; int master_num = 0; - int slave_num = 0; + int stack_num = 0; n = m->visible_tiling_clients; master_num = m->pertag->nmasters[m->pertag->curtag]; - slave_num = n - master_num; + stack_num = n - master_num; if (n == 0) return; @@ -599,21 +599,21 @@ void tile(Monitor *m) { my += c->geom.height + cur_gappiv * ie; } else { r = n - i; - if (c->slave_innder_per > 0.0f) { + if (c->stack_innder_per > 0.0f) { h = (m->w.height - 2 * cur_gappov - - cur_gappiv * ie * (slave_num - 1)) * - c->slave_innder_per; + cur_gappiv * ie * (stack_num - 1)) * + c->stack_innder_per; c->master_mfact_per = mfact; } else { h = (m->w.height - ty - cur_gappov - cur_gappiv * ie * (r - 1)) / r; - c->slave_innder_per = h / (m->w.height - ty - cur_gappov - + c->stack_innder_per = h / (m->w.height - ty - cur_gappov - cur_gappiv * ie * (r - 1)); c->master_mfact_per = mfact; } - // wlr_log(WLR_ERROR, "slave_innder_per: %f", c->slave_innder_per); + // wlr_log(WLR_ERROR, "stack_innder_per: %f", c->stack_innder_per); resize(c, (struct wlr_box){.x = m->w.x + mw + cur_gappoh, diff --git a/src/layout/vertical.h b/src/layout/vertical.h index 2c33294..17e48a7 100644 --- a/src/layout/vertical.h +++ b/src/layout/vertical.h @@ -4,11 +4,11 @@ void vertical_tile(Monitor *m) { Client *fc = NULL; double mfact = 0; int master_num = 0; - int slave_num = 0; + int stack_num = 0; n = m->visible_tiling_clients; master_num = m->pertag->nmasters[m->pertag->curtag]; - slave_num = n - master_num; + stack_num = n - master_num; if (n == 0) return; @@ -66,15 +66,15 @@ void vertical_tile(Monitor *m) { mx += c->geom.width + cur_gapih * ie; } else { r = n - i; - if (c->slave_innder_per > 0.0f) { + if (c->stack_innder_per > 0.0f) { w = (m->w.width - 2 * cur_gapih - - cur_gapih * ie * (slave_num - 1)) * - c->slave_innder_per; + cur_gapih * ie * (stack_num - 1)) * + c->stack_innder_per; c->master_mfact_per = mfact; } else { w = (m->w.width - tx - cur_gapih - cur_gapih * ie * (r - 1)) / r; - c->slave_innder_per = w / (m->w.width - tx - cur_gapih - + c->stack_innder_per = w / (m->w.width - tx - cur_gapih - cur_gapih * ie * (r - 1)); c->master_mfact_per = mfact; } diff --git a/src/mango.c b/src/mango.c index 2c60d53..ff02ea8 100644 --- a/src/mango.c +++ b/src/mango.c @@ -338,12 +338,12 @@ struct Client { float unfocused_opacity; char oldmonname[128]; int noblur; - double master_mfact_per, master_inner_per, slave_innder_per; - double old_master_mfact_per, old_master_inner_per, old_slave_innder_per; + double master_mfact_per, master_inner_per, stack_innder_per; + double old_master_mfact_per, old_master_inner_per, old_stack_innder_per; double old_scroller_pproportion; bool ismaster; bool cursor_in_upper_half, cursor_in_left_half; - bool isleftslave; + bool isleftstack; }; typedef struct { @@ -3510,7 +3510,7 @@ void init_client_properties(Client *c) { c->iscustomsize = 0; c->master_mfact_per = 0.0f; c->master_inner_per = 0.0f; - c->slave_innder_per = 0.0f; + c->stack_innder_per = 0.0f; } void // old fix to 0.5 @@ -4149,7 +4149,7 @@ void exchange_two_client(Client *c1, Client *c2) { unsigned int tmp_tags; double master_inner_per = 0.0f; double master_mfact_per = 0.0f; - double slave_innder_per = 0.0f; + double stack_innder_per = 0.0f; if (c1 == NULL || c2 == NULL || (!exchange_cross_monitor && c1->mon != c2->mon)) { @@ -4158,15 +4158,15 @@ void exchange_two_client(Client *c1, Client *c2) { master_inner_per = c1->master_inner_per; master_mfact_per = c1->master_mfact_per; - slave_innder_per = c1->slave_innder_per; + stack_innder_per = c1->stack_innder_per; c1->master_inner_per = c2->master_inner_per; c1->master_mfact_per = c2->master_mfact_per; - c1->slave_innder_per = c2->slave_innder_per; + c1->stack_innder_per = c2->stack_innder_per; c2->master_inner_per = master_inner_per; c2->master_mfact_per = master_mfact_per; - c2->slave_innder_per = slave_innder_per; + c2->stack_innder_per = stack_innder_per; struct wl_list *tmp1_prev = c1->link.prev; struct wl_list *tmp2_prev = c2->link.prev;