summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorbakkeby <[email protected]>2020-07-15 08:57:30 +0200
committerbakkeby <[email protected]>2020-07-15 08:57:30 +0200
commit903b32ac8b4a69b37981874f23b15a9f65f2a20d (patch)
treeb7aff3bdd522721a03cbfdaea8adf15fefd90463
parent1584a32063cd252ec726dd18747c5f91f12f8be9 (diff)
downloaddwm-flexipatch-903b32ac8b4a69b37981874f23b15a9f65f2a20d.tar.gz
dwm-flexipatch-903b32ac8b4a69b37981874f23b15a9f65f2a20d.zip
Major refactoring in preparation for bar modules
-rw-r--r--README.md2
-rw-r--r--config.def.h182
-rw-r--r--config.mk4
-rw-r--r--drw.c84
-rw-r--r--drw.h46
-rw-r--r--dwm.c1461
-rw-r--r--patch/awesomebar.c67
-rw-r--r--patch/awesomebar.h4
-rw-r--r--patch/bar_alpha.c (renamed from patch/alpha.c)0
-rw-r--r--patch/bar_alpha.h (renamed from patch/alpha.h)0
-rw-r--r--patch/bar_alternativetags.c (renamed from patch/alternativetags.c)0
-rw-r--r--patch/bar_alternativetags.h (renamed from patch/alternativetags.h)0
-rw-r--r--patch/bar_awesomebar.c146
-rw-r--r--patch/bar_awesomebar.h8
-rw-r--r--patch/bar_dwmblocks.c (renamed from patch/dwmblocks.c)0
-rw-r--r--patch/bar_dwmblocks.h (renamed from patch/dwmblocks.h)0
-rw-r--r--patch/bar_fancybar.c97
-rw-r--r--patch/bar_fancybar.h3
-rw-r--r--patch/bar_ltsymbol.c21
-rw-r--r--patch/bar_ltsymbol.h3
-rw-r--r--patch/bar_status.c25
-rw-r--r--patch/bar_status.h3
-rw-r--r--patch/bar_status2d.c (renamed from patch/status2d.c)117
-rw-r--r--patch/bar_status2d.h5
-rw-r--r--patch/bar_status2d_eb.c11
-rw-r--r--patch/bar_status2d_eb.h2
-rw-r--r--patch/bar_statusbutton.c21
-rw-r--r--patch/bar_statusbutton.h3
-rw-r--r--patch/bar_statuscmd.c76
-rw-r--r--patch/bar_statuscmd.h6
-rw-r--r--patch/bar_systray.c (renamed from patch/systray.c)122
-rw-r--r--patch/bar_systray.h (renamed from patch/systray.h)8
-rw-r--r--patch/bar_taggrid.c142
-rw-r--r--patch/bar_taggrid.h4
-rw-r--r--patch/bar_tags.c123
-rw-r--r--patch/bar_tags.h3
-rw-r--r--patch/bar_wintitle.c89
-rw-r--r--patch/bar_wintitle.h3
-rw-r--r--patch/combo.c4
-rw-r--r--patch/combo.h4
-rw-r--r--patch/holdbar.c34
-rw-r--r--patch/include.c106
-rw-r--r--patch/include.h104
-rw-r--r--patch/killunsel.c4
-rw-r--r--patch/layout_bstack.c (renamed from patch/bstack.c)0
-rw-r--r--patch/layout_bstack.h (renamed from patch/bstack.h)0
-rw-r--r--patch/layout_bstackhoriz.c (renamed from patch/bstackhoriz.c)0
-rw-r--r--patch/layout_bstackhoriz.h (renamed from patch/bstackhoriz.h)0
-rw-r--r--patch/layout_centeredfloatingmaster.c (renamed from patch/centeredfloatingmaster.c)0
-rw-r--r--patch/layout_centeredfloatingmaster.h (renamed from patch/centeredfloatingmaster.h)0
-rw-r--r--patch/layout_centeredmaster.c (renamed from patch/centeredmaster.c)0
-rw-r--r--patch/layout_centeredmaster.h (renamed from patch/centeredmaster.h)0
-rw-r--r--patch/layout_columns.c (renamed from patch/columns.c)0
-rw-r--r--patch/layout_columns.h (renamed from patch/columns.h)0
-rw-r--r--patch/layout_deck.c (renamed from patch/deck.c)0
-rw-r--r--patch/layout_deck.h (renamed from patch/deck.h)0
-rw-r--r--patch/layout_fibonacci.c (renamed from patch/fibonacci.c)0
-rw-r--r--patch/layout_fibonacci.h (renamed from patch/fibonacci.h)0
-rw-r--r--patch/layout_flextile-deluxe.c (renamed from patch/flextile-deluxe.c)0
-rw-r--r--patch/layout_flextile-deluxe.h (renamed from patch/flextile-deluxe.h)0
-rw-r--r--patch/layout_gapplessgrid.c (renamed from patch/gapplessgrid.c)0
-rw-r--r--patch/layout_gapplessgrid.h (renamed from patch/gapplessgrid.h)0
-rw-r--r--patch/layout_grid.c (renamed from patch/grid.c)0
-rw-r--r--patch/layout_grid.h (renamed from patch/grid.h)0
-rw-r--r--patch/layout_horizgrid.c (renamed from patch/horizgrid.c)0
-rw-r--r--patch/layout_horizgrid.h (renamed from patch/horizgrid.h)0
-rw-r--r--patch/layout_monocle.c (renamed from patch/monocle.c)0
-rw-r--r--patch/layout_monocle.h (renamed from patch/monocle.h)0
-rw-r--r--patch/layout_nrowgrid.c (renamed from patch/nrowgrid.c)0
-rw-r--r--patch/layout_nrowgrid.h (renamed from patch/nrowgrid.h)0
-rw-r--r--patch/layout_tile.c (renamed from patch/tile.c)0
-rw-r--r--patch/layout_tile.h (renamed from patch/tile.h)0
-rw-r--r--patch/status2d.h2
-rw-r--r--patch/statuscolors.c4
-rw-r--r--patch/xrdb.c14
-rw-r--r--patches.def.h448
76 files changed, 1874 insertions, 1741 deletions
diff --git a/README.md b/README.md
index c2dd33f..f1e32c2 100644
--- a/README.md
+++ b/README.md
@@ -2,7 +2,7 @@ This dwm 6.2 (aaad5f, 2020-07-08) side project has a different take on dwm patch
For example to include the `alpha` patch then you would only need to flip this setting from 0 to 1 in [patches.h](https://github.com/bakkeby/dwm-flexipatch/blob/master/patches.def.h):
```c
-#define ALPHA_PATCH 1
+#define BAR_ALPHA_PATCH 1
```
So if you have ever been curious about trying out dwm, but have been discouraged by manual patching, then this may be a good starting point to see what a "fully fledged" dwm can look like. Want to try out the `pertag` patch? Just flip a config and recompile. Once you have found out what works for you and what doesn't then you should be in a better position to choose patches should you want to start patching from scratch.
diff --git a/config.def.h b/config.def.h
index 190ab12..7e91c43 100644
--- a/config.def.h
+++ b/config.def.h
@@ -15,19 +15,19 @@ static const unsigned int gappoh = 10; /* horiz outer gap between windo
static const unsigned int gappov = 30; /* vert outer gap between windows and screen edge */
static const int smartgaps = 0; /* 1 means no outer gap when there is only one window */
#endif // VANITYGAPS_PATCH
-#if HOLDBAR_PATCH
+#if BAR_HOLDBAR_PATCH
static const int showbar = 0; /* 0 means no bar */
#else
static const int showbar = 1; /* 0 means no bar */
-#endif // HOLDBAR_PATCH
+#endif // BAR_HOLDBAR_PATCH
static const int topbar = 1; /* 0 means bottom bar */
#if BAR_HEIGHT_PATCH
static const int bar_height = 0; /* 0 means derive from font, >= 1 explicit height */
#endif // BAR_HEIGHT_PATCH
-#if BARPADDING_PATCH
+#if BAR_PADDING_PATCH
static const int vertpad = 10; /* vertical padding of bar */
static const int sidepad = 10; /* horizontal padding of bar */
-#endif // BARPADDING_PATCH
+#endif // BAR_PADDING_PATCH
#if FOCUSONCLICK_PATCH
static const int focusonwheel = 0;
#endif // FOCUSONCLICK_PATCH
@@ -35,73 +35,71 @@ static const int focusonwheel = 0;
static int floatposgrid_x = 5; /* float grid columns */
static int floatposgrid_y = 5; /* float grid rows */
#endif // FLOATPOS_PATCH
-#if STATUSPADDING_PATCH
+#if BAR_STATUSPADDING_PATCH
static const int horizpadbar = 2; /* horizontal padding for statusbar */
static const int vertpadbar = 0; /* vertical padding for statusbar */
-#endif // STATUSPADDING_PATCH
-#if STATICSTATUS_PATCH && !STATUSALLMONS_PATCH
+#endif // BAR_STATUSPADDING_PATCH
+#if BAR_STATICSTATUS_PATCH && !BAR_STATUSALLMONS_PATCH
static const int statmonval = 0;
-#endif // STATICSTATUS_PATCH
+#endif // BAR_STATICSTATUS_PATCH
#if STATUSBUTTON_PATCH
static const char buttonbar[] = "<O>";
#endif // STATUSBUTTON_PATCH
#if SYSTRAY_PATCH
-static const unsigned int systraypinning = 0; /* 0: sloppy systray follows selected monitor, >0: pin systray to monitor X */
static const unsigned int systrayspacing = 2; /* systray spacing */
-static const int systraypinningfailfirst = 1; /* 1: if pinning fails, display systray on the first monitor, False: display systray on the last monitor*/
static const int showsystray = 1; /* 0 means no systray */
#endif // SYSTRAY_PATCH
#if ONLYQUITONEMPTY_PATCH
static const int quit_empty_window_count = 2; /* only allow dwm to quit if no windows are open, value here represents number of deamons */
#endif // ONLYQUITONEMPTY_PATCH
-#if EXTRABAR_PATCH
+#if BAR_EXTRABAR_PATCH
static const char statussep = ';'; /* separator between status bars */
static const int ebalign = 0; /* extrabar alignment: 0 - left, 1 - right, 2 - center */
-#if STATICSTATUS_PATCH && !STATUSALLMONS_PATCH
+#if BAR_STATICSTATUS_PATCH && !BAR_STATUSALLMONS_PATCH
static const int statebmonval = statmonval;
-#endif // STATICSTATUS_PATCH
-#endif // EXTRABAR_PATCH
-#if PANGO_PATCH
+#endif // BAR_STATICSTATUS_PATCH
+#endif // BAR_EXTRABAR_PATCH
+#if BAR_PANGO_PATCH
static const char font[] = "monospace 10";
#else
static const char *fonts[] = { "monospace:size=10" };
-#endif // PANGO_PATCH
+#endif // BAR_PANGO_PATCH
static const char dmenufont[] = "monospace:size=10";
static char normfgcolor[] = "#bbbbbb";
static char normbgcolor[] = "#222222";
-#if !VTCOLORS_PATCH
+#if !BAR_VTCOLORS_PATCH
static char normbordercolor[] = "#444444";
#if FLOAT_BORDER_COLOR_PATCH
static char normfloatcolor[] = "#db8fd9";
#endif // FLOAT_BORDER_COLOR_PATCH
-#endif // !VTCOLORS_PATCH
+#endif // !BAR_VTCOLORS_PATCH
static char selfgcolor[] = "#eeeeee";
static char selbgcolor[] = "#005577";
-#if !VTCOLORS_PATCH
+#if !BAR_VTCOLORS_PATCH
static char selbordercolor[] = "#005577";
#if FLOAT_BORDER_COLOR_PATCH
static char selfloatcolor[] = "#005577";
#endif // FLOAT_BORDER_COLOR_PATCH
-#if STATUSCOLORS_PATCH
+#if BAR_STATUSCOLORS_PATCH
static char warnfgcolor[] = "#000000";
static char warnbgcolor[] = "#ffff00";
static char warnbordercolor[] = "#ff0000";
#if FLOAT_BORDER_COLOR_PATCH
static char warnfloatcolor[] = "#ffffff";
#endif // FLOAT_BORDER_COLOR_PATCH
-#endif // STATUSCOLORS_PATCH
+#endif // BAR_STATUSCOLORS_PATCH
-#if URGENTBORDER_PATCH || STATUSCOLORS_PATCH
+#if URGENTBORDER_PATCH || BAR_STATUSCOLORS_PATCH
static char urgfgcolor[] = "#000000";
static char urgbgcolor[] = "#000000";
static char urgbordercolor[] = "#ff0000"; // NB: patch only works with border color for now
#if FLOAT_BORDER_COLOR_PATCH
static char urgfloatcolor[] = "#000000";
#endif // FLOAT_BORDER_COLOR_PATCH
-#endif // URGENTBORDER_PATCH // STATUSCOLORS_PATCH
+#endif // URGENTBORDER_PATCH // BAR_STATUSCOLORS_PATCH
#if AWESOMEBAR_PATCH
static char hidfgcolor[] = "#005577";
@@ -112,56 +110,56 @@ static char hidfloatcolor[] = "#f76e0c";
#endif // FLOAT_BORDER_COLOR_PATCH
#endif // AWESOMEBAR_PATCH
-#if TITLECOLOR_PATCH
+#if BAR_TITLECOLOR_PATCH
static char titlefgcolor[] = "#eeeeee";
static char titlebgcolor[] = "#005577";
static char titlebordercolor[] = "#005577";
#if FLOAT_BORDER_COLOR_PATCH
static char titlefloatcolor[] = "#005577";
#endif // FLOAT_BORDER_COLOR_PATCH
-#endif // TITLECOLOR_PATCH
-#endif // VTCOLORS_PATCH
+#endif // BAR_TITLECOLOR_PATCH
+#endif // BAR_VTCOLORS_PATCH
-#if ALPHA_PATCH
+#if BAR_ALPHA_PATCH
static const unsigned int baralpha = 0xd0;
static const unsigned int borderalpha = OPAQUE;
static const unsigned int alphas[][3] = {
/* fg bg border */
[SchemeNorm] = { OPAQUE, baralpha, borderalpha },
[SchemeSel] = { OPAQUE, baralpha, borderalpha },
- #if STATUSCOLORS_PATCH
+ #if BAR_STATUSCOLORS_PATCH
[SchemeWarn] = { OPAQUE, baralpha, borderalpha },
- #endif // STATUSCOLORS_PATCH
- #if URGENTBORDER_PATCH || STATUSCOLORS_PATCH
+ #endif // BAR_STATUSCOLORS_PATCH
+ #if URGENTBORDER_PATCH || BAR_STATUSCOLORS_PATCH
[SchemeUrg] = { OPAQUE, baralpha, borderalpha },
- #endif // URGENTBORDER_PATCH / STATUSCOLORS_PATCH
+ #endif // URGENTBORDER_PATCH / BAR_STATUSCOLORS_PATCH
#if AWESOMEBAR_PATCH
[SchemeHid] = { OPAQUE, baralpha, borderalpha },
#endif // AWESOMEBAR_PATCH
- #if VTCOLORS_PATCH
+ #if BAR_VTCOLORS_PATCH
[SchemeTagsNorm] = { OPAQUE, baralpha, borderalpha },
[SchemeTagsSel] = { OPAQUE, baralpha, borderalpha },
[SchemeTitleNorm] = { OPAQUE, baralpha, borderalpha },
[SchemeTitleSel] = { OPAQUE, baralpha, borderalpha },
[SchemeStatus] = { OPAQUE, baralpha, borderalpha },
- #elif TITLECOLOR_PATCH
+ #elif BAR_TITLECOLOR_PATCH
[SchemeTitle] = { OPAQUE, baralpha, borderalpha },
- #endif // VTCOLORS_PATCH / TITLECOLOR_PATCH
+ #endif // BAR_VTCOLORS_PATCH / BAR_TITLECOLOR_PATCH
};
-#endif // ALPHA_PATCH
-#if VTCOLORS_PATCH && FLOAT_BORDER_COLOR_PATCH
+#endif // BAR_ALPHA_PATCH
+#if BAR_VTCOLORS_PATCH && FLOAT_BORDER_COLOR_PATCH
static const char title_bg_dark[] = "#303030";
static const char title_bg_light[] = "#fdfdfd";
static const int color_ptrs[][ColCount] = {
/* fg bg border float */
[SchemeNorm] = { -1, -1, 5, 12 },
[SchemeSel] = { -1, -1, 11, 13 },
- #if STATUSCOLORS_PATCH
+ #if BAR_STATUSCOLORS_PATCH
[SchemeWarn] = { -1, 1, 1, 14 },
- #endif // STATUSCOLORS_PATCH
- #if URGENTBORDER_PATCH || STATUSCOLORS_PATCH
+ #endif // BAR_STATUSCOLORS_PATCH
+ #if URGENTBORDER_PATCH || BAR_STATUSCOLORS_PATCH
[SchemeUrg] = { 7, 9, 9, 15 },
- #endif // URGENTBORDER_PATCH || STATUSCOLORS_PATCH
+ #endif // URGENTBORDER_PATCH || BAR_STATUSCOLORS_PATCH
#if AWESOMEBAR_PATCH
[SchemeHid] = { 5, 0, 0, -1 },
#endif // AWESOMEBAR_PATCH
@@ -175,12 +173,12 @@ static char colors[][ColCount][8] = {
/* fg bg border float */
[SchemeNorm] = { "#000000", "#000000", "#000000", "#000000" },
[SchemeSel] = { "#000000", "#000000", "#000000", "#000000" },
- #if STATUSCOLORS_PATCH
+ #if BAR_STATUSCOLORS_PATCH
[SchemeWarn] = { "#000000", "#000000", "#000000", "#000000" },
- #endif // STATUSCOLORS_PATCH
- #if URGENTBORDER_PATCH || STATUSCOLORS_PATCH
+ #endif // BAR_STATUSCOLORS_PATCH
+ #if URGENTBORDER_PATCH || BAR_STATUSCOLORS_PATCH
[SchemeUrg] = { "#000000", "#000000", "#000000", "#000000" },
- #endif // URGENTBORDER_PATCH || STATUSCOLORS_PATCH
+ #endif // URGENTBORDER_PATCH || BAR_STATUSCOLORS_PATCH
#if AWESOMEBAR_PATCH
[SchemeHid] = { "#000000", "#000000", "#000000", "#000000" },
#endif // AWESOMEBAR_PATCH
@@ -190,19 +188,19 @@ static char colors[][ColCount][8] = {
[SchemeTitleSel] = { "#000000", "#000000", "#000000", "#000000" },
[SchemeStatus] = { "#000000", "#000000", "#000000", "#000000" },
};
-#elif VTCOLORS_PATCH
+#elif BAR_VTCOLORS_PATCH
static const char title_bg_dark[] = "#303030";
static const char title_bg_light[] = "#fdfdfd";
static const int color_ptrs[][ColCount] = {
/* fg bg border */
[SchemeNorm] = { -1, -1, 5 },
[SchemeSel] = { -1, -1, 11 },
- #if STATUSCOLORS_PATCH
+ #if BAR_STATUSCOLORS_PATCH
[SchemeWarn] = { -1, 1, 1 },
- #endif // STATUSCOLORS_PATCH
- #if URGENTBORDER_PATCH || STATUSCOLORS_PATCH
+ #endif // BAR_STATUSCOLORS_PATCH
+ #if URGENTBORDER_PATCH || BAR_STATUSCOLORS_PATCH
[SchemeUrg] = { 7, 9, 9 },
- #endif // URGENTBORDER_PATCH || STATUSCOLORS_PATCH
+ #endif // URGENTBORDER_PATCH || BAR_STATUSCOLORS_PATCH
#if AWESOMEBAR_PATCH
[SchemeHid] = { 5, 0, 0 },
#endif // AWESOMEBAR_PATCH
@@ -216,12 +214,12 @@ static char colors[][ColCount][8] = {
/* fg bg border */
[SchemeNorm] = { "#000000", "#000000", "#000000" },
[SchemeSel] = { "#000000", "#000000", "#000000" },
- #if STATUSCOLORS_PATCH
+ #if BAR_STATUSCOLORS_PATCH
[SchemeWarn] = { "#000000", "#000000", "#000000" },
- #endif // STATUSCOLORS_PATCH
- #if URGENTBORDER_PATCH || STATUSCOLORS_PATCH
+ #endif // BAR_STATUSCOLORS_PATCH
+ #if URGENTBORDER_PATCH || BAR_STATUSCOLORS_PATCH
[SchemeUrg] = { "#000000", "#000000", "#000000" },
- #endif // URGENTBORDER_PATCH || STATUSCOLORS_PATCH
+ #endif // URGENTBORDER_PATCH || BAR_STATUSCOLORS_PATCH
#if AWESOMEBAR_PATCH
[SchemeHid] = { "#000000", "#000000", "#000000" },
#endif // AWESOMEBAR_PATCH
@@ -240,20 +238,20 @@ char *colors[][ColCount] = {
/* fg bg border float */
[SchemeNorm] = { normfgcolor, normbgcolor, normbordercolor, normfloatcolor },
[SchemeSel] = { selfgcolor, selbgcolor, selbordercolor, selfloatcolor },
- #if STATUSCOLORS_PATCH
+ #if BAR_STATUSCOLORS_PATCH
[SchemeWarn] = { warnfgcolor, warnbgcolor, warnbordercolor, warnfloatcolor },
- #endif // STATUSCOLORS_PATCH
- #if URGENTBORDER_PATCH || STATUSCOLORS_PATCH
+ #endif // BAR_STATUSCOLORS_PATCH
+ #if URGENTBORDER_PATCH || BAR_STATUSCOLORS_PATCH
[SchemeUrg] = { urgfgcolor, urgbgcolor, urgbordercolor, urgfloatcolor },
- #endif // URGENTBORDER_PATCH / STATUSCOLORS_PATCH
+ #endif // URGENTBORDER_PATCH / BAR_STATUSCOLORS_PATCH
#if AWESOMEBAR_PATCH
[SchemeHid] = { hidfgcolor, hidbgcolor, hidbordercolor, hidfloatcolor },
#endif // AWESOMEBAR_PATCH
- #if TITLECOLOR_PATCH
+ #if BAR_TITLECOLOR_PATCH
[SchemeTitle] = { titlefgcolor, titlebgcolor, titlebordercolor, titlefloatcolor },
- #endif // TITLECOLOR_PATCH
+ #endif // BAR_TITLECOLOR_PATCH
};
-#else // !VTCOLORS_PATCH && !FLOAT_BORDER_COLOR_PATCH
+#else // !BAR_VTCOLORS_PATCH && !FLOAT_BORDER_COLOR_PATCH
static
#if !XRDB_PATCH
const
@@ -262,20 +260,20 @@ char *colors[][ColCount] = {
/* fg bg border */
[SchemeNorm] = { normfgcolor, normbgcolor, normbordercolor },
[SchemeSel] = { selfgcolor, selbgcolor, selbordercolor },
- #if STATUSCOLORS_PATCH
+ #if BAR_STATUSCOLORS_PATCH
[SchemeWarn] = { warnfgcolor, warnbgcolor, warnbordercolor },
- #endif // STATUSCOLORS_PATCH
- #if URGENTBORDER_PATCH || STATUSCOLORS_PATCH
+ #endif // BAR_STATUSCOLORS_PATCH
+ #if URGENTBORDER_PATCH || BAR_STATUSCOLORS_PATCH
[SchemeUrg] = { urgfgcolor, urgbgcolor, urgbordercolor },
- #endif // URGENTBORDER_PATCH / STATUSCOLORS_PATCH
+ #endif // URGENTBORDER_PATCH / BAR_STATUSCOLORS_PATCH
#if AWESOMEBAR_PATCH
[SchemeHid] = { hidfgcolor, hidbgcolor, hidbordercolor },
#endif // AWESOMEBAR_PATCH
- #if TITLECOLOR_PATCH
+ #if BAR_TITLECOLOR_PATCH
[SchemeTitle] = { titlefgcolor, titlebgcolor, titlebordercolor },
- #endif // TITLECOLOR_PATCH
+ #endif // BAR_TITLECOLOR_PATCH
};
-#endif // VTCOLORS_PATCH / FLOAT_BORDER_COLOR_PATCH
+#endif // BAR_VTCOLORS_PATCH / FLOAT_BORDER_COLOR_PATCH
#if SCRATCHPADS_PATCH
const char *spcmd1[] = {"st", "-n", "spterm", "-g", "120x34", NULL };
@@ -290,14 +288,14 @@ static Sp scratchpads[] = {
#endif // SCRATCHPADS_PATCH
/* tagging */
-#if EWMHTAGS_PATCH
+#if BAR_EWMHTAGS_PATCH
static char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
#else
static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
-#endif // EWMHTAGS_PATCH
-#if ALTERNATIVE_TAGS_PATCH
+#endif // BAR_EWMHTAGS_PATCH
+#if BAR_ALTERNATIVE_TAGS_PATCH
static const char *tagsalt[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
-#endif // ALTERNATIVE_TAGS_PATCH
+#endif // BAR_ALTERNATIVE_TAGS_PATCH
#if TAGGRID_PATCH
/* grid of tags */
@@ -495,9 +493,9 @@ static Signal signals[] = {
#if TAGSWAPMON_PATCH
{ "tagswapmon", tagswapmon},
#endif // TAGSWAPMON_PATCH
- #if ALTERNATIVE_TAGS_PATCH
+ #if BAR_ALTERNATIVE_TAGS_PATCH
{ "togglealttag", togglealttag },
- #endif // ALTERNATIVE_TAGS_PATCH
+ #endif // BAR_ALTERNATIVE_TAGS_PATCH
#if TOGGLEFULLSCREEN_PATCH
{ "togglefullscreen", togglefullscreen },
#endif // TOGGLEFULLSCREEN_PATCH
@@ -522,7 +520,7 @@ static Signal signals[] = {
#if WINVIEW_PATCH
{ "winview", winview },
#endif // WINVIEW_PATCH
- #if XRDB_PATCH && !VTCOLORS_PATCH
+ #if XRDB_PATCH && !BAR_VTCOLORS_PATCH
{ "xrdb", xrdb },
#endif // XRDB_PATCH
#if TAGOTHERMONITOR_PATCH
@@ -746,9 +744,9 @@ static const Layout layouts[] = {
{ MOD, XK_z, ACTION##stack, {.i = -1 } },
#endif // STACKER_PATCH
-#if HOLDBAR_PATCH
+#if BAR_HOLDBAR_PATCH
#define HOLDKEY 0 // replace 0 with the keysym to activate holdbar
-#endif // HOLDBAR_PATCH
+#endif // BAR_HOLDBAR_PATCH
/* helper for spawning shell commands in the pre dwm-5.0 fashion */
#define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } }
@@ -767,18 +765,18 @@ static const char *dmenucmd[] = {
"-nf", normfgcolor,
"-sb", selbgcolor,
"-sf", selfgcolor,
- #if DMENUMATCHTOP_PATCH
+ #if BAR_DMENUMATCHTOP_PATCH
topbar ? NULL : "-b",
- #endif // DMENUMATCHTOP_PATCH
+ #endif // BAR_DMENUMATCHTOP_PATCH
NULL
};
static const char *termcmd[] = { "st", NULL };
-#if STATUSCMD_PATCH && !DWMBLOCKS_PATCH
+#if BAR_STATUSCMD_PATCH && !BAR_DWMBLOCKS_PATCH
/* commands spawned when clicking statusbar, the mouse button pressed is exported as BUTTON */
static const char *statuscmds[] = { "notify-send Mouse$BUTTON" };
static char *statuscmd[] = { "/bin/sh", "-c", NULL, NULL };
-#endif // STATUSCMD_PATCH | DWMBLOCKS_PATCH
+#endif // BAR_STATUSCMD_PATCH | DWMBLOCKS_PATCH
static Key keys[] = {
/* modifier key function argument */
@@ -891,13 +889,13 @@ static Key keys[] = {
#if FOCUSURGENT_PATCH
{ MODKEY, XK_u, focusurgent, {0} },
#endif // FOCUSURGENT_PATCH
- #if HOLDBAR_PATCH
+ #if BAR_HOLDBAR_PATCH
{ 0, HOLDKEY, holdbar, {0} },
- #endif // HOLDBAR_PATCH
+ #endif // BAR_HOLDBAR_PATCH
#if WINVIEW_PATCH
{ MODKEY, XK_o, winview, {0} },
#endif // WINVIEW_PATCH
- #if XRDB_PATCH && !VTCOLORS_PATCH
+ #if XRDB_PATCH && !BAR_VTCOLORS_PATCH
{ MODKEY|ShiftMask, XK_F5, xrdb, {.v = NULL } },
#endif // XRDB_PATCH
{ MODKEY, XK_t, setlayout, {.v = &layouts[0]} },
@@ -995,9 +993,9 @@ static Key keys[] = {
{ MODKEY|Mod4Mask|ControlMask, XK_comma, tagswapmon, {.i = +1 } },
{ MODKEY|Mod4Mask|ControlMask, XK_period, tagswapmon, {.i = -1 } },
#endif // TAGSWAPMON_PATCH
- #if ALTERNATIVE_TAGS_PATCH
+ #if BAR_ALTERNATIVE_TAGS_PATCH
{ MODKEY, XK_n, togglealttag, {0} },
- #endif // ALTERNATIVE_TAGS_PATCH
+ #endif // BAR_ALTERNATIVE_TAGS_PATCH
#if TAGGRID_PATCH
{ MODKEY|ControlMask, XK_Up, switchtag, { .ui = SWITCHTAG_UP | SWITCHTAG_VIEW } },
{ MODKEY|ControlMask, XK_Down, switchtag, { .ui = SWITCHTAG_DOWN | SWITCHTAG_VIEW } },
@@ -1148,27 +1146,27 @@ static Command commands[] = {
#endif //
static Button buttons[] = {
/* click event mask button function argument */
- #if STATUSBUTTON_PATCH
+ #if BAR_STATUSBUTTON_PATCH
{ ClkButton, 0, Button1, spawn, {.v = dmenucmd } },
- #endif // STATUSBUTTON_PATCH
+ #endif // BAR_STATUSBUTTON_PATCH
{ ClkLtSymbol, 0, Button1, setlayout, {0} },
{ ClkLtSymbol, 0, Button3, setlayout, {.v = &layouts[2]} },
- #if AWESOMEBAR_PATCH
+ #if BAR_AWESOMEBAR_PATCH
{ ClkWinTitle, 0, Button1, togglewin, {0} },
{ ClkWinTitle, 0, Button3, showhideclient, {0} },
- #endif // AWESOMEBAR_PATCH
+ #endif // BAR_AWESOMEBAR_PATCH
{ ClkWinTitle, 0, Button2, zoom, {0} },
- #if STATUSCMD_PATCH && DWMBLOCKS_PATCH
+ #if BAR_STATUSCMD_PATCH && BAR_DWMBLOCKS_PATCH
{ ClkStatusText, 0, Button1, sigdwmblocks, {.i = 1 } },
{ ClkStatusText, 0, Button2, sigdwmblocks, {.i = 2 } },
{ ClkStatusText, 0, Button3, sigdwmblocks, {.i = 3 } },
- #elif STATUSCMD_PATCH
+ #elif BAR_STATUSCMD_PATCH
{ ClkStatusText, 0, Button1, spawn, {.v = statuscmd } },
{ ClkStatusText, 0, Button2, spawn, {.v = statuscmd } },
{ ClkStatusText, 0, Button3, spawn, {.v = statuscmd } },
#else
{ ClkStatusText, 0, Button2, spawn, {.v = termcmd } },
- #endif // STATUSCMD_PATCH
+ #endif // BAR_STATUSCMD_PATCH
{ ClkClientWin, MODKEY, Button1, movemouse, {0} },
{ ClkClientWin, MODKEY, Button2, togglefloating, {0} },
{ ClkClientWin, MODKEY, Button3, resizemouse, {0} },
diff --git a/config.mk b/config.mk
index 49e5263..e92e380 100644
--- a/config.mk
+++ b/config.mk
@@ -20,13 +20,13 @@ FREETYPEINC = /usr/include/freetype2
# OpenBSD (uncomment)
#FREETYPEINC = ${X11INC}/freetype2
-# Uncomment this for the alpha patch / ALPHA_PATCH
+# Uncomment this for the alpha patch / BAR_ALPHA_PATCH
#XRENDER = -lXrender
# Uncomment this for the mdpcontrol patch / MDPCONTROL_PATCH
#MPDCLIENT = -lmpdclient
-# Uncomment for the pango patch / PANGO_PATCH
+# Uncomment for the pango patch / BAR_PANGO_PATCH
#PANGOINC = `pkg-config --cflags xft pango pangoxft`
#PANGOLIB = `pkg-config --libs xft pango pangoxft`
diff --git a/drw.c b/drw.c
index bfc66be..99dc6da 100644
--- a/drw.c
+++ b/drw.c
@@ -61,14 +61,14 @@ utf8decode(const char *c, long *u, size_t clen)
return len;
}
-#endif // PANGO_PATCH
+#endif // BAR_PANGO_PATCH
Drw *
-#if ALPHA_PATCH
+#if BAR_ALPHA_PATCH
drw_create(Display *dpy, int screen, Window root, unsigned int w, unsigned int h, Visual *visual, unsigned int depth, Colormap cmap)
#else
drw_create(Display *dpy, int screen, Window root, unsigned int w, unsigned int h)
-#endif // ALPHA_PATCH
+#endif // BAR_ALPHA_PATCH
{
Drw *drw = ecalloc(1, sizeof(Drw));
@@ -78,7 +78,7 @@ drw_create(Display *dpy, int screen, Window root, unsigned int w, unsigned int h
drw->w = w;
drw->h = h;
- #if ALPHA_PATCH
+ #if BAR_ALPHA_PATCH
drw->visual = visual;
drw->depth = depth;
drw->cmap = cmap;
@@ -87,7 +87,7 @@ drw_create(Display *dpy, int screen, Window root, unsigned int w, unsigned int h
#else
drw->drawable = XCreatePixmap(dpy, root, w, h, DefaultDepth(dpy, screen));
drw->gc = XCreateGC(dpy, root, 0, NULL);
- #endif // ALPHA_PATCH
+ #endif // BAR_ALPHA_PATCH
XSetLineAttributes(dpy, drw->gc, 1, LineSolid, CapButt, JoinMiter);
return drw;
@@ -103,11 +103,11 @@ drw_resize(Drw *drw, unsigned int w, unsigned int h)
drw->h = h;
if (drw->drawable)
XFreePixmap(drw->dpy, drw->drawable);
- #if ALPHA_PATCH
+ #if BAR_ALPHA_PATCH
drw->drawable = XCreatePixmap(drw->dpy, drw->root, w, h, drw->depth);
#else
drw->drawable = XCreatePixmap(drw->dpy, drw->root, w, h, DefaultDepth(drw->dpy, drw->screen));
- #endif // ALPHA_PATCH
+ #endif // BAR_ALPHA_PATCH
}
void
@@ -115,15 +115,15 @@ drw_free(Drw *drw)
{
XFreePixmap(drw->dpy, drw->drawable);
XFreeGC(drw->dpy, drw->gc);
- #if PANGO_PATCH
+ #if BAR_PANGO_PATCH
drw_font_free(drw->font);
#else
drw_fontset_free(drw->fonts);
- #endif // PANGO_PATCH
+ #endif // BAR_PANGO_PATCH
free(drw);
}
-#if PANGO_PATCH
+#if BAR_PANGO_PATCH
/* This function is an implementation detail. Library users should use
* drw_font_create instead.
*/
@@ -192,7 +192,7 @@ xfont_create(Drw *drw, const char *fontname, FcPattern *fontpattern)
die("no font specified.");
}
- #if !COLOR_EMOJI_PATCH
+ #if !BAR_COLOR_EMOJI_PATCH
/* Do not allow using color fonts. This is a workaround for a BadLength
* error from Xft with color glyphs. Modelled on the Xterm workaround. See
* https://bugzilla.redhat.com/show_bug.cgi?id=1498269
@@ -205,7 +205,7 @@ xfont_create(Drw *drw, const char *fontname, FcPattern *fontpattern)
XftFontClose(drw->dpy, xfont);
return NULL;
}
- #endif // COLOR_EMOJI_PATCH
+ #endif // BAR_COLOR_EMOJI_PATCH
font = ecalloc(1, sizeof(Fnt));
font->xfont = xfont;
@@ -215,25 +215,25 @@ xfont_create(Drw *drw, const char *fontname, FcPattern *fontpattern)
return font;
}
-#endif // PANGO_PATCH
+#endif // BAR_PANGO_PATCH
static void
xfont_free(Fnt *font)
{
if (!font)
return;
- #if PANGO_PATCH
+ #if BAR_PANGO_PATCH
if (font->layout)
g_object_unref(font->layout);
#else
if (font->pattern)
FcPatternDestroy(font->pattern);
XftFontClose(font->dpy, font->xfont);
- #endif // PANGO_PATCH
+ #endif // BAR_PANGO_PATCH
free(font);
}
-#if PANGO_PATCH
+#if BAR_PANGO_PATCH
Fnt*
drw_font_create(Drw* drw, const char font[])
{
@@ -264,9 +264,9 @@ drw_fontset_create(Drw* drw, const char *fonts[], size_t fontcount)
}
return (drw->fonts = ret);
}
-#endif // PANGO_PATCH
+#endif // BAR_PANGO_PATCH
-#if PANGO_PATCH
+#if BAR_PANGO_PATCH
void
drw_font_free(Fnt *font)
{
@@ -282,25 +282,25 @@ drw_fontset_free(Fnt *font)
xfont_free(font);
}
}
-#endif // PANGO_PATCH
+#endif // BAR_PANGO_PATCH
void
drw_clr_create(
Drw *drw,
Clr *dest,
- #if VTCOLORS_PATCH
+ #if BAR_VTCOLORS_PATCH
const char clrname[]
#else
const char *clrname
- #endif // VTCOLORS_PATCH
- #if ALPHA_PATCH
+ #endif // BAR_VTCOLORS_PATCH
+ #if BAR_ALPHA_PATCH
, unsigned int alpha
- #endif // ALPHA_PATCH
+ #endif // BAR_ALPHA_PATCH
) {
if (!drw || !dest || !clrname)
return;
- #if ALPHA_PATCH
+ #if BAR_ALPHA_PATCH
if (!XftColorAllocName(drw->dpy, drw->visual, drw->cmap,
clrname, dest))
die("error, cannot allocate color '%s'", clrname);
@@ -315,7 +315,7 @@ drw_clr_create(
#if NO_TRANSPARENT_BORDERS_PATCH
dest->pixel |= 0xff << 24;
#endif // NO_TRANSPARENT_BORDERS_PATCH
- #endif // ALPHA_PATCH
+ #endif // BAR_ALPHA_PATCH
}
/* Wrapper to create color schemes. The caller has to call free(3) on the
@@ -323,16 +323,16 @@ drw_clr_create(
Clr *
drw_scm_create(
Drw *drw,
- #if VTCOLORS_PATCH
+ #if BAR_VTCOLORS_PATCH
char clrnames[][8],
#elif XRDB_PATCH
char *clrnames[],
#else
const char *clrnames[],
- #endif // VTCOLORS_PATCH / XRDB_PATCH
- #if ALPHA_PATCH
+ #endif // BAR_VTCOLORS_PATCH / XRDB_PATCH
+ #if BAR_ALPHA_PATCH
const unsigned int alphas[],
- #endif // ALPHA_PATCH
+ #endif // BAR_ALPHA_PATCH
size_t clrcount
) {
size_t i;
@@ -343,11 +343,11 @@ drw_scm_create(
return NULL;
for (i = 0; i < clrcount; i++)
- #if ALPHA_PATCH
+ #if BAR_ALPHA_PATCH
drw_clr_create(drw, &ret[i], clrnames[i], alphas[i]);
#else
drw_clr_create(drw, &ret[i], clrnames[i]);
- #endif // ALPHA_PATCH
+ #endif // BAR_ALPHA_PATCH
return ret;
}
@@ -358,7 +358,7 @@ drw_setfontset(Drw *drw, Fnt *set)
if (drw)
drw->fonts = set;
}
-#endif // PANGO_PATCH
+#endif // BAR_PANGO_PATCH
void
drw_setscheme(Drw *drw, Clr *scm)
@@ -379,7 +379,7 @@ drw_rect(Drw *drw, int x, int y, unsigned int w, unsigned int h, int filled, int
XDrawRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w - 1, h - 1);
}
-#if PANGO_PATCH
+#if BAR_PANGO_PATCH
int
drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lpad, const char *text, int invert, Bool markup)
{
@@ -398,13 +398,13 @@ drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lp
} else {
XSetForeground(drw->dpy, drw->gc, drw->scheme[invert ? ColFg : ColBg].pixel);
XFillRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w, h);
- #if ALPHA_PATCH
+ #if BAR_ALPHA_PATCH
d = XftDrawCreate(drw->dpy, drw->drawable, drw->visual, drw->cmap);
#else
d = XftDrawCreate(drw->dpy, drw->drawable,
DefaultVisual(drw->dpy, drw->screen),
DefaultColormap(drw->dpy, drw->screen));
- #endif // ALPHA_PATCH
+ #endif // BAR_ALPHA_PATCH
x += lpad;
w -= lpad;
}
@@ -471,13 +471,13 @@ drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lp
} else {
XSetForeground(drw->dpy, drw->gc, drw->scheme[invert ? ColFg : ColBg].pixel);
XFillRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w, h);
- #if ALPHA_PATCH
+ #if BAR_ALPHA_PATCH
d = XftDrawCreate(drw->dpy, drw->drawable, drw->visual, drw->cmap);
#else
d = XftDrawCreate(drw->dpy, drw->drawable,
DefaultVisual(drw->dpy, drw->screen),
DefaultColormap(drw->dpy, drw->screen));
- #endif // ALPHA_PATCH
+ #endif // BAR_ALPHA_PATCH
x += lpad;
w -= lpad;
}
@@ -579,7 +579,7 @@ drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lp
return x + (render ? w : 0);
}
-#endif // PANGO_PATCH
+#endif // BAR_PANGO_PATCH
void
drw_map(Drw *drw, Window win, int x, int y, unsigned int w, unsigned int h)
@@ -591,7 +591,7 @@ drw_map(Drw *drw, Window win, int x, int y, unsigned int w, unsigned int h)
XSync(drw->dpy, False);
}
-#if PANGO_PATCH
+#if BAR_PANGO_PATCH
unsigned int
drw_font_getwidth(Drw *drw, const char *text, Bool markup)
{
@@ -607,9 +607,9 @@ drw_fontset_getwidth(Drw *drw, const char *text)
return 0;
return drw_text(drw, 0, 0, 0, 0, 0, text, 0);
}
-#endif // PANGO_PATCH
+#endif // BAR_PANGO_PATCH
-#if PANGO_PATCH
+#if BAR_PANGO_PATCH
void
drw_font_getexts(Fnt *font, const char *text, unsigned int len, unsigned int *w, unsigned int *h, Bool markup)
{
@@ -644,7 +644,7 @@ drw_font_getexts(Fnt *font, const char *text, unsigned int len, unsigned int *w,
if (h)
*h = font->h;
}
-#endif // PANGO_PATCH
+#endif // BAR_PANGO_PATCH
Cur *
drw_cur_create(Drw *drw, int shape)
diff --git a/drw.h b/drw.h
index ae46f9a..8a1812f 100644
--- a/drw.h
+++ b/drw.h
@@ -1,9 +1,9 @@
/* See LICENSE file for copyright and license details. */
-#if PANGO_PATCH
+#if BAR_PANGO_PATCH
#include <pango/pango.h>
#include <pango/pangoxft.h>
-#endif // PANGO_PATCH
+#endif // BAR_PANGO_PATCH
typedef struct {
Cursor cursor;
@@ -12,13 +12,13 @@ typedef struct {
typedef struct Fnt {
Display *dpy;
unsigned int h;
- #if PANGO_PATCH
+ #if BAR_PANGO_PATCH
PangoLayout *layout;
#else
XftFont *xfont;
FcPattern *pattern;
struct Fnt *next;
- #endif // PANGO_PATCH
+ #endif // BAR_PANGO_PATCH
} Fnt;
#if FLOAT_BORDER_COLOR_PATCH
@@ -33,32 +33,32 @@ typedef struct {
Display *dpy;
int screen;
Window root;
- #if ALPHA_PATCH
+ #if BAR_ALPHA_PATCH
Visual *visual;
unsigned int depth;
Colormap cmap;
- #endif // ALPHA_PATCH
+ #endif // BAR_ALPHA_PATCH
Drawable drawable;
GC gc;
Clr *scheme;
- #if PANGO_PATCH
+ #if BAR_PANGO_PATCH
Fnt *font;
#else
Fnt *fonts;
- #endif // PANGO_PATCH
+ #endif // BAR_PANGO_PATCH
} Drw;
/* Drawable abstraction */
-#if ALPHA_PATCH
+#if BAR_ALPHA_PATCH
Drw *drw_create(Display *dpy, int screen, Window win, unsigned int w, unsigned int h, Visual *visual, unsigned int depth, Colormap cmap);
#else
Drw *drw_create(Display *dpy, int screen, Window win, unsigned int w, unsigned int h);
-#endif // ALPHA_PATCH
+#endif // BAR_ALPHA_PATCH
void drw_resize(Drw *drw, unsigned int w, unsigned int h);
void drw_free(Drw *drw);
/* Fnt abstraction */
-#if PANGO_PATCH
+#if BAR_PANGO_PATCH
Fnt *drw_font_create(Drw* drw, const char font[]);
void drw_font_free(Fnt* set);
unsigned int drw_font_getwidth(Drw *drw, const char *text, Bool markup);
@@ -68,33 +68,33 @@ Fnt *drw_fontset_create(Drw* drw, const char *fonts[], size_t fontcount);
void drw_fontset_free(Fnt* set);
unsigned int drw_fontset_getwidth(Drw *drw, const char *text);
void drw_font_getexts(Fnt *font, const char *text, unsigned int len, unsigned int *w, unsigned int *h);
-#endif // PANGO_PATCH
+#endif // BAR_PANGO_PATCH
/* Colorscheme abstraction */
void drw_clr_create(
Drw *drw,
Clr *dest,
- #if VTCOLORS_PATCH
+ #if BAR_VTCOLORS_PATCH
const char clrname[]
#else
const char *clrname
- #endif // VTCOLORS_PATCH
- #if ALPHA_PATCH
+ #endif // BAR_VTCOLORS_PATCH
+ #if BAR_ALPHA_PATCH
, unsigned int alpha
- #endif // ALPHA_PATCH
+ #endif // BAR_ALPHA_PATCH
);
Clr *drw_scm_create(
Drw *drw,
- #if VTCOLORS_PATCH
+ #if BAR_VTCOLORS_PATCH
char clrnames[][8],
#elif XRDB_PATCH
char *clrnames[],
#else
const char *clrnames[],
- #endif // VTCOLORS_PATCH / XRDB_PATCH
- #if ALPHA_PATCH
+ #endif // BAR_VTCOLORS_PATCH / XRDB_PATCH
+ #if BAR_ALPHA_PATCH
const unsigned int alphas[],
- #endif // ALPHA_PATCH
+ #endif // BAR_ALPHA_PATCH
size_t clrcount
);
@@ -105,16 +105,16 @@ void drw_cur_free(Drw *drw, Cur *cursor);
/* Drawing context manipulation */
#if !PANGO_PATCH
void drw_setfontset(Drw *drw, Fnt *set);
-#endif // PANGO_PATCH
+#endif // BAR_PANGO_PATCH
void drw_setscheme(Drw *drw, Clr *scm);
/* Drawing functions */
void drw_rect(Drw *drw, int x, int y, unsigned int w, unsigned int h, int filled, int invert);
-#if PANGO_PATCH
+#if BAR_PANGO_PATCH
int drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lpad, const char *text, int invert, Bool markup);
#else
int drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lpad, const char *text, int invert);
-#endif // PANGO_PATCH
+#endif // BAR_PANGO_PATCH
/* Map functions */
void drw_map(Drw *drw, Window win, int x, int y, unsigned int w, unsigned int h);
diff --git a/dwm.c b/dwm.c
index c3bb411..eca9c91 100644
--- a/dwm.c
+++ b/dwm.c
@@ -45,9 +45,9 @@
#include "drw.h"
#include "util.h"
-#if PANGO_PATCH
+#if BAR_PANGO_PATCH
#include <pango/pango.h>
-#endif // PANGO_PATCH
+#endif // BAR_PANGO_PATCH
#if SPAWNCMD_PATCH
#include <assert.h>
@@ -57,6 +57,7 @@
#endif // SPAWNCMD_PATCH
/* macros */
+#define BARRULES 20
#define BUTTONMASK (ButtonPressMask|ButtonReleaseMask)
#define CLEANMASK(mask) (mask & ~(numlockmask|LockMask) & (ShiftMask|ControlMask|Mod1Mask|Mod2Mask|Mod3Mask|Mod4Mask|Mod5Mask))
#define INTERSECT(x,y,w,h,m) (MAX(0, MIN((x)+(w),(m)->wx+(m)->ww) - MAX((x),(m)->wx)) \
@@ -72,9 +73,9 @@
#else
#define ISVISIBLE(C) ((C->tags & C->mon->tagset[C->mon->seltags]))
#endif // ATTACHASIDE_PATCH
-#if AWESOMEBAR_PATCH
+#if BAR_AWESOMEBAR_PATCH
#define HIDDEN(C) ((getstate(C->win) == IconicState))
-#endif // AWESOMEBAR_PATCH
+#endif // BAR_AWESOMEBAR_PATCH
#define LENGTH(X) (sizeof X / sizeof X[0])
#define MOUSEMASK (BUTTONMASK|PointerMotionMask)
#define WIDTH(X) ((X)->w + 2 * (X)->bw)
@@ -88,12 +89,12 @@
#else
#define TAGMASK ((1 << LENGTH(tags)) - 1)
#endif // SCRATCHPADS_PATCH
-#if PANGO_PATCH
+#if BAR_PANGO_PATCH
#define TEXTW(X) (drw_font_getwidth(drw, (X), False) + lrpad)
#define TEXTWM(X) (drw_font_getwidth(drw, (X), True) + lrpad)
#else
#define TEXTW(X) (drw_fontset_getwidth(drw, (X)) + lrpad)
-#endif // PANGO_PATCH
+#endif // BAR_PANGO_PATCH
/* enums */
enum {
@@ -119,36 +120,36 @@ enum {
enum {
SchemeNorm
,SchemeSel
- #if STATUSCOLORS_PATCH
+ #if BAR_STATUSCOLORS_PATCH
,SchemeWarn
- #endif // STATUSCOLORS_PATCH
- #if URGENTBORDER_PATCH || STATUSCOLORS_PATCH
+ #endif // BAR_STATUSCOLORS_PATCH
+ #if URGENTBORDER_PATCH || BAR_STATUSCOLORS_PATCH
,SchemeUrg
- #endif // URGENTBORDER_PATCH || STATUSCOLORS_PATCH
- #if AWESOMEBAR_PATCH
+ #endif // URGENTBORDER_PATCH || BAR_STATUSCOLORS_PATCH
+ #if BAR_AWESOMEBAR_PATCH
,SchemeHid
- #endif // AWESOMEBAR_PATCH
- #if VTCOLORS_PATCH
+ #endif // BAR_AWESOMEBAR_PATCH
+ #if BAR_VTCOLORS_PATCH
,SchemeTagsNorm
,SchemeTagsSel
,SchemeTitleNorm
,SchemeTitleSel
,SchemeStatus
- #elif TITLECOLOR_PATCH
+ #elif BAR_TITLECOLOR_PATCH
,SchemeTitle
- #endif // VTCOLORS_PATCH
+ #endif // BAR_VTCOLORS_PATCH
}; /* color schemes */
enum {
NetSupported, NetWMName, NetWMState, NetWMCheck,
NetWMFullscreen, NetActiveWindow, NetWMWindowType,
- #if SYSTRAY_PATCH
+ #if BAR_SYSTRAY_PATCH
NetSystemTray, NetSystemTrayOP, NetSystemTrayOrientation,
NetSystemTrayVisual, NetWMWindowTypeDock, NetSystemTrayOrientationHorz,
- #endif // SYSTRAY_PATCH
- #if EWMHTAGS_PATCH
+ #endif // BAR_SYSTRAY_PATCH
+ #if BAR_EWMHTAGS_PATCH
NetDesktopNames, NetDesktopViewport, NetNumberOfDesktops, NetCurrentDesktop,
- #endif // EWMHTAGS_PATCH
+ #endif // BAR_EWMHTAGS_PATCH
NetClientList, NetLast
}; /* EWMH atoms */
@@ -164,11 +165,15 @@ enum {
}; /* default atoms */
enum {
- #if STATUSBUTTON_PATCH
+ #if BAR_STATUSBUTTON_PATCH
ClkButton,
- #endif // STATUSBUTTON_PATCH
+ #endif // BAR_STATUSBUTTON_PATCH
+ #if BAR_TAGS_PATCH
ClkTagBar,
+ #endif // BAR_TAGS_PATCH
+ #if BAR_LTSYMBOL_PATCH
ClkLtSymbol,
+ #endif // BAR_LTSYMBOL_PATCH
ClkStatusText,
ClkWinTitle,
ClkClientWin,
@@ -176,6 +181,20 @@ enum {
ClkLast
}; /* clicks */
+enum {
+ BAR_ALIGN_LEFT,
+ BAR_ALIGN_CENTER,
+ BAR_ALIGN_RIGHT,
+ BAR_ALIGN_LEFT_LEFT,
+ BAR_ALIGN_LEFT_RIGHT,
+ BAR_ALIGN_LEFT_CENTER,
+ BAR_ALIGN_NONE,
+ BAR_ALIGN_RIGHT_LEFT,
+ BAR_ALIGN_RIGHT_RIGHT,
+ BAR_ALIGN_RIGHT_CENTER,
+ BAR_ALIGN_LAST
+}; /* bar alignment */
+
typedef union {
int i;
unsigned int ui;
@@ -183,6 +202,26 @@ typedef union {
const void *v;
} Arg;
+typedef struct Bar Bar;
+struct Bar {
+ Window win;
+ int bx, by, bw, bh; /* bar geometry */
+ int w[BARRULES]; // width, array length == barrules, then use r index for lookup purposes
+ int x[BARRULES]; // x position, array length == ^
+};
+
+typedef struct Monitor Monitor;
+typedef struct {
+ int monitor;
+ int bar;
+ int alignment; // see bar alignment enum
+ int (*widthfunc)(Monitor *m, int max_width);
+ int (*drawfunc)(Monitor *m, int x, int w);
+ int (*clickfunc)(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h);
+ char *name; // for debugging
+ int x, w; // position, width for internal use
+} BarRule;
+
typedef struct {
unsigned int click;
unsigned int mask;
@@ -191,7 +230,6 @@ typedef struct {
const Arg arg;
} Button;
-typedef struct Monitor Monitor;
typedef struct Client Client;
struct Client {
char name[256];
@@ -288,18 +326,6 @@ struct Monitor {
#endif // FLEXTILE_DELUXE_LAYOUT
int nmaster;
int num;
- int by; /* bar geometry */
- int tw; /* bar text width */
- #if EXTRABAR_PATCH
- int eby; /* extra bar geometry */
- #if STATUSCMD_PATCH
- int etw; /* extra bar text width */
- #endif // STATUSCMD_PATCH
- #endif // EXTRABAR_PATCH
- #if AWESOMEBAR_PATCH
- int btw; /* width of tasks portion of bar */
- int bt; /* number of tasks */
- #endif // AWESOMEBAR_PATCH
int mx, my, mw, mh; /* screen size */
int wx, wy, ww, wh; /* window area */
#if VANITYGAPS_PATCH
@@ -320,14 +346,15 @@ struct Monitor {
Client *sel;
Client *stack;
Monitor *next;
- Window barwin;
- #if EXTRABAR_PATCH
- Window extrabarwin;
- #endif // EXTRABAR_PATCH
+ #if BAR_EXTRABAR_PATCH
+ Bar *bars[2];
+ #else
+ Bar *bars[1];
+ #endif // BAR_EXTRABAR_PATCH
const Layout *lt[2];
- #if ALTERNATIVE_TAGS_PATCH
+ #if BAR_ALTERNATIVE_TAGS_PATCH
unsigned int alttag;
- #endif // ALTERNATIVE_TAGS_PATCH
+ #endif // BAR_ALTERNATIVE_TAGS_PATCH
#if PERTAG_PATCH
Pertag *pertag;
#endif // PERTAG_PATCH
@@ -472,11 +499,11 @@ static void resizemouse(const Arg *arg);
static void restack(Monitor *m);
static void run(void);
static void scan(void);
-#if SYSTRAY_PATCH
+#if BAR_SYSTRAY_PATCH
static int sendevent(Window w, Atom proto, int m, long d0, long d1, long d2, long d3, long d4);
#else
static int sendevent(Client *c, Atom proto);
-#endif // SYSTRAY_PATCH
+#endif // BAR_SYSTRAY_PATCH
static void sendmon(Client *c, Monitor *m);
static void setclientstate(Client *c, long state);
static void setfocus(Client *c);
@@ -514,48 +541,46 @@ static int xerrordummy(Display *dpy, XErrorEvent *ee);
static int xerrorstart(Display *dpy, XErrorEvent *ee);
static void zoom(const Arg *arg);
+/* bar functions */
+
#include "patch/include.h"
/* variables */
static const char broken[] = "broken";
-#if PANGO_PATCH || STATUS2D_PATCH && !STATUSCOLORS_PATCH
+#if BAR_PANGO_PATCH || BAR_STATUS2D_PATCH && !BAR_STATUSCOLORS_PATCH
static char stext[1024];
#else
static char stext[512];
-#endif // STATUS2D_PATCH
-#if STATUS2D_PATCH
+#endif // BAR_STATUS2D_PATCH
+#if BAR_STATUS2D_PATCH
static char rawstext[1024];
#else
static char rawstext[512];
-#endif // STATUS2D_PATCH
-#if EXTRABAR_PATCH
-#if STATUS2D_PATCH && !STATUSCOLORS_PATCH
+#endif // BAR_STATUS2D_PATCH
+#if BAR_EXTRABAR_PATCH
+#if BAR_STATUS2D_PATCH && !BAR_STATUSCOLORS_PATCH
static char estext[1024];
#else
static char estext[512];
-#endif // STATUS2D_PATCH
-#if STATUSCMD_PATCH
+#endif // BAR_STATUS2D_PATCH
+#if BAR_STATUSCMD_PATCH
static char rawestext[1024];
#else
static char rawestext[512];
-#endif // STATUSCMD_PATCH
-#endif // EXTRABAR_PATCH
+#endif // BAR_STATUSCMD_PATCH
+#endif // BAR_EXTRABAR_PATCH
static int screen;
static int sw, sh; /* X display screen geometry width, height */
-static int bh, blw = 0; /* bar geometry */
+static int bh; /* bar geometry */
static int lrpad; /* sum of left and right padding for text */
-#if BARPADDING_PATCH
-static int vp; /* vertical padding for bar */
-static int sp; /* side padding for bar */
-#endif // BARPADDING_PATCH
static int (*xerrorxlib)(Display *, XErrorEvent *);
static unsigned int numlockmask = 0;
static void (*handler[LASTEvent]) (XEvent *) = {
[ButtonPress] = buttonpress,
- #if COMBO_PATCH || HOLDBAR_PATCH
+ #if COMBO_PATCH || BAR_HOLDBAR_PATCH
[ButtonRelease] = keyrelease,
- #endif // COMBO_PATCH / HOLDBAR_PATCH
+ #endif // COMBO_PATCH / BAR_HOLDBAR_PATCH
[ClientMessage] = clientmessage,
[ConfigureRequest] = configurerequest,
[ConfigureNotify] = configurenotify,
@@ -566,37 +591,37 @@ static void (*handler[LASTEvent]) (XEvent *) = {
[Expose] = expose,
[FocusIn] = focusin,
[KeyPress] = keypress,
- #if COMBO_PATCH || HOLDBAR_PATCH
+ #if COMBO_PATCH || BAR_HOLDBAR_PATCH
[KeyRelease] = keyrelease,
- #endif // COMBO_PATCH / HOLDBAR_PATCH
+ #endif // COMBO_PATCH / BAR_HOLDBAR_PATCH
[MappingNotify] = mappingnotify,
[MapRequest] = maprequest,
#if !FOCUSONCLICK_PATCH
[MotionNotify] = motionnotify,
#endif // FOCUSONCLICK_PATCH
[PropertyNotify] = propertynotify,
- #if SYSTRAY_PATCH
+ #if BAR_SYSTRAY_PATCH
[ResizeRequest] = resizerequest,
- #endif // SYSTRAY_PATCH
+ #endif // BAR_SYSTRAY_PATCH
[UnmapNotify] = unmapnotify
};
-#if SYSTRAY_PATCH
+#if BAR_SYSTRAY_PATCH
static Atom wmatom[WMLast], netatom[NetLast], xatom[XLast];
#else
static Atom wmatom[WMLast], netatom[NetLast];
-#endif // SYSTRAY_PATCH
+#endif // BAR_SYSTRAY_PATCH
static int running = 1;
static Cur *cursor[CurLast];
static Clr **scheme;
static Display *dpy;
static Drw *drw;
static Monitor *mons, *selmon;
-#if STATICSTATUS_PATCH && !STATUSALLMONS_PATCH
+#if BAR_STATICSTATUS_PATCH && !BAR_STATUSALLMONS_PATCH
static Monitor *statmon;
-#if EXTRABAR_PATCH
+#if BAR_EXTRABAR_PATCH
static Monitor *statebmon;
-#endif // EXTRABAR_PATCH
-#endif // STATICSTATUS_PATCH
+#endif // BAR_EXTRABAR_PATCH
+#endif // BAR_STATICSTATUS_PATCH
static Window root, wmcheckwin;
/* configuration, allows nested code to access above variables */
@@ -842,30 +867,13 @@ attachstack(Client *c)
void
buttonpress(XEvent *e)
{
- unsigned int i, x, click;
- int padding = 0;
- #if STATUSCMD_PATCH
- unsigned int xc;
- #endif // STATUSCMD_PATCH
- #if TAGGRID_PATCH
- unsigned int columns;
- #endif // TAGGRID_PATCH
- #if HIDEVACANTTAGS_PATCH
- unsigned int occ = 0;
- #endif // HIDEVACANTTAGS_PATCH
+ int click, i, b, r, mi;
Arg arg = {0};
Client *c;
Monitor *m;
XButtonPressedEvent *ev = &e->xbutton;
- #if STATUSCMD_PATCH && !DWMBLOCKS_PATCH
- lastbutton = ev->button;
- #endif // STATUSCMD_PATCH | DWMBLOCKS_PATCH
- #if BARPADDING_PATCH
- padding -= sp * 2;
- #endif // BARPADDING_PATCH
- #if TAGGRID_PATCH
- columns = LENGTH(tags) / tagrows + ((LENGTH(tags) % tagrows > 0) ? 1 : 0);
- #endif // TAGGRID_PATCH
+ const BarRule *br;
+
click = ClkRootWin;
/* focus monitor if necessary */
if ((m = wintomon(ev->window)) && m != selmon
@@ -877,203 +885,26 @@ buttonpress(XEvent *e)
selmon = m;
focus(NULL);
}
- #if SYSTRAY_PATCH
- if (showsystray && selmon == systraytomon(selmon))
- padding -= getsystraywidth();
- #endif // SYSTRAY_PATCH
- if (ev->window == selmon->barwin) {
- i = x = 0;
- #if LEFTLAYOUT_PATCH
- x += blw;
- if (ev->x < x) {
- click = ClkLtSymbol;
- #if STATUSBUTTON_PATCH
- } else if (ev->x < (x += TEXTW(buttonbar))) {
- click = ClkButton;
- #endif // STATUSBUTTON_PATCH
- } else {
- #elif STATUSBUTTON_PATCH
- x += TEXTW(buttonbar);
- if (ev->x < x) {
- click = ClkButton;
- } else {
- #endif // LEFTLAYOUT_PATCH | STATUSBUTTON_PATCH
- #if HIDEVACANTTAGS_PATCH
- for (c = m->clients; c; c = c->next)
- occ |= c->tags == 255 ? 0 : c->tags;
- #endif // HIDEVACANTTAGS_PATCH
- #if TAGGRID_PATCH
- if (drawtagmask & DRAWCLASSICTAGS)
- #endif // TAGGRID_PATCH
- do {
- #if HIDEVACANTTAGS_PATCH
- /* do not reserve space for vacant tags */
- if (!(occ & 1 << i || m->tagset[m->seltags] & 1 << i))
- continue;
- #endif // HIDEVACANTTAGS_PATCH
- x += TEXTW(tags[i]);
- } while (ev->x >= x && ++i < LENGTH(tags));
- if (i < LENGTH(tags)
- #if TAGGRID_PATCH
- && (drawtagmask & DRAWCLASSICTAGS)
- #endif
- ) {
- click = ClkTagBar;
- arg.ui = 1 << i;
- #if TAGGRID_PATCH
- } else if (ev->x < x + columns * bh / tagrows && (drawtagmask & DRAWTAGGRID)) {
- click = ClkTagBar;
- i = (ev->x - x) / (bh / tagrows);
- i = i + columns * (ev->y / (bh / tagrows));
- if (i >= LENGTH(tags)) {
- i = LENGTH(tags) - 1;
- }
- arg.ui = 1 << i;
- }
- else if (ev->x < x + blw + columns * bh / tagrows)
- click = ClkLtSymbol;
- #else // TAGGRID_PATCH
- } else if (ev->x < x + blw)
- click = ClkLtSymbol;
- #endif // TAGGRID_PATCH
- else if (ev->x > selmon->ww - selmon->tw + padding)
- #if !STATUSCMD_PATCH
- click = ClkStatusText;
- #else
- {
- click = ClkStatusText;
- xc = selmon->ww - selmon->tw + padding;
- #if STATUSPADDING_PATCH
- xc += lrpad / 2;
- #endif // STATUSPADDING_PATCH
- char *text = rawstext;
- int i = -1;
- char ch;
- #if DWMBLOCKS_PATCH
- dwmblockssig = -1;
- #else
- statuscmdn = 0;
- #endif // DWMBLOCKS_PATCH
- while (text[++i]) {
- if ((unsigned char)text[i] < ' ') {
- ch = text[i];
- text[i] = '\0';
- #if STATUS2D_PATCH && !STATUSCOLORS_PATCH
- xc += status2dtextlength(text);
- #elif PANGO_PATCH
- xc += TEXTWM(text) - lrpad;
- #else
- xc += TEXTW(text) - lrpad;
- #endif // STATUS2D_PATCH
- text[i] = ch;
- text += i+1;
- i = -1;
- #if DWMBLOCKS_PATCH
- if (xc >= ev->x && dwmblockssig != -1)
- break;
- dwmblockssig = ch;
- #else
- if (xc >= ev->x)
- break;
- if (ch <= LENGTH(statuscmds))
- statuscmdn = ch - 1;
- #endif // DWMBLOCKS_PATCH
- }
- }
- #if DWMBLOCKS_PATCH
- if (dwmblockssig == -1)
- dwmblockssig = 0;
- #endif // DWMBLOCKS_PATCH
- }
- #endif // STATUSCMD_PATCH
- #if AWESOMEBAR_PATCH
- else {
- x += blw;
- c = m->clients;
-
- do {
- if (!c || !ISVISIBLE(c))
- continue;
- else
- x += (1.0 / (double)m->bt) * m->btw;
- } while (c && ev->x > x && (c = c->next));
- if (c) {
- click = ClkWinTitle;
- arg.v = c;
- }
- }
- #else
- else
- click = ClkWinTitle;
- #endif // AWESOMEBAR_PATCH
- #if LEFTLAYOUT_PATCH || STATUSBUTTON_PATCH
- }
- #endif // LEFTLAYOUT_PATCH | STATUSBUTTON_PATCH
- #if EXTRABAR_PATCH && STATUSCMD_PATCH
- } else if (ev->window == selmon->extrabarwin) {
- i = x = 0;
- padding = 0;
- #if BARPADDING_PATCH
- padding -= sp * 2;
- #endif // BARPADDING_PATCH
- if (
- (ebalign == 0 && ev->x >= 0 && ev->x < selmon->etw) ||
- (ebalign == 1 && ev->x > selmon->ww - selmon->etw + padding) ||
- (ebalign == 2 && ev->x > (selmon->ww / 2 - selmon->etw / 2 + padding)
- && ev->x < (selmon->ww / 2 + selmon->etw / 2 - padding))
- ) {
- click = ClkStatusText;
- if (ebalign == 0)
- xc = 0; // left
- else if (ebalign == 1)
- xc = selmon->ww - selmon->etw + padding; // right
- else
- xc = selmon->ww / 2 - selmon->etw / 2 + padding; // center
- #if STATUSPADDING_PATCH
- xc += lrpad / 2;
- #endif // STATUSPADDING_PATCH
- char *text = rawestext;
- int i = -1;
- char ch;
- #if DWMBLOCKS_PATCH
- dwmblockssig = -1;
- #else
- statuscmdn = 0;
- #endif // DWMBLOCKS_PATCH
- while (text[++i]) {
- if ((unsigned char)text[i] < ' ') {
- ch = text[i];
- text[i] = '\0';
- #if STATUS2D_PATCH && !STATUSCOLORS_PATCH
- xc += status2dtextlength(text);
- #elif PANGO_PATCH
- xc += TEXTWM(text) - lrpad;
- #else
- xc += TEXTW(text) - lrpad;
- #endif // STATUS2D_PATCH
- text[i] = ch;
- text += i+1;
- i = -1;
- #if DWMBLOCKS_PATCH
- if (xc >= ev->x && dwmblockssig != -1)
- break;
- dwmblockssig = ch;
- #else
- if (xc >= ev->x)
- break;
- if (ch <= LENGTH(statuscmds))
- statuscmdn = ch - 1;
- #endif // DWMBLOCKS_PATCH
+ for (mi = 0, m = mons; m && m != selmon; m = m->next, mi++); // get the monitor index
+ for (b = 0; b < LENGTH(selmon->bars); b++) {
+ if (ev->window == selmon->bars[b]->win) {
+ fprintf(stderr, "buttonpress on bar, mi = %d\n", mi);
+ for (r = 0; r < LENGTH(barrules); r++) {
+ br = &barrules[r];
+ if (br->bar != b || (br->monitor == 'A' && m != selmon) || (br->monitor != -1 && br->monitor != mi) || br->clickfunc == NULL)
+ continue;
+ if (selmon->bars[b]->x[r] <= ev->x && ev->x <= selmon->bars[b]->x[r] + selmon->bars[b]->w[r]) {
+ click = br->clickfunc(m, &arg, ev->x - selmon->bars[b]->x[r], ev->y, selmon->bars[b]->w[r], bh);
+ break;
}
}
- #if DWMBLOCKS_PATCH
- if (dwmblockssig == -1)
- dwmblockssig = 0;
- #endif // DWMBLOCKS_PATCH
+ break;
}
- #endif // EXTRABAR_PATCH
- } else if ((c = wintoclient(ev->window))) {
+
+ }
+
+ if (click == ClkRootWin && (c = wintoclient(ev->window))) {
#if FOCUSONCLICK_PATCH
if (focusonwheel || (ev->button != Button4 && ev->button != Button5))
focus(c);
@@ -1084,14 +915,17 @@ buttonpress(XEvent *e)
XAllowEvents(dpy, ReplayPointer, CurrentTime);
click = ClkClientWin;
}
+ fprintf(stderr, "click = %d, dwmblockssig = %d, ev->button = %d, mi = %d\n", click, dwmblockssig, ev->button, mi);
for (i = 0; i < LENGTH(buttons); i++)
if (click == buttons[i].click && buttons[i].func && buttons[i].button == ev->button
- && CLEANMASK(buttons[i].mask) == CLEANMASK(ev->state))
- #if AWESOMEBAR_PATCH
+ && CLEANMASK(buttons[i].mask) == CLEANMASK(ev->state)) {
+ fprintf(stderr, "found click, b.button (%d) == ev->button (%d)\n", buttons[i].button, ev->button);
+ #if BAR_AWESOMEBAR_PATCH
buttons[i].func((click == ClkTagBar || click == ClkWinTitle) && buttons[i].arg.i == 0 ? &arg : &buttons[i].arg);
#else
buttons[i].func(click == ClkTagBar && buttons[i].arg.i == 0 ? &arg : &buttons[i].arg);
#endif
+ }
}
void
@@ -1121,28 +955,28 @@ cleanup(void)
XUngrabKey(dpy, AnyKey, AnyModifier, root);
while (mons)
cleanupmon(mons);
- #if SYSTRAY_PATCH
+ #if BAR_SYSTRAY_PATCH
if (showsystray) {
XUnmapWindow(dpy, systray->win);
XDestroyWindow(dpy, systray->win);
free(systray);
}
- #endif // SYSTRAY_PATCH
+ #endif // BAR_SYSTRAY_PATCH
for (i = 0; i < CurLast; i++)
drw_cur_free(drw, cursor[i]);
- #if STATUS2D_PATCH && !STATUSCOLORS_PATCH
+ #if BAR_STATUS2D_PATCH && !BAR_STATUSCOLORS_PATCH
for (i = 0; i < LENGTH(colors) + 1; i++)
#else
for (i = 0; i < LENGTH(colors); i++)
- #endif // STATUS2D_PATCH
+ #endif // BAR_STATUS2D_PATCH
free(scheme[i]);
free(scheme);
XDestroyWindow(dpy, wmcheckwin);
- #if PANGO_PATCH
+ #if BAR_PANGO_PATCH
drw_font_free(drw->font);
#else
drw_fontset_free(drw->fonts);
- #endif // PANGO_PATCH
+ #endif // BAR_PANGO_PATCH
drw_free(drw);
XSync(dpy, False);
XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime);
@@ -1153,6 +987,7 @@ void
cleanupmon(Monitor *mon)
{
Monitor *m;
+ int b;
if (mon == mons)
mons = mons->next;
@@ -1160,31 +995,30 @@ cleanupmon(Monitor *mon)
for (m = mons; m && m->next != mon; m = m->next);
m->next = mon->next;
}
- XUnmapWindow(dpy, mon->barwin);
- XDestroyWindow(dpy, mon->barwin);
- #if EXTRABAR_PATCH
- if (mon->extrabarwin) {
- XUnmapWindow(dpy, mon->extrabarwin);
- XDestroyWindow(dpy, mon->extrabarwin);
+ for (b = 0; b < LENGTH(mon->bars); b++) {
+ if (mon->bars[b]) {
+ XUnmapWindow(dpy, mon->bars[b]->win);
+ XDestroyWindow(dpy, mon->bars[b]->win);
+ }
+ free(mon->bars[b]);
}
- #endif // EXTRABAR_PATCH
free(mon);
}
void
clientmessage(XEvent *e)
{
- #if SYSTRAY_PATCH
+ #if BAR_SYSTRAY_PATCH
XWindowAttributes wa;
XSetWindowAttributes swa;
- #endif // SYSTRAY_PATCH
+ #endif // BAR_SYSTRAY_PATCH
XClientMessageEvent *cme = &e->xclient;
Client *c = wintoclient(cme->window);
#if FOCUSONNETACTIVE_PATCH
unsigned int i;
#endif // FOCUSONNETACTIVE_PATCH
- #if SYSTRAY_PATCH
+ #if BAR_SYSTRAY_PATCH
if (showsystray && cme->window == systray->win && cme->message_type == netatom[NetSystemTrayOP]) {
/* add systray icons */
if (cme->data.l[1] == SYSTEM_TRAY_REQUEST_DOCK) {
@@ -1195,11 +1029,7 @@ clientmessage(XEvent *e)
return;
}
- /* Clear status bar to avoid artifacts beneath systray icons */
- drw_rect(drw, 0, 0, selmon->ww, bh, 1, 1);
- drw_map(drw, selmon->barwin, 0, 0, selmon->ww, bh);
-
- c->mon = selmon;
+ c->mon = systray->mon;
c->next = systray->icons;
systray->icons = c;
XGetWindowAttributes(dpy, c->win, &wa);
@@ -1222,12 +1052,10 @@ clientmessage(XEvent *e)
sendevent(c->win, netatom[Xembed], StructureNotifyMask, CurrentTime, XEMBED_EMBEDDED_NOTIFY, 0 , systray->win, XEMBED_EMBEDDED_VERSION);
XSync(dpy, False);
setclientstate(c, NormalState);
- drawbar(selmon);
- updatesystray();
}
return;
}
- #endif // SYSTRAY_PATCH
+ #endif // BAR_SYSTRAY_PATCH
if (!c)
return;
@@ -1303,6 +1131,7 @@ configurenotify(XEvent *e)
#endif // !FAKEFULLSCREEN_PATCH
XConfigureEvent *ev = &e->xconfigure;
int dirty;
+ int b;
/* TODO: updategeom handling sucks, needs to be simplified */
if (ev->window == root) {
@@ -1322,19 +1151,9 @@ configurenotify(XEvent *e)
#endif // FAKEFULLSCREEN_CLIENT_PATCH
resizeclient(c, m->mx, m->my, m->mw, m->mh);
#endif // !FAKEFULLSCREEN_PATCH
- #if BARPADDING_PATCH
- XMoveResizeWindow(dpy, m->barwin, m->wx + sp, m->by + vp, m->ww - 2 * sp, bh);
- #else
- XMoveResizeWindow(dpy, m->barwin, m->wx, m->by, m->ww, bh);
- #endif // BARPADDING_PATCH
- #if EXTRABAR_PATCH
- if (m->extrabarwin)
- #if BARPADDING_PATCH
- XMoveResizeWindow(dpy, m->extrabarwin, m->wx + sp, m->eby - vp, m->ww - 2 * sp, bh);
- #else
- XMoveResizeWindow(dpy, m->extrabarwin, m->wx, m->eby, m->ww, bh);
- #endif // BARPADDING_PATCH
- #endif // EXTRABAR_PATCH
+ for (b = 0; b < LENGTH(m->bars); b++)
+ if (m->bars[b])
+ XMoveResizeWindow(dpy, m->bars[b]->win, m->bars[b]->bx, m->bars[b]->by, m->bars[b]->bw, m->bars[b]->bh);
}
focus(NULL);
arrange(NULL);
@@ -1402,9 +1221,7 @@ Monitor *
createmon(void)
{
Monitor *m;
- #if PERTAG_PATCH
int i;
- #endif // PERTAG_PATCH
#if MONITOR_RULES_PATCH
int mc, j;
Monitor *mi;
@@ -1433,6 +1250,12 @@ createmon(void)
m->gappoh = gappoh;
m->gappov = gappov;
#endif // VANITYGAPS_PATCH
+ for (i = 0; i < LENGTH(m->bars); i++)
+ m->bars[i] = ecalloc(1, sizeof(Bar));
+ // for (r = 0; r < LENGTH(barrules); r++) {
+
+ // for (b = 0; b < LENGTH(selmon->bars); b++) {
+
#if MONITOR_RULES_PATCH
for (mc = 0, mi = mons; mi; mi = mi->next, mc++);
for (j = 0; j < LENGTH(monrules); j++) {
@@ -1550,12 +1373,12 @@ destroynotify(XEvent *e)
else if ((c = swallowingclient(ev->window)))
unmanage(c->swallowing, 1);
#endif // SWALLOW_PATCH
- #if SYSTRAY_PATCH
+ #if BAR_SYSTRAY_PATCH
else if (showsystray && (c = wintosystrayicon(ev->window))) {
removesystrayicon(c);
updatesystray();
}
- #endif // SYSTRAY_PATCH
+ #endif // BAR_SYSTRAY_PATCH
}
void
@@ -1599,471 +1422,128 @@ dirtomon(int dir)
void
drawbar(Monitor *m)
{
- int x, w, stw = 0, stp = 0, invert;
- #if ALTERNATIVE_TAGS_PATCH
- int wdelta;
- #endif // ALTERNATIVE_TAGS_PATCH
- #if AWESOMEBAR_PATCH
- int n = 0, scm, remainder, tabw;
- #elif FANCYBAR_PATCH
- int ftw, mw, ew = 0;
- int n = 0;
- #endif // FANCYBAR_PATCH, AWESOMEBAR_PATCH
- #if BARPADDING_PATCH
- stw = 2 * sp;
- #endif // BARPADDING_PATCH
- #if STATUSPADDING_PATCH
- stp = lrpad / 2;
- #endif // STATUSPADDING_PATCH
- #if !HIDEVACANTTAGS_PATCH
- #if !ACTIVETAGINDICATORBAR_PATCH && !ACTIVETAGINDICATORBAR_ALT1_PATCH
- #if PANGO_PATCH
- int boxs = drw->font->h / 9;
- #else
- int boxs = drw->fonts->h / 9;
- #endif // PANGO_PATCH
- #endif // ACTIVETAGINDICATORBAR_PATCH | ACTIVETAGINDICATORBAR_ALT1_PATCH
- #if PANGO_PATCH
- int boxw = drw->font->h / 6 + 2;
- #else
- int boxw = drw->fonts->h / 6 + 2;
- #endif // PANGO_PATCH
- #endif // HIDEVACANTTAGS_PATCH
- unsigned int i, occ = 0, urg = 0;
- #if STATUSCOLORS_PATCH
- char *ts = stext;
- char *tp = stext;
- int tx = 0;
- char ctmp;
- #endif // STATUSCOLORS_PATCH
- Client *c;
+ Monitor *mon;
+ int b, r, mi;
+ int ret_x, w;
+ int rx, lx, rw, lw; // bar size, split between left and right if a center module is added
+ const BarRule *br;
+ Bar *bar;
+
+ for (mi = 0, mon = mons; mon && mon != m; mon = mon->next, mi++); // get the monitor index
+ for (b = LENGTH(m->bars) - 1; b >= 0; b--) {
+ fprintf(stderr, "drawbar, monitor m = %ld, mi = %d, b = %d\n", m, mi, b);
+ bar = m->bars[b];
+ if (!bar->win) {
+ fprintf(stderr, "%s\n", "bar->win does not exist");
+ continue;
+ }
- #if SYSTRAY_PATCH
- if (showsystray && m == systraytomon(m))
- stw += getsystraywidth();
- #endif // SYSTRAY_PATCH
+ rw = lw = bar->bw;
+ rx = lx = 0;
+ fprintf(stderr, "lx = %d, lw = %d\n", lx, lw);
- /* draw status first so it can be overdrawn by tags later */
- #if !STATUSALLMONS_PATCH
- #if STATICSTATUS_PATCH
- if (m == statmon)
- #else
- if (m == selmon)
- #endif // STATICSTATUS_PATCH
- { /* status is only drawn on selected monitor */
- #endif // STATUSALLMONS_PATCH
- #if VTCOLORS_PATCH
- drw_setscheme(drw, scheme[SchemeStatus]);
+ #if BAR_VTCOLORS_PATCH
+ drw_setscheme(drw, scheme[SchemeTagsNorm]);
#else
drw_setscheme(drw, scheme[SchemeNorm]);
- #endif // VTCOLORS_PATCH
- #if STATUSCOLORS_PATCH
- #if STATUSPADDING_PATCH
- m->tw = textw_wosc(stext) + lrpad + 2;
- #else
- m->tw = textw_wosc(stext) + 2;
- #endif // STATUSPADDING_PATCH
- while (1) {
- if ((unsigned int)*ts > LENGTH(colors)) {
- ts++;
+ #endif // BAR_VTCOLORS_PATCH
+ drw_rect(drw, lx, 0, lw, bh, 1, 1);
+ for (r = 0; r < LENGTH(barrules); r++) {
+ br = &barrules[r];
+ if (br->bar != b || (br->monitor == 'A' && m != selmon) || (br->monitor != -1 && br->monitor != mi) || br->drawfunc == NULL)
continue;
- }
- ctmp = *ts;
- *ts = '\0';
- #if PANGO_PATCH
- drw_text(drw, m->ww - m->tw - stw + tx, 0, m->tw - tx, bh, stp, tp, 0, True);
- tx += TEXTWM(tp) - lrpad;
- #else
- drw_text(drw, m->ww - m->tw - stw + tx, 0, m->tw - tx, bh, stp, tp, 0);
- tx += TEXTW(tp) - lrpad;
- #endif // PANGO_PATCH
- if (ctmp == '\0')
- break;
- drw_setscheme(drw, scheme[(unsigned int)(ctmp-1)]);
- *ts = ctmp;
- tp = ++ts;
- }
- #elif STATUS2D_PATCH
- m->tw = drawstatusbar(m, bh, stext, stw, stp, 1);
- #else // STATUSCOLORS_PATCH
- #if STATUSPADDING_PATCH && PANGO_PATCH
- m->tw = TEXTWM(stext);
- #elif STATUSPADDING_PATCH
- m->tw = TEXTW(stext);
- #elif PANGO_PATCH
- m->tw = TEXTWM(stext) - lrpad + 2; /* 2px right padding */
- #else
- m->tw = TEXTW(stext) - lrpad + 2; /* 2px right padding */
- #endif // STATUSPADDING_PATCH | PANGO_PATCH
- #if PANGO_PATCH
- drw_text(drw, m->ww - m->tw - stw, 0, m->tw, bh, stp, stext, 0, True);
- #else
- drw_text(drw, m->ww - m->tw - stw, 0, m->tw, bh, stp, stext, 0);
- #endif // PANGO_PATCH
- #endif // STATUSCOLORS_PATCH | STATUS2D_PATCH
- #if !STATUSALLMONS_PATCH
- }
- #endif // STATUSALLMONS_PATCH
-
- for (c = m->clients; c; c = c->next) {
- #if AWESOMEBAR_PATCH || FANCYBAR_PATCH
- if (ISVISIBLE(c))
- n++;
- #endif // FANCYBAR_PATCH
- #if HIDEVACANTTAGS_PATCH
- occ |= c->tags == 255 ? 0 : c->tags;
- #else
- occ |= c->tags;
- #endif // HIDEVACANTTAGS_PATCH
- if (c->isurgent)
- urg |= c->tags;
- }
- x = 0;
- #if LEFTLAYOUT_PATCH
- w = blw = TEXTW(m->ltsymbol);
- #if VTCOLORS_PATCH
- drw_setscheme(drw, scheme[SchemeTagsNorm]);
- #else
- drw_setscheme(drw, scheme[SchemeNorm]);
- #endif // VTCOLORS_PATCH
- #if PANGO_PATCH
- x = drw_text(drw, x, 0, w, bh, lrpad / 2, m->ltsymbol, 0, False);
- #else
- x = drw_text(drw, x, 0, w, bh, lrpad / 2, m->ltsymbol, 0);
- #endif // PANGO_PATCH
- #endif // LEFTLAYOUT_PATCH
- #if STATUSBUTTON_PATCH
- w = TEXTW(buttonbar);
- #if VTCOLORS_PATCH
- drw_setscheme(drw, scheme[SchemeTagsNorm]);
- #else
- drw_setscheme(drw, scheme[SchemeNorm]);
- #endif // VTCOLORS_PATCH
- #if PANGO_PATCH
- x = drw_text(drw, x, 0, w, bh, lrpad / 2, buttonbar, 0, False);
- #else
- x = drw_text(drw, x, 0, w, bh, lrpad / 2, buttonbar, 0);
- #endif // PANGO_PATCH
- #endif // STATUSBUTTON_PATCH
- #if TAGGRID_PATCH
- if (drawtagmask & DRAWCLASSICTAGS)
- #endif // TAGGRID_PATCH
- for (i = 0; i < LENGTH(tags); i++) {
- #if URGENTBORDER_PATCH
- invert = 0;
- #else
- invert = urg & 1 << i;
- #endif // URGENTBORDER_PATCH
- #if HIDEVACANTTAGS_PATCH
- /* do not draw vacant tags */
- if (!(occ & 1 << i || m->tagset[m->seltags] & 1 << i))
- continue;
- #endif // HIDEVACANTTAGS_PATCH
- w = TEXTW(tags[i]);
- #if ALTERNATIVE_TAGS_PATCH
- wdelta = selmon->alttag ? abs(TEXTW(tags[i]) - TEXTW(tagsalt[i])) / 2 : 0;
- #endif // ALTERNATIVE_TAGS_PATCH
- #if URGENTBORDER_PATCH
- if (m->tagset[m->seltags] & 1 << i)
- #if VTCOLORS_PATCH
- drw_setscheme(drw, scheme[SchemeTagsSel]);
- #else
- drw_setscheme(drw, scheme[SchemeSel]);
- #endif // VTCOLORS_PATCH
- else
- #if VTCOLORS_PATCH
- drw_setscheme(drw, scheme[urg & 1 << i ? SchemeUrg : SchemeTagsNorm]);
- #else
- drw_setscheme(drw, scheme[urg & 1 << i ? SchemeUrg : SchemeNorm]);
- #endif // VTCOLORS_PATCH
- #elif VTCOLORS_PATCH
- drw_setscheme(drw, scheme[m->tagset[m->seltags] & 1 << i ? SchemeTagsSel : SchemeTagsNorm]);
- #else // URGENTBORDER_PATCH
- drw_setscheme(drw, scheme[m->tagset[m->seltags] & 1 << i ? SchemeSel : SchemeNorm]);
- #endif // URGENTBORDER_PATCH
- #if ALTERNATIVE_TAGS_PATCH && PANGO_PATCH
- drw_text(drw, x, 0, w, bh, wdelta + lrpad / 2, (selmon->alttag ? tagsalt[i] : tags[i]), invert, False);
- #elif ALTERNATIVE_TAGS_PATCH
- drw_text(drw, x, 0, w, bh, wdelta + lrpad / 2, (selmon->alttag ? tagsalt[i] : tags[i]), invert);
- #elif PANGO_PATCH
- drw_text(drw, x, 0, w, bh, lrpad / 2, tags[i], invert, False);
- #else
- drw_text(drw, x, 0, w, bh, lrpad / 2, tags[i], invert);
- #endif // ALTERNATIVE_TAGS_PATCH
- #if !HIDEVACANTTAGS_PATCH
- if (occ & 1 << i)
- #if ACTIVETAGINDICATORBAR_PATCH
- drw_rect(drw, x + boxw, 0, w - ( 2 * boxw + 1), boxw,
- #elif ACTIVETAGINDICATORBAR_ALT1_PATCH
- drw_rect(drw, x + boxw, bh - boxw/2, w - ( 2 * boxw + 1), boxw/2,
- #else
- drw_rect(drw, x + boxs, boxs, boxw, boxw,
- #endif // ACTIVETAGINDICATORBAR_PATCH
- m == selmon && selmon->sel && selmon->sel->tags & 1 << i, invert);
- #endif // HIDEVACANTTAGS_PATCH
- x += w;
- }
- #if TAGGRID_PATCH
- if (drawtagmask & DRAWTAGGRID) {
- drawtaggrid(m,&x,occ);
- }
- #endif // TAGGRID_PATCH
- #if !LEFTLAYOUT_PATCH
- w = blw = TEXTW(m->ltsymbol);
- #if VTCOLORS_PATCH
- drw_setscheme(drw, scheme[SchemeTagsNorm]);
- #else
- drw_setscheme(drw, scheme[SchemeNorm]);
- #endif // VTCOLORS_PATCH
- #if PANGO_PATCH
- x = drw_text(drw, x, 0, w, bh, lrpad / 2, m->ltsymbol, 0, False);
- #else
- x = drw_text(drw, x, 0, w, bh, lrpad / 2, m->ltsymbol, 0);
- #endif // PANGO_PATCH
- #endif // LEFTLAYOUT_PATCH
-
- if ((w = m->ww - m->tw - stw - x) > bh)
- {
- #if AWESOMEBAR_PATCH
- if (n > 0) {
- remainder = w % n;
- tabw = w / n;
- for (i = 0, c = m->clients; c; c = c->next, i++) {
- if (!ISVISIBLE(c))
- continue;
- if (m->sel == c)
- #if VTCOLORS_PATCH
- scm = SchemeTitleSel;
- #elif TITLECOLOR_PATCH
- scm = SchemeTitle;
- #else
- scm = SchemeSel;
- #endif // VTCOLORS_PATCH / TITLECOLOR_PATCH
- else if (HIDDEN(c))
- scm = SchemeHid;
- else
- #if VTCOLORS_PATCH
- scm = SchemeTitleNorm;
- #else
- scm = SchemeNorm;
- #endif // VTCOLORS_PATCH
-
- drw_setscheme(drw, scheme[scm]);
- #if PANGO_PATCH
- drw_text(drw, x, 0, tabw + (i < remainder ? 1 : 0), bh, lrpad / 2, c->name, 0, False);
- #else
- drw_text(drw, x, 0, tabw + (i < remainder ? 1 : 0), bh, lrpad / 2, c->name, 0);
- #endif // PANGO_PATCH
- x += tabw;
- }
- } else {
- #if VTCOLORS_PATCH
- drw_setscheme(drw, scheme[SchemeTitleNorm]);
+ #if BAR_VTCOLORS_PATCH
+ drw_setscheme(drw, scheme[SchemeTagsNorm]);
#else
drw_setscheme(drw, scheme[SchemeNorm]);
- #endif // VTCOLORS_PATCH
- drw_rect(drw, x, 0, w, bh, 1, 1);
- }
- #elif FANCYBAR_PATCH
- if (n > 0) {
- ftw = TEXTW(m->sel->name) + lrpad;
- mw = (ftw >= w || n == 1) ? 0 : (w - ftw) / (n - 1);
-
- i = 0;
- for (c = m->clients; c; c = c->next) {
- if (!ISVISIBLE(c) || c == m->sel)
- continue;
- ftw = TEXTW(c->name);
- if (ftw < mw)
- ew += (mw - ftw);
- else
- i++;
+ #endif // BAR_VTCOLORS_PATCH
+ if (br->alignment < BAR_ALIGN_RIGHT_LEFT) {
+ w = br->widthfunc(m, lw);
+ w = MIN(lw, w);
+ } else {
+ w = br->widthfunc(m, rw);
+ w = MIN(rw, w);
}
- if (i > 0)
- mw += ew / i;
-
- for (c = m->clients; c; c = c->next) {
- if (!ISVISIBLE(c))
- continue;
- ftw = MIN(m->sel == c ? w : mw, TEXTW(c->name));
-
- #if VTCOLORS_PATCH
- drw_setscheme(drw, scheme[m->sel == c ? SchemeTitleSel : SchemeTitleNorm]);
- #elif TITLECOLOR_PATCH
- drw_setscheme(drw, scheme[m->sel == c ? SchemeTitle : SchemeNorm]);
- #else
- drw_setscheme(drw, scheme[m->sel == c ? SchemeSel : SchemeNorm]);
- #endif // VTCOLORS_PATCH / TITLECOLOR_PATCH
- if (ftw > 0) /* trap special handling of 0 in drw_text */
- #if PANGO_PATCH
- drw_text(drw, x, 0, ftw, bh, lrpad / 2, c->name, 0, False);
- #else
- drw_text(drw, x, 0, ftw, bh, lrpad / 2, c->name, 0);
- #endif // PANGO_PATCH
- #if !HIDEVACANTTAGS_PATCH
- if (c->isfloating)
- #if ACTIVETAGINDICATORBAR_PATCH
- drw_rect(drw, x + boxw, 0, w - ( 2 * boxw + 1), boxw, c->isfixed, 0);
- #elif ACTIVETAGINDICATORBAR_ALT1_PATCH
- drw_rect(drw, x + boxw, bh - boxw/2, w - ( 2 * boxw + 1), boxw/2,
- #else
- drw_rect(drw, x + boxs, boxs, boxw, boxw, c->isfixed, 0);
- #endif // ACTIVETAGINDICATORBAR_PATCH
- #endif // HIDEVACANTTAGS_PATCH
- x += ftw;
- w -= ftw;
+ switch(br->alignment) {
+ default:
+ case BAR_ALIGN_NONE:
+ case BAR_ALIGN_LEFT_LEFT:
+ case BAR_ALIGN_LEFT:
+ bar->x[r] = lx;
+ bar->w[r] = w;
+ if (lx == rx) {
+ rx += w;
+ rw -= w;
+ }
+ lx += w;
+ lw -= w;
+ break;
+ case BAR_ALIGN_LEFT_RIGHT:
+ case BAR_ALIGN_RIGHT:
+ bar->x[r] = lx + lw - w;
+ bar->w[r] = w;
+ if (lx == rx)
+ rw -= w;
+ lw -= w;
+ break;
+ case BAR_ALIGN_LEFT_CENTER:
+ case BAR_ALIGN_CENTER:
+ bar->x[r] = lx + lw / 2 - w / 2;
+ bar->w[r] = w;
+ if (lx == rx) {
+ rw = rx + rw - bar->x[r] - bar->w[r];
+ rx = bar->x[r] + bar->w[r];
+ }
+ lw = bar->x[r] - lx;
+ break;
+ case BAR_ALIGN_RIGHT_LEFT:
+ bar->x[r] = rx;
+ bar->w[r] = w;
+ if (lx == rx) {
+ lx += w;
+ lw -= w;
+ }
+ rx += w;
+ rw -= w;
+ break;
+ case BAR_ALIGN_RIGHT_RIGHT:
+ bar->x[r] = rx + rw - w;
+ bar->w[r] = w;
+ if (lx == rx)
+ lw -= w;
+ rw -= w;
+ break;
+ case BAR_ALIGN_RIGHT_CENTER:
+ bar->x[r] = rx + rw / 2 - w / 2;
+ bar->w[r] = w;
+ if (lx == rx) {
+ lw = lx + lw - bar->x[r] + bar->w[r];
+ lx = bar->x[r] + bar->w[r];
+ }
+ rw = bar->x[r] - rx;
+ break;
+ }
+ ret_x = br->drawfunc(m, bar->x[r], bar->w[r]);
+ if (ret_x != bar->x[r] + bar->w[r])
+ fprintf(stderr, "%s - %d alignment, expected these to be the same: %d vs %d, w = %d, bx = %d\n", br->name, br->alignment, ret_x, bar->x[r] + bar->w[r], bar->w[r], bar->x[r]);
+
+ if (lw <= 0) { // if left is exhausted, switch to right side
+ lw = rw;
+ lx = rx;
+ rw = 0;
+ rx = 0;
}
}
- #if VTCOLORS_PATCH
- drw_setscheme(drw, scheme[SchemeTitleNorm]);
- #else
- drw_setscheme(drw, scheme[SchemeNorm]);
- #endif // VTCOLORS_PATCH
- drw_rect(drw, x, 0, w, bh, 1, 1);
- #else
- if (m->sel) {
- #if VTCOLORS_PATCH
- drw_setscheme(drw, scheme[m == selmon ? SchemeTitleSel : SchemeTitleNorm]);
- #elif TITLECOLOR_PATCH
- drw_setscheme(drw, scheme[m == selmon ? SchemeTitle : SchemeNorm]);
- #else
- drw_setscheme(drw, scheme[m == selmon ? SchemeSel : SchemeNorm]);
- #endif // VTCOLORS_PATCH / TITLECOLOR_PATCH
- #if IGNORE_XFT_ERRORS_WHEN_DRAWING_TEXT_PATCH
- XSetErrorHandler(xerrordummy);
- #endif // IGNORE_XFT_ERRORS_WHEN_DRAWING_TEXT_PATCH
- #if CENTEREDWINDOWNAME_PATCH
- int mid = (m->ww - TEXTW(m->sel->name)) / 2 - x;
- #if BARPADDING_PATCH && PANGO_PATCH
- drw_text(drw, x, 0, w - 2*sp, bh, mid, m->sel->name, 0, False);
- #elif BARPADDING_PATCH
- drw_text(drw, x, 0, w - 2*sp, bh, mid, m->sel->name, 0);
- #elif PANGO_PATCH
- drw_text(drw, x, 0, w, bh, mid, m->sel->name, 0, False);
- #else
- drw_text(drw, x, 0, w, bh, mid, m->sel->name, 0);
- #endif // BARPADDING_PATCH
- #else
- #if BARPADDING_PATCH && PANGO_PATCH
- drw_text(drw, x, 0, w - 2*sp, bh, lrpad / 2, m->sel->name, 0, False);
- #elif BARPADDING_PATCH
- drw_text(drw, x, 0, w - 2*sp, bh, lrpad / 2, m->sel->name, 0);
- #elif PANGO_PATCH
- drw_text(drw, x, 0, w, bh, lrpad / 2, m->sel->name, 0, False);
- #else
- drw_text(drw, x, 0, w, bh, lrpad / 2, m->sel->name, 0);
- #endif // BARPADDING_PATCH
- #endif // CENTEREDWINDOWNAME_PATCH
- #if IGNORE_XFT_ERRORS_WHEN_DRAWING_TEXT_PATCH
- XSync(dpy, False);
- XSetErrorHandler(xerror);
- #endif // IGNORE_XFT_ERRORS_WHEN_DRAWING_TEXT_PATCH
- #if !HIDEVACANTTAGS_PATCH
- if (m->sel->isfloating)
- #if ACTIVETAGINDICATORBAR_PATCH
- drw_rect(drw, x + boxw, 0, w - ( 2 * boxw + 1), boxw, m->sel->isfixed, 0);
- #elif ACTIVETAGINDICATORBAR_ALT1_PATCH
- drw_rect(drw, x + boxw, bh - boxw/2, w - ( 2 * boxw + 1), boxw/2,
- #else
- drw_rect(drw, x + boxs, boxs, boxw, boxw, m->sel->isfixed, 0);
- #endif // ACTIVETAGINDICATORBAR_PATCH
- #endif // HIDEVACANTTAGS_PATCH
- } else {
- #if VTCOLORS_PATCH
- drw_setscheme(drw, scheme[SchemeTitleNorm]);
- #else
- drw_setscheme(drw, scheme[SchemeNorm]);
- #endif // VTCOLORS_PATCH
- #if BARPADDING_PATCH
- drw_rect(drw, x, 0, w - 2 * sp, bh, 1, 1);
- #else
- drw_rect(drw, x, 0, w, bh, 1, 1);
- #endif // BARPADDING_PATCH
- }
- #endif // FANCYBAR_PATCH, AWESOMEBAR_PATCH
+ drw_map(drw, bar->win, 0, 0, bar->bw, bar->bh);
}
-
- #if AWESOMEBAR_PATCH
- m->bt = n;
- m->btw = w;
- #endif // AWESOMEBAR_PATCH
- drw_map(drw, m->barwin, 0, 0, m->ww - stw, bh);
-
- #if EXTRABAR_PATCH
- #if STATICSTATUS_PATCH
- if (m == statebmon && m->extrabarwin)
- #else
- if (m == selmon && m->extrabarwin)
- #endif // STATICSTATUS_PATCH
- { /* extra status is only drawn on selected monitor */
- #if VTCOLORS_PATCH
- drw_setscheme(drw, scheme[SchemeTitleNorm]);
- #else
- drw_setscheme(drw, scheme[SchemeNorm]);
- #endif // VTCOLORS_PATCH
- drw_rect(drw, 0, 0, m->ww, bh, 1, 1);
-
- #if !STATUS2D_PATCH
- #if PANGO_PATCH
- w = TEXTWM(estext) - lrpad;
- #else
- w = TEXTW(estext) - lrpad;
- #endif // PANGO_PATCH
- if (ebalign == 0)
- x = 0; // left
- else if (ebalign == 1)
- x = m->ww - w; // right
- else
- x = m->ww / 2 - w / 2; // center
-
- #if PANGO_PATCH
- drw_text(drw, x, 0, mons->ww, bh, 0, estext, 0, True);
- #else
- drw_text(drw, x, 0, mons->ww, bh, 0, estext, 0);
- #endif // PANGO_PATCH
- #else
- w = drawstatusbar(m, bh, estext, 0, 0, ebalign);
- #endif // STATUS2D_PATCH
- #if STATUSCMD_PATCH
- m->etw = w;
- #endif // STATUSCMD_PATCH
- drw_map(drw, m->extrabarwin, 0, 0, m->ww, bh);
- }
- #if !STATICSTATUS_PATCH
- else { /* clear status on other monitors */
- #if VTCOLORS_PATCH
- drw_setscheme(drw, scheme[SchemeTitleNorm]);
- #else
- drw_setscheme(drw, scheme[SchemeNorm]);
- #endif // VTCOLORS_PATCH
- drw_rect(drw, 0, 0, m->ww, bh, 1, 1);
- drw_map(drw, m->extrabarwin, 0, 0, m->ww, bh);
- }
- #endif // STATICSTATUS_PATCH
- #endif // EXTRABAR_PATCH
}
void
drawbars(void)
{
Monitor *m;
-
- #if SYSTRAY_PATCH
- if (showsystray && systraypinning == 0) {
- /* Clear status bar to avoid artifacts beneath systray icons */
- drw_setscheme(drw, scheme[SchemeNorm]);
- drw_rect(drw, 0, 0, selmon->ww, bh, 1, 1);
- drw_map(drw, selmon->barwin, 0, 0, selmon->ww, bh);
- }
- #endif // SYSTRAY_PATCH
-
for (m = mons; m; m = m->next)
drawbar(m);
-
- #if SYSTRAY_PATCH
- if (showsystray)
- updatesystray();
- #endif // SYSTRAY_PATCH
}
#if !FOCUSONCLICK_PATCH
@@ -2093,25 +1573,20 @@ expose(XEvent *e)
Monitor *m;
XExposeEvent *ev = &e->xexpose;
- if (ev->count == 0 && (m = wintomon(ev->window))) {
+ if (ev->count == 0 && (m = wintomon(ev->window)))
drawbar(m);
- #if SYSTRAY_PATCH
- if (showsystray && m == selmon)
- updatesystray();
- #endif // SYSTRAY_PATCH
- }
}
void
focus(Client *c)
{
- #if AWESOMEBAR_PATCH
+ #if BAR_AWESOMEBAR_PATCH
if (!c || !ISVISIBLE(c) || HIDDEN(c))
for (c = selmon->stack; c && (!ISVISIBLE(c) || HIDDEN(c)); c = c->snext);
#else
if (!c || !ISVISIBLE(c))
for (c = selmon->stack; c && !ISVISIBLE(c); c = c->snext);
- #endif // AWESOMEBAR_PATCH
+ #endif // BAR_AWESOMEBAR_PATCH
if (selmon->sel && selmon->sel != c)
unfocus(selmon->sel, 0);
if (c) {
@@ -2206,7 +1681,7 @@ getatomprop(Client *c, Atom prop)
unsigned char *p = NULL;
Atom da, atom = None;
- #if SYSTRAY_PATCH
+ #if BAR_SYSTRAY_PATCH
/* FIXME getatomprop should return the number of items and a pointer to
* the stored data instead of this workaround */
Atom req = XA_ATOM;
@@ -2226,7 +1701,7 @@ getatomprop(Client *c, Atom prop)
atom = *(Atom *)p;
XFree(p);
}
- #endif // SYSTRAY_PATCH
+ #endif // BAR_SYSTRAY_PATCH
return atom;
}
@@ -2378,11 +1853,11 @@ killclient(const Arg *arg)
if (!selmon->sel)
#endif // ISPERMANENT_PATCH
return;
- #if SYSTRAY_PATCH
+ #if BAR_SYSTRAY_PATCH
if (!sendevent(selmon->sel->win, wmatom[WMDelete], NoEventMask, wmatom[WMDelete], CurrentTime, 0, 0, 0)) {
#else
if (!sendevent(selmon->sel, wmatom[WMDelete])) {
- #endif // SYSTRAY_PATCH
+ #endif // BAR_SYSTRAY_PATCH
XGrabServer(dpy);
XSetErrorHandler(xerrordummy);
XSetCloseDownMode(dpy, DestroyAll);
@@ -2460,7 +1935,7 @@ manage(Window w, XWindowAttributes *wa)
c->y = c->mon->my + c->mon->mh - HEIGHT(c);
c->x = MAX(c->x, c->mon->mx);
/* only fix client y-offset, if the client center might cover the bar */
- c->y = MAX(c->y, ((c->mon->by == c->mon->my) && (c->x + (c->w / 2) >= c->mon->wx)
+ c->y = MAX(c->y, ((c->mon->bars[0]->by == c->mon->my) && (c->x + (c->w / 2) >= c->mon->wx)
&& (c->x + (c->w / 2) < c->mon->wx + c->mon->ww)) ? bh : c->mon->my);
#if !FLOATPOS_PATCH
#if SETBORDERPX_PATCH
@@ -2527,22 +2002,22 @@ manage(Window w, XWindowAttributes *wa)
(unsigned char *) &(c->win), 1);
XMoveResizeWindow(dpy, c->win, c->x + 2 * sw, c->y, c->w, c->h); /* some windows require this */
- #if AWESOMEBAR_PATCH
+ #if BAR_AWESOMEBAR_PATCH
if (!HIDDEN(c))
setclientstate(c, NormalState);
#else
setclientstate(c, NormalState);
- #endif // AWESOMEBAR_PATCH
+ #endif // BAR_AWESOMEBAR_PATCH
if (c->mon == selmon)
unfocus(selmon->sel, 0);
c->mon->sel = c;
arrange(c->mon);
- #if AWESOMEBAR_PATCH
+ #if BAR_AWESOMEBAR_PATCH
if (!HIDDEN(c))
XMapWindow(dpy, c->win);
#else
XMapWindow(dpy, c->win);
- #endif // AWESOMEBAR_PATCH
+ #endif // BAR_AWESOMEBAR_PATCH
#if SWALLOW_PATCH
if (term)
swallow(term, c);
@@ -2566,13 +2041,13 @@ maprequest(XEvent *e)
static XWindowAttributes wa;
XMapRequestEvent *ev = &e->xmaprequest;
- #if SYSTRAY_PATCH
+ #if BAR_SYSTRAY_PATCH
Client *i;
if (showsystray && (i = wintosystrayicon(ev->window))) {
sendevent(i->win, netatom[Xembed], StructureNotifyMask, CurrentTime, XEMBED_WINDOW_ACTIVATE, 0, systray->win, XEMBED_EMBEDDED_VERSION);
updatesystray();
}
- #endif // SYSTRAY_PATCH
+ #endif // BAR_SYSTRAY_PATCH
if (!XGetWindowAttributes(dpy, ev->window, &wa))
return;
@@ -2685,11 +2160,11 @@ movemouse(const Arg *arg)
Client *
nexttiled(Client *c)
{
- #if AWESOMEBAR_PATCH
+ #if BAR_AWESOMEBAR_PATCH
for (; c && (c->isfloating || !ISVISIBLE(c) || HIDDEN(c)); c = c->next);
#else
for (; c && (c->isfloating || !ISVISIBLE(c)); c = c->next);
- #endif // AWESOMEBAR_PATCH
+ #endif // BAR_AWESOMEBAR_PATCH
return c;
}
@@ -2711,7 +2186,7 @@ propertynotify(XEvent *e)
Window trans;
XPropertyEvent *ev = &e->xproperty;
- #if SYSTRAY_PATCH
+ #if BAR_SYSTRAY_PATCH
if (showsystray && (c = wintosystrayicon(ev->window))) {
if (ev->atom == XA_WM_NORMAL_HINTS) {
updatesizehints(c);
@@ -2721,7 +2196,7 @@ propertynotify(XEvent *e)
updatesystrayiconstate(c, ev);
updatesystray();
}
- #endif // SYSTRAY_PATCH
+ #endif // BAR_SYSTRAY_PATCH
if ((ev->window == root) && (ev->atom == XA_WM_NAME)) {
#if DWMC_PATCH || FSIGNAL_PATCH
@@ -2987,7 +2462,7 @@ restack(Monitor *m)
XRaiseWindow(dpy, m->sel->win);
if (m->lt[m->sellt]->arrange) {
wc.stack_mode = Below;
- wc.sibling = m->barwin;
+ wc.sibling = m->bars[0]->win;
for (c = m->stack; c; c = c->snext)
if (!c->isfloating && ISVISIBLE(c)) {
XConfigureWindow(dpy, c->win, CWSibling|CWStackMode, &wc);
@@ -3101,21 +2576,21 @@ setclientstate(Client *c, long state)
}
int
-#if SYSTRAY_PATCH
+#if BAR_SYSTRAY_PATCH
sendevent(Window w, Atom proto, int mask, long d0, long d1, long d2, long d3, long d4)
#else
sendevent(Client *c, Atom proto)
-#endif // SYSTRAY_PATCH
+#endif // BAR_SYSTRAY_PATCH
{
int n;
Atom *protocols;
- #if SYSTRAY_PATCH
+ #if BAR_SYSTRAY_PATCH
Atom mt;
- #endif // SYSTRAY_PATCH
+ #endif // BAR_SYSTRAY_PATCH
int exists = 0;
XEvent ev;
- #if SYSTRAY_PATCH
+ #if BAR_SYSTRAY_PATCH
if (proto == wmatom[WMTakeFocus] || proto == wmatom[WMDelete]) {
mt = wmatom[WMProtocols];
if (XGetWMProtocols(dpy, w, &protocols, &n)) {
@@ -3133,10 +2608,10 @@ sendevent(Client *c, Atom proto)
exists = protocols[n] == proto;
XFree(protocols);
}
- #endif // SYSTRAY_PATCH
+ #endif // BAR_SYSTRAY_PATCH
if (exists) {
- #if SYSTRAY_PATCH
+ #if BAR_SYSTRAY_PATCH
ev.type = ClientMessage;
ev.xclient.window = w;
ev.xclient.message_type = mt;
@@ -3155,7 +2630,7 @@ sendevent(Client *c, Atom proto)
ev.xclient.data.l[0] = proto;
ev.xclient.data.l[1] = CurrentTime;
XSendEvent(dpy, c->win, False, NoEventMask, &ev);
- #endif // SYSTRAY_PATCH
+ #endif // BAR_SYSTRAY_PATCH
}
return exists;
}
@@ -3169,11 +2644,11 @@ setfocus(Client *c)
XA_WINDOW, 32, PropModeReplace,
(unsigned char *) &(c->win), 1);
}
- #if SYSTRAY_PATCH
+ #if BAR_SYSTRAY_PATCH
sendevent(c->win, wmatom[WMTakeFocus], NoEventMask, wmatom[WMTakeFocus], CurrentTime, 0, 0, 0);
#else
sendevent(c, wmatom[WMTakeFocus]);
- #endif // SYSTRAY_PATCH
+ #endif // BAR_SYSTRAY_PATCH
}
void
@@ -3314,25 +2789,25 @@ setup(void)
sw = DisplayWidth(dpy, screen);
sh = DisplayHeight(dpy, screen);
root = RootWindow(dpy, screen);
- #if ALPHA_PATCH
+ #if BAR_ALPHA_PATCH
xinitvisual();
drw = drw_create(dpy, screen, root, sw, sh, visual, depth, cmap);
#else
drw = drw_create(dpy, screen, root, sw, sh);
- #endif // ALPHA_PATCH
- #if PANGO_PATCH
+ #endif // BAR_ALPHA_PATCH
+ #if BAR_PANGO_PATCH
if (!drw_font_create(drw, font))
#else
if (!drw_fontset_create(drw, fonts, LENGTH(fonts)))
- #endif // PANGO_PATCH
+ #endif // BAR_PANGO_PATCH
die("no fonts could be loaded.");
- #if STATUSPADDING_PATCH && PANGO_PATCH
+ #if BAR_STATUSPADDING_PATCH && BAR_PANGO_PATCH
lrpad = drw->font->h + horizpadbar;
bh = drw->font->h + vertpadbar;
- #elif STATUSPADDING_PATCH
+ #elif BAR_STATUSPADDING_PATCH
lrpad = drw->fonts->h + horizpadbar;
bh = drw->fonts->h + vertpadbar;
- #elif PANGO_PATCH
+ #elif BAR_PANGO_PATCH
lrpad = drw->font->h;
bh = drw->font->h + 2;
#else
@@ -3342,12 +2817,8 @@ setup(void)
#else
bh = drw->fonts->h + 2;
#endif // BAR_HEIGHT_PATCH
- #endif // STATUSPADDING_PATCH
+ #endif // BAR_STATUSPADDING_PATCH
updategeom();
- #if BARPADDING_PATCH
- sp = sidepad;
- vp = (topbar == 1) ? vertpad : - vertpad;
- #endif // BARPADDING_PATCH
/* init atoms */
utf8string = XInternAtom(dpy, "UTF8_STRING", False);
wmatom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False);
@@ -3359,7 +2830,7 @@ setup(void)
#endif // WINDOWROLERULE_PATCH
netatom[NetActiveWindow] = XInternAtom(dpy, "_NET_ACTIVE_WINDOW", False);
netatom[NetSupported] = XInternAtom(dpy, "_NET_SUPPORTED", False);
- #if SYSTRAY_PATCH
+ #if BAR_SYSTRAY_PATCH
netatom[NetSystemTray] = XInternAtom(dpy, "_NET_SYSTEM_TRAY_S0", False);
netatom[NetSystemTrayOP] = XInternAtom(dpy, "_NET_SYSTEM_TRAY_OPCODE", False);
netatom[NetSystemTrayOrientation] = XInternAtom(dpy, "_NET_SYSTEM_TRAY_ORIENTATION", False);
@@ -3369,13 +2840,13 @@ setup(void)
xatom[Manager] = XInternAtom(dpy, "MANAGER", False);
xatom[Xembed] = XInternAtom(dpy, "_XEMBED", False);
xatom[XembedInfo] = XInternAtom(dpy, "_XEMBED_INFO", False);
- #endif // SYSTRAY_PATCH
- #if EWMHTAGS_PATCH
+ #endif // BAR_SYSTRAY_PATCH
+ #if BAR_EWMHTAGS_PATCH
netatom[NetDesktopViewport] = XInternAtom(dpy, "_NET_DESKTOP_VIEWPORT", False);
netatom[NetNumberOfDesktops] = XInternAtom(dpy, "_NET_NUMBER_OF_DESKTOPS", False);
netatom[NetCurrentDesktop] = XInternAtom(dpy, "_NET_CURRENT_DESKTOP", False);
netatom[NetDesktopNames] = XInternAtom(dpy, "_NET_DESKTOP_NAMES", False);
- #endif // EWMHTAGS_PATCH
+ #endif // BAR_EWMHTAGS_PATCH
netatom[NetWMName] = XInternAtom(dpy, "_NET_WM_NAME", False);
netatom[NetWMState] = XInternAtom(dpy, "_NET_WM_STATE", False);
netatom[NetWMCheck] = XInternAtom(dpy, "_NET_SUPPORTING_WM_CHECK", False);
@@ -3400,7 +2871,7 @@ setup(void)
#endif // DRAGCFACT_PATCH
cursor[CurMove] = drw_cur_create(drw, XC_fleur);
/* init appearance */
- #if VTCOLORS_PATCH
+ #if BAR_VTCOLORS_PATCH
get_vt_colors();
if (get_luminance(colors[SchemeTagsNorm][ColBg]) > 50) {
strcpy(colors[SchemeTitleNorm][ColBg], title_bg_light);
@@ -3409,34 +2880,43 @@ setup(void)
strcpy(colors[SchemeTitleNorm][ColBg], title_bg_dark);
strcpy(colors[SchemeTitleSel][ColBg], title_bg_dark);
}
- #endif // VTCOLORS_PATCH
- #if STATUS2D_PATCH && !STATUSCOLORS_PATCH
+ #endif // BAR_VTCOLORS_PATCH
+ #if BAR_STATUS2D_PATCH && !BAR_STATUSCOLORS_PATCH
scheme = ecalloc(LENGTH(colors) + 1, sizeof(Clr *));
- #if ALPHA_PATCH
+ #if BAR_ALPHA_PATCH
scheme[LENGTH(colors)] = drw_scm_create(drw, colors[0], alphas[0], ColCount);
#else
scheme[LENGTH(colors)] = drw_scm_create(drw, colors[0], ColCount);
- #endif // ALPHA_PATCH | FLOAT_BORDER_COLOR_PATCH
+ #endif // BAR_ALPHA_PATCH | FLOAT_BORDER_COLOR_PATCH
#else
scheme = ecalloc(LENGTH(colors), sizeof(Clr *));
- #endif // STATUS2D_PATCH
+ #endif // BAR_STATUS2D_PATCH
for (i = 0; i < LENGTH(colors); i++)
- #if ALPHA_PATCH
+ #if BAR_ALPHA_PATCH
scheme[i] = drw_scm_create(drw, colors[i], alphas[i], ColCount);
#else
scheme[i] = drw_scm_create(drw, colors[i], ColCount);
- #endif // ALPHA_PATCH
- #if SYSTRAY_PATCH
- /* init system tray */
- if (showsystray)
- updatesystray();
- #endif // SYSTRAY_PATCH
+ #endif // BAR_ALPHA_PATCH
+ // #if BAR_SYSTRAY_PATCH
+ // /* init system tray */
+ // if (showsystray)
+ // updatesystray();
+ // #endif // BAR_SYSTRAY_PATCH
/* init bars */
+ // Monitor *m;
+ // for (m = mons; m; m = m->next) {
+ // fprintf(stderr, "updating bar pos\n");
+ // updatebarpos(m);
+ // }
updatebars();
updatestatus();
- #if BARPADDING_PATCH
- updatebarpos(selmon);
- #endif // BARPADDING_PATCH
+
+ // Monitor *m;
+ // for (m = mons; m; m = m->next)
+ // updatebarpos(m);
+ // for ()
+ // updatebarpos(selmon);
+
/* supporting window for NetWMCheck */
wmcheckwin = XCreateSimpleWindow(dpy, root, 0, 0, 1, 1, 0, 0, 0);
XChangeProperty(dpy, wmcheckwin, netatom[NetWMCheck], XA_WINDOW, 32,
@@ -3448,12 +2928,12 @@ setup(void)
/* EWMH support per view */
XChangeProperty(dpy, root, netatom[NetSupported], XA_ATOM, 32,
PropModeReplace, (unsigned char *) netatom, NetLast);
- #if EWMHTAGS_PATCH
+ #if BAR_EWMHTAGS_PATCH
setnumdesktops();
setcurrentdesktop();
setdesktopnames();
setviewport();
- #endif // EWMHTAGS_PATCH
+ #endif // BAR_EWMHTAGS_PATCH
XDeleteProperty(dpy, root, netatom[NetClientList]);
/* select events */
wa.cursor = cursor[CurNormal]->cursor;
@@ -3536,14 +3016,14 @@ sigchld(int unused)
void
spawn(const Arg *arg)
{
- #if STATUSCMD_PATCH && !DWMBLOCKS_PATCH
+ #if BAR_STATUSCMD_PATCH && !BAR_DWMBLOCKS_PATCH
char *cmd = NULL;
- #endif // STATUSCMD_PATCH | DWMBLOCKS_PATCH
+ #endif // BAR_STATUSCMD_PATCH | BAR_DWMBLOCKS_PATCH
#if !NODMENU_PATCH
if (arg->v == dmenucmd)
dmenumon[0] = '0' + selmon->num;
#endif // NODMENU_PATCH
- #if STATUSCMD_PATCH && !DWMBLOCKS_PATCH
+ #if BAR_STATUSCMD_PATCH && !BAR_DWMBLOCKS_PATCH
#if !NODMENU_PATCH
else if (arg->v == statuscmd)
#else
@@ -3558,7 +3038,7 @@ spawn(const Arg *arg)
cmd[LENGTH(statusexport)-3] = '0' + lastbutton;
statuscmd[2] = cmd;
}
- #endif // STATUSCMD_PATCH | DWMBLOCKS_PATCH
+ #endif // BAR_STATUSCMD_PATCH | BAR_DWMBLOCKS_PATCH
if (fork() == 0) {
if (dpy)
@@ -3603,9 +3083,9 @@ spawn(const Arg *arg)
perror(" failed");
exit(EXIT_SUCCESS);
}
- #if STATUSCMD_PATCH && !DWMBLOCKS_PATCH
+ #if BAR_STATUSCMD_PATCH && !BAR_DWMBLOCKS_PATCH
free(cmd);
- #endif // STATUSCMD_PATCH | DWMBLOCKS_PATCH
+ #endif // BAR_STATUSCMD_PATCH | BAR_DWMBLOCKS_PATCH
}
void
@@ -3667,42 +3147,20 @@ tagmon(const Arg *arg)
void
togglebar(const Arg *arg)
{
- #if HOLDBAR_PATCH && PERTAG_PATCH && PERTAGBAR_PATCH
+ int b;
+ #if BAR_HOLDBAR_PATCH && PERTAG_PATCH && PERTAGBAR_PATCH
selmon->showbar = selmon->pertag->showbars[selmon->pertag->curtag] = (selmon->showbar == 2 ? 1 : !selmon->showbar);
- #elif HOLDBAR_PATCH
+ #elif BAR_HOLDBAR_PATCH
selmon->showbar = (selmon->showbar == 2 ? 1 : !selmon->showbar);
#elif PERTAG_PATCH && PERTAGBAR_PATCH
selmon->showbar = selmon->pertag->showbars[selmon->pertag->curtag] = !selmon->showbar;
#else
selmon->showbar = !selmon->showbar;
- #endif // HOLDBAR_PATCH | PERTAG_PATCH
+ #endif // BAR_HOLDBAR_PATCH | PERTAG_PATCH
updatebarpos(selmon);
- #if BARPADDING_PATCH
- XMoveResizeWindow(dpy, selmon->barwin, selmon->wx + sp, selmon->by + vp, selmon->ww - 2*sp, bh);
- #else
- XMoveResizeWindow(dpy, selmon->barwin, selmon->wx, selmon->by, selmon->ww, bh);
- #endif // BARPADDING_PATCH
- #if EXTRABAR_PATCH
- if (selmon->extrabarwin)
- #if BARPADDING_PATCH
- XMoveResizeWindow(dpy, selmon->extrabarwin, selmon->wx + sp, selmon->eby - vp, selmon->ww - 2*sp, bh);
- #else
- XMoveResizeWindow(dpy, selmon->extrabarwin, selmon->wx, selmon->eby, selmon->ww, bh);
- #endif // BARPADDING_PATCH
- #endif // EXTRABAR_PATCH
- #if SYSTRAY_PATCH
- if (showsystray && selmon == systraytomon(selmon) ) {
- XWindowChanges wc;
- if (!selmon->showbar)
- wc.y = -bh;
- else if (selmon->showbar) {
- wc.y = 0;
- if (!selmon->topbar)
- wc.y = selmon->mh - bh;
- }
- XConfigureWindow(dpy, systray->win, CWY, &wc);
- }
- #endif // SYSTRAY_PATCH
+ for (b = 0; b < LENGTH(selmon->bars); b++)
+ if (selmon->bars[b]->win)
+ XMoveResizeWindow(dpy, selmon->bars[b]->win, selmon->bars[b]->bx, selmon->bars[b]->by, selmon->bars[b]->bw, selmon->bars[b]->bh);
arrange(selmon);
}
@@ -3772,9 +3230,9 @@ toggletag(const Arg *arg)
#endif // SWAPFOCUS_PATCH
arrange(selmon);
}
- #if EWMHTAGS_PATCH
+ #if BAR_EWMHTAGS_PATCH
updatecurrentdesktop();
- #endif // EWMHTAGS_PATCH
+ #endif // BAR_EWMHTAGS_PATCH
}
void
@@ -3851,9 +3309,9 @@ toggleview(const Arg *arg)
#if !EMPTYVIEW_PATCH
}
#endif // EMPTYVIEW_PATCH
- #if EWMHTAGS_PATCH
+ #if BAR_EWMHTAGS_PATCH
updatecurrentdesktop();
- #endif // EWMHTAGS_PATCH
+ #endif // BAR_EWMHTAGS_PATCH
}
void
@@ -3951,102 +3409,52 @@ unmapnotify(XEvent *e)
setclientstate(c, WithdrawnState);
else
unmanage(c, 0);
- #if SYSTRAY_PATCH
+ #if BAR_SYSTRAY_PATCH
} else if (showsystray && (c = wintosystrayicon(ev->window))) {
/* KLUDGE! sometimes icons occasionally unmap their windows, but do
* _not_ destroy them. We map those windows back */
XMapRaised(dpy, c->win);
removesystrayicon(c);
updatesystray();
- #endif // SYSTRAY_PATCH
+ #endif // BAR_SYSTRAY_PATCH
}
}
void
updatebars(void)
{
- unsigned int w;
+ int b;
Monitor *m;
XSetWindowAttributes wa = {
.override_redirect = True,
- #if ALPHA_PATCH
+ #if BAR_ALPHA_PATCH
.background_pixel = 0,
.border_pixel = 0,
.colormap = cmap,
#else
.background_pixmap = ParentRelative,
- #endif // ALPHA_PATCH
+ #endif // BAR_ALPHA_PATCH
.event_mask = ButtonPressMask|ExposureMask
};
XClassHint ch = {"dwm", "dwm"};
for (m = mons; m; m = m->next) {
- if (!m->barwin) {
- w = m->ww;
- #if SYSTRAY_PATCH
- if (showsystray && m == systraytomon(m))
- w -= getsystraywidth();
- #endif // SYSTRAY_PATCH
- #if ALPHA_PATCH
- #if BARPADDING_PATCH
- m->barwin = XCreateWindow(dpy, root, m->wx + sp, m->by + vp, w - 2*sp, bh, 0, depth,
- InputOutput, visual,
- CWOverrideRedirect|CWBackPixel|CWBorderPixel|CWColormap|CWEventMask, &wa);
- #else
- m->barwin = XCreateWindow(dpy, root, m->wx, m->by, w, bh, 0, depth,
- InputOutput, visual,
- CWOverrideRedirect|CWBackPixel|CWBorderPixel|CWColormap|CWEventMask, &wa);
- #endif // BARPADDING_PATCH
- #else
- #if BARPADDING_PATCH
- m->barwin = XCreateWindow(dpy, root, m->wx + sp, m->by + vp, w - 2*sp, bh, 0, DefaultDepth(dpy, screen),
- CopyFromParent, DefaultVisual(dpy, screen),
- CWOverrideRedirect|CWBackPixmap|CWEventMask, &wa);
- #else
- m->barwin = XCreateWindow(dpy, root, m->wx, m->by, w, bh, 0, DefaultDepth(dpy, screen),
- CopyFromParent, DefaultVisual(dpy, screen),
- CWOverrideRedirect|CWBackPixmap|CWEventMask, &wa);
- #endif // BARPADDING_PATCH
- #endif // ALPHA_PATCH
- XDefineCursor(dpy, m->barwin, cursor[CurNormal]->cursor);
- #if SYSTRAY_PATCH
- if (showsystray && m == systraytomon(m))
- XMapRaised(dpy, systray->win);
- #endif // SYSTRAY_PATCH
- XMapRaised(dpy, m->barwin);
- XSetClassHint(dpy, m->barwin, &ch);
- }
- #if EXTRABAR_PATCH
- #if STATICSTATUS_PATCH
- if (m == statebmon && !m->extrabarwin)
- #else
- if (!m->extrabarwin)
- #endif // STATICSTATUS_PATCH
- {
- #if ALPHA_PATCH
- #if BARPADDING_PATCH
- m->extrabarwin = XCreateWindow(dpy, root, m->wx + sp, m->eby - vp, m->ww - 2*sp, bh, 0, depth,
- InputOutput, visual,
- CWOverrideRedirect|CWBackPixel|CWBorderPixel|CWColormap|CWEventMask, &wa);
- #else
- m->extrabarwin = XCreateWindow(dpy, root, m->wx, m->eby, m->ww, bh, 0, depth,
- InputOutput, visual,
- CWOverrideRedirect|CWBackPixel|CWBorderPixel|CWColormap|CWEventMask, &wa);
- #endif // BARPADDING_PATCH
- #elif BARPADDING_PATCH
- m->extrabarwin = XCreateWindow(dpy, root, m->wx + sp, m->eby - vp, m->ww - 2*sp, bh, 0, DefaultDepth(dpy, screen),
- CopyFromParent, DefaultVisual(dpy, screen),
- CWOverrideRedirect|CWBackPixmap|CWEventMask, &wa);
- #else
- m->extrabarwin = XCreateWindow(dpy, root, m->wx, m->eby, m->ww, bh, 0, DefaultDepth(dpy, screen),
- CopyFromParent, DefaultVisual(dpy, screen),
- CWOverrideRedirect|CWBackPixmap|CWEventMask, &wa);
- #endif // ALPHA_PATCH
- XDefineCursor(dpy, m->extrabarwin, cursor[CurNormal]->cursor);
- XMapRaised(dpy, m->extrabarwin);
- XSetClassHint(dpy, m->extrabarwin, &ch);
+ for (b = 0; b < LENGTH(m->bars); b++) {
+ if (!m->bars[b]->win) { // TODO add static status controls to not create / show extra bar?
+ fprintf(stderr, "creating bar %d at pos x = %d, y = %d, w = %d, h = %d\n", b, m->bars[b]->bx, m->bars[b]->by, m->bars[b]->bw, m->bars[b]->bh);
+ #if BAR_ALPHA_PATCH
+ m->bars[b]->win = XCreateWindow(dpy, root, m->bars[b]->bx, m->bars[b]->by, m->bars[b]->bw, m->bars[b]->bh, 0, depth,
+ InputOutput, visual,
+ CWOverrideRedirect|CWBackPixel|CWBorderPixel|CWColormap|CWEventMask, &wa);
+ #else
+ m->bars[b]->win = XCreateWindow(dpy, root, m->bars[b]->bx, m->bars[b]->by, m->bars[b]->bw, m->bars[b]->bh, 0, DefaultDepth(dpy, screen),
+ CopyFromParent, DefaultVisual(dpy, screen),
+ CWOverrideRedirect|CWBackPixmap|CWEventMask, &wa);
+ #endif // BAR_ALPHA_PATCH
+ XDefineCursor(dpy, m->bars[b]->win, cursor[CurNormal]->cursor);
+ XMapRaised(dpy, m->bars[b]->win);
+ XSetClassHint(dpy, m->bars[b]->win, &ch);
+ }
}
- #endif // EXTRABAR_PATCH
-
}
}
@@ -4055,54 +3463,36 @@ updatebarpos(Monitor *m)
{
m->wy = m->my;
m->wh = m->mh;
- #if EXTRABAR_PATCH
- int num_bars;
- #if STATICSTATUS_PATCH
- int has_extrabar = (m == statebmon);
- #else
- int has_extrabar = 1;
- #endif // STATICSTATUS_PATCH
- num_bars = m->showbar * (1 + has_extrabar);
- #if BARPADDING_PATCH
- m->wh = m->wh - vertpad * num_bars - bh * num_bars;
- m->wy = m->showbar ? m->wy + bh + vertpad: m->wy;
- if (m->showbar) {
- m->by = m->topbar ? m->wy - bh - vertpad: m->wy + m->wh + vertpad;
- if (has_extrabar)
- m->eby = m->topbar ? m->wy + m->wh + vertpad: m->wy - bh - vertpad;
- } else {
- m->by = -bh - vertpad;
- if (has_extrabar)
- m->eby = -bh - vertpad;
- }
+ int num_bars, b;
+ #if BAR_PADDING_PATCH
+ int y_pad = vertpad;
+ int x_pad = sidepad;
#else
- m->wh = m->wh - bh * num_bars;
- m->wy = m->showbar ? m->wy + bh : m->wy;
+ int y_pad = 0;
+ int x_pad = 0;
+ #endif // BAR_PADDING_PATCH
+
+ // for (num_bars = 0; num_bars < LENGTH(m->bars) && m->bars[num_bars]->win; num_bars++);
+ num_bars = LENGTH(m->bars);
+ fprintf(stderr, "num_bars = %d\n", num_bars);
if (m->showbar) {
- m->by = m->topbar ? m->wy - bh : m->wy + m->wh;
- if (has_extrabar)
- m->eby = m->topbar ? m->wy + m->wh : m->wy - bh;
- } else {
- m->by = -bh;
- if (has_extrabar)
- m->eby = -bh;
+ m->wh = m->wh - y_pad * num_bars - bh * num_bars;
+ m->wy = m->wy + bh + y_pad;
+ }
+
+ for (b = 0; b < num_bars; b++) {
+ fprintf(stderr, "setting bx to xpad %d, b = %d\n", m->mx + x_pad, b);
+ m->bars[b]->bx = m->mx + x_pad;
+ m->bars[b]->bw = m->ww - 2 * x_pad;
+ m->bars[b]->bh = bh;
+ if (m->showbar) {
+ fprintf(stderr, "eh? %d, b = %d\n", topbar == b, b);
+ m->bars[b]->by = m->topbar == b ? m->wy + m->wh : m->wy - bh;
+ } else {
+ m->bars[b]->by = -bh - y_pad;
+ }
+ fprintf(stderr, "finished with bar, bx = %d, by = %d, bw = %d, bh = %d, m = %ld\n", m->bars[b]->bx, m->bars[b]->by, m->bars[b]->bw, m->bars[b]->bh, m);
}
- #endif // BARPADDING_PATCH
- #elif BARPADDING_PATCH
- if (m->showbar) {
- m->wh = m->wh - vertpad - bh;
- m->by = m->topbar ? m->wy : m->wy + m->wh + vertpad;
- m->wy = m->topbar ? m->wy + bh + vp : m->wy;
- } else
- m->by = -bh - vp;
- #else
- if (m->showbar) {
- m->wh -= bh;
- m->by = m->topbar ? m->wy : m->wy + m->wh;
- m->wy = m->topbar ? m->wy + bh : m->wy;
- } else
- m->by = -bh;
- #endif // EXTRABAR_PATCH
}
void
@@ -4152,14 +3542,14 @@ updategeom(void)
mons = createmon();
}
for (i = 0, m = mons; i < nn && m; m = m->next, i++) {
- #if STATICSTATUS_PATCH && !STATUSALLMONS_PATCH
+ #if BAR_STATICSTATUS_PATCH && !BAR_STATUSALLMONS_PATCH
if (i == statmonval)
statmon = m;
- #if EXTRABAR_PATCH
+ #if BAR_EXTRABAR_PATCH
if (i == statebmonval)
statebmon = m;
- #endif // EXTRABAR_PATCH
- #endif // STATICSTATUS_PATCH
+ #endif // BAR_EXTRABAR_PATCH
+ #endif // BAR_STATICSTATUS_PATCH
if (i >= n
|| unique[i].x_org != m->mx || unique[i].y_org != m->my
|| unique[i].width != m->mw || unique[i].height != m->mh)
@@ -4186,14 +3576,14 @@ updategeom(void)
}
if (m == selmon)
selmon = mons;
- #if STATICSTATUS_PATCH && !STATUSALLMONS_PATCH
+ #if BAR_STATICSTATUS_PATCH && !BAR_STATUSALLMONS_PATCH
if (m == statmon)
statmon = mons;
- #if EXTRABAR_PATCH
+ #if BAR_EXTRABAR_PATCH
if (m == statebmon)
statebmon = mons;
- #endif // EXTRABAR_PATCH
- #endif // STATICSTATUS_PATCH
+ #endif // BAR_EXTRABAR_PATCH
+ #endif // BAR_STATICSTATUS_PATCH
cleanupmon(m);
}
}
@@ -4210,14 +3600,14 @@ updategeom(void)
updatebarpos(mons);
}
}
- #if STATICSTATUS_PATCH && !STATUSALLMONS_PATCH
+ #if BAR_STATICSTATUS_PATCH && !BAR_STATUSALLMONS_PATCH
if (!statmon)
statmon = mons;
- #if EXTRABAR_PATCH
+ #if BAR_EXTRABAR_PATCH
if (!statebmon)
statebmon = mons;
- #endif // EXTRABAR_PATCH
- #endif // STATICSTATUS_PATCH
+ #endif // BAR_EXTRABAR_PATCH
+ #endif // BAR_STATICSTATUS_PATCH
if (dirty) {
selmon = mons;
selmon = wintomon(root);
@@ -4301,10 +3691,10 @@ updatesizehints(Client *c)
void
updatestatus(void)
{
- #if STATUSALLMONS_PATCH
+ #if BAR_STATUSALLMONS_PATCH
Monitor* m;
- #endif // STATUSALLMONS_PATCH
- #if EXTRABAR_PATCH
+ #endif // BAR_STATUSALLMONS_PATCH
+ #if BAR_EXTRABAR_PATCH
if (!gettextprop(root, XA_WM_NAME, rawstext, sizeof(rawstext))) {
strcpy(stext, "dwm-"VERSION);
estext[0] = '\0';
@@ -4312,22 +3702,22 @@ updatestatus(void)
char *e = strchr(rawstext, statussep);
if (e) {
*e = '\0'; e++;
- #if STATUSCMD_PATCH
+ #if BAR_STATUSCMD_PATCH
strncpy(rawestext, e, sizeof(estext) - 1);
copyvalidchars(estext, rawestext);
#else
strncpy(estext, e, sizeof(estext) - 1);
- #endif // STATUSCMD_PATCH
+ #endif // BAR_STATUSCMD_PATCH
} else {
estext[0] = '\0';
}
- #if STATUSCMD_PATCH
+ #if BAR_STATUSCMD_PATCH
copyvalidchars(stext, rawstext);
#else
strncpy(stext, rawstext, sizeof(stext) - 1);
- #endif // STATUSCMD_PATCH
+ #endif // BAR_STATUSCMD_PATCH
}
- #elif STATUSCMD_PATCH
+ #elif BAR_STATUSCMD_PATCH
if (!gettextprop(root, XA_WM_NAME, rawstext, sizeof(rawstext)))
strcpy(stext, "dwm-"VERSION);
else
@@ -4335,23 +3725,19 @@ updatestatus(void)
#else
if (!gettextprop(root, XA_WM_NAME, stext, sizeof(stext)))
strcpy(stext, "dwm-"VERSION);
- #endif // EXTRABAR_PATCH
- #if STATUSALLMONS_PATCH
+ #endif // BAR_EXTRABAR_PATCH
+ #if BAR_STATUSALLMONS_PATCH
for (m = mons; m; m = m->next)
drawbar(m);
- #elif STATICSTATUS_PATCH
+ #elif BAR_STATICSTATUS_PATCH
drawbar(statmon);
- #if EXTRABAR_PATCH
+ #if BAR_EXTRABAR_PATCH
if (statmon != statebmon)
drawbar(statebmon);
- #endif // EXTRABAR_PATCH
+ #endif // BAR_EXTRABAR_PATCH
#else
drawbar(selmon);
- #endif // STATUSALLMONS_PATCH | STATICSTATUS_PATCH
- #if SYSTRAY_PATCH
- if (showsystray)
- updatesystray();
- #endif // SYSTRAY_PATCH
+ #endif // BAR_STATUSALLMONS_PATCH | BAR_STATICSTATUS_PATCH
}
void
@@ -4417,9 +3803,9 @@ view(const Arg *arg)
selmon->pertag->prevclient[selmon->pertag->curtag] = unmodified;
#endif // SWAPFOCUS_PATCH
arrange(selmon);
- #if EWMHTAGS_PATCH
+ #if BAR_EWMHTAGS_PATCH
updatecurrentdesktop();
- #endif // EWMHTAGS_PATCH
+ #endif // BAR_EWMHTAGS_PATCH
}
Client *
@@ -4438,19 +3824,16 @@ wintoclient(Window w)
Monitor *
wintomon(Window w)
{
- int x, y;
+ int x, y, b;
Client *c;
Monitor *m;
if (w == root && getrootptr(&x, &y))
return recttomon(x, y, 1, 1);
for (m = mons; m; m = m->next)
- #if EXTRABAR_PATCH
- if (w == m->barwin || w == m->extrabarwin)
- #else
- if (w == m->barwin)
- #endif // EXTRABAR_PATCH
- return m;
+ for (b = 0; b < LENGTH(m->bars); b++)
+ if (w == m->bars[b]->win)
+ return m;
if ((c = wintoclient(w)))
return c->mon;
return selmon;
@@ -4584,12 +3967,12 @@ main(int argc, char *argv[])
else if (!strcmp("-h", argv[i]) || !strcmp("--help", argv[i]))
die(help());
else if (!strcmp("-fn", argv[i])) /* font set */
- #if PANGO_PATCH
+ #if BAR_PANGO_PATCH
strcpy(font, argv[++i]);
#else
fonts[0] = argv[++i];
- #endif // PANGO_PATCH
- #if !VTCOLORS_PATCH
+ #endif // BAR_PANGO_PATCH
+ #if !BAR_VTCOLORS_PATCH
else if (!strcmp("-nb", argv[i])) /* normal background color */
colors[SchemeNorm][1] = argv[++i];
else if (!strcmp("-nf", argv[i])) /* normal foreground color */
@@ -4598,7 +3981,7 @@ main(int argc, char *argv[])
colors[SchemeSel][1] = argv[++i];
else if (!strcmp("-sf", argv[i])) /* selected foreground color */
colors[SchemeSel][0] = argv[++i];
- #endif // !VTCOLORS_PATCH
+ #endif // !BAR_VTCOLORS_PATCH
#if NODMENU_PATCH
else if (!strcmp("-df", argv[i])) /* dmenu font */
dmenucmd[2] = argv[++i];
@@ -4638,10 +4021,10 @@ main(int argc, char *argv[])
die("dwm: cannot get xcb connection\n");
#endif // SWALLOW_PATCH
checkotherwm();
- #if XRDB_PATCH && !VTCOLORS_PATCH
+ #if XRDB_PATCH && !BAR_VTCOLORS_PATCH
XrmInitialize();
loadxrdb();
- #endif // XRDB_PATCH && !VTCOLORS_PATCH
+ #endif // XRDB_PATCH && !BAR_VTCOLORS_PATCH
setup();
#ifdef __OpenBSD__
diff --git a/patch/awesomebar.c b/patch/awesomebar.c
deleted file mode 100644
index e21f4f1..0000000
--- a/patch/awesomebar.c
+++ /dev/null
@@ -1,67 +0,0 @@
-void
-hide(Client *c) {
-
- if (!c || HIDDEN(c))
- return;
-
- Window w = c->win;
- static XWindowAttributes ra, ca;
-
- // more or less taken directly from blackbox's hide() function
- XGrabServer(dpy);
- XGetWindowAttributes(dpy, root, &ra);
- XGetWindowAttributes(dpy, w, &ca);
- // prevent UnmapNotify events
- XSelectInput(dpy, root, ra.your_event_mask & ~SubstructureNotifyMask);
- XSelectInput(dpy, w, ca.your_event_mask & ~StructureNotifyMask);
- XUnmapWindow(dpy, w);
- setclientstate(c, IconicState);
- XSelectInput(dpy, root, ra.your_event_mask);
- XSelectInput(dpy, w, ca.your_event_mask);
- XUngrabServer(dpy);
-
- focus(c->snext);
- arrange(c->mon);
-}
-
-void
-show(Client *c)
-{
- if (!c || !HIDDEN(c))
- return;
-
- XMapWindow(dpy, c->win);
- setclientstate(c, NormalState);
- arrange(c->mon);
-}
-
-void
-togglewin(const Arg *arg)
-{
- Client *c = (Client*)arg->v;
- if (c == selmon->sel)
- hide(c);
- else {
- if (HIDDEN(c))
- show(c);
- focus(c);
- restack(selmon);
- }
-}
-
-void
-showhideclient(const Arg *arg)
-{
- Client *c = (Client*)arg->v;
- if (!c)
- c = selmon->sel;
- if (!c)
- return;
-
- if (HIDDEN(c)) {
- show(c);
- restack(selmon);
- } else {
- hide(c);
- }
-} \ No newline at end of file
diff --git a/patch/awesomebar.h b/patch/awesomebar.h
deleted file mode 100644
index 8cf46f4..0000000
--- a/patch/awesomebar.h
+++ /dev/null
@@ -1,4 +0,0 @@
-static void hide(Client *c);
-static void show(Client *c);
-static void togglewin(const Arg *arg);
-static void showhideclient(const Arg *arg); \ No newline at end of file
diff --git a/patch/alpha.c b/patch/bar_alpha.c
index 7da7215..7da7215 100644
--- a/patch/alpha.c
+++ b/patch/bar_alpha.c
diff --git a/patch/alpha.h b/patch/bar_alpha.h
index 3c81522..3c81522 100644
--- a/patch/alpha.h
+++ b/patch/bar_alpha.h
diff --git a/patch/alternativetags.c b/patch/bar_alternativetags.c
index 3c329bc..3c329bc 100644
--- a/patch/alternativetags.c
+++ b/patch/bar_alternativetags.c
diff --git a/patch/alternativetags.h b/patch/bar_alternativetags.h
index 2c130f3..2c130f3 100644
--- a/patch/alternativetags.h
+++ b/patch/bar_alternativetags.h
diff --git a/patch/bar_awesomebar.c b/patch/bar_awesomebar.c
new file mode 100644
index 0000000..85ec003
--- /dev/null
+++ b/patch/bar_awesomebar.c
@@ -0,0 +1,146 @@
+int
+width_awesomebar(Monitor *m, int max_width)
+{
+ return max_width;
+}
+
+int
+draw_awesomebar(Monitor *m, int x_orig, int w)
+{
+ int n = 0, scm, remainder = 0, tabw;
+ unsigned int i, x = x_orig;
+ Client *c;
+ for (c = m->clients; c; c = c->next)
+ if (ISVISIBLE(c))
+ n++;
+
+ if (n > 0) {
+ remainder = w % n;
+ tabw = w / n;
+ for (i = 0, c = m->clients; c; c = c->next, i++) {
+ if (!ISVISIBLE(c))
+ continue;
+ if (m->sel == c)
+ #if BAR_VTCOLORS_PATCH
+ scm = SchemeTitleSel;
+ #elif BAR_TITLECOLOR_PATCH
+ scm = SchemeTitle;
+ #else
+ scm = SchemeSel;
+ #endif // BAR_VTCOLORS_PATCH / BAR_TITLECOLOR_PATCH
+ else if (HIDDEN(c))
+ scm = SchemeHid;
+ else
+ #if BAR_VTCOLORS_PATCH
+ scm = SchemeTitleNorm;
+ #else
+ scm = SchemeNorm;
+ #endif // BAR_VTCOLORS_PATCH
+
+ drw_setscheme(drw, scheme[scm]);
+ #if BAR_PANGO_PATCH
+ drw_text(drw, x, 0, tabw + (i < remainder ? 1 : 0), bh, lrpad / 2, c->name, 0, False);
+ #else
+ drw_text(drw, x, 0, tabw + (i < remainder ? 1 : 0), bh, lrpad / 2, c->name, 0);
+ #endif // BAR_PANGO_PATCH
+ x += tabw;
+ }
+ }
+ return x_orig + w;
+}
+
+int
+click_awesomebar(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h)
+{
+ int x = 0, n = 0;
+ Client *c;
+
+ for (c = m->clients; c; c = c->next)
+ if (ISVISIBLE(c))
+ n++;
+
+ c = m->clients;
+
+ do {
+ if (!c || !ISVISIBLE(c))
+ continue;
+ else
+ x += (1.0 / (double)n) * rel_w;
+ } while (c && rel_x > x && (c = c->next));
+
+ if (c) {
+ arg->v = c;
+ return ClkWinTitle;
+ }
+ return -1;
+}
+
+void
+hide(Client *c) {
+
+ if (!c || HIDDEN(c))
+ return;
+
+ Window w = c->win;
+ static XWindowAttributes ra, ca;
+
+ // more or less taken directly from blackbox's hide() function
+ XGrabServer(dpy);
+ XGetWindowAttributes(dpy, root, &ra);
+ XGetWindowAttributes(dpy, w, &ca);
+ // prevent UnmapNotify events
+ XSelectInput(dpy, root, ra.your_event_mask & ~SubstructureNotifyMask);
+ XSelectInput(dpy, w, ca.your_event_mask & ~StructureNotifyMask);
+ XUnmapWindow(dpy, w);
+ setclientstate(c, IconicState);
+ XSelectInput(dpy, root, ra.your_event_mask);
+ XSelectInput(dpy, w, ca.your_event_mask);
+ XUngrabServer(dpy);
+
+ focus(c->snext);
+ arrange(c->mon);
+}
+
+void
+show(Client *c)
+{
+ if (!c || !HIDDEN(c))
+ return;
+
+ XMapWindow(dpy, c->win);
+ setclientstate(c, NormalState);
+ arrange(c->mon);
+}
+
+void
+togglewin(const Arg *arg)
+{
+ Client *c = (Client*)arg->v;
+ if (!c)
+ return;
+ if (c == selmon->sel)
+ hide(c);
+ else {
+ if (HIDDEN(c))
+ show(c);
+ focus(c);
+ restack(selmon);
+ }
+}
+
+void
+showhideclient(const Arg *arg)
+{
+ Client *c = (Client*)arg->v;
+ if (!c)
+ c = selmon->sel;
+ if (!c)
+ return;
+
+ if (HIDDEN(c)) {
+ show(c);
+ restack(selmon);
+ } else {
+ hide(c);
+ }
+} \ No newline at end of file
diff --git a/patch/bar_awesomebar.h b/patch/bar_awesomebar.h
new file mode 100644
index 0000000..84c8505
--- /dev/null
+++ b/patch/bar_awesomebar.h
@@ -0,0 +1,8 @@
+static int width_awesomebar(Monitor *m, int max_width);
+static int draw_awesomebar(Monitor *m, int x, int w);
+static int click_awesomebar(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h);
+
+static void hide(Client *c);
+static void show(Client *c);
+static void togglewin(const Arg *arg);
+static void showhideclient(const Arg *arg); \ No newline at end of file
diff --git a/patch/dwmblocks.c b/patch/bar_dwmblocks.c
index 442b0bc..442b0bc 100644
--- a/patch/dwmblocks.c
+++ b/patch/bar_dwmblocks.c
diff --git a/patch/dwmblocks.h b/patch/bar_dwmblocks.h
index f08f1d5..f08f1d5 100644
--- a/patch/dwmblocks.h
+++ b/patch/bar_dwmblocks.h
diff --git a/patch/bar_fancybar.c b/patch/bar_fancybar.c
new file mode 100644
index 0000000..b6f5363
--- /dev/null
+++ b/patch/bar_fancybar.c
@@ -0,0 +1,97 @@
+int
+width_fancybar(Monitor *m, int max_width)
+{
+ return max_width;
+}
+
+int
+draw_fancybar(Monitor *m, int x, int w)
+{
+ int ftw, mw, ew = 0, n = 0;
+ unsigned int i;
+ Client *c;
+ #if !BAR_HIDEVACANTTAGS_PATCH
+ #if !BAR_ACTIVETAGINDICATORBAR_PATCH && !BAR_ACTIVETAGINDICATORBAR_ALT1_PATCH
+ #if BAR_PANGO_PATCH
+ int boxs = drw->font->h / 9;
+ #else
+ int boxs = drw->fonts->h / 9;
+ #endif // BAR_PANGO_PATCH
+ #endif // BAR_ACTIVETAGINDICATORBAR_PATCH | BAR_ACTIVETAGINDICATORBAR_ALT1_PATCH
+ #if BAR_PANGO_PATCH
+ int boxw = drw->font->h / 6 + 2;
+ #else
+ int boxw = drw->fonts->h / 6 + 2;
+ #endif // BAR_PANGO_PATCH
+ #endif // BAR_HIDEVACANTTAGS_PATCH
+
+ for (c = m->clients; c; c = c->next) {
+ if (ISVISIBLE(c))
+ n++;
+ }
+
+ if (n > 0) {
+ ftw = TEXTW(m->sel->name) + lrpad;
+ mw = (ftw >= w || n == 1) ? 0 : (w - ftw) / (n - 1);
+
+ i = 0;
+ for (c = m->clients; c; c = c->next) {
+ if (!ISVISIBLE(c) || c == m->sel)
+ continue;
+ ftw = TEXTW(c->name);
+ if (ftw < mw)
+ ew += (mw - ftw);
+ else
+ i++;
+ }
+ if (i > 0)
+ mw += ew / i;
+
+ for (c = m->clients; c; c = c->next) {
+ if (!ISVISIBLE(c))
+ continue;
+ ftw = MIN(m->sel == c ? w : mw, TEXTW(c->name));
+
+ #if BAR_VTCOLORS_PATCH
+ drw_setscheme(drw, scheme[m->sel == c ? SchemeTitleSel : SchemeTitleNorm]);
+ #elif BAR_TITLECOLOR_PATCH
+ drw_setscheme(drw, scheme[m->sel == c ? SchemeTitle : SchemeNorm]);
+ #else
+ drw_setscheme(drw, scheme[m->sel == c ? SchemeSel : SchemeNorm]);
+ #endif // BAR_VTCOLORS_PATCH / BAR_TITLECOLOR_PATCH
+ if (ftw > 0) /* trap special handling of 0 in drw_text */
+ #if BAR_PANGO_PATCH
+ drw_text(drw, x, 0, ftw, bh, lrpad / 2, c->name, 0, False);
+ #else
+ drw_text(drw, x, 0, ftw, bh, lrpad / 2, c->name, 0);
+ #endif // BAR_PANGO_PATCH
+ #if !BAR_HIDEVACANTTAGS_PATCH
+ if (c->isfloating)
+ #if BAR_ACTIVETAGINDICATORBAR_PATCH
+ drw_rect(drw, x + boxw, 0, w - ( 2 * boxw + 1), boxw, c->isfixed, 0);
+ #elif BAR_ACTIVETAGINDICATORBAR_ALT1_PATCH
+ drw_rect(drw, x + boxw, bh - boxw/2, w - ( 2 * boxw + 1), boxw/2,
+ #else
+ drw_rect(drw, x + boxs, boxs, boxw, boxw, c->isfixed, 0);
+ #endif // BAR_ACTIVETAGINDICATORBAR_PATCH
+ #endif // BAR_HIDEVACANTTAGS_PATCH
+ x += ftw;
+ w -= ftw;
+ }
+ }
+ #if BAR_VTCOLORS_PATCH
+ drw_setscheme(drw, scheme[SchemeTitleNorm]);
+ #else
+ drw_setscheme(drw, scheme[SchemeNorm]);
+ #endif // BAR_VTCOLORS_PATCH
+ drw_rect(drw, x, 0, w, bh, 1, 1);
+ return x + w;
+}
+
+int
+click_fancybar(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h)
+{
+ return ClkWinTitle;
+}
+
+
diff --git a/patch/bar_fancybar.h b/patch/bar_fancybar.h
new file mode 100644
index 0000000..24336d9
--- /dev/null
+++ b/patch/bar_fancybar.h
@@ -0,0 +1,3 @@
+static int width_fancybar(Monitor *m, int max_width);
+static int draw_fancybar(Monitor *m, int x, int w);
+static int click_fancybar(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h); \ No newline at end of file
diff --git a/patch/bar_ltsymbol.c b/patch/bar_ltsymbol.c
new file mode 100644
index 0000000..f4417f1
--- /dev/null
+++ b/patch/bar_ltsymbol.c
@@ -0,0 +1,21 @@
+int
+width_ltsymbol(Monitor *m, int max_width)
+{
+ return TEXTW(m->ltsymbol);
+}
+
+int
+draw_ltsymbol(Monitor *m, int x, int w)
+{
+ #if BAR_PANGO_PATCH
+ return drw_text(drw, x, 0, w, bh, lrpad / 2, m->ltsymbol, 0, False);
+ #else
+ return drw_text(drw, x, 0, w, bh, lrpad / 2, m->ltsymbol, 0);
+ #endif // BAR_PANGO_PATCH
+}
+
+int
+click_ltsymbol(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h)
+{
+ return ClkLtSymbol;
+} \ No newline at end of file
diff --git a/patch/bar_ltsymbol.h b/patch/bar_ltsymbol.h
new file mode 100644
index 0000000..5471496
--- /dev/null
+++ b/patch/bar_ltsymbol.h
@@ -0,0 +1,3 @@
+static int width_ltsymbol(Monitor *m, int max_width);
+static int draw_ltsymbol(Monitor *m, int x, int w);
+static int click_ltsymbol(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h);
diff --git a/patch/bar_status.c b/patch/bar_status.c
new file mode 100644
index 0000000..fdf72de
--- /dev/null
+++ b/patch/bar_status.c
@@ -0,0 +1,25 @@
+int
+width_status(Monitor *m, int max_width)
+{
+ #if BAR_PANGO_PATCH
+ return TEXTWM(stext) - lrpad + 2; /* 2px right padding */
+ #else
+ return TEXTW(stext) - lrpad + 2; /* 2px right padding */
+ #endif // BAR_PANGO_PATCH
+}
+
+int
+draw_status(Monitor *m, int x, int w)
+{
+ #if BAR_PANGO_PATCH
+ return drw_text(drw, x, 0, w, bh, 0, stext, 0, True);
+ #else
+ return drw_text(drw, x, 0, w, bh, 0, stext, 0);
+ #endif // BAR_PANGO_PATCH
+}
+
+int
+click_status(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h)
+{
+ return ClkStatusText;
+}
diff --git a/patch/bar_status.h b/patch/bar_status.h
new file mode 100644
index 0000000..3b6c924
--- /dev/null
+++ b/patch/bar_status.h
@@ -0,0 +1,3 @@
+static int width_status(Monitor *m, int max_width);
+static int draw_status(Monitor *m, int x, int w);
+static int click_status(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h); \ No newline at end of file
diff --git a/patch/status2d.c b/patch/bar_status2d.c
index 99dcacd..8b3b3e5 100644
--- a/patch/status2d.c
+++ b/patch/bar_status2d.c
@@ -1,7 +1,25 @@
int
-drawstatusbar(Monitor *m, int bh, char* stext, int stw, int stp, int align)
+width_status2d(Monitor *m, int max_width)
{
- int ret, i, w, x, len;
+ return status2dtextlength(rawstext);
+}
+
+int
+draw_status2d(Monitor *m, int x, int w)
+{
+ return drawstatusbar(m, x, w, rawstext);
+}
+
+int
+click_status2d(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h)
+{
+ return ClkStatusText;
+}
+
+int
+drawstatusbar(Monitor *m, int x, int ow, char* stext)
+{
+ int i, w, len;
short isCode = 0;
char *text;
char *p;
@@ -10,58 +28,11 @@ drawstatusbar(Monitor *m, int bh, char* stext, int stw, int stp, int align)
if (!(text = (char*) malloc(sizeof(char)*len)))
die("malloc");
p = text;
- #if STATUSCMD_PATCH
+ #if BAR_STATUSCMD_PATCH
copyvalidchars(text, stext);
#else
memcpy(text, stext, len);
- #endif // STATUSCMD_PATCH
-
- /* compute width of the status text */
- w = stp * 2;
- i = -1;
- while (text[++i]) {
- if (text[i] == '^') {
- if (!isCode) {
- isCode = 1;
- text[i] = '\0';
- #if PANGO_PATCH
- w += TEXTWM(text) - lrpad;
- #else
- w += TEXTW(text) - lrpad;
- #endif // PANGO_PATCH
- text[i] = '^';
- if (text[++i] == 'f')
- w += atoi(text + ++i);
- } else {
- isCode = 0;
- text = text + i + 1;
- i = -1;
- }
- }
- }
- if (!isCode)
- #if PANGO_PATCH
- w += TEXTWM(text) - lrpad;
- #else
- w += TEXTW(text) - lrpad;
- #endif // PANGO_PATCH
- else
- isCode = 0;
- text = p;
- w += 2; /* 1px padding on both sides */
- if (align == 0)
- x = 0 + stp; // left
- else if (align == 1)
- x = m->ww - w - stw + stp; // right
- else
- x = m->ww / 2 - w / 2; // center
- ret = w;
-
- drw_setscheme(drw, scheme[LENGTH(colors)]);
- drw->scheme[ColFg] = scheme[SchemeNorm][ColFg];
- drw->scheme[ColBg] = scheme[SchemeNorm][ColBg];
- drw_rect(drw, x - stp - 1, 0, w, bh, 1, 1);
- x++;
+ #endif // BAR_STATUSCMD_PATCH
/* process status text */
i = -1;
@@ -70,13 +41,13 @@ drawstatusbar(Monitor *m, int bh, char* stext, int stw, int stp, int align)
isCode = 1;
text[i] = '\0';
- #if PANGO_PATCH
+ #if BAR_PANGO_PATCH
w = TEXTWM(text) - lrpad;
drw_text(drw, x, 0, w, bh, 0, text, 0, True);
#else
w = TEXTW(text) - lrpad;
drw_text(drw, x, 0, w, bh, 0, text, 0);
- #endif // PANGO_PATCH
+ #endif // BAR_PANGO_PATCH
x += w;
@@ -90,13 +61,13 @@ drawstatusbar(Monitor *m, int bh, char* stext, int stw, int stp, int align)
}
memcpy(buf, (char*)text+i+1, 7);
buf[7] = '\0';
- #if ALPHA_PATCH && STATUS2D_NO_ALPHA_PATCH
+ #if BAR_ALPHA_PATCH && BAR_STATUS2D_NO_ALPHA_PATCH
drw_clr_create(drw, &drw->scheme[ColFg], buf, 0xff);
- #elif ALPHA_PATCH
+ #elif BAR_ALPHA_PATCH
drw_clr_create(drw, &drw->scheme[ColFg], buf, alphas[SchemeNorm][ColFg]);
#else
drw_clr_create(drw, &drw->scheme[ColFg], buf);
- #endif // ALPHA_PATCH
+ #endif // BAR_ALPHA_PATCH
i += 7;
} else if (text[i] == 'b') {
char buf[8];
@@ -106,13 +77,13 @@ drawstatusbar(Monitor *m, int bh, char* stext, int stw, int stp, int align)
}
memcpy(buf, (char*)text+i+1, 7);
buf[7] = '\0';
- #if ALPHA_PATCH && STATUS2D_NO_ALPHA_PATCH
+ #if BAR_ALPHA_PATCH && BAR_STATUS2D_NO_ALPHA_PATCH
drw_clr_create(drw, &drw->scheme[ColBg], buf, 0xff);
- #elif ALPHA_PATCH
+ #elif BAR_ALPHA_PATCH
drw_clr_create(drw, &drw->scheme[ColBg], buf, alphas[SchemeNorm][ColBg]);
#else
drw_clr_create(drw, &drw->scheme[ColBg], buf);
- #endif // ALPHA_PATCH
+ #endif // BAR_ALPHA_PATCH
i += 7;
} else if (text[i] == 'd') {
drw->scheme[ColFg] = scheme[SchemeNorm][ColFg];
@@ -142,21 +113,21 @@ drawstatusbar(Monitor *m, int bh, char* stext, int stw, int stp, int align)
isCode = 0;
}
}
-
if (!isCode) {
- #if PANGO_PATCH
+ #if BAR_PANGO_PATCH
w = TEXTWM(text) - lrpad;
drw_text(drw, x, 0, w, bh, 0, text, 0, True);
#else
w = TEXTW(text) - lrpad;
drw_text(drw, x, 0, w, bh, 0, text, 0);
- #endif // PANGO_PATCH
+ #endif // BAR_PANGO_PATCH
+ x += w;
}
+ free(p);
drw_setscheme(drw, scheme[SchemeNorm]);
- free(p);
- return ret;
+ return x;
}
int
@@ -165,16 +136,17 @@ status2dtextlength(char* stext)
int i, w, len;
short isCode = 0;
char *text;
+ char *p;
len = strlen(stext) + 1;
if (!(text = (char*) malloc(sizeof(char)*len)))
die("malloc");
-
- #if STATUSCMD_PATCH
+ p = text;
+ #if BAR_STATUSCMD_PATCH
copyvalidchars(text, stext);
#else
memcpy(text, stext, len);
- #endif // STATUSCMD_PATCH
+ #endif // BAR_STATUSCMD_PATCH
/* compute width of the status text */
w = 0;
@@ -184,11 +156,11 @@ status2dtextlength(char* stext)
if (!isCode) {
isCode = 1;
text[i] = '\0';
- #if PANGO_PATCH
+ #if BAR_PANGO_PATCH
w += TEXTWM(text) - lrpad;
#else
w += TEXTW(text) - lrpad;
- #endif // PANGO_PATCH
+ #endif // BAR_PANGO_PATCH
text[i] = '^';
if (text[++i] == 'f')
w += atoi(text + ++i);
@@ -200,10 +172,11 @@ status2dtextlength(char* stext)
}
}
if (!isCode)
- #if PANGO_PATCH
+ #if BAR_PANGO_PATCH
w += TEXTWM(text) - lrpad;
#else
w += TEXTW(text) - lrpad;
- #endif // PANGO_PATCH
+ #endif // BAR_PANGO_PATCH
+ free(p);
return w;
-}
+} \ No newline at end of file
diff --git a/patch/bar_status2d.h b/patch/bar_status2d.h
new file mode 100644
index 0000000..3f1a346
--- /dev/null
+++ b/patch/bar_status2d.h
@@ -0,0 +1,5 @@
+static int width_status2d(Monitor *m, int max_width);
+static int draw_status2d(Monitor *m, int x, int w);
+static int click_status2d(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h);
+static int drawstatusbar(Monitor *m, int x, int w, char* text);
+static int status2dtextlength(char* stext); \ No newline at end of file
diff --git a/patch/bar_status2d_eb.c b/patch/bar_status2d_eb.c
new file mode 100644
index 0000000..adce774
--- /dev/null
+++ b/patch/bar_status2d_eb.c
@@ -0,0 +1,11 @@
+int
+width_status2d_eb(Monitor *m, int max_width)
+{
+ return status2dtextlength(rawestext);
+}
+
+int
+draw_status2d_eb(Monitor *m, int x, int w)
+{
+ return drawstatusbar(m, x, w, rawestext);
+} \ No newline at end of file
diff --git a/patch/bar_status2d_eb.h b/patch/bar_status2d_eb.h
new file mode 100644
index 0000000..87b41fb
--- /dev/null
+++ b/patch/bar_status2d_eb.h
@@ -0,0 +1,2 @@
+static int width_status2d_eb(Monitor *m, int max_width);
+static int draw_status2d_eb(Monitor *m, int x, int w); \ No newline at end of file
diff --git a/patch/bar_statusbutton.c b/patch/bar_statusbutton.c
new file mode 100644
index 0000000..130ef62
--- /dev/null
+++ b/patch/bar_statusbutton.c
@@ -0,0 +1,21 @@
+int
+width_stbutton(Monitor *m, int max_width)
+{
+ return TEXTW(buttonbar);
+}
+
+int
+draw_stbutton(Monitor *m, int x, int w)
+{
+ #if BAR_PANGO_PATCH
+ return drw_text(drw, x, 0, w, bh, lrpad / 2, buttonbar, 0, False);
+ #else
+ return drw_text(drw, x, 0, w, bh, lrpad / 2, buttonbar, 0);
+ #endif // BAR_PANGO_PATCH
+}
+
+int
+click_stbutton(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h)
+{
+ return ClkButton;
+}
diff --git a/patch/bar_statusbutton.h b/patch/bar_statusbutton.h
new file mode 100644
index 0000000..84ac2c5
--- /dev/null
+++ b/patch/bar_statusbutton.h
@@ -0,0 +1,3 @@
+static int width_stbutton(Monitor *m, int max_width);
+static int draw_stbutton(Monitor *m, int x, int w);
+static int click_stbutton(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h); \ No newline at end of file
diff --git a/patch/bar_statuscmd.c b/patch/bar_statuscmd.c
new file mode 100644
index 0000000..f6166c3
--- /dev/null
+++ b/patch/bar_statuscmd.c
@@ -0,0 +1,76 @@
+#if !BAR_DWMBLOCKS_PATCH
+static const char statusexport[] = "export BUTTON=-;";
+static int statuscmdn;
+static int lastbutton;
+#endif // BAR_DWMBLOCKS_PATCH
+
+int
+click_statuscmd(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h)
+{
+ return click_statuscmd_text(m, arg, rel_x, rel_y, rawstext);
+}
+
+#if BAR_EXTRABAR_PATCH
+int
+click_statuscmd_eb(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h)
+{
+ return click_statuscmd_text(m, arg, rel_x, rel_y, rawestext);
+}
+#endif // BAR_EXTRABAR_PATCH
+
+int
+click_statuscmd_text(Monitor *m, Arg *arg, int rel_x, int rel_y, char *text)
+{
+ int i = -1;
+ int x = 0;
+ char ch;
+ #if BAR_DWMBLOCKS_PATCH
+ dwmblockssig = -1;
+ #else
+ statuscmdn = 0;
+ #endif // BAR_DWMBLOCKS_PATCH
+ while (text[++i]) {
+ if ((unsigned char)text[i] < ' ') {
+ ch = text[i];
+ text[i] = '\0';
+ #if BAR_STATUS2D_PATCH && !BAR_BAR_STATUSCOLORS_PATCH
+ x += status2dtextlength(text);
+ #elif BAR_PANGO_PATCH
+ x += TEXTWM(text) - lrpad;
+ #else
+ x += TEXTW(text) - lrpad;
+ #endif // STATUS2D_PATCH
+ text[i] = ch;
+ text += i+1;
+ i = -1;
+ #if BAR_DWMBLOCKS_PATCH
+ if (x >= rel_x && dwmblockssig != -1)
+ break;
+ dwmblockssig = ch;
+ #else
+ if (x >= rel_x)
+ break;
+ if (ch <= LENGTH(statuscmds))
+ statuscmdn = ch - 1;
+ #endif // BAR_DWMBLOCKS_PATCH
+ }
+ }
+ #if BAR_DWMBLOCKS_PATCH
+ if (dwmblockssig == -1)
+ dwmblockssig = 0;
+ #endif // BAR_DWMBLOCKS_PATCH
+ return ClkStatusText;
+}
+
+void
+copyvalidchars(char *text, char *rawtext)
+{
+ int i = -1, j = 0;
+
+ while (rawtext[++i]) {
+ if ((unsigned char)rawtext[i] >= ' ') {
+ text[j++] = rawtext[i];
+ }
+ }
+ text[j] = '\0';
+}
diff --git a/patch/bar_statuscmd.h b/patch/bar_statuscmd.h
new file mode 100644
index 0000000..92ed7e1
--- /dev/null
+++ b/patch/bar_statuscmd.h
@@ -0,0 +1,6 @@
+static int click_statuscmd(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h);
+#if BAR_EXTRABAR_PATCH
+static int click_statuscmd_eb(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h);
+#endif // BAR_EXTRABAR_PATCH
+static int click_statuscmd_text(Monitor *m, Arg *arg, int rel_x, int rel_y, char *text);
+static void copyvalidchars(char *text, char *rawtext); \ No newline at end of file
diff --git a/patch/systray.c b/patch/bar_systray.c
index 0ca2f86..9938543 100644
--- a/patch/systray.c
+++ b/patch/bar_systray.c
@@ -1,17 +1,35 @@
-
static Systray *systray = NULL;
static unsigned long systrayorientation = _NET_SYSTEM_TRAY_ORIENTATION_HORZ;
+static int systraybaridx = -1;
+static int systraybarrule = -1;
+static int systrayxpos = 0;
-unsigned int
-getsystraywidth()
+int
+width_systray(Monitor *m, int max_width)
{
unsigned int w = 0;
Client *i;
+ if (!systray)
+ return 1;
if (showsystray)
for (i = systray->icons; i; w += i->w + systrayspacing, i = i->next);
return w ? w + systrayspacing : 0;
}
+int
+draw_systray(Monitor *m, int x_pos, int w)
+{
+ systrayxpos = x_pos;
+ updatesystray();
+ return systrayxpos + w;
+}
+
+int
+click_systray(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h)
+{
+ return -1;
+}
+
void
removesystrayicon(Client *i)
{
@@ -37,64 +55,51 @@ resizerequest(XEvent *e)
}
}
-Monitor *
-systraytomon(Monitor *m)
-{
- Monitor *t;
- int i, n;
- if (!systraypinning) {
- if (!m)
- return selmon;
- return m == selmon ? m : NULL;
- }
- for (n = 1, t = mons; t && t->next; n++, t = t->next);
- for (i = 1, t = mons; t && t->next && i < systraypinning; i++, t = t->next);
- if (systraypinningfailfirst && n < systraypinning)
- return mons;
- return t;
-}
-
void
updatesystray(void)
{
+ if (!showsystray)
+ return;
XSetWindowAttributes wa;
- XWindowChanges wc;
Client *i;
- Monitor *m = systraytomon(NULL);
- unsigned int x = m->mx + m->mw;
- unsigned int w = 1, xpad = 0, ypad = 0;
- #if BARPADDING_PATCH
- xpad = sp;
- ypad = vp;
- #endif // BARPADDING_PATCH
+ Monitor *m;
+ unsigned int w = 1, r, mi;
+ const BarRule *br;
- if (!showsystray)
- return;
if (!systray) {
/* init systray */
if (!(systray = (Systray *)calloc(1, sizeof(Systray))))
die("fatal: could not malloc() %u bytes\n", sizeof(Systray));
- wa.override_redirect = True;
- wa.event_mask = ButtonPressMask|ExposureMask;
- wa.background_pixel = scheme[SchemeNorm][ColBg].pixel;
- wa.border_pixel = 0;
- #if ALPHA_PATCH
- wa.colormap = cmap;
- systray->win = XCreateWindow(dpy, root, x - xpad, m->by + ypad, w, bh, 0, depth,
- InputOutput, visual,
- CWOverrideRedirect|CWBackPixel|CWBorderPixel|CWColormap|CWEventMask, &wa);
- #else
- systray->win = XCreateSimpleWindow(dpy, root, x - xpad, m->by + ypad, w, bh, 0, 0, scheme[SchemeNorm][ColBg].pixel);
- XChangeWindowAttributes(dpy, systray->win, CWOverrideRedirect|CWBackPixel|CWBorderPixel|CWEventMask, &wa);
- #endif // ALPHA_PATCH
- XSelectInput(dpy, systray->win, SubstructureNotifyMask);
+ /* Work out which bar the systray is to be displayed on */
+ for (r = 0; r < LENGTH(barrules); r++) {
+ br = &barrules[r];
+ if (br->drawfunc == &draw_systray) {
+ systraybaridx = br->bar;
+ systraybarrule = r;
+ if (br->monitor == -1 || br->monitor == 'A')
+ m = selmon;
+ else
+ for (m = mons, mi = 0; m && mi < br->monitor && m->next; m = m->next, mi++);
+ systray->win = m->bars[systraybaridx]->win;
+ systray->mon = m;
+
+ break;
+ }
+ }
+ if (systraybaridx == -1) {
+ fprintf(stderr, "dwm: unable to obtain system tray, no draw_systray in bar rules.\n");
+ free(systray);
+ systray = NULL;
+ return;
+ }
+
XChangeProperty(dpy, systray->win, netatom[NetSystemTrayOrientation], XA_CARDINAL, 32,
PropModeReplace, (unsigned char *)&systrayorientation, 1);
- #if ALPHA_PATCH
+ #if BAR_ALPHA_PATCH
XChangeProperty(dpy, systray->win, netatom[NetSystemTrayVisual], XA_VISUALID, 32,
PropModeReplace, (unsigned char *)&visual->visualid, 1);
- #endif // ALPHA_PATCH
+ #endif // BAR_ALPHA_PATCH
XChangeProperty(dpy, systray->win, netatom[NetWMWindowType], XA_ATOM, 32,
PropModeReplace, (unsigned char *)&netatom[NetWMWindowTypeDock], 1);
XMapRaised(dpy, systray->win);
@@ -102,8 +107,7 @@ updatesystray(void)
if (XGetSelectionOwner(dpy, netatom[NetSystemTray]) == systray->win) {
sendevent(root, xatom[Manager], StructureNotifyMask, CurrentTime, netatom[NetSystemTray], systray->win, 0, 0);
XSync(dpy, False);
- }
- else {
+ } else {
fprintf(stderr, "dwm: unable to obtain system tray.\n");
free(systray);
systray = NULL;
@@ -111,34 +115,18 @@ updatesystray(void)
}
}
- drw_setscheme(drw, scheme[SchemeNorm]);
for (w = 0, i = systray->icons; i; i = i->next) {
/* make sure the background color stays the same */
wa.background_pixel = scheme[SchemeNorm][ColBg].pixel;
XChangeWindowAttributes(dpy, i->win, CWBackPixel, &wa);
XMapRaised(dpy, i->win);
w += systrayspacing;
- i->x = w;
+ i->x = systrayxpos + w;
XMoveResizeWindow(dpy, i->win, i->x, 0, i->w, i->h);
w += i->w;
- if (i->mon != m)
- i->mon = m;
+ if (i->mon != systray->mon)
+ i->mon = systray->mon;
}
- w = w ? w + systrayspacing : 1;
- x -= w;
- XMoveResizeWindow(dpy, systray->win, x - xpad, m->by + ypad, w, bh);
- wc.x = x - xpad;
- wc.y = m->by + ypad;
- wc.width = w;
- wc.height = bh;
- wc.stack_mode = Above; wc.sibling = m->barwin;
- XConfigureWindow(dpy, systray->win, CWX|CWY|CWWidth|CWHeight|CWSibling|CWStackMode, &wc);
- XMapWindow(dpy, systray->win);
- XMapSubwindows(dpy, systray->win);
- /* redraw background */
- XSetForeground(dpy, drw->gc, scheme[SchemeNorm][ColBg].pixel);
- XFillRectangle(dpy, systray->win, drw->gc, 0, 0, w, bh);
- XSync(dpy, False);
}
void
diff --git a/patch/systray.h b/patch/bar_systray.h
index 1a2bab6..de588d1 100644
--- a/patch/systray.h
+++ b/patch/bar_systray.h
@@ -22,14 +22,18 @@ typedef struct Systray Systray;
struct Systray {
Window win;
Client *icons;
+ Monitor *mon;
};
+/* bar integration */
+static int width_systray(Monitor *m, int max_width);
+static int draw_systray(Monitor *m, int x_pos, int w);
+static int click_systray(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h);
+
/* function declarations */
static Atom getatomprop(Client *c, Atom prop);
-static unsigned int getsystraywidth();
static void removesystrayicon(Client *i);
static void resizerequest(XEvent *e);
-static Monitor *systraytomon(Monitor *m);
static void updatesystray(void);
static void updatesystrayicongeom(Client *i, int w, int h);
static void updatesystrayiconstate(Client *i, XPropertyEvent *ev);
diff --git a/patch/bar_taggrid.c b/patch/bar_taggrid.c
new file mode 100644
index 0000000..4fa98d7
--- /dev/null
+++ b/patch/bar_taggrid.c
@@ -0,0 +1,142 @@
+int
+width_taggrid(Monitor *m, int max_width)
+{
+ return (bh / 2) * (LENGTH(tags) / tagrows + ((LENGTH(tags) % tagrows > 0) ? 1 : 0));
+}
+
+int
+draw_taggrid(Monitor *m, int x_pos, int w)
+{
+ unsigned int x, y, h, max_x, columns, occ = 0;
+ int invert, i,j, k;
+ Client *c;
+
+ for (c = m->clients; c; c = c->next)
+ occ |= c->tags;
+
+ h = bh / tagrows;
+ x = max_x = x_pos;
+ y = 0;
+ columns = LENGTH(tags) / tagrows + ((LENGTH(tags) % tagrows > 0) ? 1 : 0);
+
+ /* Firstly we will fill the borders of squares */
+ XFillRectangle(dpy, drw->drawable, drw->gc, x, y, h*columns + 1, bh);
+
+ /* We will draw LENGTH(tags) squares in tagraws raws. */
+ for (j = 0, i = 0; j < tagrows; j++) {
+ x = x_pos;
+ for (k = 0; k < columns && i < LENGTH(tags); k++, i++) {
+ invert = m->tagset[m->seltags] & 1 << i ? 0 : 1;
+
+ /* Select active color for current square */
+ XSetForeground(drw->dpy, drw->gc, !invert ? scheme[SchemeSel][ColBg].pixel :
+ scheme[SchemeNorm][ColFg].pixel);
+ XFillRectangle(dpy, drw->drawable, drw->gc, x+1, y+1, h-1, h-1);
+
+ /* Mark square if tag has client */
+ if (occ & 1 << i) {
+ XSetForeground(drw->dpy, drw->gc, !invert ? scheme[SchemeSel][ColFg].pixel :
+ scheme[SchemeNorm][ColBg].pixel);
+ XFillRectangle(dpy, drw->drawable, drw->gc, x + 1, y + 1,
+ h / 2, h / 2);
+ }
+ x += h;
+ if (x > max_x) {
+ max_x = x;
+ }
+ }
+ y += h;
+ }
+ return max_x;
+}
+
+int
+click_taggrid(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h)
+{
+ unsigned int i, columns;
+
+ columns = LENGTH(tags) / tagrows + ((LENGTH(tags) % tagrows > 0) ? 1 : 0);
+ i = (rel_x - 0) / (bh / tagrows) + columns * (rel_y / (bh / tagrows));
+ if (i >= LENGTH(tags)) {
+ i = LENGTH(tags) - 1;
+ }
+ arg->ui = 1 << i;
+ return ClkTagBar;
+}
+
+void
+switchtag(const Arg *arg)
+{
+ unsigned int columns;
+ unsigned int new_tagset = 0;
+ unsigned int pos, i;
+ int col, row;
+ Arg new_arg;
+
+ columns = LENGTH(tags) / tagrows + ((LENGTH(tags) % tagrows > 0) ? 1 : 0);
+
+ for (i = 0; i < LENGTH(tags); ++i) {
+ if (!(selmon->tagset[selmon->seltags] & 1 << i)) {
+ continue;
+ }
+ pos = i;
+ row = pos / columns;
+ col = pos % columns;
+ if (arg->ui & SWITCHTAG_UP) { /* UP */
+ row --;
+ if (row < 0) {
+ row = tagrows - 1;
+ }
+ do {
+ pos = row * columns + col;
+ row --;
+ } while (pos >= LENGTH(tags));
+ }
+ if (arg->ui & SWITCHTAG_DOWN) { /* DOWN */
+ row ++;
+ if (row >= tagrows) {
+ row = 0;
+ }
+ pos = row * columns + col;
+ if (pos >= LENGTH(tags)) {
+ row = 0;
+ }
+ pos = row * columns + col;
+ }
+ if (arg->ui & SWITCHTAG_LEFT) { /* LEFT */
+ col --;
+ if (col < 0) {
+ col = columns - 1;
+ }
+ do {
+ pos = row * columns + col;
+ col --;
+ } while (pos >= LENGTH(tags));
+ }
+ if (arg->ui & SWITCHTAG_RIGHT) { /* RIGHT */
+ col ++;
+ if (col >= columns) {
+ col = 0;
+ }
+ pos = row * columns + col;
+ if (pos >= LENGTH(tags)) {
+ col = 0;
+ pos = row * columns + col;
+ }
+ }
+ new_tagset |= 1 << pos;
+ }
+ new_arg.ui = new_tagset;
+ if (arg->ui & SWITCHTAG_TOGGLETAG) {
+ toggletag(&new_arg);
+ }
+ if (arg->ui & SWITCHTAG_TAG) {
+ tag(&new_arg);
+ }
+ if (arg->ui & SWITCHTAG_VIEW) {
+ view (&new_arg);
+ }
+ if (arg->ui & SWITCHTAG_TOGGLEVIEW) {
+ toggleview (&new_arg);
+ }
+} \ No newline at end of file
diff --git a/patch/bar_taggrid.h b/patch/bar_taggrid.h
new file mode 100644
index 0000000..ca8a16c
--- /dev/null
+++ b/patch/bar_taggrid.h
@@ -0,0 +1,4 @@
+static int width_taggrid(Monitor *m, int max_width);
+static int draw_taggrid(Monitor *m, int x, int w);
+static int click_taggrid(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h);
+static void switchtag(const Arg *arg); \ No newline at end of file
diff --git a/patch/bar_tags.c b/patch/bar_tags.c
new file mode 100644
index 0000000..73dc5d7
--- /dev/null
+++ b/patch/bar_tags.c
@@ -0,0 +1,123 @@
+int
+width_tags(Monitor *m, int max_width)
+{
+ int w, i;
+ for (w = 0, i = 0; i < LENGTH(tags); i++) {
+ #if BAR_ALTERNATIVE_TAGS_PATCH
+ w += selmon->alttag ? TEXTW(tagsalt[i]) : TEXTW(tags[i]);
+ #else
+ w += TEXTW(tags[i]);
+ #endif // BAR_ALTERNATIVE_TAGS_PATCH
+ }
+ return w;
+}
+
+int
+draw_tags(Monitor *m, int x, int w)
+{
+ int invert;
+ #if BAR_ALTERNATIVE_TAGS_PATCH
+ int wdelta;
+ #endif // BAR_ALTERNATIVE_TAGS_PATCH
+ #if !BAR_HIDEVACANTTAGS_PATCH
+ #if !BAR_ACTIVETAGINDICATORBAR_PATCH && !BAR_ACTIVETAGINDICATORBAR_ALT1_PATCH
+ #if BAR_PANGO_PATCH
+ int boxs = drw->font->h / 9;
+ #else
+ int boxs = drw->fonts->h / 9;
+ #endif // BAR_PANGO_PATCH
+ #endif // BAR_ACTIVETAGINDICATORBAR_PATCH | BAR_ACTIVETAGINDICATORBAR_ALT1_PATCH
+ #if BAR_PANGO_PATCH
+ int boxw = drw->font->h / 6 + 2;
+ #else
+ int boxw = drw->fonts->h / 6 + 2;
+ #endif // BAR_PANGO_PATCH
+ #endif // BAR_HIDEVACANTTAGS_PATCH
+ unsigned int i, occ = 0, urg = 0;
+ Client *c;
+
+ for (c = m->clients; c; c = c->next) {
+ #if BAR_HIDEVACANTTAGS_PATCH
+ occ |= c->tags == 255 ? 0 : c->tags;
+ #else
+ occ |= c->tags;
+ #endif // BAR_HIDEVACANTTAGS_PATCH
+ if (c->isurgent)
+ urg |= c->tags;
+ }
+
+ for (i = 0; i < LENGTH(tags); i++) {
+ #if URGENTBORDER_PATCH
+ invert = 0;
+ #else
+ invert = urg & 1 << i;
+ #endif // URGENTBORDER_PATCH
+ #if BAR_HIDEVACANTTAGS_PATCH
+ /* do not draw vacant tags */
+ if (!(occ & 1 << i || m->tagset[m->seltags] & 1 << i))
+ continue;
+ #endif // BAR_HIDEVACANTTAGS_PATCH
+ w = TEXTW(tags[i]);
+ #if BAR_ALTERNATIVE_TAGS_PATCH
+ wdelta = selmon->alttag ? abs(TEXTW(tags[i]) - TEXTW(tagsalt[i])) / 2 : 0;
+ #endif // BAR_ALTERNATIVE_TAGS_PATCH
+ #if URGENTBORDER_PATCH
+ if (m->tagset[m->seltags] & 1 << i)
+ #if BAR_VTCOLORS_PATCH
+ drw_setscheme(drw, scheme[SchemeTagsSel]);
+ #else
+ drw_setscheme(drw, scheme[SchemeSel]);
+ #endif // BAR_VTCOLORS_PATCH
+ else
+ #if BAR_VTCOLORS_PATCH
+ drw_setscheme(drw, scheme[urg & 1 << i ? SchemeUrg : SchemeTagsNorm]);
+ #else
+ drw_setscheme(drw, scheme[urg & 1 << i ? SchemeUrg : SchemeNorm]);
+ #endif // BAR_VTCOLORS_PATCH
+ #elif BAR_VTCOLORS_PATCH
+ drw_setscheme(drw, scheme[m->tagset[m->seltags] & 1 << i ? SchemeTagsSel : SchemeTagsNorm]);
+ #else // URGENTBORDER_PATCH
+ drw_setscheme(drw, scheme[m->tagset[m->seltags] & 1 << i ? SchemeSel : SchemeNorm]);
+ #endif // URGENTBORDER_PATCH
+ #if BAR_ALTERNATIVE_TAGS_PATCH && BAR_PANGO_PATCH
+ drw_text(drw, x, 0, w, bh, wdelta + lrpad / 2, (selmon->alttag ? tagsalt[i] : tags[i]), invert, False);
+ #elif BAR_ALTERNATIVE_TAGS_PATCH
+ drw_text(drw, x, 0, w, bh, wdelta + lrpad / 2, (selmon->alttag ? tagsalt[i] : tags[i]), invert);
+ #elif BAR_PANGO_PATCH
+ drw_text(drw, x, 0, w, bh, lrpad / 2, tags[i], invert, False);
+ #else
+ drw_text(drw, x, 0, w, bh, lrpad / 2, tags[i], invert);
+ #endif // BAR_ALTERNATIVE_TAGS_PATCH
+ #if !BAR_HIDEVACANTTAGS_PATCH
+ if (occ & 1 << i)
+ #if BAR_ACTIVETAGINDICATORBAR_PATCH
+ drw_rect(drw, x + boxw, 0, w - ( 2 * boxw + 1), boxw,
+ #elif BAR_ACTIVETAGINDICATORBAR_ALT1_PATCH
+ drw_rect(drw, x + boxw, bh - boxw/2, w - ( 2 * boxw + 1), boxw/2,
+ #else
+ drw_rect(drw, x + boxs, boxs, boxw, boxw,
+ #endif // BAR_ACTIVETAGINDICATORBAR_PATCH
+ m == selmon && selmon->sel && selmon->sel->tags & 1 << i, invert);
+ #endif // BAR_HIDEVACANTTAGS_PATCH
+ x += w;
+ }
+
+ return x;
+}
+
+int
+click_tags(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h)
+{
+ int i = 0, x = 0;
+ do
+ #if BAR_ALTERNATIVE_TAGS_PATCH
+ x += selmon->alttag ? TEXTW(tagsalt[i]) : TEXTW(tags[i]);
+ #else
+ x += TEXTW(tags[i]);
+ #endif
+ while (rel_x >= x && ++i < LENGTH(tags));
+ if (i < LENGTH(tags)) {
+ arg->ui = 1 << i;
+ }
+ return ClkTagBar;
+}
diff --git a/patch/bar_tags.h b/patch/bar_tags.h
new file mode 100644
index 0000000..788c488
--- /dev/null
+++ b/patch/bar_tags.h
@@ -0,0 +1,3 @@
+static int width_tags(Monitor *m, int max_width);
+static int draw_tags(Monitor *m, int x, int w);
+static int click_tags(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h); \ No newline at end of file
diff --git a/patch/bar_wintitle.c b/patch/bar_wintitle.c
new file mode 100644
index 0000000..e937723
--- /dev/null
+++ b/patch/bar_wintitle.c
@@ -0,0 +1,89 @@
+int
+width_wintitle(Monitor *m, int max_width)
+{
+ return max_width;
+}
+
+int
+draw_wintitle(Monitor *m, int x, int w)
+{
+ #if !BAR_ACTIVETAGINDICATORBAR_PATCH && !BAR_ACTIVETAGINDICATORBAR_ALT1_PATCH
+ #if BAR_PANGO_PATCH
+ int boxs = drw->font->h / 9;
+ #else
+ int boxs = drw->fonts->h / 9;
+ #endif // BAR_PANGO_PATCH
+ #endif // BAR_ACTIVETAGINDICATORBAR_PATCH | BAR_ACTIVETAGINDICATORBAR_ALT1_PATCH
+ #if BAR_PANGO_PATCH
+ int boxw = drw->font->h / 6 + 2;
+ #else
+ int boxw = drw->fonts->h / 6 + 2;
+ #endif // BAR_PANGO_PATCH
+
+ if (m->sel) {
+ #if BAR_VTCOLORS_PATCH
+ drw_setscheme(drw, scheme[m == selmon ? SchemeTitleSel : SchemeTitleNorm]);
+ #elif BAR_TITLECOLOR_PATCH
+ drw_setscheme(drw, scheme[m == selmon ? SchemeTitle : SchemeNorm]);
+ #else
+ drw_setscheme(drw, scheme[m == selmon ? SchemeSel : SchemeNorm]);
+ #endif // BAR_VTCOLORS_PATCH / BAR_TITLECOLOR_PATCH
+ #if BAR_IGNORE_XFT_ERRORS_WHEN_DRAWING_TEXT_PATCH
+ XSetErrorHandler(xerrordummy);
+ #endif // BAR_IGNORE_XFT_ERRORS_WHEN_DRAWING_TEXT_PATCH
+ #if BAR_CENTEREDWINDOWNAME_PATCH
+ int mid = (m->ww - TEXTW(m->sel->name)) / 2 - x;
+ #if BAR_PADDING_PATCH && BAR_PANGO_PATCH
+ drw_text(drw, x, 0, w - 2*sp, bh, mid, m->sel->name, 0, False);
+ #elif BAR_PADDING_PATCH
+ drw_text(drw, x, 0, w - 2*sp, bh, mid, m->sel->name, 0);
+ #elif BAR_PANGO_PATCH
+ drw_text(drw, x, 0, w, bh, mid, m->sel->name, 0, False);
+ #else
+ drw_text(drw, x, 0, w, bh, mid, m->sel->name, 0);
+ #endif // BAR_PADDING_PATCH
+ #else
+ #if BAR_PADDING_PATCH && BAR_PANGO_PATCH
+ drw_text(drw, x, 0, w - 2*sp, bh, lrpad / 2, m->sel->name, 0, False);
+ #elif BAR_PADDING_PATCH
+ drw_text(drw, x, 0, w - 2*sp, bh, lrpad / 2, m->sel->name, 0);
+ #elif BAR_PANGO_PATCH
+ drw_text(drw, x, 0, w, bh, lrpad / 2, m->sel->name, 0, False);
+ #else
+ drw_text(drw, x, 0, w, bh, lrpad / 2, m->sel->name, 0);
+ #endif // BAR_PADDING_PATCH
+ #endif // BAR_CENTEREDWINDOWNAME_PATCH
+ #if BAR_IGNORE_XFT_ERRORS_WHEN_DRAWING_TEXT_PATCH
+ XSync(dpy, False);
+ XSetErrorHandler(xerror);
+ #endif // BAR_IGNORE_XFT_ERRORS_WHEN_DRAWING_TEXT_PATCH
+ if (m->sel->isfloating)
+ #if BAR_ACTIVETAGINDICATORBAR_PATCH
+ drw_rect(drw, x + boxw, 0, w - ( 2 * boxw + 1), boxw, m->sel->isfixed, 0);
+ #elif BAR_ACTIVETAGINDICATORBAR_ALT1_PATCH
+ drw_rect(drw, x + boxw, bh - boxw/2, w - ( 2 * boxw + 1), boxw/2,
+ #else
+ drw_rect(drw, x + boxs, boxs, boxw, boxw, m->sel->isfixed, 0);
+ #endif // BAR_ACTIVETAGINDICATORBAR_PATCH
+ } else {
+ #if BAR_VTCOLORS_PATCH
+ drw_setscheme(drw, scheme[SchemeTitleNorm]);
+ #else
+ drw_setscheme(drw, scheme[SchemeNorm]);
+ #endif // BAR_VTCOLORS_PATCH
+ #if BAR_PADDING_PATCH
+ drw_rect(drw, x, 0, w - 2 * sp, bh, 1, 1);
+ #else
+ drw_rect(drw, x, 0, w, bh, 1, 1);
+ #endif // BAR_PADDING_PATCH
+ }
+ return x + w;
+}
+
+int
+click_wintitle(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h)
+{
+ return ClkWinTitle;
+}
+
+
diff --git a/patch/bar_wintitle.h b/patch/bar_wintitle.h
new file mode 100644
index 0000000..b1d7ddd
--- /dev/null
+++ b/patch/bar_wintitle.h
@@ -0,0 +1,3 @@
+static int width_wintitle(Monitor *m, int max_width);
+static int draw_wintitle(Monitor *m, int x, int w);
+static int click_wintitle(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h); \ No newline at end of file
diff --git a/patch/combo.c b/patch/combo.c
index 907b645..43f7e5d 100644
--- a/patch/combo.c
+++ b/patch/combo.c
@@ -1,12 +1,12 @@
static int combo = 0;
-#if !HOLDBAR_PATCH
+#if !BAR_HOLDBAR_PATCH
void
keyrelease(XEvent *e)
{
combo = 0;
}
-#endif // !HOLDBAR_PATCH
+#endif // !BAR_HOLDBAR_PATCH
void
combotag(const Arg *arg)
diff --git a/patch/combo.h b/patch/combo.h
index 08be95e..752f636 100644
--- a/patch/combo.h
+++ b/patch/combo.h
@@ -1,5 +1,5 @@
-#if !HOLDBAR_PATCH
+#if !BAR_HOLDBAR_PATCH
static void keyrelease(XEvent *e);
-#endif // !HOLDBAR_PATCH
+#endif // !BAR_HOLDBAR_PATCH
static void combotag(const Arg *arg);
static void comboview(const Arg *arg); \ No newline at end of file
diff --git a/patch/holdbar.c b/patch/holdbar.c
index e3a5bfc..4be9af1 100644
--- a/patch/holdbar.c
+++ b/patch/holdbar.c
@@ -5,18 +5,18 @@ holdbar(const Arg *arg)
return;
selmon->showbar = 2;
updateholdbarpos(selmon);
- #if BARPADDING_PATCH
+ #if BAR_PADDING_PATCH
XMoveResizeWindow(dpy, selmon->barwin, selmon->wx + sp, selmon->by + vp, selmon->ww - 2 * sp, bh);
#else
XMoveResizeWindow(dpy, selmon->barwin, selmon->wx, selmon->by, selmon->ww, bh);
- #endif // BARPADDING_PATCH
- #if EXTRABAR_PATCH
- #if BARPADDING_PATCH
+ #endif // BAR_PADDING_PATCH
+ #if BAR_EXTRABAR_PATCH
+ #if BAR_PADDING_PATCH
XMoveResizeWindow(dpy, selmon->extrabarwin, selmon->wx + sp, selmon->eby - vp, selmon->ww - 2 * sp, bh);
#else
XMoveResizeWindow(dpy, selmon->extrabarwin, selmon->wx, selmon->eby, selmon->ww, bh);
- #endif // BARPADDING_PATCH
- #endif // EXTRABAR_PATCH
+ #endif // BAR_PADDING_PATCH
+ #endif // BAR_EXTRABAR_PATCH
}
void
@@ -35,18 +35,18 @@ keyrelease(XEvent *e)
if (e->xkey.keycode == XKeysymToKeycode(dpy, HOLDKEY) && selmon->showbar == 2) {
selmon->showbar = 0;
updateholdbarpos(selmon);
- #if BARPADDING_PATCH
+ #if BAR_PADDING_PATCH
XMoveResizeWindow(dpy, selmon->barwin, selmon->wx + sp, selmon->by + vp, selmon->ww - 2 * sp, bh);
#else
XMoveResizeWindow(dpy, selmon->barwin, selmon->wx, selmon->by, selmon->ww, bh);
- #endif // BARPADDING_PATCH
- #if EXTRABAR_PATCH
- #if BARPADDING_PATCH
+ #endif // BAR_PADDING_PATCH
+ #if BAR_EXTRABAR_PATCH
+ #if BAR_PADDING_PATCH
XMoveResizeWindow(dpy, selmon->extrabarwin, selmon->wx + sp, selmon->eby - vp, selmon->ww - 2 * sp, bh);
#else
XMoveResizeWindow(dpy, selmon->extrabarwin, selmon->wx, selmon->eby, selmon->ww, bh);
- #endif // BARPADDING_PATCH
- #endif // EXTRABAR_PATCH
+ #endif // BAR_PADDING_PATCH
+ #endif // BAR_EXTRABAR_PATCH
arrange(selmon);
}
#if COMBO_PATCH
@@ -59,8 +59,8 @@ updateholdbarpos(Monitor *m)
{
m->wy = m->my;
m->wh = m->mh;
- #if EXTRABAR_PATCH
- #if BARPADDING_PATCH
+ #if BAR_EXTRABAR_PATCH
+ #if BAR_PADDING_PATCH
m->wh = m->wh - vertpad * m->showbar * 2 - bh * m->showbar * 2;
m->wy = m->showbar ? m->wy + bh + vertpad: m->wy;
if (m->showbar) {
@@ -80,8 +80,8 @@ updateholdbarpos(Monitor *m)
m->by = -bh;
m->eby = -bh;
}
- #endif // BARPADDING_PATCH
- #elif BARPADDING_PATCH
+ #endif // BAR_PADDING_PATCH
+ #elif BAR_PADDING_PATCH
if (m->showbar) {
m->wh = m->wh - vertpad - bh;
m->by = m->topbar ? m->wy : m->wy + m->wh + vertpad;
@@ -95,5 +95,5 @@ updateholdbarpos(Monitor *m)
m->wy = m->topbar ? m->wy + bh : m->wy;
} else
m->by = -bh;
- #endif // EXTRABAR_PATCH
+ #endif // BAR_EXTRABAR_PATCH
}
diff --git a/patch/include.c b/patch/include.c
index d574fd6..5cde652 100644
--- a/patch/include.c
+++ b/patch/include.c
@@ -1,19 +1,57 @@
-/* Patches */
-#if ALPHA_PATCH
-#include "alpha.c"
+/* Bar functionality */
+#if BAR_ALPHA_PATCH
+#include "bar_alpha.c"
#endif
-#if ALTERNATIVE_TAGS_PATCH
-#include "alternativetags.c"
+#if BAR_ALTERNATIVE_TAGS_PATCH
+#include "bar_alternativetags.c"
#endif
+#if BAR_DWMBLOCKS_PATCH && BAR_STATUSCMD_PATCH
+#include "bar_dwmblocks.c"
+#endif
+#if BAR_LTSYMBOL_PATCH
+#include "bar_ltsymbol.c"
+#endif
+#if BAR_STATUS_PATCH
+#include "bar_status.c"
+#endif
+#if BAR_STATUS2D_PATCH
+#include "bar_status2d.c"
+#if BAR_EXTRABAR_PATCH
+#include "bar_status2d_eb.c"
+#endif // BAR_EXTRABAR_PATCH
+#endif
+#if BAR_STATUSBUTTON_PATCH
+#include "bar_statusbutton.c"
+#endif
+#if BAR_STATUSCMD_PATCH
+#include "bar_statuscmd.c"
+#endif
+#if BAR_TAGS_PATCH
+#include "bar_tags.c"
+#endif
+#if BAR_TAGGRID_PATCH
+#include "bar_taggrid.c"
+#endif
+#if BAR_WINTITLE_PATCH
+#include "bar_wintitle.c"
+#endif
+#if BAR_FANCYBAR_PATCH
+#include "bar_fancybar.c"
+#endif
+#if BAR_AWESOMEBAR_PATCH
+#include "bar_awesomebar.c"
+#endif
+#if BAR_SYSTRAY_PATCH
+#include "bar_systray.c"
+#endif
+
+/* Other patches */
#if ATTACHABOVE_PATCH || ATTACHASIDE_PATCH || ATTACHBELOW_PATCH || ATTACHBOTTOM_PATCH
#include "attachx.c"
#endif
#if AUTOSTART_PATCH
#include "autostart.c"
#endif
-#if AWESOMEBAR_PATCH
-#include "awesomebar.c"
-#endif
#if CFACTS_PATCH
#include "cfacts.c"
#endif
@@ -29,15 +67,12 @@
#if DRAGCFACT_PATCH && CFACTS_PATCH
#include "dragcfact.c"
#endif
-#if DWMBLOCKS_PATCH && STATUSCMD_PATCH
-#include "dwmblocks.c"
-#endif
#if DWMC_PATCH
#include "dwmc.c"
#elif FSIGNAL_PATCH
#include "fsignal.c"
#endif
-#if EWMHTAGS_PATCH
+#if BAR_EWMHTAGS_PATCH
#include "ewmhtags.c"
#endif
#if EXRESIZE_PATCH
@@ -58,7 +93,7 @@
#if FULLSCREEN_PATCH
#include "fullscreen.c"
#endif
-#if HOLDBAR_PATCH
+#if BAR_HOLDBAR_PATCH
#include "holdbar.c"
#endif
#if INPLACEROTATE_PATCH
@@ -131,21 +166,12 @@
#if STACKER_PATCH
#include "stacker.c"
#endif
-#if STATUS2D_PATCH && !STATUSCOLORS_PATCH
-#include "status2d.c"
-#endif
-#if STATUSCOLORS_PATCH
+#if BAR_STATUSCOLORS_PATCH
#include "statuscolors.c"
#endif
-#if STATUSCMD_PATCH
-#include "statuscmd.c"
-#endif
#if STICKY_PATCH
#include "sticky.c"
#endif
-#if SYSTRAY_PATCH
-#include "systray.c"
-#endif
#if SWALLOW_PATCH
#include "swallow.c"
#endif
@@ -188,7 +214,7 @@
#if VANITYGAPS_PATCH
#include "vanitygaps.c"
#endif
-#if VTCOLORS_PATCH
+#if BAR_VTCOLORS_PATCH
#include "vtcolors.c"
#endif
#if WARP_PATCH
@@ -200,7 +226,7 @@
#if ZOOMSWAP_PATCH
#include "zoomswap.c"
#endif
-#if XRDB_PATCH && !VTCOLORS_PATCH
+#if XRDB_PATCH && !BAR_VTCOLORS_PATCH
#include "xrdb.c"
#endif
#if DRAGMFACT_PATCH
@@ -211,44 +237,44 @@
#include "layout_facts.c"
#endif
#if BSTACK_LAYOUT
-#include "bstack.c"
+#include "layout_bstack.c"
#endif
#if BSTACKHORIZ_LAYOUT
-#include "bstackhoriz.c"
+#include "layout_bstackhoriz.c"
#endif
#if CENTEREDMASTER_LAYOUT
-#include "centeredmaster.c"
+#include "layout_centeredmaster.c"
#endif
#if CENTEREDFLOATINGMASTER_LAYOUT
-#include "centeredfloatingmaster.c"
+#include "layout_centeredfloatingmaster.c"
#endif
#if COLUMNS_LAYOUT
-#include "columns.c"
+#include "layout_columns.c"
#endif
#if DECK_LAYOUT
-#include "deck.c"
+#include "layout_deck.c"
#endif
#if FIBONACCI_DWINDLE_LAYOUT || FIBONACCI_SPIRAL_LAYOUT
-#include "fibonacci.c"
+#include "layout_fibonacci.c"
#endif
#if FLEXTILE_DELUXE_LAYOUT
-#include "flextile-deluxe.c"
+#include "layout_flextile-deluxe.c"
#endif
#if GAPPLESSGRID_LAYOUT
-#include "gapplessgrid.c"
+#include "layout_gapplessgrid.c"
#endif
#if GRIDMODE_LAYOUT
-#include "grid.c"
+#include "layout_grid.c"
#endif
#if HORIZGRID_LAYOUT
-#include "horizgrid.c"
+#include "layout_horizgrid.c"
#endif
#if MONOCLE_LAYOUT
-#include "monocle.c"
+#include "layout_monocle.c"
#endif
#if NROWGRID_LAYOUT
-#include "nrowgrid.c"
+#include "layout_nrowgrid.c"
#endif
#if TILE_LAYOUT
-#include "tile.c"
-#endif
+#include "layout_tile.c"
+#endif \ No newline at end of file
diff --git a/patch/include.h b/patch/include.h
index 97628aa..49ce915 100644
--- a/patch/include.h
+++ b/patch/include.h
@@ -1,19 +1,57 @@
-/* Patches */
-#if ALPHA_PATCH
-#include "alpha.h"
+/* Bar functionality */
+#if BAR_ALPHA_PATCH
+#include "bar_alpha.h"
#endif
-#if ALTERNATIVE_TAGS_PATCH
-#include "alternativetags.h"
+#if BAR_ALTERNATIVE_TAGS_PATCH
+#include "bar_alternativetags.h"
#endif
+#if BAR_DWMBLOCKS_PATCH && BAR_STATUSCMD_PATCH
+#include "bar_dwmblocks.h"
+#endif
+#if BAR_LTSYMBOL_PATCH
+#include "bar_ltsymbol.h"
+#endif
+#if BAR_STATUS_PATCH
+#include "bar_status.h"
+#endif
+#if BAR_STATUS2D_PATCH
+#include "bar_status2d.h"
+#if BAR_EXTRABAR_PATCH
+#include "bar_status2d_eb.h"
+#endif // BAR_EXTRABAR_PATCH
+#endif
+#if BAR_STATUSBUTTON_PATCH
+#include "bar_statusbutton.h"
+#endif
+#if BAR_STATUSCMD_PATCH
+#include "bar_statuscmd.h"
+#endif
+#if BAR_TAGS_PATCH
+#include "bar_tags.h"
+#endif
+#if BAR_TAGGRID_PATCH
+#include "bar_taggrid.h"
+#endif
+#if BAR_WINTITLE_PATCH
+#include "bar_wintitle.h"
+#endif
+#if BAR_FANCYBAR_PATCH
+#include "bar_fancybar.h"
+#endif
+#if BAR_AWESOMEBAR_PATCH
+#include "bar_awesomebar.h"
+#endif
+#if BAR_SYSTRAY_PATCH
+#include "bar_systray.h"
+#endif
+
+/* Other patches */
#if ATTACHABOVE_PATCH || ATTACHASIDE_PATCH || ATTACHBELOW_PATCH || ATTACHBOTTOM_PATCH
#include "attachx.h"
#endif
#if AUTOSTART_PATCH
#include "autostart.h"
#endif
-#if AWESOMEBAR_PATCH
-#include "awesomebar.h"
-#endif
#if CFACTS_PATCH
#include "cfacts.h"
#endif
@@ -32,15 +70,12 @@
#if DRAGMFACT_PATCH
#include "dragmfact.h"
#endif
-#if DWMBLOCKS_PATCH && STATUSCMD_PATCH
-#include "dwmblocks.h"
-#endif
#if DWMC_PATCH
#include "dwmc.h"
#elif FSIGNAL_PATCH
#include "fsignal.h"
#endif
-#if EWMHTAGS_PATCH
+#if BAR_EWMHTAGS_PATCH
#include "ewmhtags.h"
#endif
#if EXRESIZE_PATCH
@@ -61,7 +96,7 @@
#if FULLSCREEN_PATCH
#include "fullscreen.h"
#endif
-#if HOLDBAR_PATCH
+#if BAR_HOLDBAR_PATCH
#include "holdbar.h"
#endif
#if INPLACEROTATE_PATCH
@@ -134,18 +169,9 @@
#if STACKER_PATCH
#include "stacker.h"
#endif
-#if STATUS2D_PATCH && !STATUSCOLORS_PATCH
-#include "status2d.h"
-#endif
-#if STATUSCMD_PATCH
-#include "statuscmd.h"
-#endif
#if STICKY_PATCH
#include "sticky.h"
#endif
-#if SYSTRAY_PATCH
-#include "systray.h"
-#endif
#if SWALLOW_PATCH
#include "swallow.h"
#endif
@@ -188,7 +214,7 @@
#if VANITYGAPS_PATCH
#include "vanitygaps.h"
#endif
-#if VTCOLORS_PATCH
+#if BAR_VTCOLORS_PATCH
#include "vtcolors.h"
#endif
#if WARP_PATCH
@@ -200,49 +226,49 @@
#if ZOOMSWAP_PATCH
#include "zoomswap.h"
#endif
-#if XRDB_PATCH && !VTCOLORS_PATCH
+#if XRDB_PATCH && !BAR_VTCOLORS_PATCH
#include "xrdb.h"
#endif
/* Layouts */
#if BSTACK_LAYOUT
-#include "bstack.h"
+#include "layout_bstack.h"
#endif
#if BSTACKHORIZ_LAYOUT
-#include "bstackhoriz.h"
+#include "layout_bstackhoriz.h"
#endif
#if CENTEREDMASTER_LAYOUT
-#include "centeredmaster.h"
+#include "layout_centeredmaster.h"
#endif
#if CENTEREDFLOATINGMASTER_LAYOUT
-#include "centeredfloatingmaster.h"
+#include "layout_centeredfloatingmaster.h"
#endif
#if COLUMNS_LAYOUT
-#include "columns.h"
+#include "layout_columns.h"
#endif
#if DECK_LAYOUT
-#include "deck.h"
+#include "layout_deck.h"
#endif
#if FIBONACCI_DWINDLE_LAYOUT || FIBONACCI_SPIRAL_LAYOUT
-#include "fibonacci.h"
+#include "layout_fibonacci.h"
#endif
#if FLEXTILE_DELUXE_LAYOUT
-#include "flextile-deluxe.h"
+#include "layout_flextile-deluxe.h"
#endif
#if GAPPLESSGRID_LAYOUT
-#include "gapplessgrid.h"
+#include "layout_gapplessgrid.h"
#endif
#if GRIDMODE_LAYOUT
-#include "grid.h"
+#include "layout_grid.h"
#endif
#if HORIZGRID_LAYOUT
-#include "horizgrid.h"
+#include "layout_horizgrid.h"
#endif
#if MONOCLE_LAYOUT
-#include "monocle.h"
+#include "layout_monocle.h"
#endif
#if NROWGRID_LAYOUT
-#include "nrowgrid.h"
+#include "layout_nrowgrid.h"
#endif
#if TILE_LAYOUT
-#include "tile.h"
-#endif
+#include "layout_tile.h"
+#endif \ No newline at end of file
diff --git a/patch/killunsel.c b/patch/killunsel.c
index 1e15d2b..774847b 100644
--- a/patch/killunsel.c
+++ b/patch/killunsel.c
@@ -8,11 +8,11 @@ killunsel(const Arg *arg)
for (i = selmon->clients; i; i = i->next) {
if (ISVISIBLE(i) && i != selmon->sel) {
- #if SYSTRAY_PATCH
+ #if BAR_SYSTRAY_PATCH
if (!sendevent(i->win, wmatom[WMDelete], NoEventMask, wmatom[WMDelete], CurrentTime, 0, 0, 0))
#else
if (!sendevent(i, wmatom[WMDelete]))
- #endif // SYSTRAY_PATCH
+ #endif // BAR_SYSTRAY_PATCH
{
XGrabServer(dpy);
XSetErrorHandler(xerrordummy);
diff --git a/patch/bstack.c b/patch/layout_bstack.c
index be06647..be06647 100644
--- a/patch/bstack.c
+++ b/patch/layout_bstack.c
diff --git a/patch/bstack.h b/patch/layout_bstack.h
index 56c99ff..56c99ff 100644
--- a/patch/bstack.h
+++ b/patch/layout_bstack.h
diff --git a/patch/bstackhoriz.c b/patch/layout_bstackhoriz.c
index 0f9042f..0f9042f 100644
--- a/patch/bstackhoriz.c
+++ b/patch/layout_bstackhoriz.c
diff --git a/patch/bstackhoriz.h b/patch/layout_bstackhoriz.h
index 8dd0ebd..8dd0ebd 100644
--- a/patch/bstackhoriz.h
+++ b/patch/layout_bstackhoriz.h
diff --git a/patch/centeredfloatingmaster.c b/patch/layout_centeredfloatingmaster.c
index 756b41f..756b41f 100644
--- a/patch/centeredfloatingmaster.c
+++ b/patch/layout_centeredfloatingmaster.c
diff --git a/patch/centeredfloatingmaster.h b/patch/layout_centeredfloatingmaster.h
index e4147b3..e4147b3 100644
--- a/patch/centeredfloatingmaster.h
+++ b/patch/layout_centeredfloatingmaster.h
diff --git a/patch/centeredmaster.c b/patch/layout_centeredmaster.c
index a72eb07..a72eb07 100644
--- a/patch/centeredmaster.c
+++ b/patch/layout_centeredmaster.c
diff --git a/patch/centeredmaster.h b/patch/layout_centeredmaster.h
index b047212..b047212 100644
--- a/patch/centeredmaster.h
+++ b/patch/layout_centeredmaster.h
diff --git a/patch/columns.c b/patch/layout_columns.c
index bcdaa11..bcdaa11 100644
--- a/patch/columns.c
+++ b/patch/layout_columns.c
diff --git a/patch/columns.h b/patch/layout_columns.h
index 8f64a09..8f64a09 100644
--- a/patch/columns.h
+++ b/patch/layout_columns.h
diff --git a/patch/deck.c b/patch/layout_deck.c
index 6f2027d..6f2027d 100644
--- a/patch/deck.c
+++ b/patch/layout_deck.c
diff --git a/patch/deck.h b/patch/layout_deck.h
index abedeb2..abedeb2 100644
--- a/patch/deck.h
+++ b/patch/layout_deck.h
diff --git a/patch/fibonacci.c b/patch/layout_fibonacci.c
index 87a1bdf..87a1bdf 100644
--- a/patch/fibonacci.c
+++ b/patch/layout_fibonacci.c
diff --git a/patch/fibonacci.h b/patch/layout_fibonacci.h
index a15eb76..a15eb76 100644
--- a/patch/fibonacci.h
+++ b/patch/layout_fibonacci.h
diff --git a/patch/flextile-deluxe.c b/patch/layout_flextile-deluxe.c
index a877c92..a877c92 100644
--- a/patch/flextile-deluxe.c
+++ b/patch/layout_flextile-deluxe.c
diff --git a/patch/flextile-deluxe.h b/patch/layout_flextile-deluxe.h
index 01bce7b..01bce7b 100644
--- a/patch/flextile-deluxe.h
+++ b/patch/layout_flextile-deluxe.h
diff --git a/patch/gapplessgrid.c b/patch/layout_gapplessgrid.c
index 0330181..0330181 100644
--- a/patch/gapplessgrid.c
+++ b/patch/layout_gapplessgrid.c
diff --git a/patch/gapplessgrid.h b/patch/layout_gapplessgrid.h
index 28a7b5d..28a7b5d 100644
--- a/patch/gapplessgrid.h
+++ b/patch/layout_gapplessgrid.h
diff --git a/patch/grid.c b/patch/layout_grid.c
index df19896..df19896 100644
--- a/patch/grid.c
+++ b/patch/layout_grid.c
diff --git a/patch/grid.h b/patch/layout_grid.h
index 81149ce..81149ce 100644
--- a/patch/grid.h
+++ b/patch/layout_grid.h
diff --git a/patch/horizgrid.c b/patch/layout_horizgrid.c
index 48f66ab..48f66ab 100644
--- a/patch/horizgrid.c
+++ b/patch/layout_horizgrid.c
diff --git a/patch/horizgrid.h b/patch/layout_horizgrid.h
index 71a57fb..71a57fb 100644
--- a/patch/horizgrid.h
+++ b/patch/layout_horizgrid.h
diff --git a/patch/monocle.c b/patch/layout_monocle.c
index 1533aa9..1533aa9 100644
--- a/patch/monocle.c
+++ b/patch/layout_monocle.c
diff --git a/patch/monocle.h b/patch/layout_monocle.h
index d3df960..d3df960 100644
--- a/patch/monocle.h
+++ b/patch/layout_monocle.h
diff --git a/patch/nrowgrid.c b/patch/layout_nrowgrid.c
index 5709d80..5709d80 100644
--- a/patch/nrowgrid.c
+++ b/patch/layout_nrowgrid.c
diff --git a/patch/nrowgrid.h b/patch/layout_nrowgrid.h
index de71a50..de71a50 100644
--- a/patch/nrowgrid.h
+++ b/patch/layout_nrowgrid.h
diff --git a/patch/tile.c b/patch/layout_tile.c
index fa0b90a..fa0b90a 100644
--- a/patch/tile.c
+++ b/patch/layout_tile.c
diff --git a/patch/tile.h b/patch/layout_tile.h
index 8730e13..8730e13 100644
--- a/patch/tile.h
+++ b/patch/layout_tile.h
diff --git a/patch/status2d.h b/patch/status2d.h
deleted file mode 100644
index 7688807..0000000
--- a/patch/status2d.h
+++ /dev/null
@@ -1,2 +0,0 @@
-static int drawstatusbar(Monitor *m, int bh, char* text, int stw, int stp, int align);
-static int status2dtextlength(char* stext); \ No newline at end of file
diff --git a/patch/statuscolors.c b/patch/statuscolors.c
index ef41735..cc24ad4 100644
--- a/patch/statuscolors.c
+++ b/patch/statuscolors.c
@@ -12,11 +12,11 @@ textw_wosc(char *s)
}
ctmp = *ts;
*ts = '\0';
- #if PANGO_PATCH
+ #if BAR_PANGO_PATCH
sw += drw_font_getwidth(drw, tp, True);
#else
sw += drw_fontset_getwidth(drw, tp);
- #endif // PANGO_PATCH
+ #endif // BAR_PANGO_PATCH
*ts = ctmp;
if (ctmp == '\0')
break;
diff --git a/patch/xrdb.c b/patch/xrdb.c
index ef9e186..f3bd38a 100644
--- a/patch/xrdb.c
+++ b/patch/xrdb.c
@@ -30,16 +30,16 @@ loadxrdb()
XRDB_LOAD_COLOR("dwm.selfloatcolor", selfloatcolor);
#endif // FLOAT_BORDER_COLOR_PATCH
- #if STATUSCOLORS_PATCH
+ #if BAR_STATUSCOLORS_PATCH
XRDB_LOAD_COLOR("dwm.warnfgcolor", warnfgcolor);
XRDB_LOAD_COLOR("dwm.warnbgcolor", warnbgcolor);
XRDB_LOAD_COLOR("dwm.warnbordercolor", warnbordercolor);
#if FLOAT_BORDER_COLOR_PATCH
XRDB_LOAD_COLOR("dwm.warnfloatcolor", warnfloatcolor);
#endif // FLOAT_BORDER_COLOR_PATCH
- #endif // STATUSCOLORS_PATCH
+ #endif // BAR_STATUSCOLORS_PATCH
- #if URGENTBORDER_PATCH || STATUSCOLORS_PATCH
+ #if URGENTBORDER_PATCH || BAR_STATUSCOLORS_PATCH
XRDB_LOAD_COLOR("dwm.urgfgcolor", urgfgcolor);
XRDB_LOAD_COLOR("dwm.urgbgcolor", urgbgcolor);
XRDB_LOAD_COLOR("dwm.urgbordercolor", urgbordercolor);
@@ -57,14 +57,14 @@ loadxrdb()
#endif // FLOAT_BORDER_COLOR_PATCH
#endif // AWESOMEBAR_PATCH
- #if TITLECOLOR_PATCH
+ #if BAR_TITLECOLOR_PATCH
XRDB_LOAD_COLOR("dwm.titlefgcolor", titlefgcolor);
XRDB_LOAD_COLOR("dwm.titlebgcolor", titlebgcolor);
XRDB_LOAD_COLOR("dwm.titlebordercolor", titlebordercolor);
#if FLOAT_BORDER_COLOR_PATCH
XRDB_LOAD_COLOR("dwm.titlefloatcolor", titlefloatcolor);
#endif // FLOAT_BORDER_COLOR_PATCH
- #endif // TITLECOLOR_PATCH
+ #endif // BAR_TITLECOLOR_PATCH
}
}
}
@@ -79,9 +79,9 @@ xrdb(const Arg *arg)
int i;
for (i = 0; i < LENGTH(colors); i++)
scheme[i] = drw_scm_create(drw, colors[i],
- #if ALPHA_PATCH
+ #if BAR_ALPHA_PATCH
alphas[i],
- #endif // ALPHA_PATCH
+ #endif // BAR_ALPHA_PATCH
#if FLOAT_BORDER_COLOR_PATCH
4
#else
diff --git a/patches.def.h b/patches.def.h
index 81dcc7c..a95e26e 100644
--- a/patches.def.h
+++ b/patches.def.h
@@ -10,31 +10,228 @@
* here for grouping purposes.
*/
-/* Patches */
+/**
+ * Bar modules
+ */
-/* This patch changes the rectangle indicating if a tag is used by a client into a bar
- * above the tag name for better visibility.
- * https://dwm.suckless.org/patches/activetagindicatorbar/
+/* Enhanced taskbar that shows the titles of all visible windows in the status bar
+ * and allows focus / hiding / unhiding of windows by clicking on the status bar.
+ * Awesomebar takes precedence over fancybar.
+ * https://dwm.suckless.org/patches/awesomebar/
*/
-#define ACTIVETAGINDICATORBAR_PATCH 0
+#define BAR_AWESOMEBAR_PATCH 0
-/* Alternative patch to the activetagindicatorbar patch, adds the bar below the tag
- * icon rather than above.
+/* This patch depends on statuscmd patch and adds integration with a (patched) dwmblocks
+ * instance to give a clickable status bar.
+ * Patch: https://gist.github.com/danbyl/54f7c1d57fc6507242a95b71c3d8fdea
+ * dwmblocks: https://github.com/torrinfail/dwmblocks
+ */
+#define BAR_DWMBLOCKS_PATCH 0
+
+/* This patch shows the titles of all visible windows in the status bar
+ * (as opposed to showing only the selected one).
+ * Awesomebar takes precedence over fancybar. Fancybar takes precedence over
+ * the centeredwindowname patch.
+ * https://dwm.suckless.org/patches/fancybar/
+ */
+#define BAR_FANCYBAR_PATCH 0
+
+/* Show layout symbol in bar */
+#define BAR_LTSYMBOL_PATCH 1
+
+/* This patch adds an option to place tags in rows like in many other window managers.
+ * https://dwm.suckless.org/patches/taggrid/
+ */
+#define BAR_TAGGRID_PATCH 0
+
+/* Show status in bar */
+#define BAR_STATUS_PATCH 1
+
+/* This patch adds a clickable button to the left hand side of the statusbar.
+ * https://dwm.suckless.org/patches/statusbutton/
+ */
+#define BAR_STATUSBUTTON_PATCH 0
+
+/* This patch adds the ability to execute shell commands based on the mouse button and position
+ * when clicking the status bar. Refer to the website for usage.
+ * https://dwm.suckless.org/patches/statuscmd/
+ */
+#define BAR_STATUSCMD_PATCH 0
+
+/* Status2d allows colors and rectangle drawing in your dwm status bar.
+ * This patch is incompatible with the statuscolors patch which takes precedence.
+ * This patch is incompatible with the extrabar patch.
+ * https://dwm.suckless.org/patches/status2d/
+ */
+#define BAR_STATUS2D_PATCH 0
+
+/* Supplementary patch should you want to disable alpha for the status2d section */
+#define BAR_STATUS2D_NO_ALPHA_PATCH 0
+
+/* The systray patch adds systray for the status bar.
+ * https://dwm.suckless.org/patches/systray/
+ */
+#define BAR_SYSTRAY_PATCH 0
+
+/* Show tag symbols in bar */
+#define BAR_TAGS_PATCH 1
+
+/* Show window title in bar */
+#define BAR_WINTITLE_PATCH 1
+
+/**
+ * Bar options
*/
-#define ACTIVETAGINDICATORBAR_ALT1_PATCH 0
/* The alpha patch adds transparency for the status bar.
* You need to uncomment the corresponding line in config.mk to use the -lXrender library
* when including this patch.
* https://dwm.suckless.org/patches/alpha/
*/
-#define ALPHA_PATCH 0
+#define BAR_ALPHA_PATCH 0
/* This patch introduces alternative tags which can be switched on the fly for the
* sole purpose of providing visual aid.
* https://dwm.suckless.org/patches/alternativetags/
*/
-#define ALTERNATIVE_TAGS_PATCH 0
+#define BAR_ALTERNATIVE_TAGS_PATCH 0
+
+/* This patch changes the rectangle indicating if a tag is used by a client into a bar
+ * above the tag name for better visibility.
+ * https://dwm.suckless.org/patches/activetagindicatorbar/
+ */
+#define BAR_ACTIVETAGINDICATORBAR_PATCH 0
+
+/* Alternative patch to the activetagindicatorbar patch, adds the bar below the tag
+ * icon rather than above.
+ */
+#define BAR_ACTIVETAGINDICATORBAR_ALT1_PATCH 0
+
+/* This patch centers the WM_NAME of the currently selected window on the status bar.
+ * Both fancybar and awesomebar patches take precedence over this patch.
+ * This patch only applies when the BAR_WINTITLE_PATCH module is used.
+ * https://dwm.suckless.org/patches/centeredwindowname/
+ */
+#define BAR_CENTEREDWINDOWNAME_PATCH 0
+
+/* This patch enables color emoji in dwm by removing a workaround for a BadLength error
+ * in the Xft library when color glyphs are used.
+ * To enable this you will need an updated Xft library that can handle color glyphs otherwise
+ * dwm will crash on encountering such characters. Note that you will also need a font that
+ * provides color emojis for this to work.
+ */
+#define BAR_COLOR_EMOJI_PATCH 0
+
+/* Updates the position of dmenu to match that of the bar. I.e. if topbar is 0 then dmenu
+ * will appear at the bottom and if 1 then dmenu will appear at the top.
+ * https://dwm.suckless.org/patches/dmenumatchtop
+ */
+#define BAR_DMENUMATCHTOP_PATCH 0
+
+/* This patch will enable an extra status bar in dwm in a similar manner to the dualstatus
+ * patch. If the primary status is at the top via topbar then the extra status bar will be
+ * placed at the bottom and vice versa.
+ * https://dwm.suckless.org/patches/extrabar/
+ */
+#define BAR_EXTRABAR_PATCH 0
+
+/* Adds EWMH support for _NET_NUMBER_OF_DESKTOPS, _NET_CURRENT_DESKTOP, _NET_DESKTOP_NAMES
+ * and _NET_DESKTOP_VIEWPORT, which allows for compatibility with other bars and programs
+ * that request workspace information. For example polybar's xworkspaces module.
+ * https://dwm.suckless.org/patches/ewmhtags/
+ */
+#define BAR_EWMHTAGS_PATCH 0
+
+/* Allows the bar height to be explicitly set rather than being derived from font.
+ * https://dwm.suckless.org/patches/bar_height/
+ */
+#define BAR_HEIGHT_PATCH 0
+
+/* This patch prevents dwm from drawing tags with no clients (i.e. vacant) on the bar.
+ * https://dwm.suckless.org/patches/hide_vacant_tags/
+ */
+#define BAR_HIDEVACANTTAGS_PATCH 0
+
+/* With this patch dwm's built-in status bar is only shown when HOLDKEY is pressed
+ * and the bar will now overlay the display.
+ * http://dwm.suckless.org/patches/holdbar/
+ */
+#define BAR_HOLDBAR_PATCH 0
+
+/* Sometimes dwm crashes when it cannot render some glyphs in window titles (usually emoji).
+ * This patch is essentially a hack to ignore any errors when drawing text on the status bar.
+ * https://groups.google.com/forum/m/#!topic/wmii/7bncCahYIww
+ * https://docs.google.com/viewer?a=v&pid=forums&srcid=MDAwODA2MTg0MDQyMjE0OTgzMzMBMDQ3ODQzODkyMTU3NTAyMTMxNTYBX2RUMVNtOUtDQUFKATAuMQEBdjI&authuser=0
+ */
+#define BAR_IGNORE_XFT_ERRORS_WHEN_DRAWING_TEXT_PATCH 0
+
+/* This patch adds vertical and horizontal space between the statusbar and the edge of the screen.
+ * https://dwm.suckless.org/patches/barpadding/
+ */
+#define BAR_PADDING_PATCH 0
+
+/* This patch adds simple markup for status messages using pango markup.
+ * This depends on the pango library v1.44 or greater.
+ * You need to uncomment the corresponding lines in config.mk to use the pango libraries
+ * when including this patch.
+ *
+ * Note that the pango patch does not protect against the BadLength error from Xft
+ * when color glyphs are used, which means that dwm will crash if color emoji is used.
+ *
+ * If you need color emoji then you may want to install this patched library from the AUR:
+ * https://aur.archlinux.org/packages/libxft-bgra/
+ *
+ * A long term fix for the libXft library is pending approval of this pull request:
+ * https://gitlab.freedesktop.org/xorg/lib/libxft/-/merge_requests/1
+ *
+ * Also see:
+ * https://developer.gnome.org/pygtk/stable/pango-markup-language.html
+ * https://lists.suckless.org/hackers/2004/17285.html
+ * https://dwm.suckless.org/patches/pango/
+ */
+#define BAR_PANGO_PATCH 0
+
+/* This patch allows the status text to be fixed to the bar on a specific
+ * monitor rather than being drawn on the focused monitor.
+ * The statusallmons patch takes precedence over this patch.
+ * NB: If used together with the systray patch then consider setting
+ * systraypinning to statmonval+1.
+ * https://dwm.suckless.org/patches/staticstatus/
+ */
+#define BAR_STATICSTATUS_PATCH 0
+
+/* This patch draws and updates the statusbar on all monitors.
+ * https://dwm.suckless.org/patches/statusallmons/
+ */
+#define BAR_STATUSALLMONS_PATCH 0
+
+/* This patch enables colored text in the status bar. It changes the way colors are defined
+ * in config.h allowing multiple color combinations for use in the status script.
+ * This patch is incompatible with and takes precedence over the status2d patch.
+ * https://dwm.suckless.org/patches/statuscolors/
+ */
+#define BAR_STATUSCOLORS_PATCH 0
+
+/* This patch adds configuration options for horizontal and vertical padding in the status bar.
+ * https://dwm.suckless.org/patches/statuspadding/
+ */
+#define BAR_STATUSPADDING_PATCH 0
+
+/* Adds a new color scheme used by the (selected) window title in the bar.
+ * https://dwm.suckless.org/patches/titlecolor/
+ */
+#define BAR_TITLECOLOR_PATCH 0
+
+/* This patch adds the ability for dwm to read colors from the linux virtual console.
+ * /sys/module/vt/parameters/default_{red,grn,blu}
+ * Essentially this way the colors you use in your regular tty is "mirrored" to dwm.
+ * https://dwm.suckless.org/patches/vtcolors/
+ */
+#define BAR_VTCOLORS_PATCH 0
+
+/***
+ * Other patches
+ */
/* This patch prevents the focus to drift from the active fullscreen client when
* using focusstack().
@@ -80,23 +277,6 @@
*/
#define AUTORESIZE_PATCH 0
-/* Enhanced taskbar that shows the titles of all visible windows in the status bar
- * and allows focus / hiding / unhiding of windows by clicking on the status bar.
- * Awesomebar takes precedence over fancybar.
- * https://dwm.suckless.org/patches/awesomebar/
- */
-#define AWESOMEBAR_PATCH 0
-
-/* Allows the bar height to be explicitly set rather than being derived from font.
- * https://dwm.suckless.org/patches/bar_height/
- */
-#define BAR_HEIGHT_PATCH 0
-
-/* This patch adds vertical and horizontal space between the statusbar and the edge of the screen.
- * https://dwm.suckless.org/patches/barpadding/
- */
-#define BARPADDING_PATCH 0
-
/* This patch adds an iscentered rule to automatically center clients on the current monitor.
* This patch takes precedence over centeredwindowname and fancybar patches.
* https://dwm.suckless.org/patches/center/
@@ -120,12 +300,6 @@
*/
#define CENTER_TRANSIENT_WINDOWS_BY_PARENT_PATCH 0
-/* This patch centers the WM_NAME of the currently selected window on the status bar.
- * Both fancybar and awesomebar patches take precedence over this patch.
- * https://dwm.suckless.org/patches/centeredwindowname/
- */
-#define CENTEREDWINDOWNAME_PATCH 0
-
/* This patch provides the ability to assign different weights to clients in their
* respective stack in tiled layout.
* https://dwm.suckless.org/patches/cfacts/
@@ -137,14 +311,6 @@
*/
#define CMDCUSTOMIZE_PATCH 0
-/* This patch enables color emoji in dwm by removing a workaround for a BadLength error
- * in the Xft library when color glyphs are used.
- * To enable this you will need an updated Xft library that can handle color glyphs otherwise
- * dwm will crash on encountering such characters. Note that you will also need a font that
- * provides color emojis for this to work.
- */
-#define COLOR_EMOJI_PATCH 0
-
/* This patch tweaks the tagging interface so that you can select multiple tags for tag
* or view by pressing all the right keys as a combo. For example to view tags 1 and 3,
* hold MOD and then press and hold 1 and 3 together.
@@ -157,12 +323,6 @@
*/
#define CYCLELAYOUTS_PATCH 0
-/* Updates the position of dmenu to match that of the bar. I.e. if topbar is 0 then dmenu
- * will appear at the bottom and if 1 then dmenu will appear at the top.
- * https://dwm.suckless.org/patches/dmenumatchtop
- */
-#define DMENUMATCHTOP_PATCH 0
-
/* Similarly to the dragmfact patch this allows you to click and drag clients to change the
* cfact to adjust the client's size in the stack. This patch depends on the cfacts patch.
*/
@@ -175,13 +335,6 @@
*/
#define DRAGMFACT_PATCH 0
-/* This patch depends on statuscmd patch and adds integration with a (patched) dwmblocks
- * instance to give a clickable status bar.
- * Patch: https://gist.github.com/danbyl/54f7c1d57fc6507242a95b71c3d8fdea
- * dwmblocks: https://github.com/torrinfail/dwmblocks
- */
-#define DWMBLOCKS_PATCH 0
-
/* Simple dwmc client using a fork of fsignal to communicate with dwm.
* To use this either copy the patch/dwmc shell script to somewhere in your path or
* uncomment the following line in Makefile:
@@ -197,13 +350,6 @@
*/
#define EMPTYVIEW_PATCH 0
-/* Adds EWMH support for _NET_NUMBER_OF_DESKTOPS, _NET_CURRENT_DESKTOP, _NET_DESKTOP_NAMES
- * and _NET_DESKTOP_VIEWPORT, which allows for compatibility with other bars and programs
- * that request workspace information. For example polybar's xworkspaces module.
- * https://dwm.suckless.org/patches/ewmhtags/
- */
-#define EWMHTAGS_PATCH 0
-
/* This patch allows the user to change size and placement of floating windows using only the
* keyboard. It also allows for temporary vertical and horizontal extension of windows similar
* to other WMs fill command.
@@ -211,13 +357,6 @@
*/
#define EXRESIZE_PATCH 0
-/* This patch will enable an extra status bar in dwm in a similar manner to the dualstatus
- * patch. If the primary status is at the top via topbar then the extra status bar will be
- * placed at the bottom and vice versa.
- * https://dwm.suckless.org/patches/extrabar/
- */
-#define EXTRABAR_PATCH 0
-
/* Only allow clients to "fullscreen" into the space currently given to them.
* As an example, this will allow you to view a fullscreen video in your browser on
* one half of the screen, while having the other half available for other tasks.
@@ -233,14 +372,6 @@
*/
#define FAKEFULLSCREEN_CLIENT_PATCH 0
-/* This patch shows the titles of all visible windows in the status bar
- * (as opposed to showing only the selected one).
- * Awesomebar takes precedence over fancybar. Fancybar takes precedence over
- * the centeredwindowname patch.
- * https://dwm.suckless.org/patches/fancybar/
- */
-#define FANCYBAR_PATCH 0
-
/* This patch allows a different border color to be chosen for floating windows.
* https://dwm.suckless.org/patches/float_border_color/
*/
@@ -296,17 +427,6 @@
*/
#define FULLSCREEN_PATCH 0
-/* This patch prevents dwm from drawing tags with no clients (i.e. vacant) on the bar.
- * https://dwm.suckless.org/patches/hide_vacant_tags/
- */
-#define HIDEVACANTTAGS_PATCH 0
-
-/* With this patch dwm's built-in status bar is only shown when HOLDKEY is pressed
- * and the bar will now overlay the display.
- * http://dwm.suckless.org/patches/holdbar/
- */
-#define HOLDBAR_PATCH 0
-
/* This patch provides a keybinding to rotate all clients in the currently selected
* area (master or stack) without affecting the other area.
* https://dwm.suckless.org/patches/inplacerotate/
@@ -318,13 +438,6 @@
*/
#define ISPERMANENT_PATCH 0
-/* Sometimes dwm crashes when it cannot render some glyphs in window titles (usually emoji).
- * This patch is essentially a hack to ignore any errors when drawing text on the status bar.
- * https://groups.google.com/forum/m/#!topic/wmii/7bncCahYIww
- * https://docs.google.com/viewer?a=v&pid=forums&srcid=MDAwODA2MTg0MDQyMjE0OTgzMzMBMDQ3ODQzODkyMTU3NTAyMTMxNTYBX2RUMVNtOUtDQUFKATAuMQEBdjI&authuser=0
- */
-#define IGNORE_XFT_ERRORS_WHEN_DRAWING_TEXT_PATCH 0
-
/* This patch adds key modes (like in vim or emacs) where chains of keyboard shortcuts
* can be performed.
* https://dwm.suckless.org/patches/keymodes/
@@ -336,17 +449,12 @@
*/
#define KILLUNSEL_PATCH 0
-/* Moves the layout symbol in the status bar to the left hand side.
- * http://dwm.suckless.org/patches/leftlayout/
- */
-#define LEFTLAYOUT_PATCH 0
-
/* By default in dwm it is possible to make an application fullscreen, then use
* the focusstack keybindings to focus on other windows beneath the current window.
* It is also possible to spawn new windows (e.g. a terminal) that end up getting
* focus while the previous window remains in fullscreen. This patch ensures that
* in such scenarios the previous window loses fullscreen.
- * https://github.com/bakkeby/patches/tree/master/dwm/dwm-losefullscreen-6.2.diff
+ * https://github.com/bakkeby/patches/blob/master/dwm/dwm-losefullscreen-6.2.diff
*/
#define LOSEFULLSCREEN_PATCH 0
@@ -421,27 +529,6 @@
*/
#define ONLYQUITONEMPTY_PATCH 0
-/* This patch adds simple markup for status messages using pango markup.
- * This depends on the pango library v1.44 or greater.
- * You need to uncomment the corresponding lines in config.mk to use the pango libraries
- * when including this patch.
- *
- * Note that the pango patch does not protect against the BadLength error from Xft
- * when color glyphs are used, which means that dwm will crash if color emoji is used.
- *
- * If you need color emoji then you may want to install this patched library from the AUR:
- * https://aur.archlinux.org/packages/libxft-bgra/
- *
- * A long term fix for the libXft library is pending approval of this pull request:
- * https://gitlab.freedesktop.org/xorg/lib/libxft/-/merge_requests/1
- *
- * Also see:
- * https://developer.gnome.org/pygtk/stable/pango-markup-language.html
- * https://lists.suckless.org/hackers/2004/17285.html
- * https://dwm.suckless.org/patches/pango/
- */
-#define PANGO_PATCH 0
-
/* The pertag patch adds nmaster, mfacts and layouts per tag rather than per
* monitor (default).
* https://dwm.suckless.org/patches/pertag/
@@ -466,6 +553,11 @@
*/
#define PUSH_NO_MASTER_PATCH 0
+/* Resets the layout and mfact if there is only one visible client.
+ * https://dwm.suckless.org/patches/resetlayout/
+ */
+#define RESETLAYOUT_PATCH 0
+
/* By default, windows only resize from the bottom right corner. With this
* patch the mouse is warped to the nearest corner and you resize from there.
* https://dwm.suckless.org/patches/resizecorners/
@@ -503,7 +595,7 @@
*/
#define SAVEFLOATS_PATCH 0
-/* The scratchpads patch allows you to spawn or restore floating terminal windows.
+/* The scratchpad patch allows you to spawn or restore floating terminal windows.
* It is typically useful when one need to do some short typing.
* Upgraded to Christian Tenllado's multiple scratchpad version.
* https://lists.suckless.org/hackers/2004/17205.html
@@ -511,13 +603,6 @@
*/
#define SCRATCHPADS_PATCH 0
-/* The scratchpad patch above automatically resizes and centers the scratchpad window every
- * time you spawn it. This alteration of the patch disables that so that the size and position
- * of the scratchpad window is retained when you respawn it. If you enable this then you may
- * want to also take the centered patch and enable the iscentered flag for floating scratchpads.
- */
-#define SCRATCHPAD_KEEP_POSITION_AND_SIZE_PATCH 0
-
/* This alternative patch enables a scratchpad feature in dwm similar to the scratchpad
* feature in i3wm.
* https://github.com/GasparVardanyan/dwm-scratchpad
@@ -589,82 +674,26 @@
*/
#define STACKER_PATCH 0
-/* This patch allows the status text to be fixed to the bar on a specific
- * monitor rather than being drawn on the focused monitor.
- * The statusallmons patch takes precedence over this patch.
- * NB: If used together with the systray patch then consider setting
- * systraypinning to statmonval+1.
- * https://dwm.suckless.org/patches/staticstatus/
- */
-#define STATICSTATUS_PATCH 0
-
-/* Status2d allows colors and rectangle drawing in the dwm status bar.
- * This patch is incompatible with the statuscolors patch which takes precedence.
- * This patch is incompatible with the extrabar patch.
- * NB: If using this with dwmblocks then make sure to increase CMDLENGTH in dwmblocks.c
- * from 50 (default) to 1024.
- * https://dwm.suckless.org/patches/status2d/
- */
-#define STATUS2D_PATCH 0
-
-/* Supplementary patch should you want to disable alpha for the status2d section */
-#define STATUS2D_NO_ALPHA_PATCH 0
-
-/* This patch draws and updates the statusbar on all monitors.
- * https://dwm.suckless.org/patches/statusallmons/
- */
-#define STATUSALLMONS_PATCH 0
-
-/* This patch adds a clickable button to the left hand side of the statusbar.
- * https://dwm.suckless.org/patches/statusbutton/
- */
-#define STATUSBUTTON_PATCH 0
-
-/* This patch enables colored text in the status bar. It changes the way colors are defined
- * in config.h allowing multiple color combinations for use in the status script.
- * This patch is incompatible with and takes precedence over the status2d patch.
- * https://dwm.suckless.org/patches/statuscolors/
- */
-#define STATUSCOLORS_PATCH 0
-
-/* This patch adds configuration options for horizontal and vertical padding in the status bar.
- * https://dwm.suckless.org/patches/statuspadding/
- */
-#define STATUSPADDING_PATCH 0
-
/* Adds toggleable keyboard shortcut to make a client 'sticky', i.e. visible on all tags.
* https://dwm.suckless.org/patches/sticky/
*/
#define STICKY_PATCH 0
-/* This patch adds the ability to execute shell commands based on the mouse button and position
- * when clicking the status bar. Refer to the website for usage.
- * https://dwm.suckless.org/patches/statuscmd/
- */
-#define STATUSCMD_PATCH 0
-
-/* The systray patch adds systray for the status bar.
- * https://dwm.suckless.org/patches/systray/
- */
-#define SYSTRAY_PATCH 0
-
/* This patch adds "window swallowing" to dwm as known from Plan 9's windowing system rio.
* Clients marked with isterminal in config.h swallow a window opened by any child process,
* e.g. running xclock in a terminal. Closing the xclock window restores the terminal window
* in the current position.
- * This patch depends on the following additional libraries:
- * - libxcb
- * - Xlib-libxcb
- * - xcb-res
- * You need to uncomment the corresponding line in config.mk to use the -lX11-xcb, -lxcb
- * and -lxcb-res libraries when including this patch.
* https://dwm.suckless.org/patches/swallow/
*/
#define SWALLOW_PATCH 0
/* This patch depends on the pertag patch and makes it possible to switch focus with a single
- * shortcut (MOD+s) instead of having to think if you should use MOD+j or MOD+k for reaching
+ * shortcut (MOD+s) instead of having to think if you should use mod-j or mod-k for reaching
* the previously used window.
+ * This patch depends on the following additional libraries:
+ * - libxcb
+ * - Xlib-libxcb
+ * - xcb-res
* https://dwm.suckless.org/patches/swapfocus/
*/
#define SWAPFOCUS_PATCH 0
@@ -693,7 +722,7 @@
*
* (*) except if the client has been moved between tags or to another monitor
*
- * https://github.com/bakkeby/patches/tree/master/dwm/dwm-switchtag-6.2.diff
+ * https://github.com/bakkeby/patches/blob/master/dwm/dwm-switchtag-6.2.diff
* Also see https://dwm.suckless.org/patches/switchtotag
*/
#define SWITCHTAG_PATCH 0
@@ -704,15 +733,10 @@
#define TAGALL_PATCH 0
/* This patch allows you to move all visible windows on a monitor to an adjacent monitor.
- * https://github.com/bakkeby/patches/tree/master/dwm/dwm-tagallmon-6.2.diff
+ * https://github.com/bakkeby/patches/blob/master/dwm/dwm-tagallmon-6.2.diff
*/
#define TAGALLMON_PATCH 0
-/* This patch adds an option to place tags in rows like in many other window managers.
- * https://dwm.suckless.org/patches/taggrid/
- */
-#define TAGGRID_PATCH 0
-
/* This patch makes new clients attach into the stack area when you toggle a new tag into
* view. This means your master area will remain unchanged when toggling views.
* The allmaster patch will cause all clients in the master area to be left alone. This patch
@@ -733,7 +757,7 @@
* monitor until you exit fullscreen view (at which point it will appear on the adjacent
* monitor). This patch allows a fullscreen window to be moved to an adjacent monitor
* while remaining in fullscreen.
- * https://github.com/bakkeby/patches/tree/master/dwm/dwm-tagmonfixfs-6.2.diff
+ * https://github.com/bakkeby/patches/blob/master/dwm/dwm-tagmonfixfs-6.2.diff
*/
#define TAGMONFIXFS_PATCH 0
@@ -745,17 +769,12 @@
/* This patch allows you to swap all visible windows on one monitor with those of an
* adjacent monitor.
- * https://github.com/bakkeby/patches/tree/master/dwm/dwm-tagswapmon-6.2.diff
+ * https://github.com/bakkeby/patches/blob/master/dwm/dwm-tagswapmon-6.2.diff
*/
#define TAGSWAPMON_PATCH 0
-/* Adds a new color scheme used by the (selected) window title in the bar.
- * https://dwm.suckless.org/patches/titlecolor/
- */
-#define TITLECOLOR_PATCH 0
-
/* This patch allows you to toggle fullscreen on and off using a single shortcut key.
- * https://github.com/bakkeby/patches/tree/master/dwm/dwm-togglefullscreen-6.2.diff
+ * https://github.com/bakkeby/patches/blob/master/dwm/dwm-togglefullscreen-6.2.diff
*/
#define TOGGLEFULLSCREEN_PATCH 0
@@ -784,8 +803,8 @@
/* This patch adds configurable gaps between windows differentiating between outer, inner,
* horizontal and vertical gaps.
- * https://github.com/bakkeby/dwm-vanitygaps/tree/master/patches/dwm-vanitygaps-6.2.diff
- * https://github.com/bakkeby/dwm-vanitygaps/tree/master/patches/dwm-vanitygaps-cfacts-6.2.diff
+ * https://github.com/bakkeby/patches/blob/master/dwm/dwm-vanitygaps-6.2.diff
+ * https://github.com/bakkeby/patches/blob/master/dwm/dwm-cfacts-vanitygaps-6.2.diff
*/
#define VANITYGAPS_PATCH 0
@@ -800,13 +819,6 @@
*/
#define VIEWONTAG_PATCH 0
-/* This patch adds the ability for dwm to read colors from the linux virtual console.
- * /sys/module/vt/parameters/default_{red,grn,blu}
- * Essentially this way the colors you use in your regular tty is "mirrored" to dwm.
- * https://dwm.suckless.org/patches/vtcolors/
- */
-#define VTCOLORS_PATCH 0
-
/* This patch warps the mouse cursor to the center of the currently focused window or screen
* when the mouse cursor is (a) on a different screen or (b) on top of a different window.
* https://dwm.suckless.org/patches/warp/
@@ -818,7 +830,7 @@
* This patch adds the role field to the rule configuration so that one can
* differentiate between, say, Firefox "browser" vs "Preferences" vs "Manager"
* or Google-chrome "browser" vs "pop-up".
- * https://github.com/bakkeby/patches/tree/master/dwm/dwm-windowrolerule-6.2.diff
+ * https://github.com/bakkeby/patches/blob/master/dwm/dwm-windowrolerule-6.2.diff
*/
#define WINDOWROLERULE_PATCH 0
@@ -840,7 +852,9 @@
*/
#define ZOOMSWAP_PATCH 0
-/* Layouts */
+/**
+ * Layouts
+ */
/* Bottomstack layout.
* https://dwm.suckless.org/patches/bottomstack/
@@ -917,4 +931,4 @@
/* Monocle layout (default).
* This can be optionally disabled in favour of other layouts.
*/
-#define MONOCLE_LAYOUT 1
+#define MONOCLE_LAYOUT 1 \ No newline at end of file