_bspc() {
local commands='window desktop monitor query pointer rule restore control config quit'
- local settings='external_rules_command status_prefix focused_border_color active_border_color normal_border_color presel_border_color focused_locked_border_color active_locked_border_color normal_locked_border_color focused_sticky_border_color normal_sticky_border_color focused_private_border_color active_private_border_color normal_private_border_color urgent_border_color border_width window_gap top_padding right_padding bottom_padding left_padding split_ratio borderless_monocle gapless_monocle focus_follows_pointer pointer_follows_monitor apply_floating_atom auto_alternate auto_cancel history_aware_focus ignore_ewmh_focus remove_disabled_monitor remove_unplugged_monitors'
+ local settings='external_rules_command status_prefix focused_border_color active_border_color normal_border_color presel_border_color focused_locked_border_color active_locked_border_color normal_locked_border_color focused_sticky_border_color normal_sticky_border_color focused_private_border_color active_private_border_color normal_private_border_color urgent_border_color border_width window_gap top_padding right_padding bottom_padding left_padding split_ratio borderless_monocle gapless_monocle focus_follows_pointer pointer_follows_monitor apply_floating_atom auto_alternate auto_cancel history_aware_focus ignore_ewmh_focus remove_disabled_monitor remove_unplugged_monitors merge_overlapping_monitors'
COMPREPLY=()
_bspc() {
local -a commands settings
commands=('window' 'desktop' 'monitor' 'query' 'pointer' 'rule' 'restore' 'control' 'config' 'quit')
- settings=('external_rules_command' 'status_prefix' 'focused_border_color' 'active_border_color' 'normal_border_color' 'presel_border_color' 'focused_locked_border_color' 'active_locked_border_color' 'normal_locked_border_color' 'focused_sticky_border_color' 'normal_sticky_border_color' 'focused_private_border_color' 'active_private_border_color' 'normal_private_border_color' 'urgent_border_color' 'border_width' 'window_gap' 'top_padding' 'right_padding' 'bottom_padding' 'left_padding' 'split_ratio' 'borderless_monocle' 'gapless_monocle' 'focus_follows_pointer' 'pointer_follows_monitor' 'apply_floating_atom' 'auto_alternate' 'auto_cancel' 'history_aware_focus' 'ignore_ewmh_focus' 'remove_disabled_monitor' 'remove_unplugged_monitors')
+ settings=('external_rules_command' 'status_prefix' 'focused_border_color' 'active_border_color' 'normal_border_color' 'presel_border_color' 'focused_locked_border_color' 'active_locked_border_color' 'normal_locked_border_color' 'focused_sticky_border_color' 'normal_sticky_border_color' 'focused_private_border_color' 'active_private_border_color' 'normal_private_border_color' 'urgent_border_color' 'border_width' 'window_gap' 'top_padding' 'right_padding' 'bottom_padding' 'left_padding' 'split_ratio' 'borderless_monocle' 'gapless_monocle' 'focus_follows_pointer' 'pointer_follows_monitor' 'apply_floating_atom' 'auto_alternate' 'auto_cancel' 'history_aware_focus' 'ignore_ewmh_focus' 'remove_disabled_monitor' 'remove_unplugged_monitors' 'merge_overlapping_monitors')
if (( CURRENT == 2 )) ; then
_values 'command' "$commands[@]"
elif (( CURRENT == 3 )) ; then
.RS 4
Remove unplugged monitors\&.
.RE
+.PP
+\fImerge_overlapping_monitors\fR
+.RS 4
+Merge overlapping monitors (the bigger remains)\&.
+.RE
.SS "Monitor and Desktop Settings"
.PP
\fItop_padding\fR, \fIright_padding\fR, \fIbottom_padding\fR, \fIleft_padding\fR
'remove_unplugged_monitors'::
Remove unplugged monitors.
+'merge_overlapping_monitors'::
+ Merge overlapping monitors (the bigger remains).
+
Monitor and Desktop Settings
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SETBOOL(ignore_ewmh_focus)
SETBOOL(remove_disabled_monitor)
SETBOOL(remove_unplugged_monitors)
+ SETBOOL(merge_overlapping_monitors)
#undef SETBOOL
} else {
return MSG_FAILURE;
GETBOOL(ignore_ewmh_focus)
GETBOOL(remove_disabled_monitor)
GETBOOL(remove_unplugged_monitors)
+ GETBOOL(merge_overlapping_monitors)
#undef GETBOOL
else
return MSG_FAILURE;
free(gpo);
/* handle overlapping monitors */
- m = mon_head;
- while (m != NULL) {
- monitor_t *next = m->next;
- if (m->wired) {
- for (monitor_t *mb = mon_head; mb != NULL; mb = mb->next)
- if (mb != m && mb->wired &&
- (m->desk == NULL || mb->desk == NULL) &&
- contains(mb->rectangle, m->rectangle)) {
- if (mm == m)
- mm = mb;
- merge_monitors(m, mb);
- remove_monitor(m);
- break;
- }
+ if (merge_overlapping_monitors) {
+ m = mon_head;
+ while (m != NULL) {
+ monitor_t *next = m->next;
+ if (m->wired) {
+ for (monitor_t *mb = mon_head; mb != NULL; mb = mb->next)
+ if (mb != m && mb->wired &&
+ (m->desk == NULL || mb->desk == NULL) &&
+ contains(mb->rectangle, m->rectangle)) {
+ if (mm == m)
+ mm = mb;
+ merge_monitors(m, mb);
+ remove_monitor(m);
+ break;
+ }
+ }
+ m = next;
}
- m = next;
}
/* merge and remove disconnected monitors */
ignore_ewmh_focus = IGNORE_EWMH_FOCUS;
remove_disabled_monitor = REMOVE_DISABLED_MONITOR;
remove_unplugged_monitors = REMOVE_UNPLUGGED_MONITORS;
+ merge_overlapping_monitors = MERGE_OVERLAPPING_MONITORS;
}
#define IGNORE_EWMH_FOCUS false
#define REMOVE_DISABLED_MONITOR false
#define REMOVE_UNPLUGGED_MONITORS false
+#define MERGE_OVERLAPPING_MONITORS false
char external_rules_command[MAXLEN];
char status_prefix[MAXLEN];
bool ignore_ewmh_focus;
bool remove_disabled_monitor;
bool remove_unplugged_monitors;
+bool merge_overlapping_monitors;
void run_config(void);
void load_settings(void);
return p;
}
+/* Returns true if a contains b */
bool contains(xcb_rectangle_t a, xcb_rectangle_t b)
{
return (a.x <= b.x && (a.x + a.width) >= (b.x + b.width) &&