Merge lp:~muktupavels/compiz/gwd-cleanup into lp:compiz/0.9.12

Proposed by Alberts Muktupāvels
Status: Merged
Approved by: Marco Trevisan (Treviño)
Approved revision: 4064
Merged at revision: 4055
Proposed branch: lp:~muktupavels/compiz/gwd-cleanup
Merge into: lp:compiz/0.9.12
Prerequisite: lp:~muktupavels/compiz/gwd-meta-frame-type-from-string-removed
Diff against target: 644 lines (+175/-223)
8 files modified
gtk/window-decorator/CMakeLists.txt (+0/-1)
gtk/window-decorator/decorator.c (+6/-9)
gtk/window-decorator/decorprops.c (+0/-173)
gtk/window-decorator/frames.c (+0/-2)
gtk/window-decorator/gtk-window-decorator.h (+0/-10)
gtk/window-decorator/gwd-theme-cairo.c (+112/-17)
gtk/window-decorator/gwd-theme-metacity.c (+2/-11)
gtk/window-decorator/switcher.c (+55/-0)
To merge this branch: bzr merge lp:~muktupavels/compiz/gwd-cleanup
Reviewer Review Type Date Requested Status
Sam Spilsbury Approve
Review via email: mp+296768@code.launchpad.net

Commit message

gtk-window-decorator: more code cleanup.

To post a comment you must log in.
lp:~muktupavels/compiz/gwd-cleanup updated
4061. By Alberts Muktupāvels

Remove also gdk_flush.

Revision history for this message
Sam Spilsbury (smspillaz) wrote :

LGTM otherwise

lp:~muktupavels/compiz/gwd-cleanup updated
4062. By Alberts Muktupāvels

Use function to get titlebar height in GWDThemeCairo.

Revision history for this message
Alberts Muktupāvels (muktupavels) wrote :

Updated.

lp:~muktupavels/compiz/gwd-cleanup updated
4063. By Alberts Muktupāvels

Add back gdk_flush and gdk_display_sync.

4064. By Alberts Muktupāvels

Use existing variable.

Revision history for this message
Sam Spilsbury (smspillaz) wrote :

Great, thanks :)

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'gtk/window-decorator/CMakeLists.txt'
--- gtk/window-decorator/CMakeLists.txt 2016-05-21 11:06:24 +0000
+++ gtk/window-decorator/CMakeLists.txt 2016-06-09 14:54:36 +0000
@@ -66,7 +66,6 @@
66 add_executable (gtk-window-decorator66 add_executable (gtk-window-decorator
67 gtk-window-decorator.c67 gtk-window-decorator.c
68 blurprops.c68 blurprops.c
69 decorprops.c
70 cairo.c69 cairo.c
71 frames.c70 frames.c
72 gdk.c71 gdk.c
7372
=== modified file 'gtk/window-decorator/decorator.c'
--- gtk/window-decorator/decorator.c 2016-05-26 21:20:20 +0000
+++ gtk/window-decorator/decorator.c 2016-06-09 14:54:36 +0000
@@ -583,7 +583,7 @@
583 gdk_flush ();583 gdk_flush ();
584584
585 /* Handle failure */585 /* Handle failure */
586 if (!surface || gdk_error_trap_pop ())586 if (gdk_error_trap_pop () || !surface)
587 {587 {
588 if (surface)588 if (surface)
589 cairo_surface_destroy (surface);589 cairo_surface_destroy (surface);
@@ -597,7 +597,7 @@
597 gdk_flush ();597 gdk_flush ();
598598
599 /* Handle failure */599 /* Handle failure */
600 if (!buffer_surface || gdk_error_trap_pop ())600 if (gdk_error_trap_pop () || !buffer_surface)
601 {601 {
602 if (buffer_surface)602 if (buffer_surface)
603 cairo_surface_destroy (buffer_surface);603 cairo_surface_destroy (buffer_surface);
@@ -846,13 +846,13 @@
846 1, 1,846 1, 1,
847 frame->win_extents.left,847 frame->win_extents.left,
848 frame->win_extents.right,848 frame->win_extents.right,
849 frame->win_extents.top + frame->titlebar_height,849 frame->win_extents.top,
850 frame->win_extents.bottom,850 frame->win_extents.bottom,
851 frame->win_extents.left -851 frame->win_extents.left -
852 TRANSLUCENT_CORNER_SIZE,852 TRANSLUCENT_CORNER_SIZE,
853 frame->win_extents.right -853 frame->win_extents.right -
854 TRANSLUCENT_CORNER_SIZE,854 TRANSLUCENT_CORNER_SIZE,
855 frame->win_extents.top + frame->titlebar_height -855 frame->win_extents.top -
856 TRANSLUCENT_CORNER_SIZE,856 TRANSLUCENT_CORNER_SIZE,
857 frame->win_extents.bottom -857 frame->win_extents.bottom -
858 TRANSLUCENT_CORNER_SIZE,858 TRANSLUCENT_CORNER_SIZE,
@@ -877,12 +877,11 @@
877 1, 1,877 1, 1,
878 frame->max_win_extents.left,878 frame->max_win_extents.left,
879 frame->max_win_extents.right,879 frame->max_win_extents.right,
880 frame->max_win_extents.top + frame->max_titlebar_height,880 frame->max_win_extents.top,
881 frame->max_win_extents.bottom,881 frame->max_win_extents.bottom,
882 frame->max_win_extents.left - TRANSLUCENT_CORNER_SIZE,882 frame->max_win_extents.left - TRANSLUCENT_CORNER_SIZE,
883 frame->max_win_extents.right - TRANSLUCENT_CORNER_SIZE,883 frame->max_win_extents.right - TRANSLUCENT_CORNER_SIZE,
884 frame->max_win_extents.top + frame->max_titlebar_height -884 frame->max_win_extents.top - TRANSLUCENT_CORNER_SIZE,
885 TRANSLUCENT_CORNER_SIZE,
886 frame->max_win_extents.bottom - TRANSLUCENT_CORNER_SIZE,885 frame->max_win_extents.bottom - TRANSLUCENT_CORNER_SIZE,
887 opt_no_shadow, /* No shadow when maximized */886 opt_no_shadow, /* No shadow when maximized */
888 context_max,887 context_max,
@@ -1328,8 +1327,6 @@
1328 default_frames[i].d->frame = frame;1327 default_frames[i].d->frame = frame;
1329 default_frames[i].d->active = i < WINDOW_TYPE_FRAMES_NUM ? TRUE : FALSE;1328 default_frames[i].d->active = i < WINDOW_TYPE_FRAMES_NUM ? TRUE : FALSE;
13301329
1331 extents.top += frame->titlebar_height;
1332
1333 default_frames[i].d->draw = draw_window_decoration;1330 default_frames[i].d->draw = draw_window_decoration;
1334 default_frames[i].d->surface = create_native_surface_and_wrap (default_frames[i].d->width,1331 default_frames[i].d->surface = create_native_surface_and_wrap (default_frames[i].d->width,
1335 default_frames[i].d->height,1332 default_frames[i].d->height,
13361333
=== removed file 'gtk/window-decorator/decorprops.c'
--- gtk/window-decorator/decorprops.c 2016-05-26 19:52:15 +0000
+++ gtk/window-decorator/decorprops.c 1970-01-01 00:00:00 +0000
@@ -1,173 +0,0 @@
1/*
2 * Copyright © 2006 Novell, Inc.
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the
16 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17 * Boston, MA 02111-1307, USA.
18 *
19 * Author: David Reveman <davidr@novell.com>
20 *
21 * 2D Mode: Copyright © 2010 Sam Spilsbury <smspillaz@gmail.com>
22 * Frames Management: Copright © 2011 Canonical Ltd.
23 * Authored By: Sam Spilsbury <sam.spilsbury@canonical.com>
24 */
25
26#include "gtk-window-decorator.h"
27
28void
29decor_update_window_property (decor_t *d)
30{
31 long *data;
32 Display *xdisplay =
33 GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
34 decor_extents_t extents = d->frame->win_extents;
35 gint nQuad;
36 unsigned int nOffset = 1;
37 unsigned int frame_type = populate_frame_type (d);
38 unsigned int frame_state = populate_frame_state (d);
39 unsigned int frame_actions = populate_frame_actions (d);
40 decor_quad_t quads[N_QUADS_MAX];
41 int w, h;
42 gint stretch_offset;
43 REGION top, bottom, left, right;
44
45 w = d->border_layout.top.x2 - d->border_layout.top.x1 -
46 d->context->left_space - d->context->right_space;
47
48 if (d->border_layout.rotation)
49 h = d->border_layout.left.x2 - d->border_layout.left.x1;
50 else
51 h = d->border_layout.left.y2 - d->border_layout.left.y1;
52
53 stretch_offset = w - d->button_width - 1;
54
55 nQuad = decor_set_lSrStXbS_window_quads (quads, d->context,
56 &d->border_layout,
57 stretch_offset);
58
59 extents.top += d->frame->titlebar_height;
60
61 data = decor_alloc_property (nOffset, WINDOW_DECORATION_TYPE_PIXMAP);
62 decor_quads_to_property (data, nOffset - 1, cairo_xlib_surface_get_drawable (d->surface),
63 &extents, &extents,
64 &extents, &extents,
65 ICON_SPACE + d->button_width,
66 0,
67 quads, nQuad, frame_type, frame_state, frame_actions);
68
69 gdk_error_trap_push ();
70 XChangeProperty (xdisplay, d->prop_xid,
71 win_decor_atom,
72 XA_INTEGER,
73 32, PropModeReplace, (guchar *) data,
74 PROP_HEADER_SIZE + BASE_PROP_SIZE + QUAD_PROP_SIZE * N_QUADS_MAX);
75 gdk_display_sync (gdk_display_get_default ());
76 gdk_error_trap_pop_ignored ();
77
78 top.rects = &top.extents;
79 top.numRects = top.size = 1;
80
81 top.extents.x1 = -extents.left;
82 top.extents.y1 = -extents.top;
83 top.extents.x2 = w + extents.right;
84 top.extents.y2 = 0;
85
86 bottom.rects = &bottom.extents;
87 bottom.numRects = bottom.size = 1;
88
89 bottom.extents.x1 = -extents.left;
90 bottom.extents.y1 = 0;
91 bottom.extents.x2 = w + extents.right;
92 bottom.extents.y2 = extents.bottom;
93
94 left.rects = &left.extents;
95 left.numRects = left.size = 1;
96
97 left.extents.x1 = -extents.left;
98 left.extents.y1 = 0;
99 left.extents.x2 = 0;
100 left.extents.y2 = h;
101
102 right.rects = &right.extents;
103 right.numRects = right.size = 1;
104
105 right.extents.x1 = 0;
106 right.extents.y1 = 0;
107 right.extents.x2 = extents.right;
108 right.extents.y2 = h;
109
110 decor_update_blur_property (d,
111 w, h,
112 &top, stretch_offset,
113 &bottom, w / 2,
114 &left, h / 2,
115 &right, h / 2);
116
117 free (data);
118}
119
120void
121decor_update_switcher_property (decor_t *d)
122{
123 long *data;
124 Display *xdisplay = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
125 gint nQuad;
126 decor_quad_t quads[N_QUADS_MAX];
127 unsigned int nOffset = 1;
128 unsigned int frame_type = populate_frame_type (d);
129 unsigned int frame_state = populate_frame_state (d);
130 unsigned int frame_actions = populate_frame_actions (d);
131 GtkStyleContext *context;
132 GdkRGBA fg;
133 long fgColor[4];
134
135 nQuad = decor_set_lSrStSbX_window_quads (quads, &d->frame->window_context_active,
136 &d->border_layout,
137 d->border_layout.top.x2 -
138 d->border_layout.top.x1 -
139 d->frame->window_context_active.extents.left -
140 d->frame->window_context_active.extents.right -
141 32);
142
143 data = decor_alloc_property (nOffset, WINDOW_DECORATION_TYPE_PIXMAP);
144 decor_quads_to_property (data, nOffset - 1, cairo_xlib_surface_get_drawable (d->surface),
145 &d->frame->win_extents, &d->frame->win_extents,
146 &d->frame->win_extents, &d->frame->win_extents,
147 0, 0, quads, nQuad, frame_type, frame_state, frame_actions);
148
149 context = gtk_widget_get_style_context (d->frame->style_window_rgba);
150
151 gtk_style_context_save (context);
152 gtk_style_context_set_state (context, GTK_STATE_FLAG_NORMAL);
153 gtk_style_context_get_color (context, GTK_STATE_FLAG_NORMAL, &fg);
154 gtk_style_context_restore (context);
155
156 fgColor[0] = fg.red;
157 fgColor[1] = fg.green;
158 fgColor[2] = fg.blue;
159 fgColor[3] = SWITCHER_ALPHA;
160
161 gdk_error_trap_push ();
162 XChangeProperty (xdisplay, d->prop_xid,
163 win_decor_atom,
164 XA_INTEGER,
165 32, PropModeReplace, (guchar *) data,
166 PROP_HEADER_SIZE + BASE_PROP_SIZE + QUAD_PROP_SIZE * N_QUADS_MAX);
167 XChangeProperty (xdisplay, d->prop_xid, switcher_fg_atom,
168 XA_INTEGER, 32, PropModeReplace, (guchar *) fgColor, 4);
169 gdk_display_sync (gdk_display_get_default ());
170 gdk_error_trap_pop_ignored ();
171
172 free (data);
173}
1740
=== modified file 'gtk/window-decorator/frames.c'
--- gtk/window-decorator/frames.c 2016-06-01 11:29:21 +0000
+++ gtk/window-decorator/frames.c 2016-06-09 14:54:36 +0000
@@ -437,8 +437,6 @@
437437
438 frame->type = strdup (type);438 frame->type = strdup (type);
439 frame->refcount = 0;439 frame->refcount = 0;
440 frame->titlebar_height = 17;
441 frame->max_titlebar_height = 17;
442 frame->border_shadow_active = NULL;440 frame->border_shadow_active = NULL;
443 frame->border_shadow_inactive = NULL;441 frame->border_shadow_inactive = NULL;
444 frame->max_border_shadow_active = NULL;442 frame->max_border_shadow_active = NULL;
445443
=== modified file 'gtk/window-decorator/gtk-window-decorator.h'
--- gtk/window-decorator/gtk-window-decorator.h 2016-06-09 14:54:36 +0000
+++ gtk/window-decorator/gtk-window-decorator.h 2016-06-09 14:54:36 +0000
@@ -209,8 +209,6 @@
209struct _decor_frame {209struct _decor_frame {
210 decor_extents_t win_extents;210 decor_extents_t win_extents;
211 decor_extents_t max_win_extents;211 decor_extents_t max_win_extents;
212 int titlebar_height;
213 int max_titlebar_height;
214 decor_shadow_t *border_shadow_active;212 decor_shadow_t *border_shadow_active;
215 decor_shadow_t *border_shadow_inactive;213 decor_shadow_t *border_shadow_inactive;
216 decor_shadow_t *max_border_shadow_active;214 decor_shadow_t *max_border_shadow_active;
@@ -442,14 +440,6 @@
442 Region right_region,440 Region right_region,
443 int right_offset);441 int right_offset);
444442
445/* decorprops.c */
446
447void
448decor_update_window_property (decor_t *d);
449
450void
451decor_update_switcher_property (decor_t *d);
452
453/* cairo.c */443/* cairo.c */
454444
455#define CORNER_TOPLEFT (1 << 0)445#define CORNER_TOPLEFT (1 << 0)
456446
=== modified file 'gtk/window-decorator/gwd-theme-cairo.c'
--- gtk/window-decorator/gwd-theme-cairo.c 2016-05-26 19:52:15 +0000
+++ gtk/window-decorator/gwd-theme-cairo.c 2016-06-09 14:54:36 +0000
@@ -38,6 +38,96 @@
3838
39G_DEFINE_TYPE (GWDThemeCairo, gwd_theme_cairo, GWD_TYPE_THEME)39G_DEFINE_TYPE (GWDThemeCairo, gwd_theme_cairo, GWD_TYPE_THEME)
4040
41static gint
42get_titlebar_height (decor_frame_t *frame)
43{
44 return frame->text_height < 17 ? 17 : frame->text_height;
45}
46
47static void
48decor_update_window_property (decor_t *d)
49{
50 GdkDisplay *display = gdk_display_get_default ();
51 Display *xdisplay = gdk_x11_display_get_xdisplay (display);
52 decor_extents_t extents = d->frame->win_extents;
53 unsigned int nOffset = 1;
54 unsigned int frame_type = populate_frame_type (d);
55 unsigned int frame_state = populate_frame_state (d);
56 unsigned int frame_actions = populate_frame_actions (d);
57 long *data;
58 gint nQuad;
59 decor_quad_t quads[N_QUADS_MAX];
60 int w, h;
61 gint stretch_offset;
62 REGION top, bottom, left, right;
63
64 w = d->border_layout.top.x2 - d->border_layout.top.x1 -
65 d->context->left_space - d->context->right_space;
66
67 if (d->border_layout.rotation)
68 h = d->border_layout.left.x2 - d->border_layout.left.x1;
69 else
70 h = d->border_layout.left.y2 - d->border_layout.left.y1;
71
72 stretch_offset = w - d->button_width - 1;
73
74 nQuad = decor_set_lSrStXbS_window_quads (quads, d->context,
75 &d->border_layout,
76 stretch_offset);
77
78 data = decor_alloc_property (nOffset, WINDOW_DECORATION_TYPE_PIXMAP);
79 decor_quads_to_property (data, nOffset - 1, cairo_xlib_surface_get_drawable (d->surface),
80 &extents, &extents,
81 &extents, &extents,
82 ICON_SPACE + d->button_width,
83 0,
84 quads, nQuad, frame_type, frame_state, frame_actions);
85
86 gdk_error_trap_push ();
87 XChangeProperty (xdisplay, d->prop_xid, win_decor_atom, XA_INTEGER,
88 32, PropModeReplace, (guchar *) data,
89 PROP_HEADER_SIZE + BASE_PROP_SIZE + QUAD_PROP_SIZE * N_QUADS_MAX);
90 gdk_display_sync (display);
91 gdk_error_trap_pop_ignored ();
92
93 top.rects = &top.extents;
94 top.numRects = top.size = 1;
95
96 top.extents.x1 = -extents.left;
97 top.extents.y1 = -extents.top;
98 top.extents.x2 = w + extents.right;
99 top.extents.y2 = 0;
100
101 bottom.rects = &bottom.extents;
102 bottom.numRects = bottom.size = 1;
103
104 bottom.extents.x1 = -extents.left;
105 bottom.extents.y1 = 0;
106 bottom.extents.x2 = w + extents.right;
107 bottom.extents.y2 = extents.bottom;
108
109 left.rects = &left.extents;
110 left.numRects = left.size = 1;
111
112 left.extents.x1 = -extents.left;
113 left.extents.y1 = 0;
114 left.extents.x2 = 0;
115 left.extents.y2 = h;
116
117 right.rects = &right.extents;
118 right.numRects = right.size = 1;
119
120 right.extents.x1 = 0;
121 right.extents.y1 = 0;
122 right.extents.x2 = extents.right;
123 right.extents.y2 = h;
124
125 decor_update_blur_property (d, w, h, &top, stretch_offset,
126 &bottom, w / 2, &left, h / 2, &right, h / 2);
127
128 free (data);
129}
130
41static void131static void
42button_state_offsets (gdouble x,132button_state_offsets (gdouble x,
43 gdouble y,133 gdouble y,
@@ -243,6 +333,7 @@
243 gint corners = SHADE_LEFT | SHADE_RIGHT | SHADE_TOP | SHADE_BOTTOM;333 gint corners = SHADE_LEFT | SHADE_RIGHT | SHADE_TOP | SHADE_BOTTOM;
244 gint top;334 gint top;
245 gint button_x;335 gint button_x;
336 gint titlebar_height;
246337
247 if (!decor->surface)338 if (!decor->surface)
248 return;339 return;
@@ -275,10 +366,10 @@
275366
276 cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);367 cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
277368
278 top = decor->frame->win_extents.top + decor->frame->titlebar_height;369 top = decor->frame->win_extents.top;
279370
280 x1 = decor->context->left_space - decor->frame->win_extents.left;371 x1 = decor->context->left_space - decor->frame->win_extents.left;
281 y1 = decor->context->top_space - decor->frame->win_extents.top - decor->frame->titlebar_height;372 y1 = decor->context->top_space - decor->frame->win_extents.top;
282 x2 = decor->width - decor->context->right_space + decor->frame->win_extents.right;373 x2 = decor->width - decor->context->right_space + decor->frame->win_extents.right;
283 y2 = decor->height - decor->context->bottom_space + decor->frame->win_extents.bottom;374 y2 = decor->height - decor->context->bottom_space + decor->frame->win_extents.bottom;
284375
@@ -474,10 +565,11 @@
474 cairo_set_line_width (cr, 2.0);565 cairo_set_line_width (cr, 2.0);
475566
476 button_x = decor->width - decor->context->right_space - 13;567 button_x = decor->width - decor->context->right_space - 13;
568 titlebar_height = get_titlebar_height (decor->frame);
477569
478 if (decor->actions & WNCK_WINDOW_ACTION_CLOSE) {570 if (decor->actions & WNCK_WINDOW_ACTION_CLOSE) {
479 button_state_offsets (button_x,571 button_state_offsets (button_x,
480 y1 - 3.0 + decor->frame->titlebar_height / 2,572 y1 - 3.0 + titlebar_height / 2,
481 decor->button_states[BUTTON_CLOSE], &x, &y);573 decor->button_states[BUTTON_CLOSE], &x, &y);
482574
483 button_x -= 17;575 button_x -= 17;
@@ -499,7 +591,7 @@
499591
500 if (decor->actions & WNCK_WINDOW_ACTION_MAXIMIZE) {592 if (decor->actions & WNCK_WINDOW_ACTION_MAXIMIZE) {
501 button_state_offsets (button_x,593 button_state_offsets (button_x,
502 y1 - 3.0 + decor->frame->titlebar_height / 2,594 y1 - 3.0 + titlebar_height / 2,
503 decor->button_states[BUTTON_MAX], &x, &y);595 decor->button_states[BUTTON_MAX], &x, &y);
504596
505 button_x -= 17;597 button_x -= 17;
@@ -538,7 +630,7 @@
538630
539 if (decor->actions & WNCK_WINDOW_ACTION_MINIMIZE) {631 if (decor->actions & WNCK_WINDOW_ACTION_MINIMIZE) {
540 button_state_offsets (button_x,632 button_state_offsets (button_x,
541 y1 - 3.0 + decor->frame->titlebar_height / 2,633 y1 - 3.0 + titlebar_height / 2,
542 decor->button_states[BUTTON_MIN], &x, &y);634 decor->button_states[BUTTON_MIN], &x, &y);
543635
544 button_x -= 17;636 button_x -= 17;
@@ -565,7 +657,7 @@
565 if (decor->active) {657 if (decor->active) {
566 cairo_move_to (cr,658 cairo_move_to (cr,
567 decor->context->left_space + 21.0,659 decor->context->left_space + 21.0,
568 y1 + 2.0 + (decor->frame->titlebar_height - decor->frame->text_height) / 2.0);660 y1 + 2.0 + (titlebar_height - decor->frame->text_height) / 2.0);
569661
570 fg.alpha = STROKE_ALPHA;662 fg.alpha = STROKE_ALPHA;
571 gdk_cairo_set_source_rgba (cr, &fg);663 gdk_cairo_set_source_rgba (cr, &fg);
@@ -581,7 +673,7 @@
581673
582 cairo_move_to (cr,674 cairo_move_to (cr,
583 decor->context->left_space + 21.0,675 decor->context->left_space + 21.0,
584 y1 + 2.0 + (decor->frame->titlebar_height - decor->frame->text_height) / 2.0);676 y1 + 2.0 + (titlebar_height - decor->frame->text_height) / 2.0);
585677
586 pango_cairo_show_layout (cr, decor->layout);678 pango_cairo_show_layout (cr, decor->layout);
587 }679 }
@@ -589,7 +681,7 @@
589 if (decor->icon) {681 if (decor->icon) {
590 cairo_translate (cr,682 cairo_translate (cr,
591 decor->context->left_space + 1,683 decor->context->left_space + 1,
592 y1 - 5.0 + decor->frame->titlebar_height / 2);684 y1 - 5.0 + titlebar_height / 2);
593 cairo_set_source (cr, decor->icon);685 cairo_set_source (cr, decor->icon);
594 cairo_rectangle (cr, 0.0, 0.0, 16.0, 16.0);686 cairo_rectangle (cr, 0.0, 0.0, 16.0, 16.0);
595 cairo_clip (cr);687 cairo_clip (cr);
@@ -669,15 +761,16 @@
669{761{
670 decor_extents_t win_extents = { 6, 6, 10, 6 };762 decor_extents_t win_extents = { 6, 6, 10, 6 };
671 decor_extents_t max_win_extents = { 6, 6, 4, 6 };763 decor_extents_t max_win_extents = { 6, 6, 4, 6 };
764 gint titlebar_height = get_titlebar_height (frame);
672765
673 frame = gwd_decor_frame_ref (frame);766 frame = gwd_decor_frame_ref (frame);
674767
768 win_extents.top += titlebar_height;
769 max_win_extents.top += titlebar_height;
770
675 frame->win_extents = win_extents;771 frame->win_extents = win_extents;
676 frame->max_win_extents = max_win_extents;772 frame->max_win_extents = max_win_extents;
677773
678 frame->titlebar_height = frame->max_titlebar_height =
679 (frame->text_height < 17) ? 17 : frame->text_height;
680
681 gwd_decor_frame_unref (frame);774 gwd_decor_frame_unref (frame);
682}775}
683776
@@ -693,9 +786,11 @@
693 gint *w,786 gint *w,
694 gint *h)787 gint *h)
695{788{
789 gint titlebar_height = get_titlebar_height (decor->frame);
790
696 *x = pos[i][j].x + pos[i][j].xw * width;791 *x = pos[i][j].x + pos[i][j].xw * width;
697 *y = pos[i][j].y +792 *y = pos[i][j].y +
698 pos[i][j].yh * height + pos[i][j].yth * (decor->frame->titlebar_height - 17);793 pos[i][j].yh * height + pos[i][j].yth * (titlebar_height - 17);
699794
700 if ((decor->state & WNCK_WINDOW_STATE_MAXIMIZED_HORIZONTALLY) && (j == 0 || j == 2)) {795 if ((decor->state & WNCK_WINDOW_STATE_MAXIMIZED_HORIZONTALLY) && (j == 0 || j == 2)) {
701 *w = 0;796 *w = 0;
@@ -707,7 +802,7 @@
707 *h = 0;802 *h = 0;
708 } else {803 } else {
709 *h = pos[i][j].h +804 *h = pos[i][j].h +
710 pos[i][j].hh * height + pos[i][j].hth * (decor->frame->titlebar_height - 17);805 pos[i][j].hh * height + pos[i][j].hth * (titlebar_height - 17);
711 }806 }
712}807}
713808
@@ -722,16 +817,16 @@
722 gint *w,817 gint *w,
723 gint *h)818 gint *h)
724{819{
820 gint titlebar_height = get_titlebar_height (decor->frame);
821
725 if (i > BUTTON_MENU)822 if (i > BUTTON_MENU)
726 return FALSE;823 return FALSE;
727824
728 *x = bpos[i].x + bpos[i].xw * width;825 *x = bpos[i].x + bpos[i].xw * width;
729 *y = bpos[i].y + bpos[i].yh * height + bpos[i].yth *826 *y = bpos[i].y + bpos[i].yh * height + bpos[i].yth * (titlebar_height - 17);
730 (decor->frame->titlebar_height - 17);
731827
732 *w = bpos[i].w + bpos[i].ww * width;828 *w = bpos[i].w + bpos[i].ww * width;
733 *h = bpos[i].h + bpos[i].hh * height + bpos[i].hth +829 *h = bpos[i].h + bpos[i].hh * height + bpos[i].hth + (titlebar_height - 17);
734 (decor->frame->titlebar_height - 17);
735830
736 /* hack to position multiple buttons on the right */831 /* hack to position multiple buttons on the right */
737 if (i != BUTTON_MENU) {832 if (i != BUTTON_MENU) {
738833
=== modified file 'gtk/window-decorator/gwd-theme-metacity.c'
--- gtk/window-decorator/gwd-theme-metacity.c 2016-06-09 14:54:36 +0000
+++ gtk/window-decorator/gwd-theme-metacity.c 2016-06-09 14:54:36 +0000
@@ -662,11 +662,6 @@
662 left_stretch_offset, right_stretch_offset,662 left_stretch_offset, right_stretch_offset,
663 top_stretch_offset, bottom_stretch_offset);663 top_stretch_offset, bottom_stretch_offset);
664664
665 win_extents.top += d->frame->titlebar_height;
666 frame_win_extents.top += d->frame->titlebar_height;
667 max_win_extents.top += d->frame->max_titlebar_height;
668 frame_max_win_extents.top += d->frame->max_titlebar_height;
669
670 data = decor_alloc_property (nOffset, WINDOW_DECORATION_TYPE_PIXMAP);665 data = decor_alloc_property (nOffset, WINDOW_DECORATION_TYPE_PIXMAP);
671 decor_quads_to_property (data, nOffset - 1, cairo_xlib_surface_get_drawable (d->surface),666 decor_quads_to_property (data, nOffset - 1, cairo_xlib_surface_get_drawable (d->surface),
672 &frame_win_extents, &win_extents,667 &frame_win_extents, &win_extents,
@@ -1183,24 +1178,20 @@
1183 meta_theme_get_frame_borders (metacity->theme, style_info, frame_type,1178 meta_theme_get_frame_borders (metacity->theme, style_info, frame_type,
1184 frame->text_height, 0, &borders);1179 frame->text_height, 0, &borders);
11851180
1186 frame->win_extents.top = frame->win_extents.top;1181 frame->win_extents.top = borders.visible.top;
1187 frame->win_extents.bottom = borders.visible.bottom;1182 frame->win_extents.bottom = borders.visible.bottom;
1188 frame->win_extents.left = borders.visible.left;1183 frame->win_extents.left = borders.visible.left;
1189 frame->win_extents.right = borders.visible.right;1184 frame->win_extents.right = borders.visible.right;
11901185
1191 frame->titlebar_height = borders.visible.top - frame->win_extents.top;
1192
1193 meta_theme_get_frame_borders (metacity->theme, style_info, frame_type,1186 meta_theme_get_frame_borders (metacity->theme, style_info, frame_type,
1194 frame->text_height, META_FRAME_MAXIMIZED,1187 frame->text_height, META_FRAME_MAXIMIZED,
1195 &borders);1188 &borders);
11961189
1197 frame->max_win_extents.top = frame->win_extents.top;1190 frame->max_win_extents.top = borders.visible.top;
1198 frame->max_win_extents.bottom = borders.visible.bottom;1191 frame->max_win_extents.bottom = borders.visible.bottom;
1199 frame->max_win_extents.left = borders.visible.left;1192 frame->max_win_extents.left = borders.visible.left;
1200 frame->max_win_extents.right = borders.visible.right;1193 frame->max_win_extents.right = borders.visible.right;
12011194
1202 frame->max_titlebar_height = borders.visible.top - frame->max_win_extents.top;
1203
1204 meta_style_info_unref (style_info);1195 meta_style_info_unref (style_info);
12051196
1206 gwd_decor_frame_unref (frame);1197 gwd_decor_frame_unref (frame);
12071198
=== modified file 'gtk/window-decorator/switcher.c'
--- gtk/window-decorator/switcher.c 2016-05-26 20:11:19 +0000
+++ gtk/window-decorator/switcher.c 2016-06-09 14:54:36 +0000
@@ -27,6 +27,61 @@
2727
28#define SWITCHER_SPACE 4028#define SWITCHER_SPACE 40
2929
30static void
31decor_update_switcher_property (decor_t *d)
32{
33 long *data;
34 Display *xdisplay = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
35 gint nQuad;
36 decor_quad_t quads[N_QUADS_MAX];
37 unsigned int nOffset = 1;
38 unsigned int frame_type = populate_frame_type (d);
39 unsigned int frame_state = populate_frame_state (d);
40 unsigned int frame_actions = populate_frame_actions (d);
41 GtkStyleContext *context;
42 GdkRGBA fg;
43 long fgColor[4];
44
45 nQuad = decor_set_lSrStSbX_window_quads (quads, &d->frame->window_context_active,
46 &d->border_layout,
47 d->border_layout.top.x2 -
48 d->border_layout.top.x1 -
49 d->frame->window_context_active.extents.left -
50 d->frame->window_context_active.extents.right -
51 32);
52
53 data = decor_alloc_property (nOffset, WINDOW_DECORATION_TYPE_PIXMAP);
54 decor_quads_to_property (data, nOffset - 1, cairo_xlib_surface_get_drawable (d->surface),
55 &d->frame->win_extents, &d->frame->win_extents,
56 &d->frame->win_extents, &d->frame->win_extents,
57 0, 0, quads, nQuad, frame_type, frame_state, frame_actions);
58
59 context = gtk_widget_get_style_context (d->frame->style_window_rgba);
60
61 gtk_style_context_save (context);
62 gtk_style_context_set_state (context, GTK_STATE_FLAG_NORMAL);
63 gtk_style_context_get_color (context, GTK_STATE_FLAG_NORMAL, &fg);
64 gtk_style_context_restore (context);
65
66 fgColor[0] = fg.red;
67 fgColor[1] = fg.green;
68 fgColor[2] = fg.blue;
69 fgColor[3] = SWITCHER_ALPHA;
70
71 gdk_error_trap_push ();
72 XChangeProperty (xdisplay, d->prop_xid,
73 win_decor_atom,
74 XA_INTEGER,
75 32, PropModeReplace, (guchar *) data,
76 PROP_HEADER_SIZE + BASE_PROP_SIZE + QUAD_PROP_SIZE * N_QUADS_MAX);
77 XChangeProperty (xdisplay, d->prop_xid, switcher_fg_atom,
78 XA_INTEGER, 32, PropModeReplace, (guchar *) fgColor, 4);
79 gdk_display_sync (gdk_display_get_default ());
80 gdk_error_trap_pop_ignored ();
81
82 free (data);
83}
84
30decor_frame_t *85decor_frame_t *
31create_switcher_frame (const gchar *type)86create_switcher_frame (const gchar *type)
32{87{

Subscribers

People subscribed via source and target branches