diff options
-rw-r--r-- | platform/x11/os_x11.cpp | 31 |
1 files changed, 11 insertions, 20 deletions
diff --git a/platform/x11/os_x11.cpp b/platform/x11/os_x11.cpp index 95b30423f0..1d00796ae9 100644 --- a/platform/x11/os_x11.cpp +++ b/platform/x11/os_x11.cpp @@ -1210,20 +1210,17 @@ void OS_X11::swap_buffers() { void OS_X11::set_icon(const Image& p_icon) { - - //does not work, if anyone knows why, please fix if (!p_icon.empty()) { - Image img=p_icon; img.convert(Image::FORMAT_RGBA); - int w = img.get_width(); int h = img.get_height(); - Vector<long> pd; + // We're using size_t to have wordsize (32Bit build -> 32 Bits, 64 Bit build -> 64 Bits + Vector<size_t> pd; - pd.resize((2+w*h)*sizeof(long)); + pd.resize(2+w*h); print_line("***** SET ICON ***** "+itos(w)+" "+itos(h)); @@ -1232,23 +1229,17 @@ void OS_X11::set_icon(const Image& p_icon) { DVector<uint8_t>::Read r = img.get_data().read(); - long *wr=(long*)&pd[2]; + size_t * wr = &pd[2]; + uint8_t const * pr = r.ptr(); for(int i=0;i<w*h;i++) { - - uint32_t v=0; - v|=r[i*4+3]; - v<<=8; - v|=r[i*4+0]; - v<<=8; - v|=r[i*4+1]; - v<<=8; - v|=r[i*4+2]; - wr[i]=v; + size_t v=0; + // A R G B + v|=pr[3] << 24 | pr[0] << 16 | pr[1] << 8 | pr[2]; + *wr++=v; + pr += 4; } - - XChangeProperty(x11_display, x11_window, net_wm_icon, XA_CARDINAL, 32, PropModeReplace, (unsigned char *) pd.ptr(), - (2+w*h)); + XChangeProperty(x11_display, x11_window, net_wm_icon, XA_CARDINAL, 32, PropModeReplace, (uint8_t*) pd.ptr(), pd.size()); } else { XDeleteProperty(x11_display, x11_window, net_wm_icon); } |