mirror of
https://github.com/mintycube/dwm.git
synced 2024-10-22 12:05:45 +00:00
Refinement
This commit is contained in:
parent
ad09397ad9
commit
664484d572
12
README.md
12
README.md
@ -289,8 +289,8 @@ Refer to [https://dwm.suckless.org/](https://dwm.suckless.org/) for details on t
|
||||
- [keymodes](https://dwm.suckless.org/patches/keymodes/)
|
||||
- this patch adds key modes (like in vim or emacs) where chains of keyboard shortcuts can be performed
|
||||
|
||||
- [leftlayout](http://dwm.suckless.org/patches/leftlayout/)
|
||||
- moves the layout symbol in the status bar to the left hand side
|
||||
- [-leftlayout-](http://dwm.suckless.org/patches/leftlayout/)
|
||||
- -moves the layout symbol in the status bar to the left hand side-
|
||||
|
||||
- [losefullscreen](https://github.com/bakkeby/patches/tree/master/dwm/dwm-losefullscreen-6.2.diff)
|
||||
- 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
|
||||
@ -396,14 +396,14 @@ Refer to [https://dwm.suckless.org/](https://dwm.suckless.org/) for details on t
|
||||
- [stacker](https://dwm.suckless.org/patches/stacker/)
|
||||
- provides comprehensive utilities for managing the client stack
|
||||
|
||||
- [staticstatus](https://dwm.suckless.org/patches/staticstatus/)
|
||||
- allows the status text to be fixed to the bar on a specific monitor rather than being drawn on the focused monitor
|
||||
- [-staticstatus-](https://dwm.suckless.org/patches/staticstatus/)
|
||||
- -allows the status text to be fixed to the bar on a specific monitor rather than being drawn on the focused monitor-
|
||||
|
||||
- [status2d](https://dwm.suckless.org/patches/status2d/)
|
||||
- allows colors and rectangle drawing in the dwm status bar
|
||||
|
||||
- [statusallmons](https://dwm.suckless.org/patches/statuspadding/)
|
||||
- this patch draws and updates the statusbar on all monitors
|
||||
- [-statusallmons-](https://dwm.suckless.org/patches/statuspadding/)
|
||||
- -this patch draws and updates the statusbar on all monitors-
|
||||
|
||||
- [statusbutton](https://dwm.suckless.org/patches/statusbutton/)
|
||||
- adds a clickable button to the left hand side of the statusbar
|
||||
|
121
config.def.h
121
config.def.h
@ -39,25 +39,18 @@ static int floatposgrid_y = 5; /* float grid rows */
|
||||
static const int horizpadbar = 2; /* horizontal padding for statusbar */
|
||||
static const int vertpadbar = 0; /* vertical padding for statusbar */
|
||||
#endif // BAR_STATUSPADDING_PATCH
|
||||
#if BAR_STATICSTATUS_PATCH && !BAR_STATUSALLMONS_PATCH
|
||||
static const int statmonval = 0;
|
||||
#endif // BAR_STATICSTATUS_PATCH
|
||||
#if STATUSBUTTON_PATCH
|
||||
#if BAR_STATUSBUTTON_PATCH
|
||||
static const char buttonbar[] = "<O>";
|
||||
#endif // STATUSBUTTON_PATCH
|
||||
#if SYSTRAY_PATCH
|
||||
#endif // BAR_STATUSBUTTON_PATCH
|
||||
#if BAR_SYSTRAY_PATCH
|
||||
static const unsigned int systrayspacing = 2; /* systray spacing */
|
||||
static const int showsystray = 1; /* 0 means no systray */
|
||||
#endif // SYSTRAY_PATCH
|
||||
#endif // BAR_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 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 BAR_STATICSTATUS_PATCH && !BAR_STATUSALLMONS_PATCH
|
||||
static const int statebmonval = statmonval;
|
||||
#endif // BAR_STATICSTATUS_PATCH
|
||||
#endif // BAR_EXTRABAR_PATCH
|
||||
#if BAR_PANGO_PATCH
|
||||
static const char font[] = "monospace 10";
|
||||
@ -101,14 +94,14 @@ static char urgfloatcolor[] = "#000000";
|
||||
#endif // FLOAT_BORDER_COLOR_PATCH
|
||||
#endif // URGENTBORDER_PATCH // BAR_STATUSCOLORS_PATCH
|
||||
|
||||
#if AWESOMEBAR_PATCH
|
||||
#if BAR_AWESOMEBAR_PATCH
|
||||
static char hidfgcolor[] = "#005577";
|
||||
static char hidbgcolor[] = "#222222";
|
||||
static char hidbordercolor[] = "#005577";
|
||||
#if FLOAT_BORDER_COLOR_PATCH
|
||||
static char hidfloatcolor[] = "#f76e0c";
|
||||
#endif // FLOAT_BORDER_COLOR_PATCH
|
||||
#endif // AWESOMEBAR_PATCH
|
||||
#endif // BAR_AWESOMEBAR_PATCH
|
||||
|
||||
#if BAR_TITLECOLOR_PATCH
|
||||
static char titlefgcolor[] = "#eeeeee";
|
||||
@ -133,9 +126,9 @@ static const unsigned int alphas[][3] = {
|
||||
#if URGENTBORDER_PATCH || BAR_STATUSCOLORS_PATCH
|
||||
[SchemeUrg] = { OPAQUE, baralpha, borderalpha },
|
||||
#endif // URGENTBORDER_PATCH / BAR_STATUSCOLORS_PATCH
|
||||
#if AWESOMEBAR_PATCH
|
||||
#if BAR_AWESOMEBAR_PATCH
|
||||
[SchemeHid] = { OPAQUE, baralpha, borderalpha },
|
||||
#endif // AWESOMEBAR_PATCH
|
||||
#endif // BAR_AWESOMEBAR_PATCH
|
||||
#if BAR_VTCOLORS_PATCH
|
||||
[SchemeTagsNorm] = { OPAQUE, baralpha, borderalpha },
|
||||
[SchemeTagsSel] = { OPAQUE, baralpha, borderalpha },
|
||||
@ -160,9 +153,9 @@ static const int color_ptrs[][ColCount] = {
|
||||
#if URGENTBORDER_PATCH || BAR_STATUSCOLORS_PATCH
|
||||
[SchemeUrg] = { 7, 9, 9, 15 },
|
||||
#endif // URGENTBORDER_PATCH || BAR_STATUSCOLORS_PATCH
|
||||
#if AWESOMEBAR_PATCH
|
||||
#if BAR_AWESOMEBAR_PATCH
|
||||
[SchemeHid] = { 5, 0, 0, -1 },
|
||||
#endif // AWESOMEBAR_PATCH
|
||||
#endif // BAR_AWESOMEBAR_PATCH
|
||||
[SchemeTagsNorm] = { 2, 0, 0, -1 },
|
||||
[SchemeTagsSel] = { 6, 5, 5, -1 },
|
||||
[SchemeTitleNorm] = { 6, -1, -1, -1 },
|
||||
@ -179,9 +172,9 @@ static char colors[][ColCount][8] = {
|
||||
#if URGENTBORDER_PATCH || BAR_STATUSCOLORS_PATCH
|
||||
[SchemeUrg] = { "#000000", "#000000", "#000000", "#000000" },
|
||||
#endif // URGENTBORDER_PATCH || BAR_STATUSCOLORS_PATCH
|
||||
#if AWESOMEBAR_PATCH
|
||||
#if BAR_AWESOMEBAR_PATCH
|
||||
[SchemeHid] = { "#000000", "#000000", "#000000", "#000000" },
|
||||
#endif // AWESOMEBAR_PATCH
|
||||
#endif // BAR_AWESOMEBAR_PATCH
|
||||
[SchemeTagsNorm] = { "#000000", "#000000", "#000000", "#000000" },
|
||||
[SchemeTagsSel] = { "#000000", "#000000", "#000000", "#000000" },
|
||||
[SchemeTitleNorm] = { "#000000", "#000000", "#000000", "#000000" },
|
||||
@ -201,9 +194,9 @@ static const int color_ptrs[][ColCount] = {
|
||||
#if URGENTBORDER_PATCH || BAR_STATUSCOLORS_PATCH
|
||||
[SchemeUrg] = { 7, 9, 9 },
|
||||
#endif // URGENTBORDER_PATCH || BAR_STATUSCOLORS_PATCH
|
||||
#if AWESOMEBAR_PATCH
|
||||
#if BAR_AWESOMEBAR_PATCH
|
||||
[SchemeHid] = { 5, 0, 0 },
|
||||
#endif // AWESOMEBAR_PATCH
|
||||
#endif // BAR_AWESOMEBAR_PATCH
|
||||
[SchemeTagsNorm] = { 2, 0, 0 },
|
||||
[SchemeTagsSel] = { 6, 5, 5 },
|
||||
[SchemeTitleNorm] = { 6, -1, -1 },
|
||||
@ -220,9 +213,9 @@ static char colors[][ColCount][8] = {
|
||||
#if URGENTBORDER_PATCH || BAR_STATUSCOLORS_PATCH
|
||||
[SchemeUrg] = { "#000000", "#000000", "#000000" },
|
||||
#endif // URGENTBORDER_PATCH || BAR_STATUSCOLORS_PATCH
|
||||
#if AWESOMEBAR_PATCH
|
||||
#if BAR_AWESOMEBAR_PATCH
|
||||
[SchemeHid] = { "#000000", "#000000", "#000000" },
|
||||
#endif // AWESOMEBAR_PATCH
|
||||
#endif // BAR_AWESOMEBAR_PATCH
|
||||
[SchemeTagsNorm] = { "#000000", "#000000", "#000000" },
|
||||
[SchemeTagsSel] = { "#000000", "#000000", "#000000" },
|
||||
[SchemeTitleNorm] = { "#000000", "#000000", "#000000" },
|
||||
@ -244,9 +237,9 @@ char *colors[][ColCount] = {
|
||||
#if URGENTBORDER_PATCH || BAR_STATUSCOLORS_PATCH
|
||||
[SchemeUrg] = { urgfgcolor, urgbgcolor, urgbordercolor, urgfloatcolor },
|
||||
#endif // URGENTBORDER_PATCH / BAR_STATUSCOLORS_PATCH
|
||||
#if AWESOMEBAR_PATCH
|
||||
#if BAR_AWESOMEBAR_PATCH
|
||||
[SchemeHid] = { hidfgcolor, hidbgcolor, hidbordercolor, hidfloatcolor },
|
||||
#endif // AWESOMEBAR_PATCH
|
||||
#endif // BAR_AWESOMEBAR_PATCH
|
||||
#if BAR_TITLECOLOR_PATCH
|
||||
[SchemeTitle] = { titlefgcolor, titlebgcolor, titlebordercolor, titlefloatcolor },
|
||||
#endif // BAR_TITLECOLOR_PATCH
|
||||
@ -266,9 +259,9 @@ char *colors[][ColCount] = {
|
||||
#if URGENTBORDER_PATCH || BAR_STATUSCOLORS_PATCH
|
||||
[SchemeUrg] = { urgfgcolor, urgbgcolor, urgbordercolor },
|
||||
#endif // URGENTBORDER_PATCH / BAR_STATUSCOLORS_PATCH
|
||||
#if AWESOMEBAR_PATCH
|
||||
#if BAR_AWESOMEBAR_PATCH
|
||||
[SchemeHid] = { hidfgcolor, hidbgcolor, hidbordercolor },
|
||||
#endif // AWESOMEBAR_PATCH
|
||||
#endif // BAR_AWESOMEBAR_PATCH
|
||||
#if BAR_TITLECOLOR_PATCH
|
||||
[SchemeTitle] = { titlefgcolor, titlebgcolor, titlebordercolor },
|
||||
#endif // BAR_TITLECOLOR_PATCH
|
||||
@ -297,7 +290,7 @@ static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
|
||||
static const char *tagsalt[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
|
||||
#endif // BAR_ALTERNATIVE_TAGS_PATCH
|
||||
|
||||
#if TAGGRID_PATCH
|
||||
#if BAR_TAGGRID_PATCH
|
||||
/* grid of tags */
|
||||
#define DRAWCLASSICTAGS 1 << 0
|
||||
#define DRAWTAGGRID 1 << 1
|
||||
@ -313,7 +306,7 @@ static const char *tagsalt[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
|
||||
|
||||
static const unsigned int drawtagmask = DRAWTAGGRID; /* | DRAWCLASSICTAGS to show classic row of tags */
|
||||
static const int tagrows = 2;
|
||||
#endif // TAGGRID_PATCH
|
||||
#endif // BAR_TAGGRID_PATCH
|
||||
|
||||
/* There are two options when it comes to per-client rules:
|
||||
* - a typical struct table or
|
||||
@ -369,6 +362,62 @@ static const MonitorRule monrules[] = {
|
||||
#endif // PERTAG_PATCH
|
||||
#endif // MONITOR_RULES_PATCH
|
||||
|
||||
/* Bar rules allow you to configure what is shown where on the bar, as well as
|
||||
* introducing your own bar modules.
|
||||
*
|
||||
* monitor:
|
||||
* -1 show on all monitors
|
||||
* 0 show on monitor 0
|
||||
* 'A' show on active monitor (i.e. focused / selected) (or just -1 for active?)
|
||||
* bar - bar index, 0 is default, 1 is extrabar
|
||||
* alignment - how the module is aligned compared to other modules
|
||||
* widthfunc, drawfunc, clickfunc - providing bar module width, draw and click functions
|
||||
* name - does nothing, intended for visual clue and for logging / debugging
|
||||
*/
|
||||
static const BarRule barrules[] = {
|
||||
/* monitor bar alignment widthfunc drawfunc clickfunc name */
|
||||
#if BAR_STATUSBUTTON_PATCH
|
||||
{ -1, 0, BAR_ALIGN_LEFT, width_stbutton, draw_stbutton, click_stbutton, "statusbutton" },
|
||||
#endif // BAR_STATUSBUTTON_PATCH
|
||||
#if BAR_TAGS_PATCH
|
||||
{ -1, 0, BAR_ALIGN_LEFT, width_tags, draw_tags, click_tags, "tags" },
|
||||
#endif // BAR_TAGS_PATCH
|
||||
#if BAR_TAGGRID_PATCH
|
||||
{ -1, 0, BAR_ALIGN_LEFT, width_taggrid, draw_taggrid, click_taggrid, "taggrid" },
|
||||
#endif // BAR_TAGGRID_PATCH
|
||||
#if BAR_LTSYMBOL_PATCH
|
||||
{ -1, 0, BAR_ALIGN_LEFT, width_ltsymbol, draw_ltsymbol, click_ltsymbol, "layout" },
|
||||
#endif // BAR_LTSYMBOL_PATCH
|
||||
#if BAR_SYSTRAY_PATCH
|
||||
{ 0, 0, BAR_ALIGN_RIGHT, width_systray, draw_systray, click_systray, "systray" },
|
||||
#endif // BAR_SYSTRAY_PATCH
|
||||
#if BAR_STATUS2D_PATCH && BAR_STATUSCMD_PATCH
|
||||
{ 'A', 0, BAR_ALIGN_RIGHT, width_status2d, draw_status2d, click_statuscmd, "status2d" },
|
||||
#elif BAR_STATUS2D_PATCH
|
||||
{ 'A', 0, BAR_ALIGN_RIGHT, width_status2d, draw_status2d, click_status2d, "status2d" },
|
||||
#elif BAR_STATUS_PATCH
|
||||
{ 'A', 0, BAR_ALIGN_RIGHT, width_status, draw_status, click_status, "status" },
|
||||
#endif // BAR_STATUS2D_PATCH | BAR_STATUSCMD_PATCH
|
||||
#if BAR_AWESOMEBAR_PATCH
|
||||
{ -1, 0, BAR_ALIGN_NONE, width_awesomebar, draw_awesomebar, click_awesomebar, "awesomebar" },
|
||||
#elif BAR_FANCYBAR_PATCH
|
||||
{ -1, 0, BAR_ALIGN_NONE, width_fancybar, draw_fancybar, click_fancybar, "fancybar" },
|
||||
#elif BAR_WINTITLE_PATCH
|
||||
{ -1, 0, BAR_ALIGN_NONE, width_wintitle, draw_wintitle, click_wintitle, "wintitle" },
|
||||
#endif // BAR_AWESOMEBAR_PATCH | BAR_FANCYBAR_PATCH BAR_WINTITLE_PATCH
|
||||
#if BAR_EXTRABAR_PATCH
|
||||
#if BAR_STATUS2D_PATCH && BAR_STATUSCMD_PATCH
|
||||
{ 'A', 1, BAR_ALIGN_CENTER, width_status2d_eb, draw_status2d_eb, click_statuscmd_eb, "status2d_eb" },
|
||||
#elif BAR_STATUS2D_PATCH
|
||||
{ 'A', 1, BAR_ALIGN_CENTER, width_status2d_eb, draw_status2d_eb, click_status2d, "status2d_eb" },
|
||||
#elif BAR_STATUSCMD_PATCH
|
||||
{ 'A', 1, BAR_ALIGN_CENTER, width_status_eb, draw_status_eb, click_statuscmd_eb, "status_eb" },
|
||||
#elif BAR_STATUS_PATCH
|
||||
{ 'A', 1, BAR_ALIGN_CENTER, width_status_eb, draw_status_eb, click_status, "status_eb" },
|
||||
#endif // BAR_STATUS2D_PATCH | BAR_STATUSCMD_PATCH
|
||||
#endif // BAR_EXTRABAR_PATCH
|
||||
};
|
||||
|
||||
#if DWMC_PATCH
|
||||
/* signal definitions */
|
||||
/* signum must be greater than 0 */
|
||||
@ -465,9 +514,9 @@ static Signal signals[] = {
|
||||
#if SELFRESTART_PATCH
|
||||
{ "self_restart", self_restart },
|
||||
#endif // SELFRESTART_PATCH
|
||||
#if TAGGRID_PATCH
|
||||
#if BAR_TAGGRID_PATCH
|
||||
{ "switchtag", switchtag },
|
||||
#endif // TAGGRID_PATCH
|
||||
#endif // BAR_TAGGRID_PATCH
|
||||
#if STICKY_PATCH
|
||||
{ "togglesticky", togglesticky },
|
||||
#endif // STICKY_PATCH
|
||||
@ -547,7 +596,7 @@ static const int nmaster = 1; /* number of clients in master area */
|
||||
#if FLEXTILE_DELUXE_LAYOUT
|
||||
static const int nstack = 0; /* number of clients in primary stack area */
|
||||
#endif // FLEXTILE_DELUXE_LAYOUT
|
||||
static const int resizehints = 1; /* 1 means respect size hints in tiled resizals */
|
||||
static const int resizehints = 0; /* 1 means respect size hints in tiled resizals */
|
||||
|
||||
#if NROWGRID_LAYOUT
|
||||
#define FORCE_VSPLIT 1
|
||||
@ -872,9 +921,9 @@ static Key keys[] = {
|
||||
{ MODKEY|Mod4Mask, XK_Tab, shiftviewclients, { .i = -1 } },
|
||||
{ MODKEY|Mod4Mask, XK_backslash, shiftviewclients, { .i = +1 } },
|
||||
#endif // SHIFTVIEW_CLIENTS_PATCH
|
||||
#if AWESOMEBAR_PATCH
|
||||
#if BAR_AWESOMEBAR_PATCH
|
||||
{ MODKEY|ControlMask, XK_z, showhideclient, {0} },
|
||||
#endif // AWESOMEBAR_PATCH
|
||||
#endif // BAR_AWESOMEBAR_PATCH
|
||||
{ MODKEY|ShiftMask, XK_c, killclient, {0} },
|
||||
#if KILLUNSEL_PATCH
|
||||
{ MODKEY|ShiftMask, XK_x, killunsel, {0} },
|
||||
@ -996,7 +1045,7 @@ static Key keys[] = {
|
||||
#if BAR_ALTERNATIVE_TAGS_PATCH
|
||||
{ MODKEY, XK_n, togglealttag, {0} },
|
||||
#endif // BAR_ALTERNATIVE_TAGS_PATCH
|
||||
#if TAGGRID_PATCH
|
||||
#if BAR_TAGGRID_PATCH
|
||||
{ MODKEY|ControlMask, XK_Up, switchtag, { .ui = SWITCHTAG_UP | SWITCHTAG_VIEW } },
|
||||
{ MODKEY|ControlMask, XK_Down, switchtag, { .ui = SWITCHTAG_DOWN | SWITCHTAG_VIEW } },
|
||||
{ MODKEY|ControlMask, XK_Right, switchtag, { .ui = SWITCHTAG_RIGHT | SWITCHTAG_VIEW } },
|
||||
@ -1005,7 +1054,7 @@ static Key keys[] = {
|
||||
{ MODKEY|Mod4Mask, XK_Down, switchtag, { .ui = SWITCHTAG_DOWN | SWITCHTAG_TAG | SWITCHTAG_VIEW } },
|
||||
{ MODKEY|Mod4Mask, XK_Right, switchtag, { .ui = SWITCHTAG_RIGHT | SWITCHTAG_TAG | SWITCHTAG_VIEW } },
|
||||
{ MODKEY|Mod4Mask, XK_Left, switchtag, { .ui = SWITCHTAG_LEFT | SWITCHTAG_TAG | SWITCHTAG_VIEW } },
|
||||
#endif // TAGGRID_PATCH
|
||||
#endif // BAR_TAGGRID_PATCH
|
||||
#if MOVEPLACE_PATCH
|
||||
{ MODKEY, XK_KP_7, moveplace, {.ui = WIN_NW }}, /* XK_KP_Home, */
|
||||
{ MODKEY, XK_KP_8, moveplace, {.ui = WIN_N }}, /* XK_KP_Up, */
|
||||
|
@ -21,7 +21,7 @@ FREETYPEINC = /usr/include/freetype2
|
||||
#FREETYPEINC = ${X11INC}/freetype2
|
||||
|
||||
# Uncomment this for the alpha patch / BAR_ALPHA_PATCH
|
||||
#XRENDER = -lXrender
|
||||
XRENDER = -lXrender
|
||||
|
||||
# Uncomment this for the mdpcontrol patch / MDPCONTROL_PATCH
|
||||
#MPDCLIENT = -lmpdclient
|
||||
@ -34,7 +34,7 @@ FREETYPEINC = /usr/include/freetype2
|
||||
#XEXTLIB = -lXext
|
||||
|
||||
# Uncomment this for the swallow patch / SWALLOW_PATCH
|
||||
#XCBLIBS = -lX11-xcb -lxcb -lxcb-res
|
||||
XCBLIBS = -lX11-xcb -lxcb -lxcb-res
|
||||
|
||||
# includes and libs
|
||||
INCS = -I${X11INC} -I${FREETYPEINC} ${PANGOINC}
|
||||
|
335
dwm.c
335
dwm.c
@ -198,15 +198,17 @@ typedef union {
|
||||
const void *v;
|
||||
} Arg;
|
||||
|
||||
typedef struct Monitor Monitor;
|
||||
typedef struct Bar Bar;
|
||||
struct Bar {
|
||||
Window win;
|
||||
Monitor *mon;
|
||||
int idx;
|
||||
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 {
|
||||
int max_width;
|
||||
} BarWidthArg;
|
||||
@ -223,14 +225,13 @@ typedef struct {
|
||||
int rel_h;
|
||||
} BarClickArg;
|
||||
|
||||
typedef struct Monitor Monitor;
|
||||
typedef struct {
|
||||
int monitor;
|
||||
int bar;
|
||||
int alignment; // see bar alignment enum
|
||||
int (*widthfunc)(Monitor *m, BarWidthArg *a);
|
||||
int (*drawfunc)(Monitor *m, BarDrawArg *a);
|
||||
int (*clickfunc)(Monitor *m, Arg *arg, BarClickArg *a);
|
||||
int (*widthfunc)(Bar *bar, BarWidthArg *a);
|
||||
int (*drawfunc)(Bar *bar, BarDrawArg *a);
|
||||
int (*clickfunc)(Bar *bar, Arg *arg, BarClickArg *a);
|
||||
char *name; // for debugging
|
||||
int x, w; // position, width for internal use
|
||||
} BarRule;
|
||||
@ -465,6 +466,7 @@ static void detachstack(Client *c);
|
||||
static Monitor *dirtomon(int dir);
|
||||
static void drawbar(Monitor *m);
|
||||
static void drawbars(void);
|
||||
static void drawbarwin(Bar *bar);
|
||||
#if !FOCUSONCLICK_PATCH
|
||||
static void enternotify(XEvent *e);
|
||||
#endif // FOCUSONCLICK_PATCH
|
||||
@ -631,12 +633,6 @@ static Clr **scheme;
|
||||
static Display *dpy;
|
||||
static Drw *drw;
|
||||
static Monitor *mons, *selmon;
|
||||
#if BAR_STATICSTATUS_PATCH && !BAR_STATUSALLMONS_PATCH
|
||||
static Monitor *statmon;
|
||||
#if BAR_EXTRABAR_PATCH
|
||||
static Monitor *statebmon;
|
||||
#endif // BAR_EXTRABAR_PATCH
|
||||
#endif // BAR_STATICSTATUS_PATCH
|
||||
static Window root, wmcheckwin;
|
||||
|
||||
/* configuration, allows nested code to access above variables */
|
||||
@ -907,14 +903,16 @@ buttonpress(XEvent *e)
|
||||
if (ev->window == selmon->bars[b]->win) {
|
||||
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)
|
||||
if (br->bar != b || (br->monitor == 'A' && m != selmon) || br->clickfunc == NULL)
|
||||
continue;
|
||||
if (br->monitor != 'A' && br->monitor != -1 && br->monitor != mi)
|
||||
continue;
|
||||
if (selmon->bars[b]->x[r] <= ev->x && ev->x <= selmon->bars[b]->x[r] + selmon->bars[b]->w[r]) {
|
||||
carg.rel_x = ev->x - selmon->bars[b]->x[r];
|
||||
carg.rel_y = ev->y;
|
||||
carg.rel_w = selmon->bars[b]->w[r];
|
||||
carg.rel_h = selmon->bars[b]->bh;
|
||||
click = br->clickfunc(m, &arg, &carg);
|
||||
click = br->clickfunc(selmon->bars[b], &arg, &carg);
|
||||
if (click < 0)
|
||||
return;
|
||||
break;
|
||||
@ -1049,7 +1047,11 @@ clientmessage(XEvent *e)
|
||||
return;
|
||||
}
|
||||
|
||||
#if BAR_SYSTRAY_WIN_PATCH
|
||||
c->mon = selmon;
|
||||
#else
|
||||
c->mon = systray->mon;
|
||||
#endif // BAR_SYSTRAY_WIN_PATCH
|
||||
c->next = systray->icons;
|
||||
systray->icons = c;
|
||||
XGetWindowAttributes(dpy, c->win, &wa);
|
||||
@ -1243,8 +1245,8 @@ createmon(void)
|
||||
Monitor *m;
|
||||
int i;
|
||||
#if MONITOR_RULES_PATCH
|
||||
int mc, j;
|
||||
Monitor *mi;
|
||||
int mi, j;
|
||||
Monitor *mon;
|
||||
const MonitorRule *mr;
|
||||
#endif // MONITOR_RULES_PATCH
|
||||
|
||||
@ -1270,17 +1272,23 @@ createmon(void)
|
||||
m->gappoh = gappoh;
|
||||
m->gappov = gappov;
|
||||
#endif // VANITYGAPS_PATCH
|
||||
for (i = 0; i < LENGTH(m->bars); i++)
|
||||
|
||||
for (i = 0; i < LENGTH(m->bars); i++) {
|
||||
fprintf(stderr, "creating bar, idx = %d\n", i);
|
||||
m->bars[i] = ecalloc(1, sizeof(Bar));
|
||||
m->bars[i]->mon = m;
|
||||
m->bars[i]->idx = i;
|
||||
fprintf(stderr, "%s\n", "finished creating 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 (mi = 0, mon = mons; mon; mon = mon->next, mi++); // monitor index
|
||||
for (j = 0; j < LENGTH(monrules); j++) {
|
||||
mr = &monrules[j];
|
||||
if ((mr->monitor == -1 || mr->monitor == mc)
|
||||
if ((mr->monitor == -1 || mr->monitor == mi)
|
||||
#if PERTAG_PATCH
|
||||
&& (mr->tag == -1 || mr->tag == 0)
|
||||
#endif // PERTAG_PATCH
|
||||
@ -1343,7 +1351,7 @@ createmon(void)
|
||||
#if MONITOR_RULES_PATCH
|
||||
for (j = 0; j < LENGTH(monrules); j++) {
|
||||
mr = &monrules[j];
|
||||
if ((mr->monitor == -1 || mr->monitor == mc) && (mr->tag == -1 || mr->tag == i)) {
|
||||
if ((mr->monitor == -1 || mr->monitor == mi) && (mr->tag == -1 || mr->tag == i)) {
|
||||
m->pertag->ltidxs[i][0] = &layouts[mr->layout];
|
||||
m->pertag->ltidxs[i][1] = m->lt[0];
|
||||
m->pertag->nmasters[i] = (mr->nmaster > -1 ? mr->nmaster : m->nmaster);
|
||||
@ -1396,7 +1404,7 @@ destroynotify(XEvent *e)
|
||||
#if BAR_SYSTRAY_PATCH
|
||||
else if (showsystray && (c = wintosystrayicon(ev->window))) {
|
||||
removesystrayicon(c);
|
||||
updatesystray();
|
||||
drawbarwin(systray->bar);
|
||||
}
|
||||
#endif // BAR_SYSTRAY_PATCH
|
||||
}
|
||||
@ -1442,115 +1450,8 @@ dirtomon(int dir)
|
||||
void
|
||||
drawbar(Monitor *m)
|
||||
{
|
||||
Monitor *mon;
|
||||
int b, r, w, mi;
|
||||
int rx, lx, rw, lw; // bar size, split between left and right if a center module is added
|
||||
const BarRule *br;
|
||||
Bar *bar;
|
||||
BarWidthArg warg = { 0 };
|
||||
BarDrawArg darg = { 0, 0 };
|
||||
|
||||
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--) {
|
||||
bar = m->bars[b];
|
||||
if (!bar->win)
|
||||
continue;
|
||||
|
||||
rw = lw = bar->bw;
|
||||
rx = lx = 0;
|
||||
|
||||
#if BAR_VTCOLORS_PATCH
|
||||
drw_setscheme(drw, scheme[SchemeTagsNorm]);
|
||||
#else
|
||||
drw_setscheme(drw, scheme[SchemeNorm]);
|
||||
#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;
|
||||
#if BAR_VTCOLORS_PATCH
|
||||
drw_setscheme(drw, scheme[SchemeTagsNorm]);
|
||||
#else
|
||||
drw_setscheme(drw, scheme[SchemeNorm]);
|
||||
#endif // BAR_VTCOLORS_PATCH
|
||||
warg.max_width = (br->alignment < BAR_ALIGN_RIGHT_LEFT ? lw : rw);
|
||||
w = br->widthfunc(m, &warg);
|
||||
w = MIN(warg.max_width, w);
|
||||
|
||||
if (lw <= 0) { // if left is exhausted, switch to right side
|
||||
lw = rw;
|
||||
lx = rx;
|
||||
} else if (rw <= 0) {
|
||||
rw = lw;
|
||||
rx = lx;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
darg.x = bar->x[r];
|
||||
darg.w = bar->w[r];
|
||||
br->drawfunc(m, &darg);
|
||||
}
|
||||
drw_map(drw, bar->win, 0, 0, bar->bw, bar->bh);
|
||||
}
|
||||
for (int b = 0; b < LENGTH(m->bars); b++)
|
||||
drawbarwin(m->bars[b]);
|
||||
}
|
||||
|
||||
void
|
||||
@ -1561,6 +1462,112 @@ drawbars(void)
|
||||
drawbar(m);
|
||||
}
|
||||
|
||||
void
|
||||
drawbarwin(Bar *bar)
|
||||
{
|
||||
if (!bar->win)
|
||||
return;
|
||||
Monitor *mon;
|
||||
int r, w, mi;
|
||||
int rx, lx, rw, lw; // bar size, split between left and right if a center module is added
|
||||
const BarRule *br;
|
||||
BarWidthArg warg = { 0 };
|
||||
BarDrawArg darg = { 0, 0 };
|
||||
|
||||
for (mi = 0, mon = mons; mon && mon != bar->mon; mon = mon->next, mi++); // get the monitor index
|
||||
rw = lw = bar->bw;
|
||||
rx = lx = 0;
|
||||
|
||||
#if BAR_VTCOLORS_PATCH
|
||||
drw_setscheme(drw, scheme[SchemeTagsNorm]);
|
||||
#else
|
||||
drw_setscheme(drw, scheme[SchemeNorm]);
|
||||
#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 != bar->idx || br->drawfunc == NULL || (br->monitor == 'A' && bar->mon != selmon))
|
||||
continue;
|
||||
if (br->monitor != 'A' && br->monitor != -1 && br->monitor != mi)
|
||||
continue;
|
||||
#if BAR_VTCOLORS_PATCH
|
||||
drw_setscheme(drw, scheme[SchemeTagsNorm]);
|
||||
#else
|
||||
drw_setscheme(drw, scheme[SchemeNorm]);
|
||||
#endif // BAR_VTCOLORS_PATCH
|
||||
warg.max_width = (br->alignment < BAR_ALIGN_RIGHT_LEFT ? lw : rw);
|
||||
w = br->widthfunc(bar, &warg);
|
||||
w = MIN(warg.max_width, w);
|
||||
|
||||
if (lw <= 0) { // if left is exhausted, switch to right side
|
||||
lw = rw;
|
||||
lx = rx;
|
||||
} else if (rw <= 0) {
|
||||
rw = lw;
|
||||
rx = lx;
|
||||
}
|
||||
|
||||
switch(br->alignment) {
|
||||
default:
|
||||
case BAR_ALIGN_NONE:
|
||||
case BAR_ALIGN_LEFT_LEFT:
|
||||
case BAR_ALIGN_LEFT:
|
||||
bar->x[r] = lx;
|
||||
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;
|
||||
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;
|
||||
if (lx == rx) {
|
||||
rw = rx + rw - bar->x[r] - w;
|
||||
rx = bar->x[r] + w;
|
||||
}
|
||||
lw = bar->x[r] - lx;
|
||||
break;
|
||||
case BAR_ALIGN_RIGHT_LEFT:
|
||||
bar->x[r] = rx;
|
||||
if (lx == rx) {
|
||||
lx += w;
|
||||
lw -= w;
|
||||
}
|
||||
rx += w;
|
||||
rw -= w;
|
||||
break;
|
||||
case BAR_ALIGN_RIGHT_RIGHT:
|
||||
bar->x[r] = rx + rw - w;
|
||||
if (lx == rx)
|
||||
lw -= w;
|
||||
rw -= w;
|
||||
break;
|
||||
case BAR_ALIGN_RIGHT_CENTER:
|
||||
bar->x[r] = rx + rw / 2 - w / 2;
|
||||
if (lx == rx) {
|
||||
lw = lx + lw - bar->x[r] + w;
|
||||
lx = bar->x[r] + w;
|
||||
}
|
||||
rw = bar->x[r] - rx;
|
||||
break;
|
||||
}
|
||||
bar->w[r] = w;
|
||||
darg.x = bar->x[r];
|
||||
darg.w = bar->w[r];
|
||||
br->drawfunc(bar, &darg);
|
||||
}
|
||||
drw_map(drw, bar->win, 0, 0, bar->bw, bar->bh);
|
||||
}
|
||||
|
||||
#if !FOCUSONCLICK_PATCH
|
||||
void
|
||||
enternotify(XEvent *e)
|
||||
@ -2060,7 +2067,7 @@ maprequest(XEvent *e)
|
||||
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();
|
||||
drawbarwin(systray->bar);
|
||||
}
|
||||
#endif // BAR_SYSTRAY_PATCH
|
||||
|
||||
@ -2209,7 +2216,7 @@ propertynotify(XEvent *e)
|
||||
}
|
||||
else
|
||||
updatesystrayiconstate(c, ev);
|
||||
updatesystray();
|
||||
drawbarwin(systray->bar);
|
||||
}
|
||||
#endif // BAR_SYSTRAY_PATCH
|
||||
|
||||
@ -2235,11 +2242,8 @@ propertynotify(XEvent *e)
|
||||
break;
|
||||
case XA_WM_HINTS:
|
||||
updatewmhints(c);
|
||||
drawbars();
|
||||
#if URGENTBORDER_PATCH
|
||||
if (c->isurgent)
|
||||
XSetWindowBorder(dpy, c->win, scheme[SchemeUrg][ColBorder].pixel);
|
||||
#endif // URGENTBORDER_PATCH
|
||||
drawbars();
|
||||
break;
|
||||
}
|
||||
if (ev->atom == XA_WM_NAME || ev->atom == netatom[NetWMName]) {
|
||||
@ -3413,7 +3417,7 @@ unmapnotify(XEvent *e)
|
||||
* _not_ destroy them. We map those windows back */
|
||||
XMapRaised(dpy, c->win);
|
||||
removesystrayicon(c);
|
||||
updatesystray();
|
||||
drawbarwin(systray->bar);
|
||||
#endif // BAR_SYSTRAY_PATCH
|
||||
}
|
||||
}
|
||||
@ -3534,14 +3538,6 @@ updategeom(void)
|
||||
mons = createmon();
|
||||
}
|
||||
for (i = 0, m = mons; i < nn && m; m = m->next, i++) {
|
||||
#if BAR_STATICSTATUS_PATCH && !BAR_STATUSALLMONS_PATCH
|
||||
if (i == statmonval)
|
||||
statmon = m;
|
||||
#if BAR_EXTRABAR_PATCH
|
||||
if (i == statebmonval)
|
||||
statebmon = m;
|
||||
#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)
|
||||
@ -3568,14 +3564,6 @@ updategeom(void)
|
||||
}
|
||||
if (m == selmon)
|
||||
selmon = mons;
|
||||
#if BAR_STATICSTATUS_PATCH && !BAR_STATUSALLMONS_PATCH
|
||||
if (m == statmon)
|
||||
statmon = mons;
|
||||
#if BAR_EXTRABAR_PATCH
|
||||
if (m == statebmon)
|
||||
statebmon = mons;
|
||||
#endif // BAR_EXTRABAR_PATCH
|
||||
#endif // BAR_STATICSTATUS_PATCH
|
||||
cleanupmon(m);
|
||||
}
|
||||
}
|
||||
@ -3592,14 +3580,6 @@ updategeom(void)
|
||||
updatebarpos(mons);
|
||||
}
|
||||
}
|
||||
#if BAR_STATICSTATUS_PATCH && !BAR_STATUSALLMONS_PATCH
|
||||
if (!statmon)
|
||||
statmon = mons;
|
||||
#if BAR_EXTRABAR_PATCH
|
||||
if (!statebmon)
|
||||
statebmon = mons;
|
||||
#endif // BAR_EXTRABAR_PATCH
|
||||
#endif // BAR_STATICSTATUS_PATCH
|
||||
if (dirty) {
|
||||
selmon = mons;
|
||||
selmon = wintomon(root);
|
||||
@ -3683,9 +3663,7 @@ updatesizehints(Client *c)
|
||||
void
|
||||
updatestatus(void)
|
||||
{
|
||||
#if BAR_STATUSALLMONS_PATCH
|
||||
Monitor* m;
|
||||
#endif // BAR_STATUSALLMONS_PATCH
|
||||
Monitor *m;
|
||||
#if BAR_EXTRABAR_PATCH
|
||||
if (!gettextprop(root, XA_WM_NAME, rawstext, sizeof(rawstext))) {
|
||||
strcpy(stext, "dwm-"VERSION);
|
||||
@ -3718,18 +3696,8 @@ updatestatus(void)
|
||||
if (!gettextprop(root, XA_WM_NAME, stext, sizeof(stext)))
|
||||
strcpy(stext, "dwm-"VERSION);
|
||||
#endif // BAR_EXTRABAR_PATCH
|
||||
#if BAR_STATUSALLMONS_PATCH
|
||||
for (m = mons; m; m = m->next)
|
||||
drawbar(m);
|
||||
#elif BAR_STATICSTATUS_PATCH
|
||||
drawbar(statmon);
|
||||
#if BAR_EXTRABAR_PATCH
|
||||
if (statmon != statebmon)
|
||||
drawbar(statebmon);
|
||||
#endif // BAR_EXTRABAR_PATCH
|
||||
#else
|
||||
drawbar(selmon);
|
||||
#endif // BAR_STATUSALLMONS_PATCH | BAR_STATICSTATUS_PATCH
|
||||
}
|
||||
|
||||
void
|
||||
@ -3750,19 +3718,18 @@ updatewmhints(Client *c)
|
||||
if (c == selmon->sel && wmh->flags & XUrgencyHint) {
|
||||
wmh->flags &= ~XUrgencyHint;
|
||||
XSetWMHints(dpy, c->win, wmh);
|
||||
} else {
|
||||
} else
|
||||
c->isurgent = (wmh->flags & XUrgencyHint) ? 1 : 0;
|
||||
#if URGENTBORDER_PATCH
|
||||
if (c->isurgent) {
|
||||
#if FLOAT_BORDER_COLOR_PATCH
|
||||
if (c->isfloating)
|
||||
XSetWindowBorder(dpy, c->win, scheme[SchemeUrg][ColFloat].pixel);
|
||||
else
|
||||
#endif
|
||||
XSetWindowBorder(dpy, c->win, scheme[SchemeUrg][ColBorder].pixel);
|
||||
}
|
||||
#endif // URGENTBORDER_PATCH
|
||||
#if URGENTBORDER_PATCH
|
||||
if (c->isurgent) {
|
||||
#if FLOAT_BORDER_COLOR_PATCH
|
||||
if (c->isfloating)
|
||||
XSetWindowBorder(dpy, c->win, scheme[SchemeUrg][ColFloat].pixel);
|
||||
else
|
||||
#endif
|
||||
XSetWindowBorder(dpy, c->win, scheme[SchemeUrg][ColBorder].pixel);
|
||||
}
|
||||
#endif // URGENTBORDER_PATCH
|
||||
if (wmh->flags & InputHint)
|
||||
c->neverfocus = !wmh->input;
|
||||
else
|
||||
|
@ -34,7 +34,7 @@ xinitvisual()
|
||||
|
||||
XFree(infos);
|
||||
|
||||
if (! visual) {
|
||||
if (!visual) {
|
||||
visual = DefaultVisual(dpy, screen);
|
||||
depth = DefaultDepth(dpy, screen);
|
||||
cmap = DefaultColormap(dpy, screen);
|
||||
|
@ -1,26 +1,36 @@
|
||||
int
|
||||
width_awesomebar(Monitor *m, BarWidthArg *a)
|
||||
width_awesomebar(Bar *bar, BarWidthArg *a)
|
||||
{
|
||||
return a->max_width;
|
||||
}
|
||||
|
||||
int
|
||||
draw_awesomebar(Monitor *m, BarDrawArg *a)
|
||||
draw_awesomebar(Bar *bar, BarDrawArg *a)
|
||||
{
|
||||
int n = 0, scm, remainder = 0, tabw;
|
||||
unsigned int i, x = a->x;
|
||||
unsigned int i;
|
||||
#if BAR_TITLE_LEFT_PAD && BAR_TITLE_RIGHT_PAD
|
||||
int x = a->x + lrpad / 2, w = a->w - lrpad;
|
||||
#elif BAR_TITLE_LEFT_PAD
|
||||
int x = a->x + lrpad / 2, w = a->w - lrpad / 2;
|
||||
#elif BAR_TITLE_RIGHT_PAD
|
||||
int x = a->x, w = a->w - lrpad / 2;
|
||||
#else
|
||||
int x = a->x, w = a->w;
|
||||
#endif // BAR_TITLE_LEFT_PAD | BAR_TITLE_RIGHT_PAD
|
||||
|
||||
Client *c;
|
||||
for (c = m->clients; c; c = c->next)
|
||||
for (c = bar->mon->clients; c; c = c->next)
|
||||
if (ISVISIBLE(c))
|
||||
n++;
|
||||
|
||||
if (n > 0) {
|
||||
remainder = a->w % n;
|
||||
tabw = a->w / n;
|
||||
for (i = 0, c = m->clients; c; c = c->next, i++) {
|
||||
remainder = w % n;
|
||||
tabw = w / n;
|
||||
for (i = 0, c = bar->mon->clients; c; c = c->next, i++) {
|
||||
if (!ISVISIBLE(c))
|
||||
continue;
|
||||
if (m->sel == c)
|
||||
if (bar->mon->sel == c)
|
||||
#if BAR_VTCOLORS_PATCH
|
||||
scm = SchemeTitleSel;
|
||||
#elif BAR_TITLECOLOR_PATCH
|
||||
@ -38,10 +48,11 @@ draw_awesomebar(Monitor *m, BarDrawArg *a)
|
||||
#endif // BAR_VTCOLORS_PATCH
|
||||
|
||||
drw_setscheme(drw, scheme[scm]);
|
||||
tabw += (i < remainder ? 1 : 0);
|
||||
#if BAR_PANGO_PATCH
|
||||
drw_text(drw, x, 0, tabw + (i < remainder ? 1 : 0), bh, lrpad / 2, c->name, 0, False);
|
||||
drw_text(drw, x, 0, tabw, bh, lrpad / 2, c->name, 0, False);
|
||||
#else
|
||||
drw_text(drw, x, 0, tabw + (i < remainder ? 1 : 0), bh, lrpad / 2, c->name, 0);
|
||||
drw_text(drw, x, 0, tabw, bh, lrpad / 2, c->name, 0);
|
||||
#endif // BAR_PANGO_PATCH
|
||||
x += tabw;
|
||||
}
|
||||
@ -50,16 +61,16 @@ draw_awesomebar(Monitor *m, BarDrawArg *a)
|
||||
}
|
||||
|
||||
int
|
||||
click_awesomebar(Monitor *m, Arg *arg, BarClickArg *a)
|
||||
click_awesomebar(Bar *bar, Arg *arg, BarClickArg *a)
|
||||
{
|
||||
int x = 0, n = 0;
|
||||
Client *c;
|
||||
|
||||
for (c = m->clients; c; c = c->next)
|
||||
for (c = bar->mon->clients; c; c = c->next)
|
||||
if (ISVISIBLE(c))
|
||||
n++;
|
||||
|
||||
c = m->clients;
|
||||
c = bar->mon->clients;
|
||||
|
||||
do {
|
||||
if (!c || !ISVISIBLE(c))
|
||||
|
@ -1,6 +1,6 @@
|
||||
static int width_awesomebar(Monitor *m, BarWidthArg *a);
|
||||
static int draw_awesomebar(Monitor *m, BarDrawArg *a);
|
||||
static int click_awesomebar(Monitor *m, Arg *arg, BarClickArg *a);
|
||||
static int width_awesomebar(Bar *bar, BarWidthArg *a);
|
||||
static int draw_awesomebar(Bar *bar, BarDrawArg *a);
|
||||
static int click_awesomebar(Bar *bar, Arg *arg, BarClickArg *a);
|
||||
|
||||
static void hide(Client *c);
|
||||
static void show(Client *c);
|
||||
|
@ -1,29 +1,33 @@
|
||||
int
|
||||
width_fancybar(Monitor *m, BarWidthArg *a)
|
||||
width_fancybar(Bar *bar, BarWidthArg *a)
|
||||
{
|
||||
return a->max_width;
|
||||
}
|
||||
|
||||
int
|
||||
draw_fancybar(Monitor *m, BarDrawArg *a)
|
||||
draw_fancybar(Bar *bar, BarDrawArg *a)
|
||||
{
|
||||
int ftw, mw, ew = 0, n = 0, x = a->x, w = a->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
|
||||
Monitor *m = bar->mon;
|
||||
|
||||
#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 boxs = drw->fonts->h / 9;
|
||||
int boxw = drw->fonts->h / 6 + 2;
|
||||
#endif // BAR_PANGO_PATCH
|
||||
#endif // BAR_HIDEVACANTTAGS_PATCH
|
||||
#if BAR_TITLE_LEFT_PAD && BAR_TITLE_RIGHT_PAD
|
||||
int x = a->x + lrpad / 2, w = a->w - lrpad;
|
||||
#elif BAR_TITLE_LEFT_PAD
|
||||
int x = a->x + lrpad / 2, w = a->w - lrpad / 2;
|
||||
#elif BAR_TITLE_RIGHT_PAD
|
||||
int x = a->x, w = a->w - lrpad / 2;
|
||||
#else
|
||||
int x = a->x, w = a->w;
|
||||
#endif // BAR_TITLE_LEFT_PAD | BAR_TITLE_RIGHT_PAD
|
||||
|
||||
for (c = m->clients; c; c = c->next) {
|
||||
if (ISVISIBLE(c))
|
||||
@ -31,10 +35,11 @@ draw_fancybar(Monitor *m, BarDrawArg *a)
|
||||
}
|
||||
|
||||
if (n > 0) {
|
||||
ftw = TEXTW(m->sel->name) + lrpad;
|
||||
ftw = TEXTW(m->sel->name);
|
||||
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;
|
||||
@ -44,6 +49,7 @@ draw_fancybar(Monitor *m, BarDrawArg *a)
|
||||
else
|
||||
i++;
|
||||
}
|
||||
|
||||
if (i > 0)
|
||||
mw += ew / i;
|
||||
|
||||
@ -65,31 +71,17 @@ draw_fancybar(Monitor *m, BarDrawArg *a)
|
||||
#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, BarClickArg *a)
|
||||
click_fancybar(Bar *bar, Arg *arg, BarClickArg *a)
|
||||
{
|
||||
return ClkWinTitle;
|
||||
}
|
||||
|
@ -1,3 +1,3 @@
|
||||
static int width_fancybar(Monitor *m, BarWidthArg *a);
|
||||
static int draw_fancybar(Monitor *m, BarDrawArg *a);
|
||||
static int click_fancybar(Monitor *m, Arg *arg, BarClickArg *a);
|
||||
static int width_fancybar(Bar *bar, BarWidthArg *a);
|
||||
static int draw_fancybar(Bar *bar, BarDrawArg *a);
|
||||
static int click_fancybar(Bar *bar, Arg *arg, BarClickArg *a);
|
@ -1,21 +1,21 @@
|
||||
int
|
||||
width_ltsymbol(Monitor *m, BarWidthArg *a)
|
||||
width_ltsymbol(Bar *bar, BarWidthArg *a)
|
||||
{
|
||||
return TEXTW(m->ltsymbol);
|
||||
return TEXTW(bar->mon->ltsymbol);
|
||||
}
|
||||
|
||||
int
|
||||
draw_ltsymbol(Monitor *m, BarDrawArg *a)
|
||||
draw_ltsymbol(Bar *bar, BarDrawArg *a)
|
||||
{
|
||||
#if BAR_PANGO_PATCH
|
||||
return drw_text(drw, a->x, 0, a->w, bh, lrpad / 2, m->ltsymbol, 0, False);
|
||||
return drw_text(drw, a->x, 0, a->w, bh, lrpad / 2, bar->mon->ltsymbol, 0, False);
|
||||
#else
|
||||
return drw_text(drw, a->x, 0, a->w, bh, lrpad / 2, m->ltsymbol, 0);
|
||||
return drw_text(drw, a->x, 0, a->w, bh, lrpad / 2, bar->mon->ltsymbol, 0);
|
||||
#endif // BAR_PANGO_PATCH
|
||||
}
|
||||
|
||||
int
|
||||
click_ltsymbol(Monitor *m, Arg *arg, BarClickArg *a)
|
||||
click_ltsymbol(Bar *bar, Arg *arg, BarClickArg *a)
|
||||
{
|
||||
return ClkLtSymbol;
|
||||
}
|
@ -1,3 +1,3 @@
|
||||
static int width_ltsymbol(Monitor *m, BarWidthArg *a);
|
||||
static int draw_ltsymbol(Monitor *m, BarDrawArg *a);
|
||||
static int click_ltsymbol(Monitor *m, Arg *arg, BarClickArg *a);
|
||||
static int width_ltsymbol(Bar *bar, BarWidthArg *a);
|
||||
static int draw_ltsymbol(Bar *bar, BarDrawArg *a);
|
||||
static int click_ltsymbol(Bar *bar, Arg *arg, BarClickArg *a);
|
||||
|
@ -1,25 +1,25 @@
|
||||
int
|
||||
width_status(Monitor *m, BarWidthArg *a)
|
||||
width_status(Bar *bar, BarWidthArg *a)
|
||||
{
|
||||
#if BAR_PANGO_PATCH
|
||||
return TEXTWM(stext) - lrpad + 2; /* 2px right padding */
|
||||
return TEXTWM(stext);
|
||||
#else
|
||||
return TEXTW(stext) - lrpad + 2; /* 2px right padding */
|
||||
return TEXTW(stext);
|
||||
#endif // BAR_PANGO_PATCH
|
||||
}
|
||||
|
||||
int
|
||||
draw_status(Monitor *m, BarDrawArg *a)
|
||||
draw_status(Bar *bar, BarDrawArg *a)
|
||||
{
|
||||
#if BAR_PANGO_PATCH
|
||||
return drw_text(drw, a->x, 0, a->w, bh, 0, stext, 0, True);
|
||||
return drw_text(drw, a->x, 0, a->w, bh, lrpad / 2, stext, 0, True);
|
||||
#else
|
||||
return drw_text(drw, a->x, 0, a->w, bh, 0, stext, 0);
|
||||
return drw_text(drw, a->x, 0, a->w, bh, lrpad / 2, stext, 0);
|
||||
#endif // BAR_PANGO_PATCH
|
||||
}
|
||||
|
||||
int
|
||||
click_status(Monitor *m, Arg *arg, BarClickArg *a)
|
||||
click_status(Bar *bar, Arg *arg, BarClickArg *a)
|
||||
{
|
||||
return ClkStatusText;
|
||||
}
|
||||
|
@ -1,3 +1,3 @@
|
||||
static int width_status(Monitor *m, BarWidthArg *a);
|
||||
static int draw_status(Monitor *m, BarDrawArg *a);
|
||||
static int click_status(Monitor *m, Arg *arg, BarClickArg *a);
|
||||
static int width_status(Bar *bar, BarWidthArg *a);
|
||||
static int draw_status(Bar *bar, BarDrawArg *a);
|
||||
static int click_status(Bar *bar, Arg *arg, BarClickArg *a);
|
@ -1,25 +1,25 @@
|
||||
int
|
||||
width_status2d(Monitor *m, BarWidthArg *a)
|
||||
width_status2d(Bar *bar, BarWidthArg *a)
|
||||
{
|
||||
return status2dtextlength(rawstext);
|
||||
return status2dtextlength(rawstext) + lrpad;
|
||||
}
|
||||
|
||||
int
|
||||
draw_status2d(Monitor *m, BarDrawArg *a)
|
||||
draw_status2d(Bar *bar, BarDrawArg *a)
|
||||
{
|
||||
return drawstatusbar(m, a->x, a->w, rawstext);
|
||||
return drawstatusbar(a->x, rawstext);
|
||||
}
|
||||
|
||||
#if !BAR_DWMBLOCKS_PATCH
|
||||
#if !BAR_STATUSCMD_PATCH
|
||||
int
|
||||
click_status2d(Monitor *m, Arg *arg, BarClickArg *a)
|
||||
click_status2d(Bar *bar, Arg *arg, BarClickArg *a)
|
||||
{
|
||||
return ClkStatusText;
|
||||
}
|
||||
#endif // BAR_DWMBLOCKS_PATCH
|
||||
#endif // BAR_STATUSCMD_PATCH
|
||||
|
||||
int
|
||||
drawstatusbar(Monitor *m, int x, int ow, char* stext)
|
||||
drawstatusbar(int x, char* stext)
|
||||
{
|
||||
int i, w, len;
|
||||
short isCode = 0;
|
||||
@ -36,6 +36,8 @@ drawstatusbar(Monitor *m, int x, int ow, char* stext)
|
||||
memcpy(text, stext, len);
|
||||
#endif // BAR_STATUSCMD_PATCH
|
||||
|
||||
x += lrpad / 2;
|
||||
|
||||
/* process status text */
|
||||
i = -1;
|
||||
while (text[++i]) {
|
||||
|
@ -1,7 +1,7 @@
|
||||
static int width_status2d(Monitor *m, BarWidthArg *a);
|
||||
static int draw_status2d(Monitor *m, BarDrawArg *a);
|
||||
#if !BAR_DWMBLOCKS_PATCH
|
||||
static int click_status2d(Monitor *m, Arg *arg, BarClickArg *a);
|
||||
#endif // BAR_DWMBLOCKS_PATCH
|
||||
static int drawstatusbar(Monitor *m, int x, int w, char* text);
|
||||
static int width_status2d(Bar *bar, BarWidthArg *a);
|
||||
static int draw_status2d(Bar *bar, BarDrawArg *a);
|
||||
#if !BAR_STATUSCMD_PATCH
|
||||
static int click_status2d(Bar *bar, Arg *arg, BarClickArg *a);
|
||||
#endif // BAR_STATUSCMD_PATCH
|
||||
static int drawstatusbar(int x, char* text);
|
||||
static int status2dtextlength(char* stext);
|
@ -1,11 +1,11 @@
|
||||
int
|
||||
width_status2d_eb(Monitor *m, BarWidthArg *a)
|
||||
width_status2d_eb(Bar *bar, BarWidthArg *a)
|
||||
{
|
||||
return status2dtextlength(rawestext);
|
||||
}
|
||||
|
||||
int
|
||||
draw_status2d_eb(Monitor *m, BarDrawArg *a)
|
||||
draw_status2d_eb(Bar *bar, BarDrawArg *a)
|
||||
{
|
||||
return drawstatusbar(m, a->x, a->w, rawestext);
|
||||
return drawstatusbar(a->x, rawestext);
|
||||
}
|
@ -1,2 +1,2 @@
|
||||
static int width_status2d_eb(Monitor *m, BarWidthArg *a);
|
||||
static int draw_status2d_eb(Monitor *m, BarDrawArg *a);
|
||||
static int width_status2d_eb(Bar *bar, BarWidthArg *a);
|
||||
static int draw_status2d_eb(Bar *bar, BarDrawArg *a);
|
19
patch/bar_status_eb.c
Normal file
19
patch/bar_status_eb.c
Normal file
@ -0,0 +1,19 @@
|
||||
int
|
||||
width_status_eb(Bar *bar, BarWidthArg *a)
|
||||
{
|
||||
#if BAR_PANGO_PATCH
|
||||
return TEXTWM(estext) - lrpad;
|
||||
#else
|
||||
return TEXTW(estext) - lrpad;
|
||||
#endif // BAR_PANGO_PATCH
|
||||
}
|
||||
|
||||
int
|
||||
draw_status_eb(Bar *bar, BarDrawArg *a)
|
||||
{
|
||||
#if BAR_PANGO_PATCH
|
||||
return drw_text(drw, a->x, 0, a->w, bh, 0, estext, 0, True);
|
||||
#else
|
||||
return drw_text(drw, a->x, 0, a->w, bh, 0, estext, 0);
|
||||
#endif // BAR_PANGO_PATCH
|
||||
}
|
2
patch/bar_status_eb.h
Normal file
2
patch/bar_status_eb.h
Normal file
@ -0,0 +1,2 @@
|
||||
static int width_status_eb(Bar *bar, BarWidthArg *a);
|
||||
static int draw_status_eb(Bar *bar, BarDrawArg *a);
|
@ -1,11 +1,11 @@
|
||||
int
|
||||
width_stbutton(Monitor *m, BarWidthArg *a)
|
||||
width_stbutton(Bar *bar, BarWidthArg *a)
|
||||
{
|
||||
return TEXTW(buttonbar);
|
||||
}
|
||||
|
||||
int
|
||||
draw_stbutton(Monitor *m, BarDrawArg *a)
|
||||
draw_stbutton(Bar *bar, BarDrawArg *a)
|
||||
{
|
||||
#if BAR_PANGO_PATCH
|
||||
return drw_text(drw, a->x, 0, a->w, bh, lrpad / 2, buttonbar, 0, False);
|
||||
@ -15,7 +15,7 @@ draw_stbutton(Monitor *m, BarDrawArg *a)
|
||||
}
|
||||
|
||||
int
|
||||
click_stbutton(Monitor *m, Arg *arg, BarClickArg *a)
|
||||
click_stbutton(Bar *bar, Arg *arg, BarClickArg *a)
|
||||
{
|
||||
return ClkButton;
|
||||
}
|
||||
|
@ -1,3 +1,3 @@
|
||||
static int width_stbutton(Monitor *m, BarWidthArg *a);
|
||||
static int draw_stbutton(Monitor *m, BarDrawArg *a);
|
||||
static int click_stbutton(Monitor *m, Arg *arg, BarClickArg *a);
|
||||
static int width_stbutton(Bar *bar, BarWidthArg *a);
|
||||
static int draw_stbutton(Bar *bar, BarDrawArg *a);
|
||||
static int click_stbutton(Bar *bar, Arg *arg, BarClickArg *a);
|
@ -5,21 +5,21 @@ static int lastbutton;
|
||||
#endif // BAR_DWMBLOCKS_PATCH
|
||||
|
||||
int
|
||||
click_statuscmd(Monitor *m, Arg *arg, BarClickArg *a)
|
||||
click_statuscmd(Bar *bar, Arg *arg, BarClickArg *a)
|
||||
{
|
||||
return click_statuscmd_text(m, arg, a->rel_x, rawstext);
|
||||
return click_statuscmd_text(arg, a->rel_x, rawstext);
|
||||
}
|
||||
|
||||
#if BAR_EXTRABAR_PATCH
|
||||
int
|
||||
click_statuscmd_eb(Monitor *m, Arg *arg, BarClickArg *a)
|
||||
click_statuscmd_eb(Bar *bar, Arg *arg, BarClickArg *a)
|
||||
{
|
||||
return click_statuscmd_text(m, arg, a->rel_x, rawestext);
|
||||
return click_statuscmd_text(arg, a->rel_x, rawestext);
|
||||
}
|
||||
#endif // BAR_EXTRABAR_PATCH
|
||||
|
||||
int
|
||||
click_statuscmd_text(Monitor *m, Arg *arg, int rel_x, char *text)
|
||||
click_statuscmd_text(Arg *arg, int rel_x, char *text)
|
||||
{
|
||||
int i = -1;
|
||||
int x = 0;
|
||||
|
@ -1,6 +1,6 @@
|
||||
static int click_statuscmd(Monitor *m, Arg *arg, BarClickArg *a);
|
||||
static int click_statuscmd(Bar *bar, Arg *arg, BarClickArg *a);
|
||||
#if BAR_EXTRABAR_PATCH
|
||||
static int click_statuscmd_eb(Monitor *m, Arg *arg, BarClickArg *a);
|
||||
static int click_statuscmd_eb(Bar *bar, Arg *arg, BarClickArg *a);
|
||||
#endif // BAR_EXTRABAR_PATCH
|
||||
static int click_statuscmd_text(Monitor *m, Arg *arg, int rel_x, char *text);
|
||||
static int click_statuscmd_text(Arg *arg, int rel_x, char *text);
|
||||
static void copyvalidchars(char *text, char *rawtext);
|
@ -1,11 +1,8 @@
|
||||
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;
|
||||
|
||||
int
|
||||
width_systray(Monitor *m, BarWidthArg *a)
|
||||
width_systray(Bar *bar, BarWidthArg *a)
|
||||
{
|
||||
unsigned int w = 0;
|
||||
Client *i;
|
||||
@ -13,87 +10,40 @@ width_systray(Monitor *m, BarWidthArg *a)
|
||||
return 1;
|
||||
if (showsystray)
|
||||
for (i = systray->icons; i; w += i->w + systrayspacing, i = i->next);
|
||||
return w ? w + systrayspacing : 0;
|
||||
return w ? w + lrpad - systrayspacing : 0;
|
||||
}
|
||||
|
||||
int
|
||||
draw_systray(Monitor *m, BarDrawArg *a)
|
||||
{
|
||||
systrayxpos = a->x;
|
||||
updatesystray();
|
||||
return systrayxpos + a->w;
|
||||
}
|
||||
|
||||
int
|
||||
click_systray(Monitor *m, Arg *arg, BarClickArg *a)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
void
|
||||
removesystrayicon(Client *i)
|
||||
{
|
||||
Client **ii;
|
||||
|
||||
if (!showsystray || !i)
|
||||
return;
|
||||
for (ii = &systray->icons; *ii && *ii != i; ii = &(*ii)->next);
|
||||
if (ii)
|
||||
*ii = i->next;
|
||||
free(i);
|
||||
}
|
||||
|
||||
void
|
||||
resizerequest(XEvent *e)
|
||||
{
|
||||
XResizeRequestEvent *ev = &e->xresizerequest;
|
||||
Client *i;
|
||||
|
||||
if ((i = wintosystrayicon(ev->window))) {
|
||||
updatesystrayicongeom(i, ev->width, ev->height);
|
||||
updatesystray();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
updatesystray(void)
|
||||
draw_systray(Bar *bar, BarDrawArg *a)
|
||||
{
|
||||
if (!showsystray)
|
||||
return;
|
||||
return a->x;
|
||||
|
||||
XSetWindowAttributes wa;
|
||||
Client *i;
|
||||
Monitor *m;
|
||||
unsigned int w = 1, r, mi;
|
||||
const BarRule *br;
|
||||
unsigned int w;
|
||||
|
||||
if (!systray) {
|
||||
/* init systray */
|
||||
if (!(systray = (Systray *)calloc(1, sizeof(Systray))))
|
||||
die("fatal: could not malloc() %u bytes\n", sizeof(Systray));
|
||||
|
||||
/* 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;
|
||||
}
|
||||
wa.override_redirect = True;
|
||||
wa.event_mask = ButtonPressMask|ExposureMask;
|
||||
wa.border_pixel = 0;
|
||||
#if BAR_ALPHA_PATCH
|
||||
wa.background_pixel = 0;
|
||||
wa.colormap = cmap;
|
||||
systray->win = XCreateWindow(dpy, root, bar->bx + a->x + lrpad / 2, bar->by, MAX(a->w + 40, 1), bar->bh, 0, depth,
|
||||
InputOutput, visual,
|
||||
CWOverrideRedirect|CWBorderPixel|CWBackPixel|CWColormap|CWEventMask, &wa); // CWBackPixmap
|
||||
#else
|
||||
wa.background_pixel = scheme[SchemeNorm][ColBg].pixel;
|
||||
systray->win = XCreateSimpleWindow(dpy, root, bar->bx + a->x + lrpad / 2, bar->by, MIN(a->w, 1), bar->bh, 0, 0, scheme[SchemeNorm][ColBg].pixel);
|
||||
XChangeWindowAttributes(dpy, systray->win, CWOverrideRedirect|CWBackPixel|CWBorderPixel|CWEventMask, &wa);
|
||||
#endif // BAR_ALPHA_PATCH
|
||||
|
||||
XSelectInput(dpy, systray->win, SubstructureNotifyMask);
|
||||
XChangeProperty(dpy, systray->win, netatom[NetSystemTrayOrientation], XA_CARDINAL, 32,
|
||||
PropModeReplace, (unsigned char *)&systrayorientation, 1);
|
||||
#if BAR_ALPHA_PATCH
|
||||
@ -111,21 +61,63 @@ updatesystray(void)
|
||||
fprintf(stderr, "dwm: unable to obtain system tray.\n");
|
||||
free(systray);
|
||||
systray = NULL;
|
||||
return;
|
||||
return a->x;
|
||||
}
|
||||
}
|
||||
|
||||
systray->bar = bar;
|
||||
|
||||
drw_setscheme(drw, scheme[SchemeNorm]);
|
||||
for (w = 0, i = systray->icons; i; i = i->next) {
|
||||
/* make sure the background color stays the same */
|
||||
#if BAR_ALPHA_PATCH
|
||||
wa.background_pixel = 0;
|
||||
#else
|
||||
wa.background_pixel = scheme[SchemeNorm][ColBg].pixel;
|
||||
#endif // BAR_ALPHA_PATCH
|
||||
XChangeWindowAttributes(dpy, i->win, CWBackPixel, &wa);
|
||||
XMapRaised(dpy, i->win);
|
||||
w += systrayspacing;
|
||||
i->x = systrayxpos + w;
|
||||
i->x = w;
|
||||
XMoveResizeWindow(dpy, i->win, i->x, 0, i->w, i->h);
|
||||
w += i->w;
|
||||
if (i->mon != systray->mon)
|
||||
i->mon = systray->mon;
|
||||
if (i->next)
|
||||
w += systrayspacing;
|
||||
if (i->mon != bar->mon)
|
||||
i->mon = bar->mon;
|
||||
}
|
||||
|
||||
XMoveResizeWindow(dpy, systray->win, bar->bx + a->x + lrpad / 2, (w ? bar->by : -bar->by), MAX(w, 1), bar->bh);
|
||||
return a->x + a->w;
|
||||
}
|
||||
|
||||
int
|
||||
click_systray(Bar *bar, Arg *arg, BarClickArg *a)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
void
|
||||
removesystrayicon(Client *i)
|
||||
{
|
||||
Client **ii;
|
||||
|
||||
if (!showsystray || !i)
|
||||
return;
|
||||
for (ii = &systray->icons; *ii && *ii != i; ii = &(*ii)->next);
|
||||
if (ii)
|
||||
*ii = i->next;
|
||||
free(i);
|
||||
drawbarwin(systray->bar);
|
||||
}
|
||||
|
||||
void
|
||||
resizerequest(XEvent *e)
|
||||
{
|
||||
XResizeRequestEvent *ev = &e->xresizerequest;
|
||||
Client *i;
|
||||
|
||||
if ((i = wintosystrayicon(ev->window))) {
|
||||
updatesystrayicongeom(i, ev->width, ev->height);
|
||||
drawbarwin(systray->bar);
|
||||
}
|
||||
}
|
||||
|
||||
@ -185,8 +177,9 @@ updatesystrayiconstate(Client *i, XPropertyEvent *ev)
|
||||
Client *
|
||||
wintosystrayicon(Window w)
|
||||
{
|
||||
if (!systray)
|
||||
return NULL;
|
||||
Client *i = NULL;
|
||||
|
||||
if (!showsystray || !w)
|
||||
return i;
|
||||
for (i = systray->icons; i && i->win != w; i = i->next);
|
||||
|
@ -22,19 +22,18 @@ typedef struct Systray Systray;
|
||||
struct Systray {
|
||||
Window win;
|
||||
Client *icons;
|
||||
Monitor *mon;
|
||||
Bar *bar;
|
||||
};
|
||||
|
||||
/* bar integration */
|
||||
static int width_systray(Monitor *m, BarWidthArg *a);
|
||||
static int draw_systray(Monitor *m, BarDrawArg *a);
|
||||
static int click_systray(Monitor *m, Arg *arg, BarClickArg *a);
|
||||
static int width_systray(Bar *bar, BarWidthArg *a);
|
||||
static int draw_systray(Bar *bar, BarDrawArg *a);
|
||||
static int click_systray(Bar *bar, Arg *arg, BarClickArg *a);
|
||||
|
||||
/* function declarations */
|
||||
static Atom getatomprop(Client *c, Atom prop);
|
||||
static void removesystrayicon(Client *i);
|
||||
static void resizerequest(XEvent *e);
|
||||
static void updatesystray(void);
|
||||
static void updatesystrayicongeom(Client *i, int w, int h);
|
||||
static void updatesystrayiconstate(Client *i, XPropertyEvent *ev);
|
||||
static Client *wintosystrayicon(Window w);
|
||||
|
@ -1,43 +1,58 @@
|
||||
int
|
||||
width_taggrid(Monitor *m, BarWidthArg *a)
|
||||
width_taggrid(Bar *bar, BarWidthArg *a)
|
||||
{
|
||||
return (bh / 2) * (LENGTH(tags) / tagrows + ((LENGTH(tags) % tagrows > 0) ? 1 : 0));
|
||||
return (bh / 2) * (LENGTH(tags) / tagrows + ((LENGTH(tags) % tagrows > 0) ? 1 : 0)) + lrpad;
|
||||
}
|
||||
|
||||
int
|
||||
draw_taggrid(Monitor *m, BarDrawArg *a)
|
||||
draw_taggrid(Bar *bar, BarDrawArg *a)
|
||||
{
|
||||
unsigned int x, y, h, max_x, columns, occ = 0;
|
||||
unsigned int x, y, h, max_x = 0, columns, occ = 0;
|
||||
int invert, i,j, k;
|
||||
Client *c;
|
||||
|
||||
for (c = m->clients; c; c = c->next)
|
||||
for (c = bar->mon->clients; c; c = c->next)
|
||||
occ |= c->tags;
|
||||
|
||||
max_x = x = a->x + lrpad / 2;
|
||||
h = bh / tagrows;
|
||||
x = max_x = a->x;
|
||||
y = 0;
|
||||
columns = LENGTH(tags) / tagrows + ((LENGTH(tags) % tagrows > 0) ? 1 : 0);
|
||||
|
||||
/* Firstly we will fill the borders of squares */
|
||||
#if BAR_VTCOLORS_PATCH
|
||||
XSetForeground(drw->dpy, drw->gc, scheme[SchemeTagsNorm][ColBg].pixel);
|
||||
#else
|
||||
XSetForeground(drw->dpy, drw->gc, scheme[SchemeNorm][ColBg].pixel);
|
||||
#endif // BAR_VTCOLORS_PATCH
|
||||
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 = a->x;
|
||||
x = a->x + lrpad / 2;
|
||||
for (k = 0; k < columns; k++, i++) {
|
||||
if (i < LENGTH(tags)) {
|
||||
invert = m->tagset[m->seltags] & 1 << i ? 0 : 1;
|
||||
invert = bar->mon->tagset[bar->mon->seltags] & 1 << i ? 0 : 1;
|
||||
|
||||
/* Select active color for current square */
|
||||
#if BAR_VTCOLORS_PATCH
|
||||
XSetForeground(drw->dpy, drw->gc, !invert ? scheme[SchemeTagsSel][ColBg].pixel :
|
||||
scheme[SchemeTagsNorm][ColFg].pixel);
|
||||
#else
|
||||
XSetForeground(drw->dpy, drw->gc, !invert ? scheme[SchemeSel][ColBg].pixel :
|
||||
scheme[SchemeNorm][ColFg].pixel);
|
||||
#endif // BAR_VTCOLORS_PATCH
|
||||
XFillRectangle(dpy, drw->drawable, drw->gc, x+1, y+1, h-1, h-1);
|
||||
|
||||
/* Mark square if tag has client */
|
||||
if (occ & 1 << i) {
|
||||
#if BAR_VTCOLORS_PATCH
|
||||
XSetForeground(drw->dpy, drw->gc, !invert ? scheme[SchemeTagsSel][ColFg].pixel :
|
||||
scheme[SchemeTagsNorm][ColBg].pixel);
|
||||
#else
|
||||
XSetForeground(drw->dpy, drw->gc, !invert ? scheme[SchemeSel][ColFg].pixel :
|
||||
scheme[SchemeNorm][ColBg].pixel);
|
||||
#endif // BAR_VTCOLORS_PATCH
|
||||
XFillRectangle(dpy, drw->drawable, drw->gc, x + 1, y + 1,
|
||||
h / 2, h / 2);
|
||||
}
|
||||
@ -60,12 +75,12 @@ draw_taggrid(Monitor *m, BarDrawArg *a)
|
||||
}
|
||||
|
||||
int
|
||||
click_taggrid(Monitor *m, Arg *arg, BarClickArg *a)
|
||||
click_taggrid(Bar *bar, Arg *arg, BarClickArg *a)
|
||||
{
|
||||
unsigned int i, columns;
|
||||
|
||||
columns = LENGTH(tags) / tagrows + ((LENGTH(tags) % tagrows > 0) ? 1 : 0);
|
||||
i = (a->rel_x - 0) / (bh / tagrows) + columns * (a->rel_y / (bh / tagrows));
|
||||
i = (a->rel_x - lrpad / 2) / (bh / tagrows) + columns * (a->rel_y / (bh / tagrows));
|
||||
if (i >= LENGTH(tags)) {
|
||||
i = LENGTH(tags) - 1;
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
static int width_taggrid(Monitor *m, BarWidthArg *a);
|
||||
static int draw_taggrid(Monitor *m, BarDrawArg *a);
|
||||
static int click_taggrid(Monitor *m, Arg *arg, BarClickArg *a);
|
||||
static int width_taggrid(Bar *bar, BarWidthArg *a);
|
||||
static int draw_taggrid(Bar *bar, BarDrawArg *a);
|
||||
static int click_taggrid(Bar *bar, Arg *arg, BarClickArg *a);
|
||||
static void switchtag(const Arg *arg);
|
@ -1,5 +1,5 @@
|
||||
int
|
||||
width_tags(Monitor *m, BarWidthArg *a)
|
||||
width_tags(Bar *bar, BarWidthArg *a)
|
||||
{
|
||||
int w, i;
|
||||
for (w = 0, i = 0; i < LENGTH(tags); i++) {
|
||||
@ -9,14 +9,14 @@ width_tags(Monitor *m, BarWidthArg *a)
|
||||
w += TEXTW(tags[i]);
|
||||
#endif // BAR_ALTERNATIVE_TAGS_PATCH
|
||||
}
|
||||
return w;
|
||||
return w + lrpad;
|
||||
}
|
||||
|
||||
int
|
||||
draw_tags(Monitor *m, BarDrawArg *a)
|
||||
draw_tags(Bar *bar, BarDrawArg *a)
|
||||
{
|
||||
int invert;
|
||||
int w, x = a->x;
|
||||
int w, x = a->x + lrpad / 2;
|
||||
#if BAR_ALTERNATIVE_TAGS_PATCH
|
||||
int wdelta;
|
||||
#endif // BAR_ALTERNATIVE_TAGS_PATCH
|
||||
@ -36,6 +36,7 @@ draw_tags(Monitor *m, BarDrawArg *a)
|
||||
#endif // BAR_HIDEVACANTTAGS_PATCH
|
||||
unsigned int i, occ = 0, urg = 0;
|
||||
Client *c;
|
||||
Monitor *m = bar->mon;
|
||||
|
||||
for (c = m->clients; c; c = c->next) {
|
||||
#if BAR_HIDEVACANTTAGS_PATCH
|
||||
@ -107,9 +108,9 @@ draw_tags(Monitor *m, BarDrawArg *a)
|
||||
}
|
||||
|
||||
int
|
||||
click_tags(Monitor *m, Arg *arg, BarClickArg *a)
|
||||
click_tags(Bar *bar, Arg *arg, BarClickArg *a)
|
||||
{
|
||||
int i = 0, x = 0;
|
||||
int i = 0, x = lrpad / 2;
|
||||
do
|
||||
#if BAR_ALTERNATIVE_TAGS_PATCH
|
||||
x += selmon->alttag ? TEXTW(tagsalt[i]) : TEXTW(tags[i]);
|
||||
|
@ -1,3 +1,3 @@
|
||||
static int width_tags(Monitor *m, BarWidthArg *a);
|
||||
static int draw_tags(Monitor *m, BarDrawArg *a);
|
||||
static int click_tags(Monitor *m, Arg *arg, BarClickArg *a);
|
||||
static int width_tags(Bar *bar, BarWidthArg *a);
|
||||
static int draw_tags(Bar *bar, BarDrawArg *a);
|
||||
static int click_tags(Bar *bar, Arg *arg, BarClickArg *a);
|
@ -1,11 +1,11 @@
|
||||
int
|
||||
width_wintitle(Monitor *m, BarWidthArg *a)
|
||||
width_wintitle(Bar *bar, BarWidthArg *a)
|
||||
{
|
||||
return a->max_width;
|
||||
}
|
||||
|
||||
int
|
||||
draw_wintitle(Monitor *m, BarDrawArg *a)
|
||||
draw_wintitle(Bar *bar, BarDrawArg *a)
|
||||
{
|
||||
#if !BAR_ACTIVETAGINDICATORBAR_PATCH && !BAR_ACTIVETAGINDICATORBAR_ALT1_PATCH
|
||||
#if BAR_PANGO_PATCH
|
||||
@ -19,7 +19,17 @@ draw_wintitle(Monitor *m, BarDrawArg *a)
|
||||
#else
|
||||
int boxw = drw->fonts->h / 6 + 2;
|
||||
#endif // BAR_PANGO_PATCH
|
||||
|
||||
#if BAR_TITLE_LEFT_PAD && BAR_TITLE_RIGHT_PAD
|
||||
int x = a->x + lrpad / 2, w = a->w - lrpad;
|
||||
#elif BAR_TITLE_LEFT_PAD
|
||||
int x = a->x + lrpad / 2, w = a->w - lrpad / 2;
|
||||
#elif BAR_TITLE_RIGHT_PAD
|
||||
int x = a->x, w = a->w - lrpad / 2;
|
||||
#else
|
||||
int x = a->x, w = a->w;
|
||||
#endif // BAR_TITLE_LEFT_PAD | BAR_TITLE_RIGHT_PAD
|
||||
Monitor *m = bar->mon;
|
||||
|
||||
if (m->sel) {
|
||||
#if BAR_VTCOLORS_PATCH
|
||||
@ -70,7 +80,7 @@ draw_wintitle(Monitor *m, BarDrawArg *a)
|
||||
}
|
||||
|
||||
int
|
||||
click_wintitle(Monitor *m, Arg *arg, BarClickArg *a)
|
||||
click_wintitle(Bar *bar, Arg *arg, BarClickArg *a)
|
||||
{
|
||||
return ClkWinTitle;
|
||||
}
|
||||
|
@ -1,3 +1,3 @@
|
||||
static int width_wintitle(Monitor *m, BarWidthArg *a);
|
||||
static int draw_wintitle(Monitor *m, BarDrawArg *a);
|
||||
static int click_wintitle(Monitor *m, Arg *arg, BarClickArg *a);
|
||||
static int width_wintitle(Bar *bar, BarWidthArg *a);
|
||||
static int draw_wintitle(Bar *bar, BarDrawArg *a);
|
||||
static int click_wintitle(Bar *bar, Arg *arg, BarClickArg *a);
|
@ -19,6 +19,9 @@
|
||||
#endif
|
||||
#if BAR_STATUS_PATCH
|
||||
#include "bar_status.c"
|
||||
#if BAR_EXTRABAR_PATCH
|
||||
#include "bar_status_eb.c"
|
||||
#endif // BAR_EXTRABAR_PATCH
|
||||
#endif
|
||||
#if BAR_STATUS2D_PATCH
|
||||
#include "bar_status2d.c"
|
||||
|
@ -19,6 +19,9 @@
|
||||
#endif
|
||||
#if BAR_STATUS_PATCH
|
||||
#include "bar_status.h"
|
||||
#if BAR_EXTRABAR_PATCH
|
||||
#include "bar_status_eb.h"
|
||||
#endif // BAR_EXTRABAR_PATCH
|
||||
#endif
|
||||
#if BAR_STATUS2D_PATCH
|
||||
#include "bar_status2d.h"
|
||||
|
@ -1,70 +0,0 @@
|
||||
void
|
||||
get_vt_colors(void)
|
||||
{
|
||||
char *cfs[3] = {
|
||||
"/sys/module/vt/parameters/default_red",
|
||||
"/sys/module/vt/parameters/default_grn",
|
||||
"/sys/module/vt/parameters/default_blu",
|
||||
};
|
||||
char vtcs[16][8];
|
||||
char tk[] = ",";
|
||||
char cl[64];
|
||||
char *tp = NULL;
|
||||
FILE *fp;
|
||||
size_t r;
|
||||
int i, c, n;
|
||||
|
||||
for (i = 0; i < 16; i++)
|
||||
strcpy(vtcs[i], "#000000");
|
||||
|
||||
for (i = 0, r = 0; i < 3; i++) {
|
||||
if ((fp = fopen(cfs[i], "r")) == NULL)
|
||||
continue;
|
||||
while ((cl[r] = fgetc(fp)) != EOF && cl[r] != '\n')
|
||||
r++;
|
||||
cl[r] = '\0';
|
||||
for (c = 0, tp = cl, n = 0; c < 16; c++, tp++) {
|
||||
if ((r = strcspn(tp, tk)) == -1)
|
||||
break;
|
||||
for (n = 0; r && *tp >= 48 && *tp < 58; r--, tp++)
|
||||
n = n * 10 - 48 + *tp;
|
||||
vtcs[c][i * 2 + 1] = n / 16 < 10 ? n / 16 + 48 : n / 16 + 87;
|
||||
vtcs[c][i * 2 + 2] = n % 16 < 10 ? n % 16 + 48 : n % 16 + 87;
|
||||
}
|
||||
fclose(fp);
|
||||
}
|
||||
for (i = 0; i < LENGTH(colors); i++) {
|
||||
#if FLOAT_BORDER_COLOR_PATCH
|
||||
for (c = 0; c < 4; c++)
|
||||
#else
|
||||
for (c = 0; c < 3; c++)
|
||||
#endif // FLOAT_BORDER_COLOR_PATCH
|
||||
{
|
||||
n = color_ptrs[i][c];
|
||||
if (n > -1 && strlen(colors[i][c]) >= strlen(vtcs[n]))
|
||||
memcpy(colors[i][c], vtcs[n], 7);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int get_luminance(char *r)
|
||||
{
|
||||
char *c = r;
|
||||
int n[3] = {0};
|
||||
int i = 0;
|
||||
|
||||
while (*c) {
|
||||
if (*c >= 48 && *c < 58)
|
||||
n[i / 2] = n[i / 2] * 16 - 48 + *c;
|
||||
else if (*c >= 65 && *c < 71)
|
||||
n[i / 2] = n[i / 2] * 16 - 55 + *c;
|
||||
else if (*c >= 97 && *c < 103)
|
||||
n[i / 2] = n[i / 2] * 16 - 87 + *c;
|
||||
else
|
||||
i--;
|
||||
i++;
|
||||
c++;
|
||||
}
|
||||
|
||||
return (0.299 * n[0] + 0.587 * n[1] + 0.114 * n[2]) / 2.55;
|
||||
}
|
@ -1,2 +0,0 @@
|
||||
static void get_vt_colors(void);
|
||||
static int get_luminance(char *rgb);
|
@ -79,6 +79,14 @@
|
||||
/* Show window title in bar */
|
||||
#define BAR_WINTITLE_PATCH 1
|
||||
|
||||
/* Title bar modules such as wintitle (default), fancybar and awesomebar
|
||||
* do not by default add left and/or right padding as they take up the
|
||||
* remaining space. These options allow you explicitly add padding should
|
||||
* you need it.
|
||||
*/
|
||||
#define BAR_TITLE_RIGHT_PAD 0
|
||||
#define BAR_TITLE_LEFT_PAD 1
|
||||
|
||||
/**
|
||||
* Bar options
|
||||
*/
|
||||
@ -191,20 +199,6 @@
|
||||
*/
|
||||
#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.
|
||||
|
Loading…
x
Reference in New Issue
Block a user