Skip to content

Commit

Permalink
x11: Set icon issue fix
Browse files Browse the repository at this point in the history
Signed-off-by: Vinzenz Feenstra <[email protected]>
  • Loading branch information
vinzenz committed Feb 14, 2014
1 parent c12a8e9 commit bfafcb4
Showing 1 changed file with 11 additions and 20 deletions.
31 changes: 11 additions & 20 deletions platform/x11/os_x11.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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));

Expand All @@ -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);
}
Expand Down

0 comments on commit bfafcb4

Please sign in to comment.