diff options
Diffstat (limited to 'xwayland/window-manager.c')
-rw-r--r-- | xwayland/window-manager.c | 88 |
1 files changed, 2 insertions, 86 deletions
diff --git a/xwayland/window-manager.c b/xwayland/window-manager.c index 62087941..06370b70 100644 --- a/xwayland/window-manager.c +++ b/xwayland/window-manager.c @@ -138,8 +138,6 @@ struct weston_wm_window { xcb_window_t frame_id; struct frame *frame; cairo_surface_t *cairo_surface; - int icon; - cairo_surface_t *icon_surface; /* A temporary slot, to be passed to frame on creation */ uint32_t surface_id; struct weston_surface *surface; struct weston_desktop_xwayland_surface *shsurf; @@ -475,7 +473,6 @@ weston_wm_window_read_properties(struct weston_wm_window *window) { wm->atom.net_wm_state, TYPE_NET_WM_STATE, NULL }, { wm->atom.net_wm_window_type, XCB_ATOM_ATOM, F(type) }, { wm->atom.net_wm_name, XCB_ATOM_STRING, F(name) }, - { wm->atom.net_wm_icon, XCB_ATOM_CARDINAL, F(icon) }, { wm->atom.net_wm_pid, XCB_ATOM_CARDINAL, F(pid) }, { wm->atom.motif_wm_hints, TYPE_MOTIF_WM_HINTS, NULL }, { wm->atom.wm_client_machine, XCB_ATOM_WM_CLIENT_MACHINE, F(machine) }, @@ -976,10 +973,8 @@ weston_wm_window_create_frame(struct weston_wm_window *window) buttons |= FRAME_BUTTON_MAXIMIZE; window->frame = frame_create(window->wm->theme, - window->width, window->height, - buttons, window->name, - window->icon_surface); - window->icon_surface = NULL; + window->width, window->height, + buttons, window->name, NULL); frame_resize_inside(window->frame, window->width, window->height); weston_wm_window_get_frame_size(window, &width, &height); @@ -1319,70 +1314,6 @@ weston_wm_window_schedule_repaint(struct weston_wm_window *window) } static void -handle_icon_surface_destroy(void *data) -{ - free(data); -} - -static void -weston_wm_handle_icon(struct weston_wm *wm, struct weston_wm_window *window) -{ - xcb_get_property_reply_t *reply; - xcb_get_property_cookie_t cookie; - uint32_t length; - uint32_t *data, width, height; - cairo_surface_t *new_surface; - - /* TODO: icons don’t have any specified order, we should pick the - * closest one to the target dimension instead of the first one. */ - - cookie = xcb_get_property(wm->conn, 0, window->id, - wm->atom.net_wm_icon, XCB_ATOM_ANY, 0, - UINT32_MAX); - reply = xcb_get_property_reply(wm->conn, cookie, NULL); - length = xcb_get_property_value_length(reply); - - /* This is in 32-bit words, not in bytes. */ - if (length < 2) { - free(reply); - return; - } - - data = xcb_get_property_value(reply); - width = *data++; - height = *data++; - - /* Some checks against malformed input. */ - if (width == 0 || height == 0 || length < 2 + width * height) { - free(reply); - return; - } - - new_surface = - cairo_image_surface_create_for_data((unsigned char *)data, - CAIRO_FORMAT_ARGB32, - width, height, width * 4); - - /* Bail out in case anything wrong happened during surface creation. */ - if (cairo_surface_status(new_surface) != CAIRO_STATUS_SUCCESS) { - cairo_surface_destroy(new_surface); - free(reply); - return; - } - - if (window->icon_surface) - cairo_surface_destroy(window->icon_surface); - - cairo_surface_set_user_data(new_surface, NULL, reply, - &handle_icon_surface_destroy); - - if (window->frame) - frame_set_icon(window->frame, new_surface); - else /* We don’t have a frame yet */ - window->icon_surface = new_surface; -} - -static void weston_wm_handle_property_notify(struct weston_wm *wm, xcb_generic_event_t *event) { xcb_property_notify_event_t *property_notify = @@ -1402,19 +1333,6 @@ weston_wm_handle_property_notify(struct weston_wm *wm, xcb_generic_event_t *even read_and_dump_property(wm, property_notify->window, property_notify->atom); - if (property_notify->atom == wm->atom.net_wm_icon) { - if (property_notify->state != XCB_PROPERTY_DELETE) { - weston_wm_handle_icon(wm, window); - } else { - if (window->frame) - frame_set_icon(window->frame, NULL); - if (window->icon_surface) - cairo_surface_destroy(window->icon_surface); - window->icon_surface = NULL; - } - weston_wm_window_schedule_repaint(window); - } - if (property_notify->atom == wm->atom.net_wm_name || property_notify->atom == XCB_ATOM_WM_NAME) weston_wm_window_schedule_repaint(window); @@ -1475,8 +1393,6 @@ weston_wm_window_destroy(struct weston_wm_window *window) wl_event_source_remove(window->repaint_source); if (window->cairo_surface) cairo_surface_destroy(window->cairo_surface); - if (window->icon_surface) - cairo_surface_destroy(window->icon_surface); if (window->frame_id) { xcb_reparent_window(wm->conn, window->id, wm->wm_window, 0, 0); |