]> git.lizzy.rs Git - bspwm.git/commitdiff
New setting: merge_overlapping_monitors
authorBastien Dejean <nihilhill@gmail.com>
Mon, 5 May 2014 09:54:49 +0000 (11:54 +0200)
committerBastien Dejean <nihilhill@gmail.com>
Mon, 5 May 2014 09:54:49 +0000 (11:54 +0200)
contrib/bash_completion
contrib/zsh_completion
doc/bspwm.1
doc/bspwm.1.txt
messages.c
monitor.c
settings.c
settings.h
window.c

index 82522a8e692cfca6cf9685564f38d931867b97c0..f9b1375088b45be7a3a6854c9f414e8be90e90c1 100644 (file)
@@ -1,7 +1,7 @@
 _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=()
 
index 9038b8c4537dbfa7c9308c6cc5088a23b81c878e..0b7c85067b138e53a6fa3fcd4d82dd779ce579f7 100644 (file)
@@ -3,7 +3,7 @@
 _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
index 7c0de3911469fbbdf38cdf263630ac127a0a63c9..dd0e6ce1d96e6952a7df74a46339d991e44aa0fa 100644 (file)
@@ -1120,6 +1120,11 @@ Consider disabled monitors as disconnected\&.
 .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
index 0f7248fa9bd5d53cbbccffa648bb2efdfe4d37a6..4542b896a3309d6e4ab19d24503bb78f5a7b2fec 100644 (file)
@@ -682,6 +682,9 @@ Global Settings
 'remove_unplugged_monitors'::
        Remove unplugged monitors.
 
+'merge_overlapping_monitors'::
+       Merge overlapping monitors (the bigger remains).
+
 Monitor and Desktop Settings
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
index f8507530af62cca5e7420afb1b75a1ebfa8198f9..c689b8eaa8ff76fdd8ea6136d4bf481dd117b57e 100644 (file)
@@ -999,6 +999,7 @@ int set_setting(coordinates_t loc, char *name, char *value)
                SETBOOL(ignore_ewmh_focus)
                SETBOOL(remove_disabled_monitor)
                SETBOOL(remove_unplugged_monitors)
+               SETBOOL(merge_overlapping_monitors)
 #undef SETBOOL
        } else {
                return MSG_FAILURE;
@@ -1073,6 +1074,7 @@ int get_setting(coordinates_t loc, char *name, FILE* rsp)
        GETBOOL(ignore_ewmh_focus)
        GETBOOL(remove_disabled_monitor)
        GETBOOL(remove_unplugged_monitors)
+       GETBOOL(merge_overlapping_monitors)
 #undef GETBOOL
        else
                return MSG_FAILURE;
index 5b2dedb0de4f211fefd0e5c3a36ff20d13509a53..596e8fc4e1b58f941664e9cb763eae49a36eb5f0 100644 (file)
--- a/monitor.c
+++ b/monitor.c
@@ -392,22 +392,24 @@ bool update_monitors(void)
        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 */
index 3c669778ec3c71d877149e4f1fc4995012b536aa..7ab85e687860379d77871ff7bf9f402288d0d453 100644 (file)
@@ -74,4 +74,5 @@ void load_settings(void)
        ignore_ewmh_focus = IGNORE_EWMH_FOCUS;
        remove_disabled_monitor = REMOVE_DISABLED_MONITOR;
        remove_unplugged_monitors = REMOVE_UNPLUGGED_MONITORS;
+       merge_overlapping_monitors = MERGE_OVERLAPPING_MONITORS;
 }
index 62b0c268d691cc86decaaebb51472614789a0ff0..130abb5115d2c44f70db24df0d73a0bc4c8794a5 100644 (file)
@@ -65,6 +65,7 @@
 #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];
@@ -97,6 +98,7 @@ bool history_aware_focus;
 bool ignore_ewmh_focus;
 bool remove_disabled_monitor;
 bool remove_unplugged_monitors;
+bool merge_overlapping_monitors;
 
 void run_config(void);
 void load_settings(void);
index ce69617ed9e2fcaf028d74daa6a1b75db9d86386..b750a2d8e50aa2acd19815568487d3814b9c8408 100644 (file)
--- a/window.c
+++ b/window.c
@@ -295,6 +295,7 @@ pointer_state_t *make_pointer_state(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) &&