all repos — openbox @ 14a842b34c2857385ee7c5a02c870f5aedef0e54

openbox fork - make it a bit more like ryudo

openbox/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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#ifndef __frame_h
#define __frame_h

#include "geom.h"
#include "client.h"
#include "render/render.h"

typedef enum {
    Context_None,
    Context_Root,
    Context_Client,
    Context_Titlebar,
    Context_Handle,
    Context_Frame,
    Context_BLCorner,
    Context_BRCorner,
    Context_TLCorner,
    Context_TRCorner,
    Context_Maximize,
    Context_AllDesktops,
    Context_Shade,
    Context_Iconify,
    Context_Icon,
    Context_Close,
    NUM_CONTEXTS
} Context;

#define FRAME_HANDLE_Y(f) (f->innersize.top + f->client->area.height + \
		           f->cbwidth)

typedef struct Frame {
    Client *client;

    Window window;
    Window plate;

    Strut  size;
    Rect   area;
    gboolean visible;

    Window title;
    Window label;
    Window max;
    Window close;
    Window desk;
    Window shade;
    Window icon;
    Window iconify;
    Window handle;
    Window lgrip;
    Window rgrip;

    Appearance *a_unfocused_title;
    Appearance *a_focused_title;
    Appearance *a_unfocused_label;
    Appearance *a_focused_label;
    Appearance *a_icon;
    Appearance *a_unfocused_handle;
    Appearance *a_focused_handle;

    Strut  innersize;

    GSList *clients;

    int width;         /* title and handle */
    int label_width;
    int icon_x;        /* x-position of the window icon button */
    int label_x;       /* x-position of the window title */
    int iconify_x;     /* x-position of the window iconify button */
    int desk_x;        /* x-position of the window all-desktops button */
    int shade_x;       /* x-position of the window shade button */
    int max_x;         /* x-position of the window maximize button */
    int close_x;       /* x-position of the window close button */
    int bwidth;        /* border width */
    int cbwidth;       /* client border width */

    gboolean max_press;
    gboolean close_press;
    gboolean desk_press;
    gboolean shade_press;
    gboolean iconify_press;
} Frame;

void frame_startup();
void frame_shutdown();

Frame *frame_new();
void frame_show(Frame *self);
void frame_hide(Frame *self);
void frame_adjust_shape(Frame *self);
void frame_adjust_area(Frame *self, gboolean moved, gboolean resized);
void frame_adjust_state(Frame *self);
void frame_adjust_focus(Frame *self);
void frame_adjust_title(Frame *self);
void frame_adjust_icon(Frame *self);
void frame_grab_client(Frame *self, Client *client);
void frame_release_client(Frame *self, Client *client);

Context frame_context_from_string(char *name);

Context frame_context(Frame *self, Window win);

/*! 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);


#endif