Allow to remove borders and gaps for single fullscreen window
This commit is contained in:
parent
125f209926
commit
bf0295a721
1
Makefile
1
Makefile
|
@ -17,6 +17,7 @@ options:
|
|||
%.o: %.c
|
||||
${CC} -c $< -o $@ ${CFLAGS}
|
||||
|
||||
dwm.o: dwm/layouts.c dwm/swallow.c dwm/systray.c
|
||||
${OBJ}: atoms.h drw.h config.def.h config.mk layouts.h settings.h spawn.h tags.h util.h
|
||||
|
||||
polytreewm: ${OBJ}
|
||||
|
|
2
dwm.c
2
dwm.c
|
@ -1914,10 +1914,12 @@ setfullscreen(Client *c, int fullscreen)
|
|||
XChangeProperty(dpy, c->win, atoms->netatom[NetWMState], XA_ATOM, 32,
|
||||
PropModeReplace, (unsigned char*)&atoms->netatom[NetWMFullscreen], 1);
|
||||
c->isfullscreen = 1;
|
||||
arrange(c->mon);
|
||||
} else if (!fullscreen && c->isfullscreen){
|
||||
XChangeProperty(dpy, c->win, atoms->netatom[NetWMState], XA_ATOM, 32,
|
||||
PropModeReplace, (unsigned char*)0, 0);
|
||||
c->isfullscreen = 0;
|
||||
arrange(c->mon);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -20,16 +20,39 @@ centeredmaster(Monitor *m)
|
|||
}
|
||||
}
|
||||
|
||||
const bool enable_gap_for_single_window = settings_get_enable_gap_for_single_window();
|
||||
const int gap_size = (n > 1 || enable_gap_for_single_window) ? settings_get_gap_size() : 0;
|
||||
const SettingsForSingleWindow gap_for_single_window = settings_get_gap_for_single_window();
|
||||
const SettingsForSingleWindow border_for_single_window = settings_get_border_for_single_window();
|
||||
|
||||
const int gap_size = (
|
||||
n > 1
|
||||
||
|
||||
gap_for_single_window == SETTINGS_FOR_SINGLE_WINDOW_ALWAYS
|
||||
||
|
||||
(
|
||||
gap_for_single_window == SETTINGS_FOR_SINGLE_WINDOW_NOT_IN_FULLSCREEN
|
||||
&&
|
||||
!m->sel->isfullscreen
|
||||
)
|
||||
) ? settings_get_gap_size() : 0;
|
||||
|
||||
const int border_width = (
|
||||
n > 1
|
||||
||
|
||||
border_for_single_window == SETTINGS_FOR_SINGLE_WINDOW_ALWAYS
|
||||
||
|
||||
(
|
||||
border_for_single_window == SETTINGS_FOR_SINGLE_WINDOW_NOT_IN_FULLSCREEN
|
||||
&&
|
||||
!m->sel->isfullscreen
|
||||
)
|
||||
) ? settings_get_border_width() : 0;
|
||||
|
||||
const int top_left_half_gap = gap_size / 2;
|
||||
const int bottom_right_half_gap = gap_size - top_left_half_gap;
|
||||
|
||||
const bool enable_border_for_single_window = settings_get_enable_border_for_single_window();
|
||||
const int border_width = (n > 1 || enable_border_for_single_window) ? settings_get_border_width() : 0;
|
||||
|
||||
unsigned int oty = 0, ety = 0, my = 0;
|
||||
Client *c = nexttiled(m->clients);
|
||||
unsigned int oty = 0, ety = 0, my = 0;
|
||||
|
||||
for (unsigned int i = 0; c; c = nexttiled(c->next), ++i) {
|
||||
if (i < m->nmaster) {
|
||||
// nmaster clients are stacked vertically,
|
||||
|
@ -100,11 +123,28 @@ centeredmaster(Monitor *m)
|
|||
void
|
||||
monocle(Monitor *m)
|
||||
{
|
||||
const bool enable_gap_for_single_window = settings_get_enable_gap_for_single_window();
|
||||
const int gap_size = enable_gap_for_single_window ? settings_get_gap_size() : 0;
|
||||
const SettingsForSingleWindow gap_for_single_window = settings_get_gap_for_single_window();
|
||||
const SettingsForSingleWindow border_for_single_window = settings_get_border_for_single_window();
|
||||
|
||||
const bool enable_border_for_single_window = settings_get_enable_border_for_single_window();
|
||||
const int border_width = enable_border_for_single_window ? settings_get_border_width() : 0;
|
||||
const int gap_size = (
|
||||
gap_for_single_window == SETTINGS_FOR_SINGLE_WINDOW_ALWAYS
|
||||
||
|
||||
(
|
||||
gap_for_single_window == SETTINGS_FOR_SINGLE_WINDOW_NOT_IN_FULLSCREEN
|
||||
&&
|
||||
!m->sel->isfullscreen
|
||||
)
|
||||
) ? settings_get_gap_size() : 0;
|
||||
|
||||
const int border_width = (
|
||||
border_for_single_window == SETTINGS_FOR_SINGLE_WINDOW_ALWAYS
|
||||
||
|
||||
(
|
||||
border_for_single_window == SETTINGS_FOR_SINGLE_WINDOW_NOT_IN_FULLSCREEN
|
||||
&&
|
||||
!m->sel->isfullscreen
|
||||
)
|
||||
) ? settings_get_border_width() : 0;
|
||||
|
||||
for (Client *c = nexttiled(m->clients); c; c = nexttiled(c->next)) {
|
||||
resize(
|
||||
|
@ -126,17 +166,40 @@ tile(Monitor *m)
|
|||
for (Client *c = nexttiled(m->clients); c; c = nexttiled(c->next), ++n);
|
||||
if (n == 0) return;
|
||||
|
||||
const bool enable_gap_for_single_window = settings_get_enable_gap_for_single_window();
|
||||
const int gap_size = (n > 1 || enable_gap_for_single_window) ? settings_get_gap_size() : 0;
|
||||
const SettingsForSingleWindow gap_for_single_window = settings_get_gap_for_single_window();
|
||||
const SettingsForSingleWindow border_for_single_window = settings_get_border_for_single_window();
|
||||
|
||||
const int gap_size = (
|
||||
n > 1
|
||||
||
|
||||
gap_for_single_window == SETTINGS_FOR_SINGLE_WINDOW_ALWAYS
|
||||
||
|
||||
(
|
||||
gap_for_single_window == SETTINGS_FOR_SINGLE_WINDOW_NOT_IN_FULLSCREEN
|
||||
&&
|
||||
!m->sel->isfullscreen
|
||||
)
|
||||
) ? settings_get_gap_size() : 0;
|
||||
|
||||
const int border_width = (
|
||||
n > 1
|
||||
||
|
||||
border_for_single_window == SETTINGS_FOR_SINGLE_WINDOW_ALWAYS
|
||||
||
|
||||
(
|
||||
border_for_single_window == SETTINGS_FOR_SINGLE_WINDOW_NOT_IN_FULLSCREEN
|
||||
&&
|
||||
!m->sel->isfullscreen
|
||||
)
|
||||
) ? settings_get_border_width() : 0;
|
||||
|
||||
const int top_left_half_gap = gap_size / 2;
|
||||
const int bottom_right_half_gap = gap_size - top_left_half_gap;
|
||||
|
||||
const bool enable_border_for_single_window = settings_get_enable_border_for_single_window();
|
||||
const int border_width = (n > 1 || enable_border_for_single_window) ? settings_get_border_width() : 0;
|
||||
|
||||
const unsigned int mw = n > m->nmaster ? (m->nmaster ? m->ww * m->mfact : 0) : m->ww;
|
||||
|
||||
Client *c = nexttiled(m->clients);
|
||||
|
||||
for (unsigned int i = 0, my = 0, ty = 0; c; c = nexttiled(c->next), ++i) {
|
||||
if (i < m->nmaster) {
|
||||
const unsigned int h = (m->wh - my) / (MIN(n, m->nmaster) - i);
|
||||
|
|
20
settings.c
20
settings.c
|
@ -13,8 +13,8 @@
|
|||
|
||||
static int border_width = 2;
|
||||
static int default_clients_in_master = 1;
|
||||
static bool enable_border_for_single_window = true;
|
||||
static bool enable_gap_for_single_window = true;
|
||||
static SettingsForSingleWindow border_for_single_window = SETTINGS_FOR_SINGLE_WINDOW_NOT_IN_FULLSCREEN;
|
||||
static SettingsForSingleWindow gap_for_single_window = SETTINGS_FOR_SINGLE_WINDOW_NOT_IN_FULLSCREEN;
|
||||
static bool enable_swallowing = true;
|
||||
static bool focus_on_wheel = true;
|
||||
static int gap_size = 10;
|
||||
|
@ -48,25 +48,25 @@ void settings_set_default_clients_in_master(int new_default_clients_in_master)
|
|||
default_clients_in_master = new_default_clients_in_master;
|
||||
}
|
||||
|
||||
bool settings_get_enable_border_for_single_window()
|
||||
SettingsForSingleWindow settings_get_border_for_single_window()
|
||||
{
|
||||
return enable_border_for_single_window;
|
||||
return border_for_single_window;
|
||||
}
|
||||
|
||||
void settings_set_enable_border_for_single_window(const bool new_enable_border_for_single_window)
|
||||
void settings_set_border_for_single_window(const SettingsForSingleWindow new_border_for_single_window)
|
||||
{
|
||||
enable_border_for_single_window = new_enable_border_for_single_window;
|
||||
border_for_single_window = new_border_for_single_window;
|
||||
// TODO: notify WM to rearrange clients
|
||||
}
|
||||
|
||||
bool settings_get_enable_gap_for_single_window()
|
||||
SettingsForSingleWindow settings_get_gap_for_single_window()
|
||||
{
|
||||
return enable_gap_for_single_window;
|
||||
return gap_for_single_window;
|
||||
}
|
||||
|
||||
void settings_set_enable_gap_for_single_window(const bool new_enable_gap_for_single_window)
|
||||
void settings_set_gap_for_single_window(const SettingsForSingleWindow new_gap_for_single_window)
|
||||
{
|
||||
enable_gap_for_single_window = new_enable_gap_for_single_window;
|
||||
gap_for_single_window = new_gap_for_single_window;
|
||||
// TODO: notify WM to rearrange clients
|
||||
}
|
||||
|
||||
|
|
14
settings.h
14
settings.h
|
@ -3,17 +3,23 @@
|
|||
|
||||
#include <stdbool.h>
|
||||
|
||||
typedef enum {
|
||||
SETTINGS_FOR_SINGLE_WINDOW_NEVER,
|
||||
SETTINGS_FOR_SINGLE_WINDOW_ALWAYS,
|
||||
SETTINGS_FOR_SINGLE_WINDOW_NOT_IN_FULLSCREEN,
|
||||
} SettingsForSingleWindow;
|
||||
|
||||
int settings_get_border_width();
|
||||
void settings_set_border_width(int new_border_width);
|
||||
|
||||
int settings_get_default_clients_in_master();
|
||||
void settings_set_default_clients_in_master(int new_default_clients_in_master);
|
||||
|
||||
bool settings_get_enable_border_for_single_window();
|
||||
void settings_set_enable_border_for_single_window(bool new_enable_border_for_single_window);
|
||||
SettingsForSingleWindow settings_get_border_for_single_window();
|
||||
void settings_set_border_for_single_window(SettingsForSingleWindow new_border_for_single_window);
|
||||
|
||||
bool settings_get_enable_gap_for_single_window();
|
||||
void settings_set_enable_gap_for_single_window(bool new_enable_gap_for_single_window);
|
||||
SettingsForSingleWindow settings_get_gap_for_single_window();
|
||||
void settings_set_gap_for_single_window(SettingsForSingleWindow new_gap_for_single_window);
|
||||
|
||||
bool settings_get_enable_swallowing();
|
||||
void settings_set_enable_swallowing(bool new_enable_swallowing);
|
||||
|
|
Loading…
Reference in New Issue