From 48dd8293d1225c2f9b2dccdedd0d8f22014d3a68 Mon Sep 17 00:00:00 2001
From: Olivier Fourdan <fourdan.olivier@wanadoo.fr>
Date: Mon, 6 Oct 2008 19:48:39 +0000
Subject: [PATCH] Make shadow opacity configurable (bug #4447)

(Old svn revision: 28059)
---
 NEWS                   |  1 +
 defaults/defaults      |  1 +
 src/compositor.c       | 10 +++-------
 src/settings.c         | 21 ++++++++++-----------
 src/settings.h         |  1 +
 themes/default/themerc |  1 +
 6 files changed, 17 insertions(+), 18 deletions(-)

diff --git a/NEWS b/NEWS
index d049215e3..3c20163d9 100644
--- a/NEWS
+++ b/NEWS
@@ -36,6 +36,7 @@
   frames at once.
 - Use timeout for frame redraw, check actual WM name changes to work around 
   apps that falsely update their WM name property (Bug #2810).
+- Make shadow opacity configurable (bug #4447).
 - Uodate Hungarian translation
 - Update Catalan translation
 - Update Italian translation
diff --git a/defaults/defaults b/defaults/defaults
index 182ab9cac..586813fec 100644
--- a/defaults/defaults
+++ b/defaults/defaults
@@ -37,6 +37,7 @@ shadow_delta_height=0
 shadow_delta_width=0
 shadow_delta_x=0
 shadow_delta_y=0
+shadow_opacity=66
 show_app_icon=false
 show_dock_shadow=true
 show_frame_shadow=false
diff --git a/src/compositor.c b/src/compositor.c
index 0c3339b43..edf55d389 100644
--- a/src/compositor.c
+++ b/src/compositor.c
@@ -53,10 +53,6 @@
 #define SHADOW_RADIUS   6
 #endif /* SHADOW_RADIUS */
 
-#ifndef SHADOW_OPACITY
-#define SHADOW_OPACITY  0.66
-#endif /* SHADOW_OPACITY */
-
 #ifndef SHADOW_OFFSET_X
 #define SHADOW_OFFSET_X (SHADOW_RADIUS * -3 /2)
 #endif /* SHADOW_OFFSET_X */
@@ -955,9 +951,9 @@ win_extents (CWindow *cw)
         {
             double shadow_opacity;
             shadow_opacity = (double) screen_info->params->frame_opacity
-                                      * SHADOW_OPACITY
-                                      * cw->opacity
-                                      / (NET_WM_OPAQUE * 100.0);
+                           * (screen_info->params->shadow_opacity / 100.0)
+                           * cw->opacity
+                           / (NET_WM_OPAQUE * 100.0);
 
             cw->shadow = shadow_picture (screen_info, shadow_opacity,
                                          cw->attr.width + 2 * cw->attr.border_width,
diff --git a/src/settings.c b/src/settings.c
index 58997774a..bacaf3c37 100644
--- a/src/settings.c
+++ b/src/settings.c
@@ -699,6 +699,7 @@ loadSettings (ScreenInfo *screen_info)
         {"shadow_delta_width", NULL, G_TYPE_INT, TRUE},
         {"shadow_delta_x", NULL, G_TYPE_INT, TRUE},
         {"shadow_delta_y", NULL, G_TYPE_INT, TRUE},
+        {"shadow_opacity", NULL, G_TYPE_INT, TRUE},
         {"show_app_icon", NULL, G_TYPE_BOOLEAN, TRUE},
         {"show_dock_shadow", NULL, G_TYPE_BOOLEAN, TRUE},
         {"show_frame_shadow", NULL, G_TYPE_BOOLEAN, TRUE},
@@ -841,17 +842,19 @@ loadSettings (ScreenInfo *screen_info)
     screen_info->params->restore_on_move =
         getBoolValue ("restore_on_move", rc);
     screen_info->params->frame_opacity =
-        getIntValue ("frame_opacity", rc);
+        CLAMP (getIntValue ("frame_opacity", rc), 0, 100);
     screen_info->params->inactive_opacity =
-        getIntValue ("inactive_opacity", rc);
+        CLAMP (getIntValue ("inactive_opacity", rc), 0, 100);
     screen_info->params->move_opacity =
-        getIntValue ("move_opacity", rc);
+        CLAMP (getIntValue ("move_opacity", rc), 0, 100);
     screen_info->params->resize_opacity =
-        getIntValue ("resize_opacity", rc);
+        CLAMP (getIntValue ("resize_opacity", rc), 0, 100);
     screen_info->params->popup_opacity =
-        getIntValue ("popup_opacity", rc);
+        CLAMP (getIntValue ("popup_opacity", rc), 0, 100);
     screen_info->params->placement_ratio =
-        getIntValue ("placement_ratio", rc);
+        CLAMP (getIntValue ("placement_ratio", rc), 0, 100);
+    screen_info->params->shadow_opacity =
+        CLAMP (getIntValue ("shadow_opacity", rc), 0, 100);
     screen_info->params->show_app_icon =
         getBoolValue ("show_app_icon", rc);
     screen_info->params->show_dock_shadow =
@@ -907,11 +910,7 @@ loadSettings (ScreenInfo *screen_info)
     if (screen_info->workspace_count < 0)
     {
         gint workspace_count;
-        workspace_count = getIntValue ("workspace_count", rc);
-        if (workspace_count < 0)
-        {
-            workspace_count = 0;
-        }
+        workspace_count = MAX (getIntValue ("workspace_count", rc), 0);
         workspaceSetCount (screen_info, workspace_count);
     }
 
diff --git a/src/settings.h b/src/settings.h
index 8e9d17108..5e68eba78 100644
--- a/src/settings.h
+++ b/src/settings.h
@@ -183,6 +183,7 @@ struct _XfwmParams
     int shadow_delta_width;
     int shadow_delta_x;
     int shadow_delta_y;
+    int shadow_opacity;
     int snap_width;
     int title_alignment;
     int title_horizontal_offset;
diff --git a/themes/default/themerc b/themes/default/themerc
index e2efe0571..3cd9d6fc6 100644
--- a/themes/default/themerc
+++ b/themes/default/themerc
@@ -7,6 +7,7 @@ shadow_delta_height=4
 shadow_delta_width=1
 shadow_delta_x=1
 shadow_delta_y=1
+shadow_opacity=90
 show_app_icon=true
 title_horizontal_offset=1
 title_shadow_active=frame
-- 
GitLab