mirror of
https://github.com/dylanaraps/sowm.git
synced 2025-08-09 00:21:59 -07:00
docs: update
This commit is contained in:
60
sowm.c
60
sowm.c
@@ -433,6 +433,16 @@ void win_center_current() {
|
|||||||
win_center(win_current());
|
win_center(win_current());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
This function changes the focus to another desktop.
|
||||||
|
|
||||||
|
To make this operation invisible the destination
|
||||||
|
desktop's windows are mapped first and the previous
|
||||||
|
desktop's windows are then unmapped afterwards.
|
||||||
|
|
||||||
|
Finally, focus is shifted to the first window on the
|
||||||
|
destination desktop's window list.
|
||||||
|
*/
|
||||||
void ws_go(const Arg arg) {
|
void ws_go(const Arg arg) {
|
||||||
client *c;
|
client *c;
|
||||||
int tmp = ws;
|
int tmp = ws;
|
||||||
@@ -453,15 +463,30 @@ void ws_go(const Arg arg) {
|
|||||||
if (list) FOC(list->w);
|
if (list) FOC(list->w);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
This function saves the current desktop's window list.
|
||||||
|
Simple, nothing to see here.
|
||||||
|
*/
|
||||||
void ws_save(int i) {
|
void ws_save(int i) {
|
||||||
ws_list[i].list = list;
|
ws_list[i].list = list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
This function restores a saved desktop's window list.
|
||||||
|
Simple, nothing to see here.
|
||||||
|
*/
|
||||||
void ws_sel(int i) {
|
void ws_sel(int i) {
|
||||||
list = ws_list[i].list;
|
list = ws_list[i].list;
|
||||||
ws = i;
|
ws = i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
This function allows a window to request a size,
|
||||||
|
position and other attributes.
|
||||||
|
|
||||||
|
This is required so programs like Firefox or MPV
|
||||||
|
are able to display and function correctly.
|
||||||
|
*/
|
||||||
void configure_request(XEvent *e) {
|
void configure_request(XEvent *e) {
|
||||||
XConfigureRequestEvent *ev = &e->xconfigurerequest;
|
XConfigureRequestEvent *ev = &e->xconfigurerequest;
|
||||||
XWindowChanges wc;
|
XWindowChanges wc;
|
||||||
@@ -476,6 +501,17 @@ void configure_request(XEvent *e) {
|
|||||||
XConfigureWindow(d, ev->window, ev->value_mask, &wc);
|
XConfigureWindow(d, ev->window, ev->value_mask, &wc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
This function is executed whenever a window is mapped to
|
||||||
|
the screen.
|
||||||
|
|
||||||
|
The window is centered, mapped to the screen, focused and
|
||||||
|
finally added to the current desktop's window list.
|
||||||
|
|
||||||
|
'XSelectInput' is called to subscribe to various events
|
||||||
|
related to the window. For example, this is used to get
|
||||||
|
focus-follows-cursor to work.
|
||||||
|
*/
|
||||||
void map_request(XEvent *e) {
|
void map_request(XEvent *e) {
|
||||||
Window w = e->xmaprequest.window;
|
Window w = e->xmaprequest.window;
|
||||||
|
|
||||||
@@ -487,6 +523,10 @@ void map_request(XEvent *e) {
|
|||||||
win_add(w);
|
win_add(w);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
This function is executed by keybindings to run the
|
||||||
|
specified program. Simple enough.
|
||||||
|
*/
|
||||||
void run(const Arg arg) {
|
void run(const Arg arg) {
|
||||||
if (fork()) return;
|
if (fork()) return;
|
||||||
if (d) close(ConnectionNumber(d));
|
if (d) close(ConnectionNumber(d));
|
||||||
@@ -495,10 +535,30 @@ void run(const Arg arg) {
|
|||||||
execvp((char*)arg.com[0], (char**)arg.com);
|
execvp((char*)arg.com[0], (char**)arg.com);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
This window manager ignores all Xorg related errors.
|
||||||
|
|
||||||
|
The window manager either crashes (due to Xorg or
|
||||||
|
itself) or it continues on its merry way.
|
||||||
|
|
||||||
|
The only errors which are handled are failed memory
|
||||||
|
allocations or a failure to open the display on start.
|
||||||
|
*/
|
||||||
int xerror(Display *d, XErrorEvent *e) {
|
int xerror(Display *d, XErrorEvent *e) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Initialize the window manager by registering all
|
||||||
|
keybindings, setting some globals and starting the
|
||||||
|
event loop.
|
||||||
|
|
||||||
|
There's no 'XClosDisplay' or clean up as the only way
|
||||||
|
to exit this window manager is to kill the process.
|
||||||
|
|
||||||
|
This fires up Xorg's internal clean up which covers
|
||||||
|
everything allocated and executed here. It's free!
|
||||||
|
*/
|
||||||
int main(void) {
|
int main(void) {
|
||||||
XEvent ev;
|
XEvent ev;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user