Move code to separate modules
src/layouts.c src/interaction.c
This commit is contained in:
parent
7861f0ccd6
commit
2f735200f3
16 changed files with 217 additions and 137 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -3,7 +3,7 @@
|
|||
/polytreewm
|
||||
|
||||
# C
|
||||
/src/*.o
|
||||
/src/**/*.o
|
||||
/tests/*.o
|
||||
/tests/*.test
|
||||
|
||||
|
|
5
Makefile
5
Makefile
|
@ -27,6 +27,9 @@ RUST_APIS = \
|
|||
src/settings.h
|
||||
|
||||
MODULES_SRC = \
|
||||
src/config/keys.c \
|
||||
src/config/buttons.c \
|
||||
src/config/layouts.c \
|
||||
src/drw.c \
|
||||
src/dwm.c \
|
||||
src/geom.c \
|
||||
|
@ -52,7 +55,7 @@ TEST_SRC = \
|
|||
|
||||
MAIN_SRC = $(MODULES_SRC) src/main.c
|
||||
|
||||
MODULES_HDR = $(MODULES_SRC:.c=.h) $(RUST_APIS)
|
||||
MODULES_HDR = $(MODULES_SRC:.c=.h) $(RUST_APIS) src/config/common.h
|
||||
DWM_HDR = $(DWM_SRC:.c=.h) src/dwm/types.h
|
||||
MAIN_HDR = $(MODULES_HDR) src/main.h
|
||||
|
||||
|
|
19
src/config/buttons.c
Normal file
19
src/config/buttons.c
Normal file
|
@ -0,0 +1,19 @@
|
|||
#include "buttons.h"
|
||||
|
||||
#include "../dwm.h"
|
||||
|
||||
#include <X11/keysym.h>
|
||||
|
||||
#define MODKEY Mod4Mask
|
||||
|
||||
const Button buttons[] = {
|
||||
/* click event mask button function argument */
|
||||
{ ClkClientWin, MODKEY, Button1, movemouse, {0} },
|
||||
{ ClkClientWin, MODKEY, Button2, togglefloating, {0} },
|
||||
{ ClkClientWin, MODKEY, Button3, resizemouse, {0} },
|
||||
};
|
||||
|
||||
size_t buttons_count()
|
||||
{
|
||||
return sizeof(buttons) / sizeof(buttons[0]);
|
||||
}
|
22
src/config/buttons.h
Normal file
22
src/config/buttons.h
Normal file
|
@ -0,0 +1,22 @@
|
|||
#ifndef _CONFIG_BUTTONS_H
|
||||
#define _CONFIG_BUTTONS_H
|
||||
|
||||
#include "common.h"
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
typedef struct {
|
||||
unsigned int click;
|
||||
unsigned int mask;
|
||||
unsigned int button;
|
||||
void (*func)(const Arg *arg);
|
||||
const Arg arg;
|
||||
} Button;
|
||||
|
||||
enum { ClkClientWin, ClkRootWin, ClkLast }; /* clicks */
|
||||
|
||||
extern const Button buttons[];
|
||||
|
||||
size_t buttons_count();
|
||||
|
||||
#endif // _CONFIG_BUTTONS_H
|
11
src/config/common.h
Normal file
11
src/config/common.h
Normal file
|
@ -0,0 +1,11 @@
|
|||
#ifndef _CONFIG_COMMON_H
|
||||
#define _CONFIG_COMMON_H
|
||||
|
||||
typedef union {
|
||||
int i;
|
||||
unsigned int ui;
|
||||
float f;
|
||||
const void *v;
|
||||
} Arg;
|
||||
|
||||
#endif // _CONFIG_COMMON_H
|
56
src/config/keys.c
Normal file
56
src/config/keys.c
Normal file
|
@ -0,0 +1,56 @@
|
|||
#include "keys.h"
|
||||
|
||||
#include "../dwm.h"
|
||||
#include "layouts.h"
|
||||
|
||||
#include <X11/keysym.h>
|
||||
|
||||
#define MODKEY Mod4Mask
|
||||
|
||||
const Key keys[] = {
|
||||
// WM
|
||||
{ MODKEY|ControlMask|ShiftMask, XK_q, quit, {0} },
|
||||
{ MODKEY|ControlMask|ShiftMask, XK_r, dorestart, {0} },
|
||||
// Monitor
|
||||
{ MODKEY, XK_bracketleft, focusmon, {.i = -1 } },
|
||||
{ MODKEY, XK_bracketright, focusmon, {.i = +1 } },
|
||||
{ MODKEY|ShiftMask, XK_bracketleft, tagmon, {.i = -1 } },
|
||||
{ MODKEY|ShiftMask, XK_bracketright, tagmon, {.i = +1 } },
|
||||
// Layout
|
||||
{ MODKEY, XK_m, setlayout, {.v = &layouts[0]} }, // Monocle
|
||||
{ MODKEY, XK_f, setlayout, {.v = &layouts[1]} }, // Floating
|
||||
{ MODKEY, XK_t, setlayout, {.v = &layouts[2]} }, // Tile
|
||||
{ MODKEY|ShiftMask, XK_t, setlayout, {.v = &layouts[3]} }, // Horizontile
|
||||
{ MODKEY, XK_u, setlayout, {.v = &layouts[4]} }, // Centeredmaster
|
||||
{ MODKEY, XK_space, setlayout, {0} },
|
||||
{ MODKEY, XK_i, incnmaster, {.i = +1 } },
|
||||
{ MODKEY|ShiftMask, XK_i, resetnmaster, {.i = 1 } },
|
||||
{ MODKEY, XK_d, incnmaster, {.i = -1 } },
|
||||
{ MODKEY|ShiftMask, XK_d, resetnmaster, {.i = 0 } },
|
||||
// Stack
|
||||
{ MODKEY, XK_j, focusstack, {.i = +1 } },
|
||||
{ MODKEY, XK_k, focusstack, {.i = -1 } },
|
||||
{ MODKEY|ShiftMask, XK_j, movestack, {.i = +1 } },
|
||||
{ MODKEY|ShiftMask, XK_k, movestack, {.i = -1 } },
|
||||
{ MODKEY, XK_Return, zoom, {0} },
|
||||
// Window
|
||||
{ MODKEY|ShiftMask, XK_x, killclient, {0} },
|
||||
{ MODKEY|ShiftMask, XK_space, togglefloating, {0} },
|
||||
// Appearance
|
||||
{ MODKEY, XK_h, setmfact, {.f = -0.05} },
|
||||
{ MODKEY, XK_l, setmfact, {.f = +0.05} },
|
||||
{ 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 } },
|
||||
// Starting applications
|
||||
{ MODKEY, XK_z, spawn, {.v = "lock" } },
|
||||
{ MODKEY, XK_slash, spawn, {.v = "menu" } },
|
||||
{ MODKEY|ShiftMask, XK_slash, spawn, {.v = "term" } },
|
||||
{ MODKEY|ShiftMask, XK_f, spawn, {.v = "firefox" } },
|
||||
};
|
||||
|
||||
size_t keys_count()
|
||||
{
|
||||
return sizeof(keys) / sizeof(keys[0]);
|
||||
}
|
21
src/config/keys.h
Normal file
21
src/config/keys.h
Normal file
|
@ -0,0 +1,21 @@
|
|||
#ifndef _CONFIG_KEYS_H
|
||||
#define _CONFIG_KEYS_H
|
||||
|
||||
#include "common.h"
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
#include <X11/Xlib.h>
|
||||
|
||||
typedef struct {
|
||||
unsigned int mod;
|
||||
KeySym keysym;
|
||||
void (*func)(const Arg *);
|
||||
const Arg arg;
|
||||
} Key;
|
||||
|
||||
extern const Key keys[];
|
||||
|
||||
size_t keys_count();
|
||||
|
||||
#endif // _CONFIG_KEYS_H
|
17
src/config/layouts.c
Normal file
17
src/config/layouts.c
Normal file
|
@ -0,0 +1,17 @@
|
|||
#include "layouts.h"
|
||||
|
||||
#include "../dwm.h"
|
||||
|
||||
const Layout layouts[] = {
|
||||
/* arrange function */
|
||||
{ monocle }, /* first entry is default */
|
||||
{ NULL }, /* no layout function means floating behavior */
|
||||
{ tile },
|
||||
{ horizontile },
|
||||
{ centeredmaster },
|
||||
};
|
||||
|
||||
size_t layouts_count()
|
||||
{
|
||||
return sizeof(layouts) / sizeof(layouts[0]);
|
||||
}
|
14
src/config/layouts.h
Normal file
14
src/config/layouts.h
Normal file
|
@ -0,0 +1,14 @@
|
|||
#ifndef _LAYOUTS_H
|
||||
#define _LAYOUTS_H
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
typedef struct {
|
||||
void (*arrange)(void*);
|
||||
} Layout;
|
||||
|
||||
extern const Layout layouts[];
|
||||
|
||||
size_t layouts_count();
|
||||
|
||||
#endif // _LAYOUTS_H
|
22
src/dwm.c
22
src/dwm.c
|
@ -137,12 +137,9 @@ static void updatewmhints(Client *c);
|
|||
static Client *wintoclient(Window w);
|
||||
static Monitor *wintomon(Window w);
|
||||
|
||||
extern const Layout layouts[];
|
||||
|
||||
#include "dwm/spaghetti/bar.h"
|
||||
#include "dwm/spaghetti/handlers.h"
|
||||
#include "dwm/spaghetti/interaction.h"
|
||||
#include "dwm/spaghetti/layouts.h"
|
||||
#include "dwm/spaghetti/wmcheckwin.h"
|
||||
#include "dwm/spaghetti/xerror.h"
|
||||
|
||||
|
@ -191,15 +188,6 @@ static const char *colors[][3] = {
|
|||
[SchemeSel] = { col_gray4, col_cyan, "#d9b01c" },
|
||||
};
|
||||
|
||||
const Layout layouts[] = {
|
||||
/* arrange function */
|
||||
{ monocle }, /* first entry is default */
|
||||
{ NULL }, /* no layout function means floating behavior */
|
||||
{ tile },
|
||||
{ horizontile },
|
||||
{ centeredmaster },
|
||||
};
|
||||
|
||||
/************************************
|
||||
* Private function implementations *
|
||||
************************************/
|
||||
|
@ -748,7 +736,7 @@ void grabbuttons(Client *c, int focused)
|
|||
{
|
||||
updatenumlockmask();
|
||||
{
|
||||
unsigned int i, j;
|
||||
unsigned int j;
|
||||
unsigned int modifiers[] = { 0, LockMask, numlockmask, numlockmask|LockMask };
|
||||
XUngrabButton(xbase->x_display, AnyButton, AnyModifier, c->x_window);
|
||||
|
||||
|
@ -767,7 +755,7 @@ void grabbuttons(Client *c, int focused)
|
|||
);
|
||||
}
|
||||
|
||||
for (i = 0; i < LENGTH(buttons); i++) {
|
||||
for (size_t i = 0; i < buttons_count(); ++i) {
|
||||
if (buttons[i].click == ClkClientWin) {
|
||||
for (j = 0; j < LENGTH(modifiers); j++) {
|
||||
XGrabButton(
|
||||
|
@ -792,13 +780,13 @@ void grabkeys()
|
|||
{
|
||||
updatenumlockmask();
|
||||
{
|
||||
unsigned int i, j;
|
||||
unsigned int j;
|
||||
unsigned int modifiers[] = { 0, LockMask, numlockmask, numlockmask|LockMask };
|
||||
KeyCode code;
|
||||
|
||||
XUngrabKey(xbase->x_display, AnyKey, AnyModifier, xbase->x_root);
|
||||
|
||||
for (i = 0; i < LENGTH(keys); i++) {
|
||||
for (size_t i = 0; i < keys_count(); ++i) {
|
||||
if ((code = XKeysymToKeycode(xbase->x_display, keys[i].keysym))) {
|
||||
for (j = 0; j < LENGTH(modifiers); j++) {
|
||||
XGrabKey(
|
||||
|
@ -998,7 +986,7 @@ Monitor *monitor_create()
|
|||
|
||||
m->nmaster = settings_get_default_clients_in_master();
|
||||
m->lt[0] = &layouts[0];
|
||||
m->lt[1] = &layouts[1 % LENGTH(layouts)];
|
||||
m->lt[1] = &layouts[1 % layouts_count()];
|
||||
|
||||
return m;
|
||||
|
||||
|
|
29
src/dwm.h
29
src/dwm.h
|
@ -1,6 +1,35 @@
|
|||
#ifndef _DWM_H
|
||||
#define _DWM_H
|
||||
|
||||
#include "config/buttons.h"
|
||||
#include "config/keys.h"
|
||||
#include "config/layouts.h"
|
||||
|
||||
int dwm_main(const char *program_title);
|
||||
|
||||
void centeredmaster(void *arg);
|
||||
void floating(void *arg);
|
||||
void horizontile(void *arg);
|
||||
void monocle(void *arg);
|
||||
void tile(void *arg);
|
||||
|
||||
void configborder(const Arg *arg);
|
||||
void configgap(const Arg *arg);
|
||||
void dorestart(const Arg *arg);
|
||||
void focusmon(const Arg *arg);
|
||||
void focusstack(const Arg *arg);
|
||||
void incnmaster(const Arg *arg);
|
||||
void killclient(const Arg *arg);
|
||||
void movemouse(const Arg *arg);
|
||||
void movestack(const Arg *arg);
|
||||
void quit(const Arg *arg);
|
||||
void resetnmaster(const Arg *arg);
|
||||
void resizemouse(const Arg *arg);
|
||||
void setlayout(const Arg *arg);
|
||||
void setmfact(const Arg *arg);
|
||||
void spawn(const Arg *arg);
|
||||
void tagmon(const Arg *arg);
|
||||
void togglefloating(const Arg *arg);
|
||||
void zoom(const Arg *arg);
|
||||
|
||||
#endif // _DWM_H
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
void on_button_press(XEvent *e)
|
||||
{
|
||||
unsigned int i, click;
|
||||
unsigned int click;
|
||||
Client *c;
|
||||
Monitor *m;
|
||||
XButtonPressedEvent *ev = &e->xbutton;
|
||||
|
@ -27,7 +27,7 @@ void on_button_press(XEvent *e)
|
|||
XAllowEvents(xbase->x_display, ReplayPointer, CurrentTime);
|
||||
click = ClkClientWin;
|
||||
}
|
||||
for (i = 0; i < LENGTH(buttons); i++)
|
||||
for (size_t i = 0; i < buttons_count(); ++i)
|
||||
if (
|
||||
click == buttons[i].click
|
||||
&&
|
||||
|
@ -208,13 +208,12 @@ void on_focus_in(XEvent *e)
|
|||
|
||||
void on_key_press(XEvent *e)
|
||||
{
|
||||
unsigned int i;
|
||||
KeySym keysym;
|
||||
XKeyEvent *ev;
|
||||
|
||||
ev = &e->xkey;
|
||||
keysym = XKeycodeToKeysym(xbase->x_display, (KeyCode)ev->keycode, 0);
|
||||
for (i = 0; i < LENGTH(keys); i++) {
|
||||
for (size_t i = 0; i < keys_count(); ++i) {
|
||||
if (
|
||||
keysym == keys[i].keysym
|
||||
&&
|
||||
|
|
|
@ -1,100 +1,6 @@
|
|||
#ifndef _DWM_INTERACTION_H
|
||||
#define _DWM_INTERACTION_H
|
||||
|
||||
typedef union {
|
||||
int i;
|
||||
unsigned int ui;
|
||||
float f;
|
||||
const void *v;
|
||||
} Arg;
|
||||
|
||||
typedef struct {
|
||||
unsigned int click;
|
||||
unsigned int mask;
|
||||
unsigned int button;
|
||||
void (*func)(const Arg *arg);
|
||||
const Arg arg;
|
||||
} Button;
|
||||
|
||||
typedef struct {
|
||||
unsigned int mod;
|
||||
KeySym keysym;
|
||||
void (*func)(const Arg *);
|
||||
const Arg arg;
|
||||
} Key;
|
||||
|
||||
static void configborder(const Arg *arg);
|
||||
static void configgap(const Arg *arg);
|
||||
static void dorestart(const Arg *arg);
|
||||
static void focusmon(const Arg *arg);
|
||||
static void focusstack(const Arg *arg);
|
||||
static void incnmaster(const Arg *arg);
|
||||
static void killclient(const Arg *arg);
|
||||
static void movemouse(const Arg *arg);
|
||||
static void movestack(const Arg *arg);
|
||||
static void quit(const Arg *arg);
|
||||
static void resetnmaster(const Arg *arg);
|
||||
static void resizemouse(const Arg *arg);
|
||||
static void setlayout(const Arg *arg);
|
||||
static void setmfact(const Arg *arg);
|
||||
static void spawn(const Arg *arg);
|
||||
static void tagmon(const Arg *arg);
|
||||
static void togglefloating(const Arg *arg);
|
||||
static void zoom(const Arg *arg);
|
||||
|
||||
static void spawn_callback();
|
||||
|
||||
#define MODKEY Mod4Mask
|
||||
|
||||
static Key keys[] = {
|
||||
// WM
|
||||
{ MODKEY|ControlMask|ShiftMask, XK_q, quit, {0} },
|
||||
{ MODKEY|ControlMask|ShiftMask, XK_r, dorestart, {0} },
|
||||
// Monitor
|
||||
{ MODKEY, XK_bracketleft, focusmon, {.i = -1 } },
|
||||
{ MODKEY, XK_bracketright, focusmon, {.i = +1 } },
|
||||
{ MODKEY|ShiftMask, XK_bracketleft, tagmon, {.i = -1 } },
|
||||
{ MODKEY|ShiftMask, XK_bracketright, tagmon, {.i = +1 } },
|
||||
// Layout
|
||||
{ MODKEY, XK_m, setlayout, {.v = &layouts[0]} }, // Monocle
|
||||
{ MODKEY, XK_f, setlayout, {.v = &layouts[1]} }, // Floating
|
||||
{ MODKEY, XK_t, setlayout, {.v = &layouts[2]} }, // Tile
|
||||
{ MODKEY|ShiftMask, XK_t, setlayout, {.v = &layouts[3]} }, // Horizontile
|
||||
{ MODKEY, XK_u, setlayout, {.v = &layouts[4]} }, // Centeredmaster
|
||||
{ MODKEY, XK_space, setlayout, {0} },
|
||||
{ MODKEY, XK_i, incnmaster, {.i = +1 } },
|
||||
{ MODKEY|ShiftMask, XK_i, resetnmaster, {.i = 1 } },
|
||||
{ MODKEY, XK_d, incnmaster, {.i = -1 } },
|
||||
{ MODKEY|ShiftMask, XK_d, resetnmaster, {.i = 0 } },
|
||||
// Stack
|
||||
{ MODKEY, XK_j, focusstack, {.i = +1 } },
|
||||
{ MODKEY, XK_k, focusstack, {.i = -1 } },
|
||||
{ MODKEY|ShiftMask, XK_j, movestack, {.i = +1 } },
|
||||
{ MODKEY|ShiftMask, XK_k, movestack, {.i = -1 } },
|
||||
{ MODKEY, XK_Return, zoom, {0} },
|
||||
// Window
|
||||
{ MODKEY|ShiftMask, XK_x, killclient, {0} },
|
||||
{ MODKEY|ShiftMask, XK_space, togglefloating, {0} },
|
||||
// Appearance
|
||||
{ MODKEY, XK_h, setmfact, {.f = -0.05} },
|
||||
{ MODKEY, XK_l, setmfact, {.f = +0.05} },
|
||||
{ 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 } },
|
||||
// Starting applications
|
||||
{ MODKEY, XK_z, spawn, {.v = "lock" } },
|
||||
{ MODKEY, XK_slash, spawn, {.v = "menu" } },
|
||||
{ MODKEY|ShiftMask, XK_slash, spawn, {.v = "term" } },
|
||||
{ MODKEY|ShiftMask, XK_f, spawn, {.v = "firefox" } },
|
||||
};
|
||||
|
||||
// click can be ClkClientWin, or ClkRootWin
|
||||
static Button buttons[] = {
|
||||
/* click event mask button function argument */
|
||||
{ ClkClientWin, MODKEY, Button1, movemouse, {0} },
|
||||
{ ClkClientWin, MODKEY, Button2, togglefloating, {0} },
|
||||
{ ClkClientWin, MODKEY, Button3, resizemouse, {0} },
|
||||
};
|
||||
|
||||
#endif // _DWM_INTERACTION_H
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
#ifndef _DWM_LAYOUTS_C
|
||||
#define _DWM_LAYOUTS_C
|
||||
|
||||
void centeredmaster(Monitor *m)
|
||||
void centeredmaster(void *const arg)
|
||||
{
|
||||
Monitor *const m = arg;
|
||||
|
||||
unsigned int n = 0;
|
||||
for (Client *c = nexttiled(m->clients); c; c = nexttiled(c->next), ++n);
|
||||
if (n == 0) return;
|
||||
|
@ -124,8 +126,10 @@ void centeredmaster(Monitor *m)
|
|||
}
|
||||
}
|
||||
|
||||
void floating(Monitor *m)
|
||||
void floating(void *const arg)
|
||||
{
|
||||
Monitor *const m = arg;
|
||||
|
||||
const int border_width = settings_get_border_width();
|
||||
|
||||
for (Client *c = m->clients; c; c = c->next) {
|
||||
|
@ -145,8 +149,10 @@ void floating(Monitor *m)
|
|||
}
|
||||
}
|
||||
|
||||
void horizontile(Monitor *m)
|
||||
void horizontile(void *const arg)
|
||||
{
|
||||
Monitor *const m = arg;
|
||||
|
||||
unsigned int n = 0;
|
||||
for (Client *c = nexttiled(m->clients); c; c = nexttiled(c->next), ++n);
|
||||
if (n == 0) return;
|
||||
|
@ -232,8 +238,10 @@ void horizontile(Monitor *m)
|
|||
}
|
||||
}
|
||||
|
||||
void monocle(Monitor *m)
|
||||
void monocle(void *const arg)
|
||||
{
|
||||
Monitor *const m = arg;
|
||||
|
||||
bool any_is_fullscreen = false;
|
||||
for (Client *c = nexttiled(m->clients); c; c = nexttiled(c->next)) {
|
||||
any_is_fullscreen = any_is_fullscreen || c->state.is_fullscreen;
|
||||
|
@ -259,8 +267,10 @@ void monocle(Monitor *m)
|
|||
}
|
||||
}
|
||||
|
||||
void tile(Monitor *m)
|
||||
void tile(void *const arg)
|
||||
{
|
||||
Monitor *const m = arg;
|
||||
|
||||
unsigned int n = 0;
|
||||
for (Client *c = nexttiled(m->clients); c; c = nexttiled(c->next), ++n);
|
||||
if (n == 0) return;
|
||||
|
|
|
@ -1,10 +0,0 @@
|
|||
#ifndef _DWM_LAYOUTS_H
|
||||
#define _DWM_LAYOUTS_H
|
||||
|
||||
static void centeredmaster(Monitor *m);
|
||||
static void floating(Monitor *m);
|
||||
static void horizontile(Monitor *);
|
||||
static void monocle(Monitor *m);
|
||||
static void tile(Monitor *);
|
||||
|
||||
#endif // _DWM_LAYOUTS_H
|
|
@ -3,7 +3,6 @@
|
|||
|
||||
enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */
|
||||
enum { SchemeNorm, SchemeSel }; /* color schemes */
|
||||
enum { ClkClientWin, ClkRootWin, ClkLast }; /* clicks */
|
||||
|
||||
typedef struct Monitor Monitor;
|
||||
typedef struct Client Client;
|
||||
|
@ -18,10 +17,6 @@ struct Client {
|
|||
Window x_window;
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
void (*arrange)(Monitor *);
|
||||
} Layout;
|
||||
|
||||
struct Monitor {
|
||||
struct BasicGeom screen_geom;
|
||||
struct BasicGeom window_area_geom;
|
||||
|
|
Loading…
Reference in a new issue