wmii/cmd/wm/wm.h

295 lines
6.2 KiB
C
Raw Normal View History

2005-11-18 18:54:58 +03:00
/*
2006-01-20 17:20:24 +03:00
* (C)opyright MMIV-MMVI Anselm R. Garbe <garbeam at gmail dot com>
2005-11-18 18:54:58 +03:00
* See LICENSE file for license details.
*/
#include <stdio.h>
#include <X11/Xlib.h>
2005-11-18 18:54:58 +03:00
#include <X11/Xutil.h>
#include "ixp.h"
#include "blitz.h"
2005-11-18 18:54:58 +03:00
2005-12-27 23:13:50 +03:00
/* array indexes of EWMH window properties */
/* TODO: set / react */
enum {
NET_NUMBER_OF_DESKTOPS, /* ✓ */
NET_CURRENT_DESKTOP, /* ✓ ✓ */
NET_WM_DESKTOP /* ✗ ✗ */
};
2006-02-02 16:50:04 +03:00
/* 8-bit qid.path.type */
enum {
Droot,
Ddef,
2006-02-02 16:50:04 +03:00
Dpage,
Darea,
Dclient,
Dkeys,
Dbar,
Dlabel,
Fexpand,
Fdata, /* data to display */
Fcolors,
Ffont,
Fselcolors,
Fnormcolors,
Fkey,
2006-02-02 16:50:04 +03:00
Fborder,
Fsnap,
2006-02-02 22:36:10 +03:00
Fbar,
2006-02-02 16:50:04 +03:00
Finc,
Fgeom,
Fevent,
Fctl,
Fname,
Fmax,
Fmode
2006-02-02 16:50:04 +03:00
};
2005-12-27 23:13:50 +03:00
#define NET_ATOM_COUNT 3
2005-11-18 18:54:58 +03:00
#define PROTO_DEL 1
2006-02-02 21:32:25 +03:00
#define DEF_BORDER 3
#define DEF_SNAP 20
#define DEF_PAGER_GAP 5
2005-11-18 18:54:58 +03:00
#define ROOT_MASK SubstructureRedirectMask
#define CLIENT_MASK (StructureNotifyMask | PropertyChangeMask)
2005-11-18 18:54:58 +03:00
typedef struct Area Area;
2005-11-18 18:54:58 +03:00
typedef struct Page Page;
typedef struct Client Client;
typedef enum { COL_EQUAL, COL_STACK, COL_MAX, COL_MODE_LAST } ColumnMode;
2006-02-28 15:38:24 +03:00
struct Area {
unsigned short id;
2006-01-26 17:24:34 +03:00
Client **client;
Page *page;
2006-01-26 17:24:34 +03:00
size_t clientsz;
size_t sel;
2006-01-31 15:25:23 +03:00
size_t nclient;
2006-02-28 15:38:24 +03:00
size_t maxclient;
ColumnMode mode;
2006-01-26 17:24:34 +03:00
XRectangle rect;
2005-11-18 18:54:58 +03:00
};
struct Page {
unsigned short id;
Area **area;
size_t areasz;
size_t narea;
size_t sel;
Page *revert;
2005-11-18 18:54:58 +03:00
};
struct Client {
unsigned short id;
char name[256];
2005-12-21 18:18:11 +03:00
int proto;
unsigned int border;
Bool destroyed;
Area *area;
2005-12-21 18:18:11 +03:00
Window win;
Window trans;
XRectangle rect;
XSizeHints size;
2006-02-09 02:50:30 +03:00
Client *revert;
struct Frame {
Window win;
XRectangle rect;
XRectangle revert;
GC gc;
Cursor cursor;
} frame;
2005-11-18 18:54:58 +03:00
};
typedef struct Key Key;
struct Key {
unsigned short id;
char name[128];
unsigned long mod;
KeyCode key;
Key *next;
};
typedef struct {
unsigned short id;
char data[256];
char colstr[24];
Color color;
XRectangle rect;
} Label;
/* default values */
typedef struct {
char selcolor[24];
char normcolor[24];
char *font;
Bool inc;
Color sel;
Color norm;
unsigned int border;
unsigned int snap;
} Default;
2005-11-18 18:54:58 +03:00
/* global variables */
2006-01-26 17:24:34 +03:00
Page **page;
2006-01-31 15:25:23 +03:00
size_t npage;
2006-01-26 17:24:34 +03:00
size_t pagesz;
size_t sel;
2006-01-26 17:24:34 +03:00
Client **client;
size_t nclient;
2006-01-26 17:24:34 +03:00
size_t clientsz;
Key **key;
size_t keysz;
size_t nkey;
Label **label;
size_t nlabel;
size_t labelsz;
size_t iexpand;
2005-12-05 01:45:59 +03:00
Display *dpy;
IXPServer *ixps;
int screen;
2005-12-05 01:45:59 +03:00
Window root;
Window transient; /* pager / attach */
2005-12-05 01:45:59 +03:00
XRectangle rect;
XFontStruct *xfont;
GC gc_xor;
GC gc_transient;
IXPServer srv;
Pixmap pmapbar;
Window winbar;
GC gcbar;
XRectangle brect;
Qid root_qid;
2006-01-31 15:25:23 +03:00
Default def;
2005-12-27 23:13:50 +03:00
Atom wm_state; /* TODO: Maybe replace with wm_atoms[WM_ATOM_COUNT]? */
2005-12-05 01:45:59 +03:00
Atom wm_change_state;
Atom wm_protocols;
Atom wm_delete;
Atom motif_wm_hints;
2005-12-27 23:13:50 +03:00
Atom net_atoms[NET_ATOM_COUNT];
2005-11-18 18:54:58 +03:00
2005-12-05 01:45:59 +03:00
Cursor normal_cursor;
Cursor resize_cursor;
Cursor move_cursor;
Cursor drag_cursor;
Cursor w_cursor;
Cursor e_cursor;
Cursor n_cursor;
Cursor s_cursor;
Cursor nw_cursor;
Cursor ne_cursor;
Cursor sw_cursor;
Cursor se_cursor;
2005-11-18 18:54:58 +03:00
2005-12-05 01:45:59 +03:00
unsigned int valid_mask, num_lock_mask;
2005-11-18 18:54:58 +03:00
/* area.c */
Area *alloc_area(Page *p);
void destroy_area(Area *a);
int area2index(Area *a);
int aid2index(Page *p, unsigned short id);
void update_area_geometry(Area *a);
void select_area(Area *a, char *arg);
void sendto_area(Area *new, Client *c);
2005-11-18 18:54:58 +03:00
/* bar.c */
Label *new_label();
void detach_label(Label *l);
void draw_bar();
int lid2index(unsigned short id);
void update_bar_geometry();
unsigned int bar_height();
2005-11-18 18:54:58 +03:00
/* client.c */
Client *alloc_client(Window w, XWindowAttributes *wa);
2006-02-24 19:13:58 +03:00
void destroy_client(Client *c);
void configure_client(Client *c);
void handle_client_property(Client *c, XPropertyEvent *e);
void kill_client(Client *c);
void draw_client(Client *client);
void gravitate(Client *c, unsigned int tabh, unsigned int bw, int invert);
void unmap_client(Client *c);
void map_client(Client *c);
void reparent_client(Client *c, Window w, int x, int y);
void attach_client(Client *c);
void attach_client2page(Page *p, Client *c);
2006-02-24 19:13:58 +03:00
void detach_client(Client *c, Bool unmap);
Client *sel_client();
2006-01-26 20:29:49 +03:00
Client *sel_client_of_page(Page *p);
void focus_client(Client *c);
Client *win2clientframe(Window w);
2006-02-24 19:13:58 +03:00
void resize_client(Client *c, XRectangle *r, XPoint *pt);
int cid2index(Area *a, unsigned short id);
int client2index(Client *c);
2006-02-14 14:06:16 +03:00
void select_client(Client *c, char *arg);
void sendtopage_client(Client *c, char *arg);
void sendtoarea_client(Client *c, char *arg);
void resize_all_clients();
void focus(Client *c);
2005-11-18 18:54:58 +03:00
/* event.c */
void init_x_event_handler();
2006-02-03 20:11:22 +03:00
void check_x_event(IXPConn *c);
2005-11-18 18:54:58 +03:00
/* fs.c */
2006-02-02 16:50:04 +03:00
unsigned long long mkqpath(unsigned char type, unsigned short pg,
unsigned short area, unsigned short cl);
2006-02-16 13:53:10 +03:00
void write_event(char *event);
2006-02-03 20:11:22 +03:00
void new_ixp_conn(IXPConn *c);
/* kb.c */
void handle_key(Window w, unsigned long mod, KeyCode keycode);
void grab_key(Key *k);
void ungrab_key(Key *k);
Key * name2key(char *name);
int kid2index(unsigned short id);
Key *create_key(char *name);
void destroy_key(Key *k);
void init_lock_modifiers();
2005-11-18 18:54:58 +03:00
/* mouse.c */
2006-01-26 14:56:28 +03:00
void mouse_resize(Client *c, Align align);
void mouse_move(Client *c);
Cursor cursor_for_motion(Client *c, int x, int y);
Align cursor2align(Cursor cursor);
Align xy2align(XRectangle * rect, int x, int y);
2006-01-26 14:56:28 +03:00
void drop_move(Client *c, XRectangle *new, XPoint *pt);
void grab_mouse(Window w, unsigned long mod, unsigned int button);
void ungrab_mouse(Window w, unsigned long mod, unsigned int button);
char *warp_mouse(char *arg);
2005-11-18 18:54:58 +03:00
/* page.c */
2006-01-26 14:56:28 +03:00
Page *alloc_page();
2006-02-28 15:38:24 +03:00
char *destroy_page(Page *p);
2006-01-26 14:56:28 +03:00
void focus_page(Page *p);
2005-12-05 01:45:59 +03:00
XRectangle *rectangles(unsigned int *num);
int pid2index(unsigned short id);
void select_page(char *arg);
int page2index(Page *p);
2005-11-18 18:54:58 +03:00
/* spawn.c */
void spawn(char *cmd);
/* column.c */
void arrange_page(Page *p, Bool update_colums);
void arrange_column(Area *col);
2006-01-26 14:39:20 +03:00
void resize_column(Client *c, XRectangle *r, XPoint *pt);
2006-02-19 17:56:16 +03:00
Area *new_column(Area *old);
ColumnMode str2colmode(char *arg);
2005-12-05 04:15:25 +03:00
/* wm.c */
void scan_wins();
Client *win2client(Window w);
2005-12-05 04:15:25 +03:00
int win_proto(Window w);
int win_state(Window w);
/*void handle_after_write(IXPServer * s, File * f);*/
2006-02-06 11:46:52 +03:00
void pager();