From 2bc88f6552009187c4a91ad9d32d098ac31003ba Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Tue, 3 Jun 2003 20:31:34 +0000 Subject: [PATCH] modifications to keep up with libobrender2 --- openbox/event.c | 7 ++++++- openbox/frame.c | 28 +++++++++++++++++----------- openbox/frame.h | 1 + openbox/framerender.c | 7 ++++--- openbox/popup.c | 9 ++++++--- 5 files changed, 34 insertions(+), 18 deletions(-) diff --git a/openbox/event.c b/openbox/event.c index cef0ae08..038ff08b 100644 --- a/openbox/event.c +++ b/openbox/event.c @@ -576,22 +576,27 @@ static void event_handle_client(Client *client, XEvent *e) case Context_Maximize: client->frame->max_press = (e->type == ButtonPress); framerender_frame(client->frame); + RrPaint(client->frame->s_max, 1); break; case Context_Close: client->frame->close_press = (e->type == ButtonPress); framerender_frame(client->frame); + RrPaint(client->frame->s_close, 1); break; case Context_Iconify: client->frame->iconify_press = (e->type == ButtonPress); framerender_frame(client->frame); + RrPaint(client->frame->s_iconify, 1); break; case Context_AllDesktops: client->frame->desk_press = (e->type == ButtonPress); framerender_frame(client->frame); - break; + RrPaint(client->frame->s_desk, 1); + break; case Context_Shade: client->frame->shade_press = (e->type == ButtonPress); framerender_frame(client->frame); + RrPaint(client->frame->s_shade, 1); break; default: /* nothing changes with clicks for any other contexts */ diff --git a/openbox/frame.c b/openbox/frame.c index ebd88d49..b85b1089 100644 --- a/openbox/frame.c +++ b/openbox/frame.c @@ -4,7 +4,8 @@ #include "framerender.h" #include "render2/theme.h" -#define PLATE_EVENTMASK (SubstructureRedirectMask | ButtonPressMask) +#define PLATE_EVENTMASK (SubstructureRedirectMask | ButtonPressMask | \ + ExposureMask) #define FRAME_EVENTMASK (EnterWindowMask | LeaveWindowMask | \ ButtonPressMask | ButtonReleaseMask | ExposureMask) #define ELEMENT_EVENTMASK (ButtonPressMask | ButtonReleaseMask | \ @@ -45,10 +46,8 @@ Frame *frame_new() attrib.override_redirect = TRUE; self->window = createWindow(ob_root, mask, &attrib); - mask = 0; - self->plate = createWindow(self->window, mask, &attrib); - self->s_frame = RrSurfaceNew(ob_render_inst, 0, self->window, 0); + self->s_plate = RrSurfaceNewChild(0, self->s_frame, 0); self->s_title = RrSurfaceNewChild(0, self->s_frame, 0); self->s_label = RrSurfaceNewChild(0, self->s_title, 0); self->s_max = RrSurfaceNewChild(0, self->s_title, 0); @@ -61,6 +60,7 @@ Frame *frame_new() self->s_lgrip = RrSurfaceNewChild(0, self->s_handle, 0); self->s_rgrip = RrSurfaceNewChild(0, self->s_handle, 0); + self->plate = RrSurfaceWindow(self->s_plate); self->w_title = RrSurfaceWindow(self->s_title); self->w_label = RrSurfaceWindow(self->s_label); self->w_max = RrSurfaceWindow(self->s_max); @@ -91,7 +91,7 @@ Frame *frame_new() self->focused = FALSE; /* the other stuff is shown based on decor settings */ - XMapWindow(ob_display, self->plate); + RrSurfaceShow(self->s_plate); RrSurfaceShow(self->s_label); RrSurfaceShow(self->s_lgrip); RrSurfaceShow(self->s_rgrip); @@ -115,9 +115,9 @@ static void frame_free(Frame *self) RrSurfaceFree(self->s_max); RrSurfaceFree(self->s_label); RrSurfaceFree(self->s_title); + RrSurfaceFree(self->s_plate); RrSurfaceFree(self->s_frame); - XDestroyWindow(ob_display, self->plate); XDestroyWindow(ob_display, self->window); g_free(self); @@ -242,12 +242,14 @@ void frame_adjust_area(Frame *self, gboolean moved, gboolean resized) if (resized) { /* move and resize the plate */ - XMoveResizeWindow(ob_display, self->plate, - self->size.left, self->size.top, - self->client->area.width, - self->client->area.height); + RrSurfaceSetArea(self->s_plate, + self->size.left - self->cbwidth, + self->size.top - self->cbwidth, + self->client->area.width - self->cbwidth * 2, + self->client->area.height - self->cbwidth * 2); /* when the client has StaticGravity, it likes to move around. */ - XMoveWindow(ob_display, self->client->window, 0, 0); + XMoveWindow(ob_display, self->client->window, + self->cbwidth, self->cbwidth); } /* shading can change without being moved or resized */ @@ -282,22 +284,26 @@ void frame_adjust_area(Frame *self, gboolean moved, gboolean resized) void frame_adjust_state(Frame *self) { framerender_frame(self); + RrPaint(self->s_frame, 1); } void frame_adjust_focus(Frame *self, gboolean hilite) { self->focused = hilite; framerender_frame(self); + RrPaint(self->s_frame, 1); } void frame_adjust_title(Frame *self) { framerender_frame(self); + RrPaint(self->s_label, 1); } void frame_adjust_icon(Frame *self) { framerender_frame(self); + RrPaint(self->s_icon, 1); } void frame_grab_client(Frame *self, Client *client) diff --git a/openbox/frame.h b/openbox/frame.h index ccc799ec..2201daec 100644 --- a/openbox/frame.h +++ b/openbox/frame.h @@ -38,6 +38,7 @@ typedef struct Frame { Rect area; gboolean visible; + struct RrSurface *s_plate; struct RrSurface *s_frame; struct RrSurface *s_title; struct RrSurface *s_label; diff --git a/openbox/framerender.c b/openbox/framerender.c index 9df97782..5d22622a 100644 --- a/openbox/framerender.c +++ b/openbox/framerender.c @@ -9,12 +9,14 @@ void framerender_frame(Frame *self) /* XXX plate, client border */ if (self->client->decorations & Decor_Titlebar) { - struct RrSurface *t, *l, *m, *n, *i, *d, *s, *c; + struct RrSurface *t, *l, *p, *m, *n, *i, *d, *s, *c; t = (self->focused ? ob_theme->title_f : ob_theme->title); l = (self->focused ? ob_theme->label_f : ob_theme->label); + p = (self->focused ? + ob_theme->plate_f : ob_theme->plate); m = (self->focused ? (self->client->max_vert || self->client->max_horz ? ob_theme->max_p_f : (self->max_press ? @@ -50,6 +52,7 @@ void framerender_frame(Frame *self) RrSurfaceCopy(self->s_title, t); RrSurfaceCopy(self->s_label, l); + RrSurfaceCopy(self->s_plate, p); RrTextureSetText(self->s_label, 0, ob_theme->title_font, ob_theme->title_justify, @@ -96,6 +99,4 @@ void framerender_frame(Frame *self) RrSurfaceCopy(self->s_lgrip, g); RrSurfaceCopy(self->s_rgrip, g); } - /* XXX this could be more efficient */ - RrPaint(self->s_frame); } diff --git a/openbox/popup.c b/openbox/popup.c index 7b3edafe..6dab1082 100644 --- a/openbox/popup.c +++ b/openbox/popup.c @@ -91,7 +91,7 @@ void popup_size_to_string(Popup *self, char *text) int textw, texth; int iconw; - RrTextureSetText(self->s_text, 0, NULL, RR_LEFT, + RrTextureSetText(self->s_text, 0, ob_theme->title_font, RR_LEFT, &ob_theme->app_label_color_h, text); RrSurfaceMinSize(self->s_text, &textw, &texth); textw += ob_theme->bevel * 2; @@ -193,8 +193,11 @@ void popup_show(Popup *self, char *text, Icon *icon) if (!RrSurfaceVisible(self->s_bg)) { RrSurfaceShow(self->s_bg); stacking_raise(INTERNAL_AS_WINDOW(self)); - } else - RrPaint(self->s_bg); + } else { + RrPaint(self->s_text, 1); + if (self->hasicon) + RrPaint(self->s_icon, 1); + } } void popup_hide(Popup *self) -- 2.34.1