[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Window Gaps



Hi,

I implemented window gaps.

Pseudo-tiled windows are not properly handled yet though.

Greetings,
-- 
 b.d
(| |)
 ^ ^
>From 538d22002a741c405b2eb02467be1c07f1194a0f Mon Sep 17 00:00:00 2001
From: baskerville <nihilhill _at_ gmail _dot_ com>
Date: Tue, 17 Jul 2012 11:24:46 +0200
Subject: [PATCH 1/2] rename 'window_gap' to 'frame_gap'

---
 BUGS                 | 1 -
 doc/herbstluftwm.txt | 4 ++--
 share/autostart      | 2 +-
 src/layout.c         | 8 ++++----
 src/layout.h         | 2 +-
 src/monitor.c        | 8 ++++----
 src/settings.c       | 2 +-
 7 files changed, 13 insertions(+), 14 deletions(-)

diff --git a/BUGS b/BUGS
index 6aa1cb4..3c91bb1 100644
--- a/BUGS
+++ b/BUGS
@@ -26,7 +26,6 @@ Some BUGS:
 
     - raise_on_click doesn't work if raise_on_click and numlock is enabled
     - raise_on_click doesn't work with gnome-settings-daemon
-    - window_gap actually should be called frame_gap
     - window_focus is called twice when switching desktops (before mapping
       windows and after mapping them). TODO: only do it once.
     - also update window title if *only* the _NET_WM_NAME changes
diff --git a/doc/herbstluftwm.txt b/doc/herbstluftwm.txt
index c4270fb..49acdff 100644
--- a/doc/herbstluftwm.txt
+++ b/doc/herbstluftwm.txt
@@ -329,7 +329,7 @@ cycle_value 'NAME' 'VALUES' ...::
     the next in the list or to the first one if the end is reached or current
     value wasn't found. Example:
 
-        * cycle_value window_gap 0 5 10 15
+        * cycle_value frame_gap 0 5 10 15
         * cycle_value frame_bg_normal_color red green blue
 
 cycle_monitor ['DELTA']::
@@ -536,7 +536,7 @@ Settings configure the behaviour of herbstluftwm and can be controlled via the
 integer values. An integer value is set, if its value is 1 or another value
 unequal to 0. An integer value is unset, if its value is 0.
 
-window_gap (Integer)::
+frame_gap (Integer)::
     The gap between frames in the tiling mode.
 
 snap_distance (Integer)::
diff --git a/share/autostart b/share/autostart
index 63de29c..1208087 100755
--- a/share/autostart
+++ b/share/autostart
@@ -88,7 +88,7 @@ hc set window_border_width 2
 hc set window_border_normal_color '#454545'
 hc set window_border_active_color '#9fbc00'
 hc set always_show_frame 1
-hc set window_gap 4
+hc set frame_gap 4
 
 # rules
 hc unrule -F
diff --git a/src/layout.c b/src/layout.c
index bca2fd1..e426fed 100644
--- a/src/layout.c
+++ b/src/layout.c
@@ -58,7 +58,7 @@ char* g_layout_names[] = {
 
 static void fetch_frame_colors() {
     // load settings
-    g_window_gap = &(settings_find("window_gap")->value.i);
+    g_frame_gap = &(settings_find("frame_gap")->value.i);
     g_focus_follows_shift = &(settings_find("focus_follows_shift")->value.i);
     g_frame_border_width = &(settings_find("frame_border_width")->value.i);
     g_always_show_frame = &(settings_find("always_show_frame")->value.i);
@@ -740,9 +740,9 @@ void frame_apply_layout(HSFrame* frame, XRectangle rect) {
     if (frame->type == TYPE_CLIENTS) {
         size_t count = frame->content.clients.count;
         if (!*g_smart_frame_surroundings || frame->parent) {
-            // frame only -> apply window_gap
-            rect.height -= *g_window_gap;
-            rect.width -= *g_window_gap;
+            // frame only -> apply frame_gap
+            rect.height -= *g_frame_gap;
+            rect.width -= *g_frame_gap;
             // apply frame width
             rect.x += *g_frame_border_width;
             rect.y += *g_frame_border_width;
diff --git a/src/layout.h b/src/layout.h
index 8975589..35b5e14 100644
--- a/src/layout.h
+++ b/src/layout.h
@@ -85,7 +85,7 @@ typedef struct HSFrame {
 
 // globals
 HSFrame*    g_cur_frame; // currently selected frame
-int* g_window_gap;
+int* g_frame_gap;
 
 // functions
 void layout_init();
diff --git a/src/monitor.c b/src/monitor.c
index 2261252..08506a4 100644
--- a/src/monitor.c
+++ b/src/monitor.c
@@ -59,10 +59,10 @@ void monitor_apply_layout(HSMonitor* monitor) {
         rect.height -= (monitor->pad_up + monitor->pad_down);
         if (!*g_smart_frame_surroundings || monitor->tag->frame->type == TYPE_FRAMES ) {
             // apply window gap
-            rect.x += *g_window_gap;
-            rect.y += *g_window_gap;
-            rect.height -= *g_window_gap;
-            rect.width -= *g_window_gap;
+            rect.x += *g_frame_gap;
+            rect.y += *g_frame_gap;
+            rect.height -= *g_frame_gap;
+            rect.width -= *g_frame_gap;
         }
         if (monitor->tag->floating) {
             frame_apply_floating_layout(monitor->tag->frame, monitor);
diff --git a/src/settings.c b/src/settings.c
index 846ba99..049f737 100644
--- a/src/settings.c
+++ b/src/settings.c
@@ -36,7 +36,7 @@
 
 // default settings:
 SettingsPair g_settings[] = {
-    SET_INT(    "window_gap",                      5,           RELAYOUT    ),
+    SET_INT(    "frame_gap",                      5,           RELAYOUT    ),
     SET_INT(    "snap_distance",                   10,          NULL        ),
     SET_INT(    "snap_gap",                        5,           NULL        ),
     SET_STRING( "frame_border_active_color",       "red",       FR_COLORS   ),
-- 
1.7.11.2

>From 894f8980035e2c45200b30754f3c2127833eb760 Mon Sep 17 00:00:00 2001
From: baskerville <nihilhill _at_ gmail _dot_ com>
Date: Tue, 17 Jul 2012 12:02:18 +0200
Subject: [PATCH 2/2] new setting: window_gap

---
 doc/herbstluftwm.txt | 3 +++
 src/clientlist.c     | 6 ++++++
 src/layout.c         | 9 +++++++++
 src/layout.h         | 1 +
 src/settings.c       | 3 ++-
 5 files changed, 21 insertions(+), 1 deletion(-)

diff --git a/doc/herbstluftwm.txt b/doc/herbstluftwm.txt
index 49acdff..00a76b0 100644
--- a/doc/herbstluftwm.txt
+++ b/doc/herbstluftwm.txt
@@ -539,6 +539,9 @@ unequal to 0. An integer value is unset, if its value is 0.
 frame_gap (Integer)::
     The gap between frames in the tiling mode.
 
+window_gap (Integer)::
+    The gap between windows in the tiling mode.
+
 snap_distance (Integer)::
     If a client is dragged in floating mode, then it snaps to neighbour clients
     if the distance between them is smaller then snap_distance.
diff --git a/src/clientlist.c b/src/clientlist.c
index 6635f95..38b8aa5 100644
--- a/src/clientlist.c
+++ b/src/clientlist.c
@@ -58,6 +58,7 @@ static HSClient* create_client() {
 
 static void fetch_colors() {
     g_window_border_width = &(settings_find("window_border_width")->value.i);
+    g_window_gap = &(settings_find("window_gap")->value.i);
     g_snap_gap = &(settings_find("snap_gap")->value.i);
     g_smart_window_borders = &(settings_find("smart_window_borders")->value.i);
     g_raise_on_focus = &(settings_find("raise_on_focus")->value.i);
@@ -342,6 +343,11 @@ void client_resize(HSClient* client, XRectangle rect, HSFrame* frame) {
     // apply border width
     rect.width -= border_width * 2;
     rect.height -= border_width * 2;
+    // apply window gap
+    if (!client->pseudotile) {
+        rect.width -= *g_window_gap;
+        rect.height -= *g_window_gap;
+    }
     XSetWindowBorderWidth(g_display, win, border_width);
     XMoveResizeWindow(g_display, win, rect.x, rect.y, rect.width, rect.height);
     //// send new size to client
diff --git a/src/layout.c b/src/layout.c
index e426fed..baf3558 100644
--- a/src/layout.c
+++ b/src/layout.c
@@ -59,6 +59,7 @@ char* g_layout_names[] = {
 static void fetch_frame_colors() {
     // load settings
     g_frame_gap = &(settings_find("frame_gap")->value.i);
+    g_window_gap = &(settings_find("window_gap")->value.i);
     g_focus_follows_shift = &(settings_find("focus_follows_shift")->value.i);
     g_frame_border_width = &(settings_find("frame_border_width")->value.i);
     g_always_show_frame = &(settings_find("always_show_frame")->value.i);
@@ -749,6 +750,7 @@ void frame_apply_layout(HSFrame* frame, XRectangle rect) {
             rect.height -= *g_frame_border_width * 2;
             rect.width -= *g_frame_border_width * 2;
         }
+
         if (rect.width <= WINDOW_MIN_WIDTH || rect.height <= WINDOW_MIN_HEIGHT) {
             // do nothing on invalid size
             return;
@@ -790,6 +792,13 @@ void frame_apply_layout(HSFrame* frame, XRectangle rect) {
         if (count == 0) {
             return;
         }
+
+        // apply window gap
+        rect.x += *g_window_gap;
+        rect.y += *g_window_gap;
+        rect.width -= *g_window_gap;
+        rect.height -= *g_window_gap;
+
         if (frame->content.clients.layout == LAYOUT_MAX) {
             frame_apply_client_layout_max(frame, rect);
         } else if (frame->content.clients.layout == LAYOUT_GRID) {
diff --git a/src/layout.h b/src/layout.h
index 35b5e14..a63407f 100644
--- a/src/layout.h
+++ b/src/layout.h
@@ -86,6 +86,7 @@ typedef struct HSFrame {
 // globals
 HSFrame*    g_cur_frame; // currently selected frame
 int* g_frame_gap;
+int* g_window_gap;
 
 // functions
 void layout_init();
diff --git a/src/settings.c b/src/settings.c
index 049f737..56d9c6d 100644
--- a/src/settings.c
+++ b/src/settings.c
@@ -36,7 +36,8 @@
 
 // default settings:
 SettingsPair g_settings[] = {
-    SET_INT(    "frame_gap",                      5,           RELAYOUT    ),
+    SET_INT(    "frame_gap",                       5,           RELAYOUT    ),
+    SET_INT(    "window_gap",                      1,           RELAYOUT    ),
     SET_INT(    "snap_distance",                   10,          NULL        ),
     SET_INT(    "snap_gap",                        5,           NULL        ),
     SET_STRING( "frame_border_active_color",       "red",       FR_COLORS   ),
-- 
1.7.11.2

------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Herbstluftwm-devel mailing list
Herbstluftwm _minus_ devel _at_ lists _dot_ sourceforge _dot_ net
https://lists.sourceforge.net/lists/listinfo/herbstluftwm-devel