twm.h - libwm - X windows manipulation library
 (HTM) git clone git://z3bra.org/libwm
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       twm.h (6795B)
       ---
            1 #ifndef __LIBWM_H__
            2 #define __LIBWM_H__
            3 
            4 /*
            5  * Variables used to hold the connection to the X server, and the first screen
            6  * of this connection. Both have to be defined as `extern`.
            7  */
            8 extern xcb_connection_t *conn;
            9 extern xcb_screen_t     *scrn;
           10 
           11 /*
           12  * Mask attributes used to select which windows have to be listed by the
           13  * function `wm_is_listable(wid, mask)`.
           14  */
           15 enum {
           16         LIST_HIDDEN = 1 << 0, /* windows that are not on-screen */
           17         LIST_IGNORE = 1 << 1, /* windows with override_redirect set to 1 */
           18         LIST_ALL    = 1 << 2  /* All existing windows */
           19 };
           20 
           21 /*
           22  * Actions used by the `wm_remap(wid, mode)` function to select what needs to be
           23  * done.
           24  */
           25 enum {
           26         MAP     = 1 << 0,
           27         UNMAP   = 1 << 1,
           28         TOGGLE  = 1 << 2
           29 };
           30 
           31 /*
           32  * Attributes used internally by different functions to refer to windows
           33  * attributes, and select them.
           34  */
           35 enum {
           36         ATTR_W = 1 << 0,
           37         ATTR_H = 1 << 1,
           38         ATTR_X = 1 << 2,
           39         ATTR_Y = 1 << 3,
           40         ATTR_B = 1 << 4,
           41         ATTR_M = 1 << 5,
           42         ATTR_I = 1 << 6,
           43         ATTR_D = 1 << 7,
           44         ATTR_MAX
           45 };
           46 
           47 /*
           48  * Selector used  by both `wm_move(wid, mode, x, y)` and `wm_resize(wid, mode, w, h)`
           49  * to choose between relative or absolute coordinates
           50  */
           51 enum {
           52         ABSOLUTE = 0,
           53         RELATIVE = 1
           54 };
           55 
           56 /*
           57  * Initialize the connection to the X server. The connection could then be
           58  * accessed by other functions through the "conn" variable.
           59  */
           60 int wm_init_xcb();
           61 
           62 /*
           63  * Close connection to the X server.
           64  */
           65 int wm_kill_xcb();
           66 
           67 /*
           68  * Check existence of a window.
           69  * + 1 - window exists
           70  * + 0 - window doesn't exist
           71  */
           72 int wm_is_alive(xcb_window_t wid);
           73 
           74 /*
           75  * Returns the value of the "override_redirect" attribute of a window.
           76  * When this attribute is set to 1, it means the window manager should NOT
           77  * handle this window.
           78  */
           79 int wm_is_ignored(xcb_window_t wid);
           80 
           81 /*
           82  * Returns 1 if a window match the mask, 0 otherwise.
           83  * Possible value for the masks are:
           84  *         LIST_HIDDEN
           85  *         LIST_IGNORE
           86  *         LIST_ALL
           87  */
           88 int wm_is_listable(xcb_window_t wid, int mask);
           89 
           90 /*
           91  * Returns 1 if the window is mapped on screen, 0 otherwise
           92  */
           93 int wm_is_mapped(xcb_window_t wid);
           94 
           95 /*
           96  * Request the X server to add a new atom, and return this new atom ID
           97  */
           98 xcb_atom_t wm_add_atom(char *name, size_t len);
           99 
          100 /*
          101  * Change the value of the specified atom
          102  */
          103 int wm_set_atom(xcb_window_t wid, xcb_atom_t atom, xcb_atom_t type, size_t len, void *data);
          104 
          105 /*
          106  * Retrieve the value of the given atom. The value length is set in the
          107  * `len` pointer if specified
          108  */
          109 void *wm_get_atom(xcb_window_t wid, xcb_atom_t atom, xcb_atom_t type, size_t *len);
          110 
          111 /*
          112  * Retrieve the name of the given atom. The name length is set in the
          113  * `len` pointer if specified
          114  */
          115 char *wm_get_atom_name(xcb_atom_t atom, size_t *len);
          116 
          117 /*
          118  * Get the first screen, and set the `scrn` global variable accordingly.
          119  */
          120 int wm_get_screen();
          121 
          122 /*
          123  * Ask the list of all existing windows to the X server, and fills the `*list`
          124  * argument with them.
          125  * The windows are listed in stacking order, from lower to upper window.
          126  * Returns the number of windows in the *list array
          127  */
          128 int wm_get_windows(xcb_window_t wid, xcb_window_t **list);
          129 
          130 /*
          131  * Returns the window that has keyboard focus
          132  * Will return the root window ID if no window has focus
          133  */
          134 xcb_window_t wm_get_focus(void);
          135 
          136 /*
          137  * Retrieve the value of an attribute for a specific windows.
          138  * The possible values for the attributes are:
          139  *         ATTR_W - width
          140  *         ATTR_H - height
          141  *         ATTR_X - X offset
          142  *         ATTR_Y - Y offset
          143  *         ATTR_B - border width
          144  *         ATTR_M - map state
          145  *         ATTR_I - ignore state (override_redirect)
          146  */
          147 int wm_get_attribute(xcb_window_t wid, int attr);
          148 
          149 /*
          150  * Get the cursor position, and store its coordinates in the `x` and `y`
          151  * pointers.
          152  * The `mode` attribute isn't used yet, but is reserved to ask for either
          153  * absolute or relative coordinates
          154  */
          155 int wm_get_cursor(int mode, uint32_t wid, int *x, int *y);
          156 
          157 /*
          158  * Set a window's border.
          159  * The color should be an hexadecimal number, eg: 0xdeadca7
          160  */
          161 int wm_set_border(int width, int color, xcb_window_t wid);
          162 
          163 /*
          164  * Give the input focus to the specified window
          165  */
          166 int wm_set_focus(xcb_window_t wid);
          167 
          168 /*
          169  * Change the cursor position, either relatively or absolutely, eg:
          170  *         wm_set_cursor(10, 10, ABSOLUTE);
          171  *         wm_set_cursor(-10, 20, RELATIVE);
          172  */
          173 int wm_set_cursor(int x, int y, int mode);
          174 
          175 /*
          176  * Set override_redirect value for given window
          177  */
          178 int wm_set_override(xcb_window_t wid, int override);
          179 
          180 /*
          181  * Teleport a window to the given position.
          182  */
          183 int wm_teleport(xcb_window_t wid, int w, int h, int x, int y);
          184 
          185 /*
          186  * Move a window to the given position, either relatively or absolutely.
          187  * If the wm_move is supposed to wm_move the window outside the screen, then the
          188  * windows will only be wm_moved to the edge of the screen.
          189  *
          190  * You cannot wm_move windows outside the screen with this method. Use
          191  * `wm_teleport()` instead.
          192  */
          193 int wm_move(xcb_window_t wid, int mode, int x, int y);
          194 
          195 /*
          196  * Resize a window to the given size, either relatively or absolutely.
          197  * If the wm_resize is supposed to put an area of the window outside the screen,
          198  * then the windows will only be wm_resized to the edge of the screen.
          199  *
          200  * You cannot wm_resize windows farther than the screen edge with this method. Use
          201  * `wm_teleport()` instead.
          202  */
          203 int wm_resize(xcb_window_t wid, int mode, int w, int h);
          204 
          205 /*
          206  * Change the mapping state of a window. The `mode` attribute can be as follow:
          207  *         MAP
          208  *         UNMAP
          209  *         TOGGLE
          210  */
          211 int wm_remap(xcb_window_t wid, int mode);
          212 
          213 /*
          214  * Change the position of the given window in the stack order.
          215  * You can either put it at the top, or at the bottom.
          216  * The possible values for the mode are:
          217  *         XCB_STACK_MODE_ABOVE
          218  *         XCB_STACK_MODE_BELOW
          219  *         XCB_STACK_MODE_OPPOSITE
          220  */
          221 int wm_restack(xcb_window_t wid, uint32_t mode);
          222 
          223 /*
          224  * Register the given event(s) on the window.
          225  * Multiple events can be registered by ORing them together
          226  */
          227 int wm_reg_window_event(xcb_window_t wid, uint32_t mask);
          228 
          229 /*
          230  * Register the given cursor event(s) on the window.
          231  * Multiple events can be registered by ORing them together.
          232  * The cursor will be changed to the `cursor` while the pointer is
          233  * grabbed, if not NULL.
          234  */
          235 int wm_reg_cursor_event(xcb_window_t wid, uint32_t mask, char *cursor);
          236 
          237 /*
          238  * Return the number of active monitors connected to the display where
          239  * window `wid` is sitting.
          240  * The `list` argument, if not NULL, will be filled with the monitor's
          241  * index numbers. Note that `list` must be big enough to hold all indexes,
          242  * as it is not reallocated.
          243  */
          244 int wm_get_monitors(xcb_window_t wid, int *list);
          245 
          246 /*
          247  * Return the info scructure defining monitor with index number `index`.
          248  */
          249 xcb_randr_monitor_info_t *wm_get_monitor(int index);
          250 
          251 /*
          252  * Return the index of the (first) monitor associated with the
          253  * coordinates.
          254  */
          255 int wm_find_monitor(int x, int y);
          256 
          257 #endif /* __LIBWM_H__ */