Allow to change border width and gap size on fly

This commit is contained in:
Alex Kotov 2021-11-15 10:50:02 +05:00
parent 3f04c324b8
commit 3c2538f72b
Signed by: kotovalexarian
GPG Key ID: 553C0EBBEB5D5F08
3 changed files with 54 additions and 9 deletions

View File

@ -94,6 +94,10 @@ static Key keys[] = {
TAGKEYS( XK_7, 6)
TAGKEYS( XK_8, 7)
TAGKEYS( XK_9, 8)
{ MODKEY|Mod1Mask, XK_b, configborder, {.i = -1 } },
{ MODKEY|Mod1Mask|ShiftMask, XK_b, configborder, {.i = +1 } },
{ MODKEY|Mod1Mask, XK_g, configgap, {.i = -1 } },
{ MODKEY|Mod1Mask|ShiftMask, XK_g, configgap, {.i = +1 } },
};
/* button definitions */

20
dwm.c
View File

@ -172,6 +172,8 @@ static void arrangemon(Monitor *m);
static void attach(Client *c);
static void attachstack(Client *c);
static void buttonpress(XEvent *e);
static void configborder(const Arg *arg);
static void configgap(const Arg *arg);
static void centeredmaster(Monitor *m);
static void checkotherwm(void);
static void cleanup(void);
@ -540,6 +542,24 @@ buttonpress(XEvent *e)
buttons[i].func(click == ClkTagBar && buttons[i].arg.i == 0 ? &arg : &buttons[i].arg);
}
void configborder(const Arg *const arg)
{
if (arg == NULL) return;
const int old_border_width = settings_get_border_width();
const int new_border_width = old_border_width + (arg->i >= 0 ? +1 : -1);
settings_set_border_width(new_border_width);
arrange(selmon);
}
void configgap(const Arg *const arg)
{
if (arg == NULL) return;
const int old_gap_size = settings_get_gap_size();
const int new_gap_size = old_gap_size + (arg->i >= 0 ? +2 : -2);
settings_set_gap_size(new_gap_size);
arrange(selmon);
}
void
centeredmaster(Monitor *m)
{

View File

@ -1,5 +1,16 @@
#include "settings.h"
#define MIN_BORDER_WIDTH 0
#define MAX_BORDER_WIDTH 10000
#define MIN_DEFAULT_CLIENTS_IN_MASTER 1
#define MAX_DEFAULT_CLIENTS_IN_MASTER 10000
#define MIN_GAP_SIZE 0
#define MAX_GAP_SIZE 10000
#define MIN_MAX_CLIENTS_IN_MASTER 1
#define MAX_MAX_CLIENTS_IN_MASTER 10000
#define MIN_SNAP_DISTANCE 1
#define MAX_SNAP_DISTANCE 10000
static int border_width = 2;
static int default_clients_in_master = 1;
static bool enable_border_for_single_window = true;
@ -10,24 +21,28 @@ static int max_clients_in_master = 0; // 0 for no maximum
static bool respect_resize_hints_in_floating_layout = false;
static unsigned int snap_distance = 32;
int settings_get_border_width()
int settings_get_border_width()
{
return border_width;
}
void settings_set_border_width(const int new_border_width)
void settings_set_border_width(int new_border_width)
{
if (new_border_width < MIN_BORDER_WIDTH) new_border_width = MIN_BORDER_WIDTH;
if (new_border_width > MAX_BORDER_WIDTH) new_border_width = MAX_BORDER_WIDTH;
border_width = new_border_width;
// TODO: notify WM to rearrange clients
}
int settings_get_default_clients_in_master()
{
return default_clients_in_master >= 1 ? default_clients_in_master : 1;
return default_clients_in_master;
}
void settings_set_default_clients_in_master(const int new_default_clients_in_master)
void settings_set_default_clients_in_master(int new_default_clients_in_master)
{
if (new_default_clients_in_master < MIN_DEFAULT_CLIENTS_IN_MASTER) new_default_clients_in_master = MIN_DEFAULT_CLIENTS_IN_MASTER;
if (new_default_clients_in_master < MAX_DEFAULT_CLIENTS_IN_MASTER) new_default_clients_in_master = MAX_DEFAULT_CLIENTS_IN_MASTER;
default_clients_in_master = new_default_clients_in_master;
}
@ -68,19 +83,23 @@ int settings_get_gap_size()
return gap_size;
}
void settings_set_gap_size(const int new_gap_size)
void settings_set_gap_size(int new_gap_size)
{
gap_size = new_gap_size >= 0 ? new_gap_size : 0;
if (new_gap_size < MIN_GAP_SIZE) new_gap_size = MIN_GAP_SIZE;
if (new_gap_size > MAX_GAP_SIZE) new_gap_size = MAX_GAP_SIZE;
gap_size = new_gap_size;
// TODO: notify WM to rearrange clients
}
int settings_get_max_clients_in_master()
{
return max_clients_in_master > 0 ? max_clients_in_master : 0;
return max_clients_in_master;
}
void settings_set_max_clients_in_master(const int new_max_clients_in_master)
void settings_set_max_clients_in_master(int new_max_clients_in_master)
{
if (new_max_clients_in_master < MIN_MAX_CLIENTS_IN_MASTER) new_max_clients_in_master = MIN_MAX_CLIENTS_IN_MASTER;
if (new_max_clients_in_master < MAX_MAX_CLIENTS_IN_MASTER) new_max_clients_in_master = MAX_MAX_CLIENTS_IN_MASTER;
max_clients_in_master = new_max_clients_in_master;
// TODO: notify WM to rearrange clients
}
@ -101,7 +120,9 @@ unsigned int settings_get_snap_distance()
return snap_distance;
}
void settings_set_snap_distance(const unsigned int new_snap_distance)
void settings_set_snap_distance(unsigned int new_snap_distance)
{
if (new_snap_distance < MIN_SNAP_DISTANCE) new_snap_distance = MIN_SNAP_DISTANCE;
if (new_snap_distance < MAX_SNAP_DISTANCE) new_snap_distance = MAX_SNAP_DISTANCE;
snap_distance = new_snap_distance;
}