aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_netwm.c
diff options
context:
space:
mode:
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.c51
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
664EAPI void
665ecore_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
664EAPI Eina_Bool 715EAPI Eina_Bool
665ecore_x_netwm_icons_get(Ecore_X_Window win, 716ecore_x_netwm_icons_get(Ecore_X_Window win,
666 Ecore_X_Icon **icon, 717 Ecore_X_Icon **icon,