fix titlebar button icons: XPM hex color parser off-by-one, remove output destroy listener
This commit is contained in:
parent
8c65d3fa88
commit
f7a3c735a7
|
|
@ -734,12 +734,17 @@ wl_frame_paint_button(WCoreWindow *button, WTexture *texture,
|
|||
{
|
||||
(void)texture; (void)image;
|
||||
WFrameWindow *fwin = (WFrameWindow *)button->descriptor.parent;
|
||||
if (!fwin || !fwin->core)
|
||||
if (!fwin || !fwin->core) {
|
||||
wwarning("btn: no fwin");
|
||||
return;
|
||||
}
|
||||
wwarning("btn: paint button=%p is_right=%d", (void*)button, button == fwin->right_button ? 1 : 0);
|
||||
|
||||
struct wl_frame_buf *btn_fb = frame_buf_find(button->window);
|
||||
if (!btn_fb || !btn_fb->image)
|
||||
if (!btn_fb || !btn_fb->image) {
|
||||
wwarning("btn: no fb or no image (fb=%p)", (void*)btn_fb);
|
||||
return;
|
||||
}
|
||||
|
||||
int bw = btn_fb->width;
|
||||
int bh = btn_fb->height;
|
||||
|
|
@ -750,14 +755,18 @@ wl_frame_paint_button(WCoreWindow *button, WTexture *texture,
|
|||
wl_state.btn_close_img = RGetImageFromXPMData(
|
||||
button->screen_ptr->rcontext, PRED_CLOSE_XPM);
|
||||
icon = wl_state.btn_close_img;
|
||||
wwarning("btn: close img=%p", (void*)icon);
|
||||
} else if (button == fwin->left_button) {
|
||||
if (!wl_state.btn_iconify_img)
|
||||
wl_state.btn_iconify_img = RGetImageFromXPMData(
|
||||
button->screen_ptr->rcontext, PRED_ICONIFY_XPM);
|
||||
icon = wl_state.btn_iconify_img;
|
||||
wwarning("btn: iconify img=%p", (void*)icon);
|
||||
}
|
||||
if (!icon)
|
||||
if (!icon) {
|
||||
wwarning("btn: no icon!");
|
||||
return;
|
||||
}
|
||||
|
||||
struct wl_frame_buf *tb_fb = fwin->titlebar ? frame_buf_find(fwin->titlebar->window) : NULL;
|
||||
uint32_t bg_pixel = 0xFF333333;
|
||||
|
|
|
|||
|
|
@ -38,16 +38,10 @@ handle_output_frame(struct wl_listener *listener, void *data)
|
|||
}
|
||||
}
|
||||
|
||||
#include <wlr/util/log.h>
|
||||
|
||||
static void handle_output_destroy(struct wl_listener *listener, void *data)
|
||||
{
|
||||
(void)listener; (void)data;
|
||||
wl_list_remove(&wl_state.output_frame_listener.link);
|
||||
wl_state.scene_output = NULL;
|
||||
wl_state.output = NULL;
|
||||
}
|
||||
|
||||
/* wlr_output_finish asserts that destroy.listener_list is empty,
|
||||
* so we CANNOT listen to output->events.destroy. Instead the
|
||||
* frame listener is cleaned up by wlr_scene_output_destroy which
|
||||
* runs before wlr_output_finish in the teardown chain. */
|
||||
void
|
||||
handle_backend_new_output(struct wl_listener *listener, void *data)
|
||||
{
|
||||
|
|
@ -98,8 +92,6 @@ handle_backend_new_output(struct wl_listener *listener, void *data)
|
|||
wl_state.scene_output = wlr_scene_output_create(wl_state.scene, output);
|
||||
wl_state.output_frame_listener.notify = handle_output_frame;
|
||||
wl_signal_add(&output->events.frame, &wl_state.output_frame_listener);
|
||||
wl_state.output_destroy_listener.notify = handle_output_destroy;
|
||||
wl_signal_add(&output->events.destroy, &wl_state.output_destroy_listener);
|
||||
wwarning("wl_backend: scene output created for %s (%dx%d)",
|
||||
output->name, output->width, output->height);
|
||||
|
||||
|
|
|
|||
|
|
@ -213,7 +213,6 @@ struct wl_compositor_state {
|
|||
struct wlr_scene_output *scene_output;
|
||||
struct wl_listener backend_new_output_listener;
|
||||
struct wl_listener output_frame_listener;
|
||||
struct wl_listener output_destroy_listener;
|
||||
char socket_name[64]; /* Phase 34: e.g. "wayland-0" */
|
||||
int started; /* non-zero after successful display_open */
|
||||
/* Self-pipe for async-signal-safe shutdown: signal handler writes to [1],
|
||||
|
|
|
|||
|
|
@ -126,8 +126,8 @@ RImage *RGetImageFromXPMData(RContext * context, char **data)
|
|||
|
||||
k = 0;
|
||||
j++;
|
||||
while (data[line][j + k] != 0)
|
||||
k++;
|
||||
while (data[line][j + k] != 0 && data[line][j + k] != '"')
|
||||
k++;
|
||||
if (k == 6) {
|
||||
if (sscanf(&(data[line][j]), "%2x%2x%2x", &red, &green, &blue) != 3)
|
||||
goto bad_format;
|
||||
|
|
|
|||
Loading…
Reference in New Issue