diff options
Diffstat (limited to 'libraries/ecore/src/lib/ecore_x/xlib/ecore_x_netwm.c')
-rw-r--r-- | libraries/ecore/src/lib/ecore_x/xlib/ecore_x_netwm.c | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_netwm.c b/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_netwm.c index 9fc428a..3076c3c 100644 --- a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_netwm.c +++ b/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_netwm.c | |||
@@ -661,6 +661,57 @@ ecore_x_netwm_strut_partial_get(Ecore_X_Window win, | |||
661 | return EINA_TRUE; | 661 | return EINA_TRUE; |
662 | } | 662 | } |
663 | 663 | ||
664 | EAPI void | ||
665 | ecore_x_netwm_icons_set(Ecore_X_Window win, | ||
666 | Ecore_X_Icon *icon, | ||
667 | int num) | ||
668 | { | ||
669 | unsigned int *data, *p, *p2; | ||
670 | unsigned int i, size, x, y; | ||
671 | |||
672 | LOGFN(__FILE__, __LINE__, __FUNCTION__); | ||
673 | size = 0; | ||
674 | for (i = 0; i < (unsigned int)num; i++) | ||
675 | { | ||
676 | size += 2 + (icon[i].width * icon[i].height); | ||
677 | } | ||
678 | data = malloc(size * sizeof(unsigned int)); | ||
679 | if (!data) return; | ||
680 | p = data; | ||
681 | for (i = 0; i < (unsigned int)num; i++) | ||
682 | { | ||
683 | p[0] = icon[i].width; | ||
684 | p[1] = icon[i].height; | ||
685 | p += 2; | ||
686 | p2 = icon[i].data; | ||
687 | for (y = 0; y < icon[i].height; y++) | ||
688 | { | ||
689 | for (x = 0; x < icon[i].width; x++) | ||
690 | { | ||
691 | unsigned int r, g, b, a; | ||
692 | |||
693 | a = (*p2 >> 24) & 0xff; | ||
694 | r = (*p2 >> 16) & 0xff; | ||
695 | g = (*p2 >> 8 ) & 0xff; | ||
696 | b = (*p2 ) & 0xff; | ||
697 | if ((a > 0) && (a < 255)) | ||
698 | { | ||
699 | // unpremul | ||
700 | r = (r * 255) / a; | ||
701 | g = (g * 255) / a; | ||
702 | b = (b * 255) / a; | ||
703 | } | ||
704 | *p = (a << 24) | (r << 16) | (g << 8) | b; | ||
705 | p++; | ||
706 | p2++; | ||
707 | } | ||
708 | } | ||
709 | } | ||
710 | ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_NET_WM_ICON, | ||
711 | data, size); | ||
712 | free(data); | ||
713 | } | ||
714 | |||
664 | EAPI Eina_Bool | 715 | EAPI Eina_Bool |
665 | ecore_x_netwm_icons_get(Ecore_X_Window win, | 716 | ecore_x_netwm_icons_get(Ecore_X_Window win, |
666 | Ecore_X_Icon **icon, | 717 | Ecore_X_Icon **icon, |