Previously geometry was changed to leave space for titlebar if a frame
has only buttons but no title. This patch fixes theme_render_frame to
avoid transparent titlebar.

Signed-off-by: Boyan Ding <[email protected]>
---
 shared/cairo-util.c | 8 +++++---
 shared/cairo-util.h | 5 ++++-
 shared/frame.c      | 2 +-
 3 files changed, 10 insertions(+), 5 deletions(-)

diff --git a/shared/cairo-util.c b/shared/cairo-util.c
index 2a33249..26286c5 100644
--- a/shared/cairo-util.c
+++ b/shared/cairo-util.c
@@ -28,6 +28,7 @@
 #include <string.h>
 #include <stdio.h>
 #include <math.h>
+#include <wayland-util.h>
 #include <cairo.h>
 #include "cairo-util.h"
 
@@ -413,7 +414,8 @@ theme_destroy(struct theme *t)
 void
 theme_render_frame(struct theme *t,
                   cairo_t *cr, int width, int height,
-                  const char *title, uint32_t flags)
+                  const char *title, struct wl_list *buttons,
+                  uint32_t flags)
 {
        cairo_text_extents_t extents;
        cairo_font_extents_t font_extents;
@@ -439,7 +441,7 @@ theme_render_frame(struct theme *t,
        else
                source = t->inactive_frame;
 
-       if (title)
+       if (title || !wl_list_empty(buttons))
                top_margin = t->titlebar_height;
        else
                top_margin = t->width;
@@ -449,7 +451,7 @@ theme_render_frame(struct theme *t,
                    width - margin * 2, height - margin * 2,
                    t->width, top_margin);
 
-       if (title) {
+       if (title || !wl_list_empty(buttons)) {
                cairo_rectangle (cr, margin + t->width, margin,
                                 width - (margin + t->width) * 2,
                                 t->titlebar_height - t->width);
diff --git a/shared/cairo-util.h b/shared/cairo-util.h
index 4493b0d..fb25c34 100644
--- a/shared/cairo-util.h
+++ b/shared/cairo-util.h
@@ -26,6 +26,8 @@
 #include <stdint.h>
 #include <cairo.h>
 
+#include <wayland-util.h>
+
 void
 surface_flush_device(cairo_surface_t *surface);
 
@@ -69,7 +71,8 @@ theme_set_background_source(struct theme *t, cairo_t *cr, 
uint32_t flags);
 void
 theme_render_frame(struct theme *t, 
                   cairo_t *cr, int width, int height,
-                  const char *title, uint32_t flags);
+                  const char *title, struct wl_list *buttons,
+                  uint32_t flags);
 
 enum theme_location {
        THEME_LOCATION_INTERIOR = 0,
diff --git a/shared/frame.c b/shared/frame.c
index 53f3f5f..5ea0e12 100644
--- a/shared/frame.c
+++ b/shared/frame.c
@@ -853,7 +853,7 @@ frame_repaint(struct frame *frame, cairo_t *cr)
 
        cairo_save(cr);
        theme_render_frame(frame->theme, cr, frame->width, frame->height,
-                          frame->title, flags);
+                          frame->title, &frame->buttons, flags);
        cairo_restore(cr);
 
        wl_list_for_each(button, &frame->buttons, link)
-- 
2.0.2


_______________________________________________
wayland-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to