Compare commits
	
		
			3 commits
		
	
	
		
			363cbfc894
			...
			275076396e
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
							 | 
						275076396e | ||
| 
							 | 
						1357b10495 | ||
| 
							 | 
						ed910c1fff | 
					 10 changed files with 168 additions and 75 deletions
				
			
		
							
								
								
									
										48
									
								
								Cargo.lock
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										48
									
								
								Cargo.lock
									
										
									
										generated
									
									
									
								
							| 
						 | 
				
			
			@ -2,6 +2,54 @@
 | 
			
		|||
# It is not intended for manual editing.
 | 
			
		||||
version = 3
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "ctor"
 | 
			
		||||
version = "0.1.23"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "cdffe87e1d521a10f9696f833fe502293ea446d7f256c06128293a4119bdf4cb"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "quote",
 | 
			
		||||
 "syn",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "polytreewm"
 | 
			
		||||
version = "0.0.0"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "ctor",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "proc-macro2"
 | 
			
		||||
version = "1.0.43"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "unicode-ident",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "quote"
 | 
			
		||||
version = "1.0.21"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "proc-macro2",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "syn"
 | 
			
		||||
version = "1.0.99"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "58dbef6ec655055e20b86b15a8cc6d439cca19b667537ac6a1369572d151ab13"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "proc-macro2",
 | 
			
		||||
 "quote",
 | 
			
		||||
 "unicode-ident",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "unicode-ident"
 | 
			
		||||
version = "1.0.3"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "c4f5b37a154999a8f3f98cc23a628d850e154479cd94decf3414696e12e31aaf"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,3 +15,6 @@ publish = false
 | 
			
		|||
[lib]
 | 
			
		||||
name = "polytreewm"
 | 
			
		||||
crate-type = ["staticlib"]
 | 
			
		||||
 | 
			
		||||
[dependencies]
 | 
			
		||||
ctor = "0.1.23"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										41
									
								
								src/api/constraints.rs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								src/api/constraints.rs
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,41 @@
 | 
			
		|||
use crate::*;
 | 
			
		||||
 | 
			
		||||
use std::os::raw::*;
 | 
			
		||||
 | 
			
		||||
#[no_mangle]
 | 
			
		||||
extern "C" fn constraints_default_clients_in_master(
 | 
			
		||||
    default_clients_in_master: c_int,
 | 
			
		||||
) -> c_int {
 | 
			
		||||
    constraints::default_clients_in_master(default_clients_in_master)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[no_mangle]
 | 
			
		||||
extern "C" fn constraints_default_master_area_factor(
 | 
			
		||||
    default_master_area_factor: c_float,
 | 
			
		||||
) -> c_float {
 | 
			
		||||
    constraints::default_master_area_factor(default_master_area_factor)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[no_mangle]
 | 
			
		||||
extern "C" fn constraints_gap_size(gap_size: c_int) -> c_int {
 | 
			
		||||
    constraints::gap_size(gap_size)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[no_mangle]
 | 
			
		||||
extern "C" fn constraints_master_area_factor(
 | 
			
		||||
    master_area_factor: c_float,
 | 
			
		||||
) -> c_float {
 | 
			
		||||
    constraints::master_area_factor(master_area_factor)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[no_mangle]
 | 
			
		||||
extern "C" fn constraints_max_clients_in_master(
 | 
			
		||||
    max_clients_in_master: c_int,
 | 
			
		||||
) -> c_int {
 | 
			
		||||
    constraints::max_clients_in_master(max_clients_in_master)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[no_mangle]
 | 
			
		||||
extern "C" fn constraints_snap_distance(snap_distance: c_uint) -> c_uint {
 | 
			
		||||
    constraints::snap_distance(snap_distance)
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -2,57 +2,6 @@ use crate::*;
 | 
			
		|||
 | 
			
		||||
use std::os::raw::*;
 | 
			
		||||
 | 
			
		||||
/***************
 | 
			
		||||
 * Constraints *
 | 
			
		||||
 ***************/
 | 
			
		||||
 | 
			
		||||
#[no_mangle]
 | 
			
		||||
extern "C" fn constraints_border_width(border_width: c_int) -> c_int {
 | 
			
		||||
    constraints::border_width(border_width)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[no_mangle]
 | 
			
		||||
extern "C" fn constraints_default_clients_in_master(
 | 
			
		||||
    default_clients_in_master: c_int,
 | 
			
		||||
) -> c_int {
 | 
			
		||||
    constraints::default_clients_in_master(default_clients_in_master)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[no_mangle]
 | 
			
		||||
extern "C" fn constraints_default_master_area_factor(
 | 
			
		||||
    default_master_area_factor: c_float,
 | 
			
		||||
) -> c_float {
 | 
			
		||||
    constraints::default_master_area_factor(default_master_area_factor)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[no_mangle]
 | 
			
		||||
extern "C" fn constraints_gap_size(gap_size: c_int) -> c_int {
 | 
			
		||||
    constraints::gap_size(gap_size)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[no_mangle]
 | 
			
		||||
extern "C" fn constraints_master_area_factor(
 | 
			
		||||
    master_area_factor: c_float,
 | 
			
		||||
) -> c_float {
 | 
			
		||||
    constraints::master_area_factor(master_area_factor)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[no_mangle]
 | 
			
		||||
extern "C" fn constraints_max_clients_in_master(
 | 
			
		||||
    max_clients_in_master: c_int,
 | 
			
		||||
) -> c_int {
 | 
			
		||||
    constraints::max_clients_in_master(max_clients_in_master)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[no_mangle]
 | 
			
		||||
extern "C" fn constraints_snap_distance(snap_distance: c_uint) -> c_uint {
 | 
			
		||||
    constraints::snap_distance(snap_distance)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/********
 | 
			
		||||
 * Geom *
 | 
			
		||||
 ********/
 | 
			
		||||
 | 
			
		||||
#[no_mangle]
 | 
			
		||||
unsafe extern "C" fn position_init(position: *mut geom::Position) {
 | 
			
		||||
    *position = Default::default();
 | 
			
		||||
							
								
								
									
										3
									
								
								src/api/mod.rs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								src/api/mod.rs
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,3 @@
 | 
			
		|||
mod constraints;
 | 
			
		||||
mod geom;
 | 
			
		||||
mod settings;
 | 
			
		||||
							
								
								
									
										32
									
								
								src/api/settings.rs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								src/api/settings.rs
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,32 @@
 | 
			
		|||
use crate::*;
 | 
			
		||||
 | 
			
		||||
use std::os::raw::*;
 | 
			
		||||
 | 
			
		||||
use ctor::ctor;
 | 
			
		||||
 | 
			
		||||
static mut SETTINGS: Option<Settings> = None;
 | 
			
		||||
 | 
			
		||||
#[ctor]
 | 
			
		||||
unsafe fn ctor() {
 | 
			
		||||
    SETTINGS = Some(Default::default());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[no_mangle]
 | 
			
		||||
unsafe extern "C" fn settings_get_bar_on_top_by_default() -> bool {
 | 
			
		||||
    SETTINGS.unwrap().bar_on_top_by_default()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[no_mangle]
 | 
			
		||||
unsafe extern "C" fn settings_set_bar_on_top_by_default(value: bool) {
 | 
			
		||||
    SETTINGS.unwrap().bar_on_top_by_default_set(value);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[no_mangle]
 | 
			
		||||
unsafe extern "C" fn settings_get_border_width() -> c_int {
 | 
			
		||||
    SETTINGS.unwrap().border_width()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[no_mangle]
 | 
			
		||||
unsafe extern "C" fn settings_set_border_width(value: c_int) {
 | 
			
		||||
    SETTINGS.unwrap().border_width_set(value);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,7 +1,6 @@
 | 
			
		|||
#ifndef _CONSTRAINTS_H
 | 
			
		||||
#define _CONSTRAINTS_H
 | 
			
		||||
 | 
			
		||||
int constraints_border_width(int border_width);
 | 
			
		||||
int constraints_default_clients_in_master(int default_clients_in_master);
 | 
			
		||||
float constraints_default_master_area_factor(float default_master_area_factor);
 | 
			
		||||
int constraints_gap_size(int gap_size);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,3 +1,7 @@
 | 
			
		|||
mod api;
 | 
			
		||||
mod constraints;
 | 
			
		||||
mod settings;
 | 
			
		||||
 | 
			
		||||
pub mod geom;
 | 
			
		||||
 | 
			
		||||
pub use settings::Settings;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,9 +2,7 @@
 | 
			
		|||
 | 
			
		||||
#include "constraints.h"
 | 
			
		||||
 | 
			
		||||
static bool bar_on_top_by_default = true;
 | 
			
		||||
static SettingsForSingleWindow border_for_single_window = SETTINGS_FOR_SINGLE_WINDOW_NOBODY_IS_FULLSCREEN;
 | 
			
		||||
static int border_width = 2;
 | 
			
		||||
static int default_clients_in_master = 1;
 | 
			
		||||
static float default_master_area_factor = 0.6;
 | 
			
		||||
static SettingsForSingleWindow gap_for_single_window = SETTINGS_FOR_SINGLE_WINDOW_NOBODY_IS_FULLSCREEN;
 | 
			
		||||
| 
						 | 
				
			
			@ -19,16 +17,6 @@ static UnitKind show_bar_per_unit = UNIT_MONITOR;
 | 
			
		|||
static unsigned int snap_distance = 32;
 | 
			
		||||
static bool swallow_floating = false;
 | 
			
		||||
 | 
			
		||||
bool settings_get_bar_on_top_by_default()
 | 
			
		||||
{
 | 
			
		||||
	return bar_on_top_by_default;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void settings_set_bar_on_top_by_default(bool new_bar_on_top_by_default)
 | 
			
		||||
{
 | 
			
		||||
	bar_on_top_by_default = new_bar_on_top_by_default;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
SettingsForSingleWindow settings_get_border_for_single_window()
 | 
			
		||||
{
 | 
			
		||||
	return border_for_single_window;
 | 
			
		||||
| 
						 | 
				
			
			@ -40,17 +28,6 @@ void settings_set_border_for_single_window(const SettingsForSingleWindow new_bor
 | 
			
		|||
	// TODO: notify WM to rearrange clients
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int settings_get_border_width()
 | 
			
		||||
{
 | 
			
		||||
	return border_width;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void settings_set_border_width(const int new_border_width)
 | 
			
		||||
{
 | 
			
		||||
	border_width = constraints_border_width(new_border_width);
 | 
			
		||||
	// TODO: notify WM to rearrange clients
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int settings_get_default_clients_in_master()
 | 
			
		||||
{
 | 
			
		||||
	return default_clients_in_master;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										37
									
								
								src/settings.rs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								src/settings.rs
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,37 @@
 | 
			
		|||
use crate::constraints;
 | 
			
		||||
 | 
			
		||||
use std::os::raw::*;
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Copy, Debug)]
 | 
			
		||||
pub struct Settings {
 | 
			
		||||
    bar_on_top_by_default: bool,
 | 
			
		||||
    border_width: c_int,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl Default for Settings {
 | 
			
		||||
    fn default() -> Self {
 | 
			
		||||
        Self {
 | 
			
		||||
            bar_on_top_by_default: true,
 | 
			
		||||
            border_width: 2,
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl Settings {
 | 
			
		||||
    pub fn bar_on_top_by_default(&self) -> bool {
 | 
			
		||||
        self.bar_on_top_by_default
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub fn bar_on_top_by_default_set(&mut self, value: bool) {
 | 
			
		||||
        self.bar_on_top_by_default = value;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub fn border_width(&self) -> c_int {
 | 
			
		||||
        self.border_width
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // TODO: notify WM to rearrange clients
 | 
			
		||||
    pub fn border_width_set(&mut self, value: c_int) {
 | 
			
		||||
        self.border_width = constraints::border_width(value);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue