all repos — openbox @ 474f689132d906a553bdc695d3c179652cbe8c53

openbox fork - make it a bit more like ryudo

c/frame.h (raw)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#ifndef __frame_h
#define __frame_h

#include <X11/Xlib.h>
#include "geom.h"
#include "client.h"

/*! Varius geometry settings in the frame decorations */
typedef struct {
    int width; /* title and handle */
    int font_height;
/*  int title_height() { return font_height + bevel*2; } */
    int title_height;
    int label_width;
/*  int label_height() { return font_height; } */
    int handle_height; /* static, from the style */
    int icon_x;        /* x-position of the window icon button */
    int title_x;       /* x-position of the window title */
    int iconify_x;     /* x-position of the window iconify button */
    int desktop_x;     /* x-position of the window all-desktops button */
    int max_x;         /* x-position of the window maximize button */
    int close_x;       /* x-position of the window close button */
    int handle_y;
    int button_size;   /* static, from the style */
/*  int grip_width() { return button_size * 2; } */
    int grip_width;
    int bevel;         /* static, from the style */
    int bwidth;  /* frame elements' border width */
    int cbwidth; /* client border width */
} FrameGeometry;

typedef struct Frame {
    Window window;
    Window plate;
    Window title;
    Window label;
    Window max;
    Window close;
    Window desk;
    Window icon;
    Window iconify;
    Window handle;
    Window lgrip;
    Window rgrip;

    Strut  size;
    Strut  innersize;
    Rect   area;
    FrameGeometry geom;

    Client *client;
    int decorations;

    gboolean visible;
} Frame;

Frame *frame_new(struct Client *client);
void frame_free(Frame *self);

void frame_grab_client(Frame *self);
void frame_release_client(Frame *self);

/*! Update the frame's size to match the client */
void frame_adjust_size(Frame *self);
/*! Update the frame's position to match the client */
void frame_adjust_position(Frame *self);
/*! Shape the frame window to the client window */
void frame_adjust_shape(Frame *self);
/*! Update the frame to match the client's new state (for things like toggle
  buttons, focus, and the title) XXX break this up */
void frame_adjust_state(Frame *self);
/*! Update the frame to match the client's focused state */
void frame_adjust_focus(Frame *self);
/*! Update the frame to display the client's current title */
void frame_adjust_title(Frame *self);
/*! Update the frame to display the client's current icon */
void frame_adjust_icon(Frame *self);

/*! Applies gravity to the client's position to find where the frame should
  be positioned.
  @return The proper coordinates for the frame, based on the client.
*/
void frame_client_gravity(Frame *self, int *x, int *y);

/*! Reversly applies gravity to the frame's position to find where the client
  should be positioned.
    @return The proper coordinates for the client, based on the frame.
*/
void frame_frame_gravity(Frame *self, int *x, int *y);

/*! Shows the frame */
void frame_show(Frame *self);
/*! Hides the frame */
void frame_hide(Frame *self);

/*! inits quarks - this will go in engines later */
void frame_startup(void);

GQuark frame_get_context(Client *client, Window win);

#endif