Compare commits
3 Commits
77e2218575
...
f8a678ecf8
Author | SHA1 | Date |
---|---|---|
Alex Kotov | f8a678ecf8 | |
Alex Kotov | 6698c8a72f | |
Alex Kotov | b2d677d39f |
3
Makefile
3
Makefile
|
@ -15,14 +15,13 @@ CONFIGMKS = \
|
||||||
config/3-defvars.mk
|
config/3-defvars.mk
|
||||||
|
|
||||||
RUST_SRC = src/*.rs src/**/*.rs
|
RUST_SRC = src/*.rs src/**/*.rs
|
||||||
RUST_APIS = src/constraints.h src/geom.h src/settings.h
|
RUST_APIS = src/constraints.h src/geom.h src/helpers.h src/settings.h
|
||||||
|
|
||||||
MODULES_SRC = \
|
MODULES_SRC = \
|
||||||
src/atoms.c \
|
src/atoms.c \
|
||||||
src/drw.c \
|
src/drw.c \
|
||||||
src/dwm.c \
|
src/dwm.c \
|
||||||
src/geom.c \
|
src/geom.c \
|
||||||
src/helpers.c \
|
|
||||||
src/layouts.c \
|
src/layouts.c \
|
||||||
src/logger.c \
|
src/logger.c \
|
||||||
src/spawn.c \
|
src/spawn.c \
|
||||||
|
|
|
@ -21,11 +21,6 @@ unsafe extern "C" fn settings_set_bar_on_top_by_default(value: bool) {
|
||||||
SETTINGS.unwrap().bar_on_top_by_default_set(value);
|
SETTINGS.unwrap().bar_on_top_by_default_set(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[no_mangle]
|
|
||||||
unsafe extern "C" fn settings_get_border_for_single_window() -> c_uchar {
|
|
||||||
SETTINGS.unwrap().border_for_single_window().into()
|
|
||||||
}
|
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
unsafe extern "C" fn settings_set_border_for_single_window(value: c_uchar) {
|
unsafe extern "C" fn settings_set_border_for_single_window(value: c_uchar) {
|
||||||
SETTINGS.unwrap().border_for_single_window_set(value.into());
|
SETTINGS.unwrap().border_for_single_window_set(value.into());
|
||||||
|
@ -81,11 +76,6 @@ unsafe extern "C" fn settings_set_focus_on_wheel(value: bool) {
|
||||||
SETTINGS.unwrap().focus_on_wheel_set(value);
|
SETTINGS.unwrap().focus_on_wheel_set(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[no_mangle]
|
|
||||||
unsafe extern "C" fn settings_get_gap_for_single_window() -> c_uchar {
|
|
||||||
SETTINGS.unwrap().gap_for_single_window().into()
|
|
||||||
}
|
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
unsafe extern "C" fn settings_set_gap_for_single_window(value: c_uchar) {
|
unsafe extern "C" fn settings_set_gap_for_single_window(value: c_uchar) {
|
||||||
SETTINGS.unwrap().gap_for_single_window_set(value.into());
|
SETTINGS.unwrap().gap_for_single_window_set(value.into());
|
||||||
|
@ -184,3 +174,29 @@ unsafe extern "C" fn settings_get_swallow_floatting() -> bool {
|
||||||
unsafe extern "C" fn settings_set_swallow_floating(value: bool) {
|
unsafe extern "C" fn settings_set_swallow_floating(value: bool) {
|
||||||
SETTINGS.unwrap().swallow_floating_set(value);
|
SETTINGS.unwrap().swallow_floating_set(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[no_mangle]
|
||||||
|
unsafe extern "C" fn helpers_border_width(
|
||||||
|
displayed_clients: c_uint,
|
||||||
|
selected_is_fullscreen: bool,
|
||||||
|
any_is_fullscreen: bool,
|
||||||
|
) -> c_int {
|
||||||
|
SETTINGS.unwrap().border_width_helper(
|
||||||
|
displayed_clients,
|
||||||
|
selected_is_fullscreen,
|
||||||
|
any_is_fullscreen,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[no_mangle]
|
||||||
|
unsafe extern "C" fn helpers_gap_size(
|
||||||
|
displayed_clients: c_uint,
|
||||||
|
selected_is_fullscreen: bool,
|
||||||
|
any_is_fullscreen: bool,
|
||||||
|
) -> c_int {
|
||||||
|
SETTINGS.unwrap().gap_size_helper(
|
||||||
|
displayed_clients,
|
||||||
|
selected_is_fullscreen,
|
||||||
|
any_is_fullscreen,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
|
@ -1,53 +0,0 @@
|
||||||
#include "helpers.h"
|
|
||||||
|
|
||||||
#include "settings.h"
|
|
||||||
|
|
||||||
int helpers_gap_size(
|
|
||||||
const unsigned int displayed_clients,
|
|
||||||
const bool selected_is_fullscreen,
|
|
||||||
const bool any_is_fullscreen
|
|
||||||
) {
|
|
||||||
const SettingsForSingleWindow gap_for_single_window = settings_get_gap_for_single_window();
|
|
||||||
const int gap_size = settings_get_gap_size();
|
|
||||||
|
|
||||||
if (displayed_clients > 1) return gap_size;
|
|
||||||
|
|
||||||
switch (gap_for_single_window) {
|
|
||||||
case SETTINGS_FOR_SINGLE_WINDOW_NEVER:
|
|
||||||
return 0;
|
|
||||||
case SETTINGS_FOR_SINGLE_WINDOW_ALWAYS:
|
|
||||||
return gap_size;
|
|
||||||
case SETTINGS_FOR_SINGLE_WINDOW_NOT_IN_FULLSCREEN:
|
|
||||||
return selected_is_fullscreen ? 0 : gap_size;
|
|
||||||
case SETTINGS_FOR_SINGLE_WINDOW_NOBODY_IS_FULLSCREEN:
|
|
||||||
return (selected_is_fullscreen || any_is_fullscreen) ? 0 : gap_size;
|
|
||||||
default:
|
|
||||||
// TODO: maybe we should assert here
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int helpers_border_width(
|
|
||||||
const unsigned int displayed_clients,
|
|
||||||
const bool selected_is_fullscreen,
|
|
||||||
const bool any_is_fullscreen
|
|
||||||
) {
|
|
||||||
const SettingsForSingleWindow border_for_single_window = settings_get_border_for_single_window();
|
|
||||||
const int border_width = settings_get_border_width();
|
|
||||||
|
|
||||||
if (displayed_clients > 1) return border_width;
|
|
||||||
|
|
||||||
switch (border_for_single_window) {
|
|
||||||
case SETTINGS_FOR_SINGLE_WINDOW_NEVER:
|
|
||||||
return 0;
|
|
||||||
case SETTINGS_FOR_SINGLE_WINDOW_ALWAYS:
|
|
||||||
return border_width;
|
|
||||||
case SETTINGS_FOR_SINGLE_WINDOW_NOT_IN_FULLSCREEN:
|
|
||||||
return selected_is_fullscreen ? 0 : border_width;
|
|
||||||
case SETTINGS_FOR_SINGLE_WINDOW_NOBODY_IS_FULLSCREEN:
|
|
||||||
return (selected_is_fullscreen || any_is_fullscreen) ? 0 : border_width;
|
|
||||||
default:
|
|
||||||
// TODO: maybe we should assert here
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -15,8 +15,7 @@ typedef unsigned char SettingsForSingleWindow;
|
||||||
bool settings_get_bar_on_top_by_default();
|
bool settings_get_bar_on_top_by_default();
|
||||||
void settings_set_bar_on_top_by_default(bool new_bar_on_top_by_default);
|
void settings_set_bar_on_top_by_default(bool new_bar_on_top_by_default);
|
||||||
|
|
||||||
SettingsForSingleWindow settings_get_border_for_single_window();
|
void settings_set_border_for_single_window(SettingsForSingleWindow new_border_for_single_window);
|
||||||
void settings_set_border_for_single_window(SettingsForSingleWindow new_border_for_single_window);
|
|
||||||
|
|
||||||
int settings_get_border_width();
|
int settings_get_border_width();
|
||||||
void settings_set_border_width(int new_border_width);
|
void settings_set_border_width(int new_border_width);
|
||||||
|
@ -27,8 +26,7 @@ void settings_set_default_clients_in_master(int new_default_clients_in_master);
|
||||||
float settings_get_default_master_area_factor();
|
float settings_get_default_master_area_factor();
|
||||||
void settings_set_default_master_area_factor(float new_default_master_area_factor);
|
void settings_set_default_master_area_factor(float new_default_master_area_factor);
|
||||||
|
|
||||||
SettingsForSingleWindow settings_get_gap_for_single_window();
|
void settings_set_gap_for_single_window(SettingsForSingleWindow new_gap_for_single_window);
|
||||||
void settings_set_gap_for_single_window(SettingsForSingleWindow new_gap_for_single_window);
|
|
||||||
|
|
||||||
bool settings_get_enable_swallowing();
|
bool settings_get_enable_swallowing();
|
||||||
void settings_set_enable_swallowing(bool new_enable_swallowing);
|
void settings_set_enable_swallowing(bool new_enable_swallowing);
|
||||||
|
|
|
@ -110,6 +110,36 @@ impl Settings {
|
||||||
self.border_width = constraints::border_width(value);
|
self.border_width = constraints::border_width(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn border_width_helper(
|
||||||
|
&self,
|
||||||
|
displayed_clients: c_uint,
|
||||||
|
selected_is_fullscreen: bool,
|
||||||
|
any_is_fullscreen: bool,
|
||||||
|
) -> c_int {
|
||||||
|
if displayed_clients > 1 {
|
||||||
|
return self.border_width;
|
||||||
|
}
|
||||||
|
|
||||||
|
match self.border_for_single_window {
|
||||||
|
ForSingleWindow::Never => 0,
|
||||||
|
ForSingleWindow::Always => self.border_width,
|
||||||
|
ForSingleWindow::NotInFullscreen => {
|
||||||
|
if selected_is_fullscreen {
|
||||||
|
0
|
||||||
|
} else {
|
||||||
|
self.border_width
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ForSingleWindow::NobodyIsFullscreen => {
|
||||||
|
if selected_is_fullscreen || any_is_fullscreen {
|
||||||
|
0
|
||||||
|
} else {
|
||||||
|
self.border_width
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn default_clients_in_master(&self) -> c_int {
|
pub fn default_clients_in_master(&self) -> c_int {
|
||||||
self.default_clients_in_master
|
self.default_clients_in_master
|
||||||
}
|
}
|
||||||
|
@ -162,6 +192,36 @@ impl Settings {
|
||||||
self.gap_size = constraints::gap_size(value);
|
self.gap_size = constraints::gap_size(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn gap_size_helper(
|
||||||
|
&self,
|
||||||
|
displayed_clients: c_uint,
|
||||||
|
selected_is_fullscreen: bool,
|
||||||
|
any_is_fullscreen: bool,
|
||||||
|
) -> c_int {
|
||||||
|
if displayed_clients > 1 {
|
||||||
|
return self.gap_size;
|
||||||
|
}
|
||||||
|
|
||||||
|
match self.gap_for_single_window {
|
||||||
|
ForSingleWindow::Never => 0,
|
||||||
|
ForSingleWindow::Always => self.gap_size,
|
||||||
|
ForSingleWindow::NotInFullscreen => {
|
||||||
|
if selected_is_fullscreen {
|
||||||
|
0
|
||||||
|
} else {
|
||||||
|
self.gap_size
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ForSingleWindow::NobodyIsFullscreen => {
|
||||||
|
if selected_is_fullscreen || any_is_fullscreen {
|
||||||
|
0
|
||||||
|
} else {
|
||||||
|
self.gap_size
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn master_area_factor_per_unit(&self) -> unit::Kind {
|
pub fn master_area_factor_per_unit(&self) -> unit::Kind {
|
||||||
self.master_area_factor_per_unit
|
self.master_area_factor_per_unit
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue