>From d0e2c27ca985f45faf78e95f0a31a27c23c51549 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?"Rodolfo=20Garc=C3=ADa=20Pe=C3=B1as=20(kix)"?= <[email protected]>
Date: Sun, 4 Mar 2012 14:54:45 +0100
Subject: [PATCH 5/8] WindowMaker: New function get_pixmap_icon_from_wm_hints

The new function get_pixmap_icon_from_wm_hints split the function wIconUpdate.
---
 src/icon.c |  112 +++++++++++++++++++++++++++++++----------------------------
 1 files changed, 59 insertions(+), 53 deletions(-)

diff --git a/src/icon.c b/src/icon.c
index a990be9..2b1272c 100644
--- a/src/icon.c
+++ b/src/icon.c
@@ -57,6 +57,7 @@ static void miniwindowMouseDown(WObjDescriptor * desc, XEvent 
* event);
 static void miniwindowDblClick(WObjDescriptor * desc, XEvent * event);
 
 void get_pixmap_icon_from_icon_win(WIcon *icon);
+int get_pixmap_icon_from_wm_hints(WScreen *scr, WWindow *wwin, WIcon *icon);
 /****** Notification Observers ******/
 
 static void appearanceObserver(void *self, WMNotification * notif)
@@ -553,7 +554,6 @@ void wIconSelect(WIcon * icon)
 void wIconUpdate(WIcon * icon)
 {
        WScreen *scr = icon->core->screen_ptr;
-       int title_height = WMFontHeight(scr->icon_title_font);
        WWindow *wwin = icon->owner;
 
        assert(scr->icon_tile != NULL);
@@ -573,59 +573,8 @@ void wIconUpdate(WIcon * icon)
                icon->pixmap = makeIcon(scr, wwin->net_icon_image, 
icon->show_title,
                                                icon->shadowed, 
icon->tile_type, icon->highlighted);
        } else if (wwin && wwin->wm_hints && (wwin->wm_hints->flags & 
IconPixmapHint)) {
-               int x, y;
-               unsigned int w, h;
-               Window jw;
-               int ji;
-               unsigned int ju, d;
-               Pixmap pixmap;
-
-               if (!XGetGeometry(dpy, wwin->wm_hints->icon_pixmap, &jw, &ji, 
&ji, &w, &h, &ju, &d)) {
-                       icon->owner->wm_hints->flags &= ~IconPixmapHint;
+               if (get_pixmap_icon_from_wm_hints(scr, wwin, icon))
                        goto user_icon;
-               }
-
-               pixmap = XCreatePixmap(dpy, icon->core->window, 
wPreferences.icon_size,
-                                      wPreferences.icon_size, scr->w_depth);
-               XSetClipMask(dpy, scr->copy_gc, None);
-               XCopyArea(dpy, scr->icon_tile_pixmap, pixmap, scr->copy_gc, 0, 
0,
-                         wPreferences.icon_size, wPreferences.icon_size, 0, 0);
-
-               if (w > wPreferences.icon_size)
-                       w = wPreferences.icon_size;
-               x = (wPreferences.icon_size - w) / 2;
-
-               if (icon->show_title && (title_height < 
wPreferences.icon_size)) {
-                       drawIconTitle(scr, pixmap, title_height);
-
-                       if (h > wPreferences.icon_size - title_height - 2) {
-                               h = wPreferences.icon_size - title_height - 2;
-                               y = title_height + 1;
-                       } else {
-                               y = (wPreferences.icon_size - h - title_height) 
/ 2 + title_height + 1;
-                       }
-               } else {
-                       if (w > wPreferences.icon_size)
-                               w = wPreferences.icon_size;
-                       y = (wPreferences.icon_size - h) / 2;
-               }
-
-               if (wwin->wm_hints->flags & IconMaskHint)
-                       XSetClipMask(dpy, scr->copy_gc, 
wwin->wm_hints->icon_mask);
-
-               XSetClipOrigin(dpy, scr->copy_gc, x, y);
-
-               if (d != scr->w_depth) {
-                       XSetForeground(dpy, scr->copy_gc, scr->black_pixel);
-                       XSetBackground(dpy, scr->copy_gc, scr->white_pixel);
-                       XCopyPlane(dpy, wwin->wm_hints->icon_pixmap, pixmap, 
scr->copy_gc, 0, 0, w, h, x, y, 1);
-               } else {
-                       XCopyArea(dpy, wwin->wm_hints->icon_pixmap, pixmap, 
scr->copy_gc, 0, 0, w, h, x, y);
-               }
-
-               XSetClipOrigin(dpy, scr->copy_gc, 0, 0);
-
-               icon->pixmap = pixmap;
        } else {
  user_icon:
                if (icon->file_image) {
@@ -733,6 +682,63 @@ void get_pixmap_icon_from_icon_win(WIcon * icon)
                                          None, wCursor[WCUR_ARROW]);
 }
 
+/* Get the Pixmap from the XWindow wm_hints */
+int get_pixmap_icon_from_wm_hints(WScreen *scr, WWindow *wwin, WIcon *icon)
+{
+       Window jw;
+       Pixmap pixmap;
+       unsigned int w, h, ju, d;
+       int ji, x, y;
+       int title_height = WMFontHeight(scr->icon_title_font);
+
+       if (!XGetGeometry(dpy, wwin->wm_hints->icon_pixmap, &jw, &ji, &ji, &w, 
&h, &ju, &d)) {
+               icon->owner->wm_hints->flags &= ~IconPixmapHint;
+               return(1);
+       }
+
+       pixmap = XCreatePixmap(dpy, icon->core->window, wPreferences.icon_size,
+                              wPreferences.icon_size, scr->w_depth);
+       XSetClipMask(dpy, scr->copy_gc, None);
+       XCopyArea(dpy, scr->icon_tile_pixmap, pixmap, scr->copy_gc, 0, 0,
+                 wPreferences.icon_size, wPreferences.icon_size, 0, 0);
+
+       if (w > wPreferences.icon_size)
+               w = wPreferences.icon_size;
+       x = (wPreferences.icon_size - w) / 2;
+
+       if (icon->show_title && (title_height < wPreferences.icon_size)) {
+               drawIconTitle(scr, pixmap, title_height);
+
+               if (h > wPreferences.icon_size - title_height - 2) {
+                       h = wPreferences.icon_size - title_height - 2;
+                       y = title_height + 1;
+               } else {
+                       y = (wPreferences.icon_size - h - title_height) / 2 + 
title_height + 1;
+               }
+       } else {
+               if (w > wPreferences.icon_size)
+                       w = wPreferences.icon_size;
+               y = (wPreferences.icon_size - h) / 2;
+       }
+
+       if (wwin->wm_hints->flags & IconMaskHint)
+               XSetClipMask(dpy, scr->copy_gc, wwin->wm_hints->icon_mask);
+
+       XSetClipOrigin(dpy, scr->copy_gc, x, y);
+
+       if (d != scr->w_depth) {
+               XSetForeground(dpy, scr->copy_gc, scr->black_pixel);
+               XSetBackground(dpy, scr->copy_gc, scr->white_pixel);
+               XCopyPlane(dpy, wwin->wm_hints->icon_pixmap, pixmap, 
scr->copy_gc, 0, 0, w, h, x, y, 1);
+       } else {
+               XCopyArea(dpy, wwin->wm_hints->icon_pixmap, pixmap, 
scr->copy_gc, 0, 0, w, h, x, y);
+       }
+
+       XSetClipOrigin(dpy, scr->copy_gc, 0, 0);
+
+       icon->pixmap = pixmap;
+       return (0);
+}
 
 void wIconPaint(WIcon * icon)
 {
-- 
1.7.7.3

-- 
||// //\\// Rodolfo "kix" Garcia
||\\// //\\ http://www.kix.es/
>From d0e2c27ca985f45faf78e95f0a31a27c23c51549 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?"Rodolfo=20Garc=C3=ADa=20Pe=C3=B1as=20(kix)"?= <[email protected]>
Date: Sun, 4 Mar 2012 14:54:45 +0100
Subject: [PATCH 5/8] WindowMaker: New function get_pixmap_icon_from_wm_hints

The new function get_pixmap_icon_from_wm_hints split the function wIconUpdate.
---
 src/icon.c |  112 +++++++++++++++++++++++++++++++----------------------------
 1 files changed, 59 insertions(+), 53 deletions(-)

diff --git a/src/icon.c b/src/icon.c
index a990be9..2b1272c 100644
--- a/src/icon.c
+++ b/src/icon.c
@@ -57,6 +57,7 @@ static void miniwindowMouseDown(WObjDescriptor * desc, XEvent * event);
 static void miniwindowDblClick(WObjDescriptor * desc, XEvent * event);
 
 void get_pixmap_icon_from_icon_win(WIcon *icon);
+int get_pixmap_icon_from_wm_hints(WScreen *scr, WWindow *wwin, WIcon *icon);
 /****** Notification Observers ******/
 
 static void appearanceObserver(void *self, WMNotification * notif)
@@ -553,7 +554,6 @@ void wIconSelect(WIcon * icon)
 void wIconUpdate(WIcon * icon)
 {
 	WScreen *scr = icon->core->screen_ptr;
-	int title_height = WMFontHeight(scr->icon_title_font);
 	WWindow *wwin = icon->owner;
 
 	assert(scr->icon_tile != NULL);
@@ -573,59 +573,8 @@ void wIconUpdate(WIcon * icon)
 		icon->pixmap = makeIcon(scr, wwin->net_icon_image, icon->show_title,
 						icon->shadowed, icon->tile_type, icon->highlighted);
 	} else if (wwin && wwin->wm_hints && (wwin->wm_hints->flags & IconPixmapHint)) {
-		int x, y;
-		unsigned int w, h;
-		Window jw;
-		int ji;
-		unsigned int ju, d;
-		Pixmap pixmap;
-
-		if (!XGetGeometry(dpy, wwin->wm_hints->icon_pixmap, &jw, &ji, &ji, &w, &h, &ju, &d)) {
-			icon->owner->wm_hints->flags &= ~IconPixmapHint;
+		if (get_pixmap_icon_from_wm_hints(scr, wwin, icon))
 			goto user_icon;
-		}
-
-		pixmap = XCreatePixmap(dpy, icon->core->window, wPreferences.icon_size,
-				       wPreferences.icon_size, scr->w_depth);
-		XSetClipMask(dpy, scr->copy_gc, None);
-		XCopyArea(dpy, scr->icon_tile_pixmap, pixmap, scr->copy_gc, 0, 0,
-			  wPreferences.icon_size, wPreferences.icon_size, 0, 0);
-
-		if (w > wPreferences.icon_size)
-			w = wPreferences.icon_size;
-		x = (wPreferences.icon_size - w) / 2;
-
-		if (icon->show_title && (title_height < wPreferences.icon_size)) {
-			drawIconTitle(scr, pixmap, title_height);
-
-			if (h > wPreferences.icon_size - title_height - 2) {
-				h = wPreferences.icon_size - title_height - 2;
-				y = title_height + 1;
-			} else {
-				y = (wPreferences.icon_size - h - title_height) / 2 + title_height + 1;
-			}
-		} else {
-			if (w > wPreferences.icon_size)
-				w = wPreferences.icon_size;
-			y = (wPreferences.icon_size - h) / 2;
-		}
-
-		if (wwin->wm_hints->flags & IconMaskHint)
-			XSetClipMask(dpy, scr->copy_gc, wwin->wm_hints->icon_mask);
-
-		XSetClipOrigin(dpy, scr->copy_gc, x, y);
-
-		if (d != scr->w_depth) {
-			XSetForeground(dpy, scr->copy_gc, scr->black_pixel);
-			XSetBackground(dpy, scr->copy_gc, scr->white_pixel);
-			XCopyPlane(dpy, wwin->wm_hints->icon_pixmap, pixmap, scr->copy_gc, 0, 0, w, h, x, y, 1);
-		} else {
-			XCopyArea(dpy, wwin->wm_hints->icon_pixmap, pixmap, scr->copy_gc, 0, 0, w, h, x, y);
-		}
-
-		XSetClipOrigin(dpy, scr->copy_gc, 0, 0);
-
-		icon->pixmap = pixmap;
 	} else {
  user_icon:
 		if (icon->file_image) {
@@ -733,6 +682,63 @@ void get_pixmap_icon_from_icon_win(WIcon * icon)
 					  None, wCursor[WCUR_ARROW]);
 }
 
+/* Get the Pixmap from the XWindow wm_hints */
+int get_pixmap_icon_from_wm_hints(WScreen *scr, WWindow *wwin, WIcon *icon)
+{
+	Window jw;
+	Pixmap pixmap;
+	unsigned int w, h, ju, d;
+	int ji, x, y;
+	int title_height = WMFontHeight(scr->icon_title_font);
+
+	if (!XGetGeometry(dpy, wwin->wm_hints->icon_pixmap, &jw, &ji, &ji, &w, &h, &ju, &d)) {
+		icon->owner->wm_hints->flags &= ~IconPixmapHint;
+		return(1);
+	}
+
+	pixmap = XCreatePixmap(dpy, icon->core->window, wPreferences.icon_size,
+			       wPreferences.icon_size, scr->w_depth);
+	XSetClipMask(dpy, scr->copy_gc, None);
+	XCopyArea(dpy, scr->icon_tile_pixmap, pixmap, scr->copy_gc, 0, 0,
+		  wPreferences.icon_size, wPreferences.icon_size, 0, 0);
+
+	if (w > wPreferences.icon_size)
+		w = wPreferences.icon_size;
+	x = (wPreferences.icon_size - w) / 2;
+
+	if (icon->show_title && (title_height < wPreferences.icon_size)) {
+		drawIconTitle(scr, pixmap, title_height);
+
+		if (h > wPreferences.icon_size - title_height - 2) {
+			h = wPreferences.icon_size - title_height - 2;
+			y = title_height + 1;
+		} else {
+			y = (wPreferences.icon_size - h - title_height) / 2 + title_height + 1;
+		}
+	} else {
+		if (w > wPreferences.icon_size)
+			w = wPreferences.icon_size;
+		y = (wPreferences.icon_size - h) / 2;
+	}
+
+	if (wwin->wm_hints->flags & IconMaskHint)
+		XSetClipMask(dpy, scr->copy_gc, wwin->wm_hints->icon_mask);
+
+	XSetClipOrigin(dpy, scr->copy_gc, x, y);
+
+	if (d != scr->w_depth) {
+		XSetForeground(dpy, scr->copy_gc, scr->black_pixel);
+		XSetBackground(dpy, scr->copy_gc, scr->white_pixel);
+		XCopyPlane(dpy, wwin->wm_hints->icon_pixmap, pixmap, scr->copy_gc, 0, 0, w, h, x, y, 1);
+	} else {
+		XCopyArea(dpy, wwin->wm_hints->icon_pixmap, pixmap, scr->copy_gc, 0, 0, w, h, x, y);
+	}
+
+	XSetClipOrigin(dpy, scr->copy_gc, 0, 0);
+
+	icon->pixmap = pixmap;
+	return (0);
+}
 
 void wIconPaint(WIcon * icon)
 {
-- 
1.7.7.3

Reply via email to