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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
|
#include "gtk-window-decorator.h"
void
decor_update_window_property (decor_t *d)
{
long data[256];
Display *xdisplay =
GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
decor_extents_t extents = d->frame->win_extents;
gint nQuad;
decor_quad_t quads[N_QUADS_MAX];
int w, h;
gint stretch_offset;
REGION top, bottom, left, right;
w = d->border_layout.top.x2 - d->border_layout.top.x1 -
d->context->left_space - d->context->right_space;
if (d->border_layout.rotation)
h = d->border_layout.left.x2 - d->border_layout.left.x1;
else
h = d->border_layout.left.y2 - d->border_layout.left.y1;
stretch_offset = w - d->button_width - 1;
nQuad = decor_set_lSrStXbS_window_quads (quads, d->context,
&d->border_layout,
stretch_offset);
extents.top += d->frame->titlebar_height;
if (d->frame_window)
{
decor_gen_window_property (data, &extents, &extents, 20, 20);
}
else
{
decor_quads_to_property (data, GDK_PIXMAP_XID (d->pixmap),
&extents, &extents,
&extents, &extents,
ICON_SPACE + d->button_width,
0,
quads, nQuad);
}
gdk_error_trap_push ();
XChangeProperty (xdisplay, d->prop_xid,
win_decor_atom,
XA_INTEGER,
32, PropModeReplace, (guchar *) data,
BASE_PROP_SIZE + QUAD_PROP_SIZE * nQuad);
gdk_display_sync (gdk_display_get_default ());
gdk_error_trap_pop ();
top.rects = &top.extents;
top.numRects = top.size = 1;
top.extents.x1 = -extents.left;
top.extents.y1 = -extents.top;
top.extents.x2 = w + extents.right;
top.extents.y2 = 0;
bottom.rects = &bottom.extents;
bottom.numRects = bottom.size = 1;
bottom.extents.x1 = -extents.left;
bottom.extents.y1 = 0;
bottom.extents.x2 = w + extents.right;
bottom.extents.y2 = extents.bottom;
left.rects = &left.extents;
left.numRects = left.size = 1;
left.extents.x1 = -extents.left;
left.extents.y1 = 0;
left.extents.x2 = 0;
left.extents.y2 = h;
right.rects = &right.extents;
right.numRects = right.size = 1;
right.extents.x1 = 0;
right.extents.y1 = 0;
right.extents.x2 = extents.right;
right.extents.y2 = h;
decor_update_blur_property (d,
w, h,
&top, stretch_offset,
&bottom, w / 2,
&left, h / 2,
&right, h / 2);
}
void
decor_update_switcher_property (decor_t *d)
{
long data[256];
Display *xdisplay = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
gint nQuad;
decor_quad_t quads[N_QUADS_MAX];
GtkStyle *style;
long fgColor[4];
nQuad = decor_set_lSrStSbX_window_quads (quads, &d->frame->window_context,
&d->border_layout,
d->border_layout.top.x2 -
d->border_layout.top.x1 -
d->frame->window_context.extents.left -
d->frame->window_context.extents.right -
32);
decor_quads_to_property (data, GDK_PIXMAP_XID (d->pixmap),
&d->frame->win_extents, &d->frame->win_extents,
&d->frame->win_extents, &d->frame->win_extents,
0, 0, quads, nQuad);
style = gtk_widget_get_style (d->frame->style_window_rgba);
fgColor[0] = style->fg[GTK_STATE_NORMAL].red;
fgColor[1] = style->fg[GTK_STATE_NORMAL].green;
fgColor[2] = style->fg[GTK_STATE_NORMAL].blue;
fgColor[3] = SWITCHER_ALPHA;
gdk_error_trap_push ();
XChangeProperty (xdisplay, d->prop_xid,
win_decor_atom,
XA_INTEGER,
32, PropModeReplace, (guchar *) data,
BASE_PROP_SIZE + QUAD_PROP_SIZE * nQuad);
XChangeProperty (xdisplay, d->prop_xid, switcher_fg_atom,
XA_INTEGER, 32, PropModeReplace, (guchar *) fgColor, 4);
gdk_display_sync (gdk_display_get_default ());
gdk_error_trap_pop ();
}
|