Merge lp:~muktupavels/compiz/gwd-theme-style-window into lp:compiz/0.9.12

Proposed by Alberts Muktupāvels
Status: Merged
Approved by: Marco Trevisan (Treviño)
Approved revision: 4076
Merged at revision: 4057
Proposed branch: lp:~muktupavels/compiz/gwd-theme-style-window
Merge into: lp:compiz/0.9.12
Prerequisite: lp:~muktupavels/compiz/gwd-titlebar-font
Diff against target: 1218 lines (+380/-333)
10 files modified
gtk/window-decorator/decorator.c (+23/-26)
gtk/window-decorator/frames.c (+2/-252)
gtk/window-decorator/gtk-window-decorator.c (+0/-1)
gtk/window-decorator/gtk-window-decorator.h (+0/-7)
gtk/window-decorator/gwd-theme-cairo.c (+218/-5)
gtk/window-decorator/gwd-theme-metacity.c (+29/-18)
gtk/window-decorator/gwd-theme.c (+73/-1)
gtk/window-decorator/gwd-theme.h (+6/-1)
gtk/window-decorator/switcher.c (+19/-22)
gtk/window-decorator/wnck.c (+10/-0)
To merge this branch: bzr merge lp:~muktupavels/compiz/gwd-theme-style-window
Reviewer Review Type Date Requested Status
Marco Trevisan (Treviño) Approve
Review via email: mp+296867@code.launchpad.net

Commit message

gtk-window-decorator: use only one style window.

- Use only one style window - there is no reason to keep multiple windows. More windows just meant that on style-updated signal we called decorations_changed multiple times for no reason - just extra work.

- Switcher label was added to style window, but my tests shows that it is not needed...

- On style-updated signal _title_color was updated multiple times, but it is used only by Cairo theme.

Description of the change

- Use only one style window - there is no reason to keep multiple windows. More windows just meant that on style-updated signal we called decorations_changed multiple times for no reason - just extra work.

- Switcher label was added to style window, but my tests shows that it is not needed...

- On style-updated signal _title_color was updated multiple times, but it is used only by Cairo theme.

To post a comment you must log in.
4075. By Alberts Muktupāvels

Merge with lp:~albertsmuktupavels/compiz/gwd-titlebar-font.

4076. By Alberts Muktupāvels

Merge with lp:~albertsmuktupavels/compiz/gwd-titlebar-font.

Revision history for this message
Marco Trevisan (Treviño) (3v1n0) wrote :

Fine. Good a try to an offscreenwindow once you've time.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'gtk/window-decorator/decorator.c'
--- gtk/window-decorator/decorator.c 2016-06-09 14:58:49 +0000
+++ gtk/window-decorator/decorator.c 2016-06-09 14:58:49 +0000
@@ -55,15 +55,19 @@
55void55void
56frame_update_titlebar_font (decor_frame_t *frame)56frame_update_titlebar_font (decor_frame_t *frame)
57{57{
58 GtkWidget *style_window = gwd_theme_get_style_window (gwd_theme);
58 PangoFontDescription *font_desc = gwd_theme_get_titlebar_font (gwd_theme, frame);59 PangoFontDescription *font_desc = gwd_theme_get_titlebar_font (gwd_theme, frame);
59 PangoLanguage *lang = pango_context_get_language (frame->pango_context);60 PangoLanguage *lang;
60 PangoFontMetrics *metrics;61 PangoFontMetrics *metrics;
61 gint ascent, descent;62 gint ascent, descent;
6263
63 frame = gwd_decor_frame_ref (frame);64 frame = gwd_decor_frame_ref (frame);
6465
66 if (frame->pango_context == NULL)
67 frame->pango_context = gtk_widget_create_pango_context (style_window);
65 pango_context_set_font_description (frame->pango_context, font_desc);68 pango_context_set_font_description (frame->pango_context, font_desc);
6669
70 lang = pango_context_get_language (frame->pango_context);
67 metrics = pango_context_get_metrics (frame->pango_context, font_desc, lang);71 metrics = pango_context_get_metrics (frame->pango_context, font_desc, lang);
68 ascent = pango_font_metrics_get_ascent (metrics);72 ascent = pango_font_metrics_get_ascent (metrics);
69 descent = pango_font_metrics_get_descent (metrics);73 descent = pango_font_metrics_get_descent (metrics);
@@ -76,14 +80,6 @@
76 gwd_decor_frame_unref (frame);80 gwd_decor_frame_unref (frame);
77}81}
7882
79void
80update_frames_titlebar_fonts (gpointer key,
81 gpointer value,
82 gpointer user_data)
83{
84 frame_update_titlebar_font ((decor_frame_t *) value);
85}
86
87/*83/*
88 * update_event_windows84 * update_event_windows
89 *85 *
@@ -284,8 +280,6 @@
284 if (!d->layout)280 if (!d->layout)
285 {281 {
286 d->layout = pango_layout_new (d->frame->pango_context);282 d->layout = pango_layout_new (d->frame->pango_context);
287 if (!d->layout)
288 return 0;
289283
290 pango_layout_set_wrap (d->layout, PANGO_WRAP_CHAR);284 pango_layout_set_wrap (d->layout, PANGO_WRAP_CHAR);
291 }285 }
@@ -353,6 +347,10 @@
353 w = 1;347 w = 1;
354 }348 }
355349
350 /* Ensure that a layout is created */
351 if (d->layout == NULL)
352 d->layout = pango_layout_new (d->frame->pango_context);
353
356 /* Set the maximum width for the layout (in case354 /* Set the maximum width for the layout (in case
357 * decoration size < text width) since we355 * decoration size < text width) since we
358 * still need to show the buttons and the window name */356 * still need to show the buttons and the window name */
@@ -417,6 +415,7 @@
417update_window_decoration_icon (WnckWindow *win)415update_window_decoration_icon (WnckWindow *win)
418{416{
419 decor_t *d = g_object_get_data (G_OBJECT (win), "decor");417 decor_t *d = g_object_get_data (G_OBJECT (win), "decor");
418 GtkWidget *style_window = gwd_theme_get_style_window (gwd_theme);
420419
421 /* Destroy old stuff */420 /* Destroy old stuff */
422 if (d->icon)421 if (d->icon)
@@ -442,8 +441,7 @@
442441
443 g_object_ref (G_OBJECT (d->icon_pixbuf));442 g_object_ref (G_OBJECT (d->icon_pixbuf));
444443
445 d->icon_surface = surface_new_from_pixbuf (d->icon_pixbuf,444 d->icon_surface = surface_new_from_pixbuf (d->icon_pixbuf, style_window);
446 d->frame->style_window_rgba);
447445
448 cr = cairo_create (d->icon_surface);446 cr = cairo_create (d->icon_surface);
449 d->icon = cairo_pattern_create_for_surface (cairo_get_target (cr));447 d->icon = cairo_pattern_create_for_surface (cairo_get_target (cr));
@@ -514,6 +512,7 @@
514 cairo_surface_t *surface, *buffer_surface = NULL;512 cairo_surface_t *surface, *buffer_surface = NULL;
515 Picture picture;513 Picture picture;
516 Display *xdisplay;514 Display *xdisplay;
515 GtkWidget *style_window;
517516
518 if (win == NULL)517 if (win == NULL)
519 return FALSE;518 return FALSE;
@@ -524,10 +523,11 @@
524 return FALSE;523 return FALSE;
525524
526 xdisplay = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());525 xdisplay = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
526 style_window = gwd_theme_get_style_window (gwd_theme);
527527
528 gdk_error_trap_push ();528 gdk_error_trap_push ();
529529
530 surface = create_native_surface_and_wrap (d->width, d->height, d->frame->style_window_rgba);530 surface = create_native_surface_and_wrap (d->width, d->height, style_window);
531531
532 gdk_flush ();532 gdk_flush ();
533533
@@ -541,7 +541,7 @@
541541
542 gdk_error_trap_push ();542 gdk_error_trap_push ();
543543
544 buffer_surface = create_surface (d->width, d->height, d->frame->style_window_rgba);544 buffer_surface = create_surface (d->width, d->height, style_window);
545545
546 gdk_flush ();546 gdk_flush ();
547547
@@ -1174,21 +1174,18 @@
1174void1174void
1175update_default_decorations (GdkScreen *screen)1175update_default_decorations (GdkScreen *screen)
1176{1176{
1177 GdkDisplay *display = gdk_display_get_default ();
1178 Display *xdisplay = gdk_x11_display_get_xdisplay (display);
1179 Window xroot = RootWindowOfScreen (gdk_x11_screen_get_xscreen (screen));
1180 Atom bareAtom = XInternAtom (xdisplay, DECOR_BARE_ATOM_NAME, FALSE);
1181 Atom activeAtom = XInternAtom (xdisplay, DECOR_ACTIVE_ATOM_NAME, FALSE);
1182 GtkWidget *style_window = gwd_theme_get_style_window (gwd_theme);
1177 long *data;1183 long *data;
1178 Window xroot;
1179 GdkDisplay *gdkdisplay = gdk_display_get_default ();
1180 Display *xdisplay = gdk_x11_display_get_xdisplay (gdkdisplay);
1181 Atom bareAtom, activeAtom;
1182 decor_frame_t *frame;1184 decor_frame_t *frame;
1183 decor_frame_t *bare_frame = gwd_get_decor_frame ("bare");1185 decor_frame_t *bare_frame = gwd_get_decor_frame ("bare");
1184 decor_extents_t extents;1186 decor_extents_t extents;
1185 unsigned int i;1187 unsigned int i;
11861188
1187 xroot = RootWindowOfScreen (gdk_x11_screen_get_xscreen (screen));
1188
1189 bareAtom = XInternAtom (xdisplay, DECOR_BARE_ATOM_NAME, FALSE);
1190 activeAtom = XInternAtom (xdisplay, DECOR_ACTIVE_ATOM_NAME, FALSE);
1191
1192 if (bare_frame->border_shadow_active)1189 if (bare_frame->border_shadow_active)
1193 {1190 {
1194 decor_layout_t layout;1191 decor_layout_t layout;
@@ -1266,7 +1263,7 @@
12661263
1267 default_frames[i].d->context = i < WINDOW_TYPE_FRAMES_NUM ? &frame->window_context_active : &frame->window_context_inactive;1264 default_frames[i].d->context = i < WINDOW_TYPE_FRAMES_NUM ? &frame->window_context_active : &frame->window_context_inactive;
1268 default_frames[i].d->shadow = i < WINDOW_TYPE_FRAMES_NUM ? frame->border_shadow_active : frame->border_shadow_inactive;1265 default_frames[i].d->shadow = i < WINDOW_TYPE_FRAMES_NUM ? frame->border_shadow_active : frame->border_shadow_inactive;
1269 default_frames[i].d->layout = pango_layout_new (frame->pango_context);1266 default_frames[i].d->layout = NULL;
12701267
1271 decor_get_default_layout (default_frames[i].d->context, 1, 1, &default_frames[i].d->border_layout);1268 decor_get_default_layout (default_frames[i].d->context, 1, 1, &default_frames[i].d->border_layout);
12721269
@@ -1279,7 +1276,7 @@
1279 default_frames[i].d->draw = draw_window_decoration;1276 default_frames[i].d->draw = draw_window_decoration;
1280 default_frames[i].d->surface = create_native_surface_and_wrap (default_frames[i].d->width,1277 default_frames[i].d->surface = create_native_surface_and_wrap (default_frames[i].d->width,
1281 default_frames[i].d->height,1278 default_frames[i].d->height,
1282 frame->style_window_rgba);1279 style_window);
12831280
1284 unsigned int j, k;1281 unsigned int j, k;
12851282
12861283
=== modified file 'gtk/window-decorator/frames.c'
--- gtk/window-decorator/frames.c 2016-06-09 14:58:49 +0000
+++ gtk/window-decorator/frames.c 2016-06-09 14:58:49 +0000
@@ -32,236 +32,7 @@
32GHashTable *frame_info_table;32GHashTable *frame_info_table;
33GHashTable *frames_table;33GHashTable *frames_table;
3434
35/* from clearlooks theme */35static void
36static void
37rgb_to_hls (gdouble *r,
38 gdouble *g,
39 gdouble *b)
40{
41 gdouble min;
42 gdouble max;
43 gdouble red;
44 gdouble green;
45 gdouble blue;
46 gdouble h, l, s;
47 gdouble delta;
48
49 red = *r;
50 green = *g;
51 blue = *b;
52
53 if (red > green)
54 {
55 if (red > blue)
56 max = red;
57 else
58 max = blue;
59
60 if (green < blue)
61 min = green;
62 else
63 min = blue;
64 }
65 else
66 {
67 if (green > blue)
68 max = green;
69 else
70 max = blue;
71
72 if (red < blue)
73 min = red;
74 else
75 min = blue;
76 }
77
78 l = (max + min) / 2;
79 s = 0;
80 h = 0;
81
82 if (max != min)
83 {
84 if (l <= 0.5)
85 s = (max - min) / (max + min);
86 else
87 s = (max - min) / (2 - max - min);
88
89 delta = max -min;
90 if (red == max)
91 h = (green - blue) / delta;
92 else if (green == max)
93 h = 2 + (blue - red) / delta;
94 else if (blue == max)
95 h = 4 + (red - green) / delta;
96
97 h *= 60;
98 if (h < 0.0)
99 h += 360;
100 }
101
102 *r = h;
103 *g = l;
104 *b = s;
105}
106
107static void
108hls_to_rgb (gdouble *h,
109 gdouble *l,
110 gdouble *s)
111{
112 gdouble hue;
113 gdouble lightness;
114 gdouble saturation;
115 gdouble m1, m2;
116 gdouble r, g, b;
117
118 lightness = *l;
119 saturation = *s;
120
121 if (lightness <= 0.5)
122 m2 = lightness * (1 + saturation);
123 else
124 m2 = lightness + saturation - lightness * saturation;
125
126 m1 = 2 * lightness - m2;
127
128 if (saturation == 0)
129 {
130 *h = lightness;
131 *l = lightness;
132 *s = lightness;
133 }
134 else
135 {
136 hue = *h + 120;
137 while (hue > 360)
138 hue -= 360;
139 while (hue < 0)
140 hue += 360;
141
142 if (hue < 60)
143 r = m1 + (m2 - m1) * hue / 60;
144 else if (hue < 180)
145 r = m2;
146 else if (hue < 240)
147 r = m1 + (m2 - m1) * (240 - hue) / 60;
148 else
149 r = m1;
150
151 hue = *h;
152 while (hue > 360)
153 hue -= 360;
154 while (hue < 0)
155 hue += 360;
156
157 if (hue < 60)
158 g = m1 + (m2 - m1) * hue / 60;
159 else if (hue < 180)
160 g = m2;
161 else if (hue < 240)
162 g = m1 + (m2 - m1) * (240 - hue) / 60;
163 else
164 g = m1;
165
166 hue = *h - 120;
167 while (hue > 360)
168 hue -= 360;
169 while (hue < 0)
170 hue += 360;
171
172 if (hue < 60)
173 b = m1 + (m2 - m1) * hue / 60;
174 else if (hue < 180)
175 b = m2;
176 else if (hue < 240)
177 b = m1 + (m2 - m1) * (240 - hue) / 60;
178 else
179 b = m1;
180
181 *h = r;
182 *l = g;
183 *s = b;
184 }
185}
186
187static void
188shade (const decor_color_t *a,
189 decor_color_t *b,
190 float k)
191{
192 double red;
193 double green;
194 double blue;
195
196 red = a->r;
197 green = a->g;
198 blue = a->b;
199
200 rgb_to_hls (&red, &green, &blue);
201
202 green *= k;
203 if (green > 1.0)
204 green = 1.0;
205 else if (green < 0.0)
206 green = 0.0;
207
208 blue *= k;
209 if (blue > 1.0)
210 blue = 1.0;
211 else if (blue < 0.0)
212 blue = 0.0;
213
214 hls_to_rgb (&red, &green, &blue);
215
216 b->r = red;
217 b->g = green;
218 b->b = blue;
219}
220
221static void
222update_style (GtkWidget *widget)
223{
224 GtkStyleContext *context;
225 GdkRGBA bg;
226 decor_color_t spot_color;
227
228 context = gtk_widget_get_style_context (widget);
229
230 gtk_style_context_save (context);
231 gtk_style_context_set_state (context, GTK_STATE_FLAG_SELECTED);
232 gtk_style_context_get_background_color (context, GTK_STATE_FLAG_SELECTED, &bg);
233 gtk_style_context_restore (context);
234
235 spot_color.r = bg.red;
236 spot_color.g = bg.green;
237 spot_color.b = bg.blue;
238
239 shade (&spot_color, &_title_color[0], 1.05);
240 shade (&_title_color[0], &_title_color[1], 0.85);
241}
242
243static void
244style_updated (GtkWidget *widget,
245 void *user_data)
246{
247 GdkDisplay *gdkdisplay;
248 GdkScreen *gdkscreen;
249 WnckScreen *screen;
250
251 PangoContext *context = (PangoContext *) user_data;
252
253 gdkdisplay = gdk_display_get_default ();
254 gdkscreen = gdk_display_get_default_screen (gdkdisplay);
255 screen = wnck_screen_get_default ();
256
257 update_style (widget);
258
259 pango_cairo_context_set_resolution (context, gdk_screen_get_resolution (gdkscreen));
260
261 decorations_changed (screen);
262}
263
264void
265decor_frame_refresh (decor_frame_t *frame)36decor_frame_refresh (decor_frame_t *frame)
266{37{
267 decor_shadow_options_t active_o, inactive_o;38 decor_shadow_options_t active_o, inactive_o;
@@ -269,8 +40,6 @@
26940
270 gwd_decor_frame_ref (frame);41 gwd_decor_frame_ref (frame);
27142
272 update_style (frame->style_window_rgba);
273
274 frame_update_titlebar_font (frame);43 frame_update_titlebar_font (frame);
27544
276 if (strcmp (frame->type, "switcher") != 0 && strcmp (frame->type, "bare") != 0)45 if (strcmp (frame->type, "switcher") != 0 && strcmp (frame->type, "bare") != 0)
@@ -421,8 +190,6 @@
421decor_frame_t *190decor_frame_t *
422decor_frame_new (const gchar *type)191decor_frame_new (const gchar *type)
423{192{
424 GdkScreen *gdkscreen = gdk_screen_get_default ();
425 GdkVisual *visual;
426 decor_frame_t *frame = malloc (sizeof (decor_frame_t));193 decor_frame_t *frame = malloc (sizeof (decor_frame_t));
427194
428 if (!frame)195 if (!frame)
@@ -438,21 +205,7 @@
438 frame->max_border_shadow_active = NULL;205 frame->max_border_shadow_active = NULL;
439 frame->max_border_shadow_inactive = NULL;206 frame->max_border_shadow_inactive = NULL;
440207
441 frame->style_window_rgba = gtk_window_new (GTK_WINDOW_POPUP);208 frame->pango_context = NULL;
442
443 visual = gdk_screen_get_rgba_visual (gdkscreen);
444 if (visual)
445 gtk_widget_set_visual (frame->style_window_rgba, visual);
446
447 gtk_widget_realize (frame->style_window_rgba);
448
449 gtk_window_move (GTK_WINDOW (frame->style_window_rgba), -100, -100);
450
451 frame->pango_context = gtk_widget_create_pango_context (frame->style_window_rgba);
452
453 g_signal_connect_data (frame->style_window_rgba, "style-updated",
454 G_CALLBACK (style_updated),
455 (gpointer) frame->pango_context, 0, 0);
456209
457 return frame;210 return frame;
458}211}
@@ -474,9 +227,6 @@
474 if (frame->max_border_shadow_inactive)227 if (frame->max_border_shadow_inactive)
475 decor_shadow_destroy (xdisplay, frame->max_border_shadow_inactive);228 decor_shadow_destroy (xdisplay, frame->max_border_shadow_inactive);
476229
477 if (frame->style_window_rgba)
478 gtk_widget_destroy (GTK_WIDGET (frame->style_window_rgba));
479
480 if (frame->pango_context)230 if (frame->pango_context)
481 g_object_unref (G_OBJECT (frame->pango_context));231 g_object_unref (G_OBJECT (frame->pango_context));
482232
483233
=== modified file 'gtk/window-decorator/gtk-window-decorator.c'
--- gtk/window-decorator/gtk-window-decorator.c 2016-06-09 14:58:49 +0000
+++ gtk/window-decorator/gtk-window-decorator.c 2016-06-09 14:58:49 +0000
@@ -107,7 +107,6 @@
107GHashTable *frame_table;107GHashTable *frame_table;
108GtkWidget *action_menu = NULL;108GtkWidget *action_menu = NULL;
109gboolean action_menu_mapped = FALSE;109gboolean action_menu_mapped = FALSE;
110decor_color_t _title_color[2];
111gint double_click_timeout = 250;110gint double_click_timeout = 250;
112111
113GtkWidget *tip_window;112GtkWidget *tip_window;
114113
=== modified file 'gtk/window-decorator/gtk-window-decorator.h'
--- gtk/window-decorator/gtk-window-decorator.h 2016-06-09 14:58:49 +0000
+++ gtk/window-decorator/gtk-window-decorator.h 2016-06-09 14:58:49 +0000
@@ -218,7 +218,6 @@
218 decor_context_t max_window_context_active;218 decor_context_t max_window_context_active;
219 decor_context_t max_window_context_inactive;219 decor_context_t max_window_context_inactive;
220 PangoContext *pango_context;220 PangoContext *pango_context;
221 GtkWidget *style_window_rgba;
222 gint text_height;221 gint text_height;
223 gchar *type;222 gchar *type;
224223
@@ -279,7 +278,6 @@
279/* action menu */278/* action menu */
280extern GtkWidget *action_menu;279extern GtkWidget *action_menu;
281extern gboolean action_menu_mapped;280extern gboolean action_menu_mapped;
282extern decor_color_t _title_color[2];
283extern gint double_click_timeout;281extern gint double_click_timeout;
284282
285283
@@ -387,11 +385,6 @@
387update_shadow (void);385update_shadow (void);
388386
389void387void
390update_frames_titlebar_fonts (gpointer key,
391 gpointer value,
392 gpointer user_data);
393
394void
395update_window_decoration (WnckWindow *win);388update_window_decoration (WnckWindow *win);
396389
397void390void
398391
=== modified file 'gtk/window-decorator/gwd-theme-cairo.c'
--- gtk/window-decorator/gwd-theme-cairo.c 2016-06-09 14:58:49 +0000
+++ gtk/window-decorator/gwd-theme-cairo.c 2016-06-09 14:58:49 +0000
@@ -33,7 +33,9 @@
3333
34struct _GWDThemeCairo34struct _GWDThemeCairo
35{35{
36 GObject parent;36 GObject parent;
37
38 decor_color_t title_color[2];
37};39};
3840
39G_DEFINE_TYPE (GWDThemeCairo, gwd_theme_cairo, GWD_TYPE_THEME)41G_DEFINE_TYPE (GWDThemeCairo, gwd_theme_cairo, GWD_TYPE_THEME)
@@ -45,6 +47,195 @@
45}47}
4648
47static void49static void
50rgb_to_hls (gdouble *r,
51 gdouble *g,
52 gdouble *b)
53{
54 gdouble red = *r;
55 gdouble green = *g;
56 gdouble blue = *b;
57 gdouble min;
58 gdouble max;
59 gdouble h, l, s;
60 gdouble delta;
61
62 if (red > green) {
63 if (red > blue)
64 max = red;
65 else
66 max = blue;
67
68 if (green < blue)
69 min = green;
70 else
71 min = blue;
72 } else {
73 if (green > blue)
74 max = green;
75 else
76 max = blue;
77
78 if (red < blue)
79 min = red;
80 else
81 min = blue;
82 }
83
84 l = (max + min) / 2;
85 s = 0;
86 h = 0;
87
88 if (max != min) {
89 if (l <= 0.5)
90 s = (max - min) / (max + min);
91 else
92 s = (max - min) / (2 - max - min);
93
94 delta = max -min;
95 if (red == max)
96 h = (green - blue) / delta;
97 else if (green == max)
98 h = 2 + (blue - red) / delta;
99 else if (blue == max)
100 h = 4 + (red - green) / delta;
101
102 h *= 60;
103 if (h < 0.0)
104 h += 360;
105 }
106
107 *r = h;
108 *g = l;
109 *b = s;
110}
111
112static void
113hls_to_rgb (gdouble *h,
114 gdouble *l,
115 gdouble *s)
116{
117 gdouble lightness = *l;
118 gdouble saturation = *s;
119 gdouble hue;
120 gdouble m1, m2;
121 gdouble r, g, b;
122
123 if (lightness <= 0.5)
124 m2 = lightness * (1 + saturation);
125 else
126 m2 = lightness + saturation - lightness * saturation;
127
128 m1 = 2 * lightness - m2;
129
130 if (saturation == 0) {
131 *h = lightness;
132 *l = lightness;
133 *s = lightness;
134 } else {
135 hue = *h + 120;
136 while (hue > 360)
137 hue -= 360;
138 while (hue < 0)
139 hue += 360;
140
141 if (hue < 60)
142 r = m1 + (m2 - m1) * hue / 60;
143 else if (hue < 180)
144 r = m2;
145 else if (hue < 240)
146 r = m1 + (m2 - m1) * (240 - hue) / 60;
147 else
148 r = m1;
149
150 hue = *h;
151 while (hue > 360)
152 hue -= 360;
153 while (hue < 0)
154 hue += 360;
155
156 if (hue < 60)
157 g = m1 + (m2 - m1) * hue / 60;
158 else if (hue < 180)
159 g = m2;
160 else if (hue < 240)
161 g = m1 + (m2 - m1) * (240 - hue) / 60;
162 else
163 g = m1;
164
165 hue = *h - 120;
166 while (hue > 360)
167 hue -= 360;
168 while (hue < 0)
169 hue += 360;
170
171 if (hue < 60)
172 b = m1 + (m2 - m1) * hue / 60;
173 else if (hue < 180)
174 b = m2;
175 else if (hue < 240)
176 b = m1 + (m2 - m1) * (240 - hue) / 60;
177 else
178 b = m1;
179
180 *h = r;
181 *l = g;
182 *s = b;
183 }
184}
185
186static void
187shade (const decor_color_t *a,
188 decor_color_t *b,
189 gfloat k)
190{
191 gdouble red = a->r;
192 gdouble green = a->g;
193 gdouble blue = a->b;
194
195 rgb_to_hls (&red, &green, &blue);
196
197 green *= k;
198 if (green > 1.0)
199 green = 1.0;
200 else if (green < 0.0)
201 green = 0.0;
202
203 blue *= k;
204 if (blue > 1.0)
205 blue = 1.0;
206 else if (blue < 0.0)
207 blue = 0.0;
208
209 hls_to_rgb (&red, &green, &blue);
210
211 b->r = red;
212 b->g = green;
213 b->b = blue;
214}
215
216static void
217update_title_colors (GWDThemeCairo *cairo)
218{
219 GWDTheme *theme = GWD_THEME (cairo);
220 GtkWidget *style_window = gwd_theme_get_style_window (theme);
221 GtkStyleContext *context = gtk_widget_get_style_context (style_window);
222 GdkRGBA bg;
223 decor_color_t spot_color;
224
225 gtk_style_context_save (context);
226 gtk_style_context_set_state (context, GTK_STATE_FLAG_SELECTED);
227 gtk_style_context_get_background_color (context, GTK_STATE_FLAG_SELECTED, &bg);
228 gtk_style_context_restore (context);
229
230 spot_color.r = bg.red;
231 spot_color.g = bg.green;
232 spot_color.b = bg.blue;
233
234 shade (&spot_color, &cairo->title_color[0], 1.05);
235 shade (&cairo->title_color[0], &cairo->title_color[1], 0.85);
236}
237
238static void
48decor_update_window_property (decor_t *d)239decor_update_window_property (decor_t *d)
49{240{
50 GdkDisplay *display = gdk_display_get_default ();241 GdkDisplay *display = gdk_display_get_default ();
@@ -320,11 +511,31 @@
320}511}
321512
322static void513static void
514gwd_theme_cairo_constructed (GObject *object)
515{
516 GWDThemeCairo *cairo = GWD_THEME_CAIRO (object);
517
518 G_OBJECT_CLASS (gwd_theme_cairo_parent_class)->constructed (object);
519
520 update_title_colors (cairo);
521}
522
523static void
524gwd_theme_cairo_style_updated (GWDTheme *theme)
525{
526 GWDThemeCairo *cairo = GWD_THEME_CAIRO (theme);
527
528 update_title_colors (cairo);
529}
530
531static void
323gwd_theme_cairo_draw_window_decoration (GWDTheme *theme,532gwd_theme_cairo_draw_window_decoration (GWDTheme *theme,
324 decor_t *decor)533 decor_t *decor)
325{534{
535 GWDThemeCairo *cairo = GWD_THEME_CAIRO (theme);
536 GtkWidget *style_window = gwd_theme_get_style_window (theme);
537 GtkStyleContext *context = gtk_widget_get_style_context (style_window);
326 cairo_t *cr;538 cairo_t *cr;
327 GtkStyleContext *context;
328 GdkRGBA bg, fg;539 GdkRGBA bg, fg;
329 cairo_surface_t *surface;540 cairo_surface_t *surface;
330 decor_color_t color;541 decor_color_t color;
@@ -338,8 +549,6 @@
338 if (!decor->surface)549 if (!decor->surface)
339 return;550 return;
340551
341 context = gtk_widget_get_style_context (decor->frame->style_window_rgba);
342
343 gtk_style_context_save (context);552 gtk_style_context_save (context);
344 gtk_style_context_set_state (context, GTK_STATE_FLAG_NORMAL);553 gtk_style_context_set_state (context, GTK_STATE_FLAG_NORMAL);
345 gtk_style_context_get_background_color (context, GTK_STATE_FLAG_NORMAL, &bg);554 gtk_style_context_get_background_color (context, GTK_STATE_FLAG_NORMAL, &bg);
@@ -380,7 +589,7 @@
380 draw_shadow_background (decor, cr, decor->shadow, decor->context);589 draw_shadow_background (decor, cr, decor->shadow, decor->context);
381590
382 if (decor->active) {591 if (decor->active) {
383 decor_color_t *title_color = _title_color;592 decor_color_t *title_color = cairo->title_color;
384593
385 alpha = decoration_alpha + 0.3;594 alpha = decoration_alpha + 0.3;
386595
@@ -848,8 +1057,12 @@
848static void1057static void
849gwd_theme_cairo_class_init (GWDThemeCairoClass *cairo_class)1058gwd_theme_cairo_class_init (GWDThemeCairoClass *cairo_class)
850{1059{
1060 GObjectClass *object_class = G_OBJECT_CLASS (cairo_class);
851 GWDThemeClass *theme_class = GWD_THEME_CLASS (cairo_class);1061 GWDThemeClass *theme_class = GWD_THEME_CLASS (cairo_class);
8521062
1063 object_class->constructed = gwd_theme_cairo_constructed;
1064
1065 theme_class->style_updated = gwd_theme_cairo_style_updated;
853 theme_class->draw_window_decoration = gwd_theme_cairo_draw_window_decoration;1066 theme_class->draw_window_decoration = gwd_theme_cairo_draw_window_decoration;
854 theme_class->calc_decoration_size = gwd_theme_cairo_calc_decoration_size;1067 theme_class->calc_decoration_size = gwd_theme_cairo_calc_decoration_size;
855 theme_class->update_border_extents = gwd_theme_cairo_update_border_extents;1068 theme_class->update_border_extents = gwd_theme_cairo_update_border_extents;
8561069
=== modified file 'gtk/window-decorator/gwd-theme-metacity.c'
--- gtk/window-decorator/gwd-theme-metacity.c 2016-06-09 14:58:49 +0000
+++ gtk/window-decorator/gwd-theme-metacity.c 2016-06-09 14:58:49 +0000
@@ -572,14 +572,14 @@
572}572}
573573
574static void574static void
575decor_update_meta_window_property (decor_t *d,575decor_update_meta_window_property (GWDThemeMetacity *metacity,
576 MetaTheme *theme,576 decor_t *d,
577 MetaFrameFlags flags,577 MetaFrameFlags flags,
578 MetaFrameType type,578 MetaFrameType type,
579 Region top,579 Region top,
580 Region bottom,580 Region bottom,
581 Region left,581 Region left,
582 Region right)582 Region right)
583{583{
584 long *data;584 long *data;
585 GdkDisplay *display;585 GdkDisplay *display;
@@ -616,11 +616,13 @@
616616
617 /* Add the invisible grab area padding */617 /* Add the invisible grab area padding */
618 {618 {
619 GdkScreen *screen = gtk_widget_get_screen (d->frame->style_window_rgba);619 GWDTheme *theme = GWD_THEME (metacity);
620 GtkWidget *style_window = gwd_theme_get_style_window (theme);
621 GdkScreen *screen = gtk_widget_get_screen (style_window);
620 MetaStyleInfo *style_info = meta_theme_create_style_info (screen, d->gtk_theme_variant);622 MetaStyleInfo *style_info = meta_theme_create_style_info (screen, d->gtk_theme_variant);
621 MetaFrameBorders borders;623 MetaFrameBorders borders;
622624
623 meta_theme_get_frame_borders (theme, style_info, type,625 meta_theme_get_frame_borders (metacity->theme, style_info, type,
624 d->frame->text_height,626 d->frame->text_height,
625 flags, &borders);627 flags, &borders);
626628
@@ -696,7 +698,9 @@
696 MetaFrameGeometry *fgeom,698 MetaFrameGeometry *fgeom,
697 MetaFrameType frame_type)699 MetaFrameType frame_type)
698{700{
699 GdkScreen *screen = gtk_widget_get_screen (decor->frame->style_window_rgba);701 GWDTheme *theme = GWD_THEME (metacity);
702 GtkWidget *style_window = gwd_theme_get_style_window (theme);
703 GdkScreen *screen = gtk_widget_get_screen (style_window);
700 MetaStyleInfo *style_info = meta_theme_create_style_info (screen, decor->gtk_theme_variant);704 MetaStyleInfo *style_info = meta_theme_create_style_info (screen, decor->gtk_theme_variant);
701 gint client_width;705 gint client_width;
702 gint client_height;706 gint client_height;
@@ -936,6 +940,11 @@
936}940}
937941
938static void942static void
943gwd_theme_metacity_style_updated (GWDTheme *theme)
944{
945}
946
947static void
939gwd_theme_metacity_draw_window_decoration (GWDTheme *theme,948gwd_theme_metacity_draw_window_decoration (GWDTheme *theme,
940 decor_t *decor)949 decor_t *decor)
941{950{
@@ -943,9 +952,9 @@
943 GWDSettings *settings = gwd_theme_get_settings (gwd_theme);952 GWDSettings *settings = gwd_theme_get_settings (gwd_theme);
944 GdkDisplay *display = gdk_display_get_default ();953 GdkDisplay *display = gdk_display_get_default ();
945 Display *xdisplay = gdk_x11_display_get_xdisplay (display);954 Display *xdisplay = gdk_x11_display_get_xdisplay (display);
946 GdkScreen *screen = gtk_widget_get_screen (decor->frame->style_window_rgba);955 GtkWidget *style_window = gwd_theme_get_style_window (theme);
956 GdkScreen *screen = gtk_widget_get_screen (style_window);
947 MetaStyleInfo *style_info = meta_theme_create_style_info (screen, decor->gtk_theme_variant);957 MetaStyleInfo *style_info = meta_theme_create_style_info (screen, decor->gtk_theme_variant);
948 GtkWidget *style_window = decor->frame->style_window_rgba;
949 GtkStyleContext *context = gtk_widget_get_style_context (style_window);958 GtkStyleContext *context = gtk_widget_get_style_context (style_window);
950 cairo_surface_t *surface;959 cairo_surface_t *surface;
951 Picture src;960 Picture src;
@@ -1018,7 +1027,7 @@
10181027
1019 cairo_destroy (cr);1028 cairo_destroy (cr);
10201029
1021 surface = create_surface (fgeom.width, fgeom.height, decor->frame->style_window_rgba);1030 surface = create_surface (fgeom.width, fgeom.height, style_window);
10221031
1023 cr = cairo_create (surface);1032 cr = cairo_create (surface);
10241033
@@ -1096,8 +1105,7 @@
1096 if (left_region)1105 if (left_region)
1097 XOffsetRegion (left_region, -fgeom.borders.total.left, 0);1106 XOffsetRegion (left_region, -fgeom.borders.total.left, 0);
10981107
1099 decor_update_meta_window_property (decor, metacity->theme, flags,1108 decor_update_meta_window_property (metacity, decor, flags, frame_type,
1100 frame_type,
1101 top_region, bottom_region,1109 top_region, bottom_region,
1102 left_region, right_region);1110 left_region, right_region);
11031111
@@ -1172,7 +1180,8 @@
1172 decor_frame_t *frame)1180 decor_frame_t *frame)
1173{1181{
1174 GWDThemeMetacity *metacity = GWD_THEME_METACITY (theme);1182 GWDThemeMetacity *metacity = GWD_THEME_METACITY (theme);
1175 GdkScreen *screen = gtk_widget_get_screen (frame->style_window_rgba);1183 GtkWidget *style_window = gwd_theme_get_style_window (theme);
1184 GdkScreen *screen = gtk_widget_get_screen (style_window);
1176 MetaStyleInfo *style_info = meta_theme_create_style_info (screen, NULL);1185 MetaStyleInfo *style_info = meta_theme_create_style_info (screen, NULL);
1177 MetaFrameType frame_type = frame_type_from_string (frame->type);1186 MetaFrameType frame_type = frame_type_from_string (frame->type);
1178 MetaFrameBorders borders;1187 MetaFrameBorders borders;
@@ -1414,7 +1423,8 @@
1414 decor_frame_t *frame)1423 decor_frame_t *frame)
1415{1424{
1416 GWDThemeMetacity *metacity = GWD_THEME_METACITY (theme);1425 GWDThemeMetacity *metacity = GWD_THEME_METACITY (theme);
1417 GdkScreen *screen = gtk_widget_get_screen (frame->style_window_rgba);1426 GtkWidget *style_window = gwd_theme_get_style_window (theme);
1427 GdkScreen *screen = gtk_widget_get_screen (style_window);
1418 MetaStyleInfo *style_info = meta_theme_create_style_info (screen, NULL);1428 MetaStyleInfo *style_info = meta_theme_create_style_info (screen, NULL);
1419 PangoFontDescription *font_desc = meta_style_info_create_font_desc (style_info);1429 PangoFontDescription *font_desc = meta_style_info_create_font_desc (style_info);
1420 MetaFrameType type = frame_type_from_string (frame->type);1430 MetaFrameType type = frame_type_from_string (frame->type);
@@ -1436,6 +1446,7 @@
1436 object_class->constructed = gwd_theme_metacity_constructed;1446 object_class->constructed = gwd_theme_metacity_constructed;
1437 object_class->dispose = gwd_theme_metacity_dispose;1447 object_class->dispose = gwd_theme_metacity_dispose;
14381448
1449 theme_class->style_updated = gwd_theme_metacity_style_updated;
1439 theme_class->draw_window_decoration = gwd_theme_metacity_draw_window_decoration;1450 theme_class->draw_window_decoration = gwd_theme_metacity_draw_window_decoration;
1440 theme_class->calc_decoration_size = gwd_theme_metacity_calc_decoration_size;1451 theme_class->calc_decoration_size = gwd_theme_metacity_calc_decoration_size;
1441 theme_class->update_border_extents = gwd_theme_metacity_update_border_extents;1452 theme_class->update_border_extents = gwd_theme_metacity_update_border_extents;
14421453
=== modified file 'gtk/window-decorator/gwd-theme.c'
--- gtk/window-decorator/gwd-theme.c 2016-06-09 14:58:49 +0000
+++ gtk/window-decorator/gwd-theme.c 2016-06-09 14:58:49 +0000
@@ -32,6 +32,8 @@
32 GWDSettings *settings;32 GWDSettings *settings;
3333
34 PangoFontDescription *titlebar_font;34 PangoFontDescription *titlebar_font;
35
36 GtkWidget *style_window;
35} GWDThemePrivate;37} GWDThemePrivate;
3638
37enum39enum
@@ -48,6 +50,59 @@
48G_DEFINE_TYPE_WITH_PRIVATE (GWDTheme, gwd_theme, G_TYPE_OBJECT)50G_DEFINE_TYPE_WITH_PRIVATE (GWDTheme, gwd_theme, G_TYPE_OBJECT)
4951
50static void52static void
53frames_update_pango_contexts (gpointer key,
54 gpointer value,
55 gpointer user_data)
56{
57 decor_frame_t *frame = (decor_frame_t *) value;
58 GdkDisplay *display = gdk_display_get_default ();
59 GdkScreen *screen = gdk_display_get_default_screen (display);
60 gdouble dpi = gdk_screen_get_resolution (screen);
61
62 if (frame->pango_context == NULL)
63 return;
64
65 /* FIXME: PangoContext created by gtk_widget_create_pango_context is not
66 * automatically updated. Resolution is not only thing that can change...
67 */
68 pango_cairo_context_set_resolution (frame->pango_context, dpi);
69}
70
71static void
72style_updated_cb (GtkWidget *widget,
73 GWDTheme *theme)
74{
75 gwd_frames_foreach (frames_update_pango_contexts, NULL);
76
77 GWD_THEME_GET_CLASS (theme)->style_updated (theme);
78
79 decorations_changed (wnck_screen_get_default ());
80}
81
82static void
83create_style_window (GWDTheme *theme)
84{
85 GWDThemePrivate *priv = gwd_theme_get_instance_private (theme);
86 GdkScreen *screen = gdk_screen_get_default ();
87 GdkVisual *visual = gdk_screen_get_rgba_visual (screen);
88 GtkWindow *window;
89
90 priv->style_window = gtk_window_new (GTK_WINDOW_POPUP);
91 window = GTK_WINDOW (priv->style_window);
92
93 if (visual)
94 gtk_widget_set_visual (priv->style_window, visual);
95
96 gtk_window_move (window, -100, -100);
97 gtk_window_resize (window, 1, 1);
98
99 gtk_widget_show (priv->style_window);
100
101 g_signal_connect (priv->style_window, "style-updated",
102 G_CALLBACK (style_updated_cb), theme);
103}
104
105static void
51gwd_theme_constructed (GObject *object)106gwd_theme_constructed (GObject *object)
52{107{
53 GWDTheme *theme = GWD_THEME (object);108 GWDTheme *theme = GWD_THEME (object);
@@ -55,6 +110,7 @@
55 G_OBJECT_CLASS (gwd_theme_parent_class)->constructed (object);110 G_OBJECT_CLASS (gwd_theme_parent_class)->constructed (object);
56111
57 gwd_theme_update_titlebar_font (theme);112 gwd_theme_update_titlebar_font (theme);
113 create_style_window (theme);
58}114}
59115
60static void116static void
@@ -68,6 +124,8 @@
68 pango_font_description_free (priv->titlebar_font);124 pango_font_description_free (priv->titlebar_font);
69 priv->titlebar_font = NULL;125 priv->titlebar_font = NULL;
70126
127 g_clear_pointer (&priv->style_window, gtk_widget_destroy);
128
71 G_OBJECT_CLASS (gwd_theme_parent_class)->dispose (object);129 G_OBJECT_CLASS (gwd_theme_parent_class)->dispose (object);
72}130}
73131
@@ -112,6 +170,11 @@
112}170}
113171
114static void172static void
173gwd_theme_real_style_updated (GWDTheme *theme)
174{
175}
176
177static void
115gwd_theme_real_get_shadow (GWDTheme *theme,178gwd_theme_real_get_shadow (GWDTheme *theme,
116 decor_frame_t *frame,179 decor_frame_t *frame,
117 decor_shadow_options_t *options,180 decor_shadow_options_t *options,
@@ -205,6 +268,7 @@
205 object_class->get_property = gwd_theme_get_property;268 object_class->get_property = gwd_theme_get_property;
206 object_class->set_property = gwd_theme_set_property;269 object_class->set_property = gwd_theme_set_property;
207270
271 theme_class->style_updated = gwd_theme_real_style_updated;
208 theme_class->get_shadow = gwd_theme_real_get_shadow;272 theme_class->get_shadow = gwd_theme_real_get_shadow;
209 theme_class->draw_window_decoration = gwd_theme_real_draw_window_decoration;273 theme_class->draw_window_decoration = gwd_theme_real_draw_window_decoration;
210 theme_class->calc_decoration_size = gwd_theme_real_calc_decoration_size;274 theme_class->calc_decoration_size = gwd_theme_real_calc_decoration_size;
@@ -269,6 +333,14 @@
269 return priv->settings;333 return priv->settings;
270}334}
271335
336GtkWidget *
337gwd_theme_get_style_window (GWDTheme *theme)
338{
339 GWDThemePrivate *priv = gwd_theme_get_instance_private (theme);
340
341 return priv->style_window;
342}
343
272void344void
273gwd_theme_get_shadow (GWDTheme *theme,345gwd_theme_get_shadow (GWDTheme *theme,
274 decor_frame_t *frame,346 decor_frame_t *frame,
@@ -360,7 +432,7 @@
360{432{
361 PangoFontDescription *font_desc = NULL;433 PangoFontDescription *font_desc = NULL;
362 GWDThemePrivate *priv = gwd_theme_get_instance_private (theme);434 GWDThemePrivate *priv = gwd_theme_get_instance_private (theme);
363 GtkStyleContext *context = gtk_widget_get_style_context (frame->style_window_rgba);435 GtkStyleContext *context = gtk_widget_get_style_context (priv->style_window);
364436
365 /* Check if Metacity or Cairo will create titlebar font */437 /* Check if Metacity or Cairo will create titlebar font */
366 font_desc = GWD_THEME_GET_CLASS (theme)->get_titlebar_font (theme, frame);438 font_desc = GWD_THEME_GET_CLASS (theme)->get_titlebar_font (theme, frame);
367439
=== modified file 'gtk/window-decorator/gwd-theme.h'
--- gtk/window-decorator/gwd-theme.h 2016-06-09 14:58:49 +0000
+++ gtk/window-decorator/gwd-theme.h 2016-06-09 14:58:49 +0000
@@ -22,7 +22,7 @@
2222
23#include <decoration.h>23#include <decoration.h>
24#include <glib-object.h>24#include <glib-object.h>
25#include <pango/pango.h>25#include <gtk/gtk.h>
2626
27G_BEGIN_DECLS27G_BEGIN_DECLS
2828
@@ -37,6 +37,8 @@
37{37{
38 GObjectClass parent_class;38 GObjectClass parent_class;
3939
40 void (* style_updated) (GWDTheme *theme);
41
40 void (* get_shadow) (GWDTheme *theme,42 void (* get_shadow) (GWDTheme *theme,
41 decor_frame_t *frame,43 decor_frame_t *frame,
42 decor_shadow_options_t *options,44 decor_shadow_options_t *options,
@@ -97,6 +99,9 @@
97GWDSettings *99GWDSettings *
98gwd_theme_get_settings (GWDTheme *theme);100gwd_theme_get_settings (GWDTheme *theme);
99101
102GtkWidget *
103gwd_theme_get_style_window (GWDTheme *theme);
104
100void105void
101gwd_theme_get_shadow (GWDTheme *theme,106gwd_theme_get_shadow (GWDTheme *theme,
102 decor_frame_t *frame,107 decor_frame_t *frame,
103108
=== modified file 'gtk/window-decorator/switcher.c'
--- gtk/window-decorator/switcher.c 2016-06-09 14:58:49 +0000
+++ gtk/window-decorator/switcher.c 2016-06-09 14:58:49 +0000
@@ -30,18 +30,20 @@
30static void30static void
31decor_update_switcher_property (decor_t *d)31decor_update_switcher_property (decor_t *d)
32{32{
33 GdkDisplay *display = gdk_display_get_default ();
34 Display *xdisplay = gdk_x11_display_get_xdisplay (display);
35 GtkWidget *style_window = gwd_theme_get_style_window (gwd_theme);
36 GtkStyleContext *context = gtk_widget_get_style_context (style_window);
33 long *data;37 long *data;
34 Display *xdisplay = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
35 gint nQuad;38 gint nQuad;
36 decor_quad_t quads[N_QUADS_MAX];39 decor_quad_t quads[N_QUADS_MAX];
37 unsigned int nOffset = 1;40 unsigned int nOffset = 1;
38 unsigned int frame_type = populate_frame_type (d);41 unsigned int frame_type = populate_frame_type (d);
39 unsigned int frame_state = populate_frame_state (d);42 unsigned int frame_state = populate_frame_state (d);
40 unsigned int frame_actions = populate_frame_actions (d);43 unsigned int frame_actions = populate_frame_actions (d);
41 GtkStyleContext *context;
42 GdkRGBA fg;44 GdkRGBA fg;
43 long fgColor[4];45 long fgColor[4];
44 46
45 nQuad = decor_set_lSrStSbX_window_quads (quads, &d->frame->window_context_active,47 nQuad = decor_set_lSrStSbX_window_quads (quads, &d->frame->window_context_active,
46 &d->border_layout,48 &d->border_layout,
47 d->border_layout.top.x2 -49 d->border_layout.top.x2 -
@@ -56,8 +58,6 @@
56 &d->frame->win_extents, &d->frame->win_extents,58 &d->frame->win_extents, &d->frame->win_extents,
57 0, 0, quads, nQuad, frame_type, frame_state, frame_actions);59 0, 0, quads, nQuad, frame_type, frame_state, frame_actions);
5860
59 context = gtk_widget_get_style_context (d->frame->style_window_rgba);
60
61 gtk_style_context_save (context);61 gtk_style_context_save (context);
62 gtk_style_context_set_state (context, GTK_STATE_FLAG_NORMAL);62 gtk_style_context_set_state (context, GTK_STATE_FLAG_NORMAL);
63 gtk_style_context_get_color (context, GTK_STATE_FLAG_NORMAL, &fg);63 gtk_style_context_get_color (context, GTK_STATE_FLAG_NORMAL, &fg);
@@ -112,7 +112,6 @@
112 switcher_label = gtk_label_new ("");112 switcher_label = gtk_label_new ("");
113 switcher_label_obj = gtk_widget_get_accessible (switcher_label);113 switcher_label_obj = gtk_widget_get_accessible (switcher_label);
114 atk_object_set_role (switcher_label_obj, ATK_ROLE_STATUSBAR);114 atk_object_set_role (switcher_label_obj, ATK_ROLE_STATUSBAR);
115 gtk_container_add (GTK_CONTAINER (frame->style_window_rgba), switcher_label);
116115
117 return frame;116 return frame;
118}117}
@@ -127,9 +126,11 @@
127static void126static void
128draw_switcher_background (decor_t *d)127draw_switcher_background (decor_t *d)
129{128{
130 Display *xdisplay = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());129 GdkDisplay *display = gdk_display_get_default ();
130 Display *xdisplay = gdk_x11_display_get_xdisplay (display);
131 GtkWidget *style_window = gwd_theme_get_style_window (gwd_theme);
132 GtkStyleContext *context = gtk_widget_get_style_context (style_window);
131 cairo_t *cr;133 cairo_t *cr;
132 GtkStyleContext *context;
133 GdkRGBA bg, fg;134 GdkRGBA bg, fg;
134 decor_color_t color;135 decor_color_t color;
135 double alpha = SWITCHER_ALPHA / 65535.0;136 double alpha = SWITCHER_ALPHA / 65535.0;
@@ -141,8 +142,6 @@
141 if (!d->buffer_surface)142 if (!d->buffer_surface)
142 return;143 return;
143144
144 context = gtk_widget_get_style_context (d->frame->style_window_rgba);
145
146 gtk_style_context_save (context);145 gtk_style_context_save (context);
147 gtk_style_context_set_state (context, GTK_STATE_FLAG_NORMAL);146 gtk_style_context_set_state (context, GTK_STATE_FLAG_NORMAL);
148 gtk_style_context_get_background_color (context, GTK_STATE_FLAG_NORMAL, &bg);147 gtk_style_context_get_background_color (context, GTK_STATE_FLAG_NORMAL, &bg);
@@ -329,16 +328,15 @@
329static void328static void
330draw_switcher_foreground (decor_t *d)329draw_switcher_foreground (decor_t *d)
331{330{
332 cairo_t *cr;331 GtkWidget *style_window = gwd_theme_get_style_window (gwd_theme);
333 GtkStyleContext *context;332 GtkStyleContext *context = gtk_widget_get_style_context (style_window);
333 cairo_t *cr;
334 GdkRGBA bg, fg;334 GdkRGBA bg, fg;
335 double alpha = SWITCHER_ALPHA / 65535.0;335 double alpha = SWITCHER_ALPHA / 65535.0;
336336
337 if (!d->surface || !d->buffer_surface)337 if (!d->surface || !d->buffer_surface)
338 return;338 return;
339339
340 context = gtk_widget_get_style_context (d->frame->style_window_rgba);
341
342 gtk_style_context_save (context);340 gtk_style_context_save (context);
343 gtk_style_context_set_state (context, GTK_STATE_FLAG_NORMAL);341 gtk_style_context_set_state (context, GTK_STATE_FLAG_NORMAL);
344 gtk_style_context_get_background_color (context, GTK_STATE_FLAG_NORMAL, &bg);342 gtk_style_context_get_background_color (context, GTK_STATE_FLAG_NORMAL, &bg);
@@ -436,24 +434,23 @@
436 return d;434 return d;
437}435}
438436
439
440gboolean437gboolean
441update_switcher_window (Window popup,438update_switcher_window (Window popup,
442 Window selected)439 Window selected)
443{440{
441 GdkDisplay *display = gdk_display_get_default ();
442 Display *xdisplay = gdk_x11_display_get_xdisplay (display);
443 GtkWidget *style_window = gwd_theme_get_style_window (gwd_theme);
444 decor_t *d = switcher_window;444 decor_t *d = switcher_window;
445 cairo_surface_t *surface, *buffer_surface = NULL;445 cairo_surface_t *surface, *buffer_surface = NULL;
446 unsigned int height, width = 0, border, depth;446 unsigned int height, width = 0, border, depth;
447 int x, y;447 int x, y;
448 Window root_return;448 Window root_return;
449 WnckWindow *selected_win;449 WnckWindow *selected_win;
450 Display *xdisplay;
451450
452 if (!d)451 if (!d)
453 d = switcher_window_opened (popup, selected);452 d = switcher_window_opened (popup, selected);
454453
455 xdisplay = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
456
457 /* FIXME: Thats a round-trip */454 /* FIXME: Thats a round-trip */
458 XGetGeometry (gdk_x11_get_default_xdisplay (), popup, &root_return,455 XGetGeometry (gdk_x11_get_default_xdisplay (), popup, &root_return,
459 &x, &y, &width, &height, &border, &depth);456 &x, &y, &width, &height, &border, &depth);
@@ -486,8 +483,8 @@
486 if (!d->layout)483 if (!d->layout)
487 {484 {
488 d->layout = pango_layout_new (d->frame->pango_context);485 d->layout = pango_layout_new (d->frame->pango_context);
489 if (d->layout)486
490 pango_layout_set_wrap (d->layout, PANGO_WRAP_CHAR);487 pango_layout_set_wrap (d->layout, PANGO_WRAP_CHAR);
491 }488 }
492489
493 if (d->layout)490 if (d->layout)
@@ -538,11 +535,11 @@
538 switcher_selected_window = selected;535 switcher_selected_window = selected;
539 }536 }
540537
541 surface = create_native_surface_and_wrap (width, height, d->frame->style_window_rgba);538 surface = create_native_surface_and_wrap (width, height, style_window);
542 if (!surface)539 if (!surface)
543 return FALSE;540 return FALSE;
544541
545 buffer_surface = create_surface (width, height, d->frame->style_window_rgba);542 buffer_surface = create_surface (width, height, style_window);
546 if (!buffer_surface)543 if (!buffer_surface)
547 {544 {
548 cairo_surface_destroy (surface);545 cairo_surface_destroy (surface);
549546
=== modified file 'gtk/window-decorator/wnck.c'
--- gtk/window-decorator/wnck.c 2016-06-09 14:58:49 +0000
+++ gtk/window-decorator/wnck.c 2016-06-09 14:58:49 +0000
@@ -170,6 +170,16 @@
170}170}
171171
172static void172static void
173update_frames_titlebar_fonts (gpointer key,
174 gpointer value,
175 gpointer user_data)
176{
177 decor_frame_t *frame = (decor_frame_t *) value;
178
179 frame_update_titlebar_font (frame);
180}
181
182static void
173update_frames_border_extents (gpointer key,183update_frames_border_extents (gpointer key,
174 gpointer value,184 gpointer value,
175 gpointer user_data)185 gpointer user_data)

Subscribers

People subscribed via source and target branches