<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">--- src/dock.c.orig	Sat Jan  9 09:45:12 1999
+++ src/dock.c	Sat Jan  9 09:52:06 1999
@@ -143,7 +143,9 @@
 static void clipAutoLower(void *cdata);
 static void clipAutoRaise(void *cdata);
 
+#if 0
 static void showClipBalloon(WDock *dock, int workspace);
+#endif
 
 #ifdef OFFIX_DND
 
@@ -1158,6 +1160,8 @@
 }
 
 
+#define CLIP_CAPTION_SPACE_X	(4)
+#define CLIP_CAPTION_SPACE_Y	(3)
 void
 wClipIconPaint(WAppIcon *aicon)
 {
@@ -1167,6 +1171,7 @@
     Window win = aicon-&gt;icon-&gt;core-&gt;window;
     int length, nlength;
     char *ws_name, ws_number[10];
+    char *shrunk_ws_name;
     int ty, tx;
 
     wIconPaint(aicon-&gt;icon);
@@ -1184,19 +1189,30 @@
     else
         XSetForeground(dpy, gc, scr-&gt;clip_title_pixel[CLIP_COLLAPSED]);
 
-    ty = ICON_SIZE - scr-&gt;clip_title_font-&gt;height - 3;
+    tx = CLIP_CAPTION_SPACE_X;
+    ty = CLIP_CAPTION_SPACE_Y;
     
-    tx = CLIP_BUTTON_SIZE*ICON_SIZE/64;
+    shrunk_ws_name = ShrinkString(scr-&gt;clip_title_font, ws_name,
+				  ICON_SIZE -
+				  (CLIP_BUTTON_SIZE * ICON_SIZE/64)
+				  /* - CLIP_CAPTION_SPACE_X */
+				  );
+    length = strlen(shrunk_ws_name);
     
     wDrawString(win, scr-&gt;clip_title_font, gc, tx,
-		ty + scr-&gt;clip_title_font-&gt;y, ws_name, length);
+		ty + scr-&gt;clip_title_font-&gt;y, shrunk_ws_name, length);
+    
+    free(shrunk_ws_name);
+    free(ws_name);
 
-    tx = (ICON_SIZE/2 - wTextWidth(scr-&gt;clip_title_font-&gt;font, ws_number, nlength))/2;
+    tx = (ICON_SIZE - 
+	  wTextWidth(scr-&gt;clip_title_font-&gt;font, ws_number, nlength) -
+	  CLIP_CAPTION_SPACE_X);
+    
+    ty = ICON_SIZE - scr-&gt;clip_title_font-&gt;height - CLIP_CAPTION_SPACE_Y - 1;
 
     wDrawString(win, scr-&gt;clip_title_font, gc, tx, 
-		scr-&gt;clip_title_font-&gt;y + 2, ws_number, nlength);
-
-    free(ws_name);
+		ty + scr-&gt;clip_title_font-&gt;y, ws_number, nlength);
 
     if (aicon-&gt;launching) {
 	XFillRectangle(dpy, aicon-&gt;icon-&gt;core-&gt;window, scr-&gt;stipple_gc, 
@@ -3022,7 +3038,13 @@
             wDockShowIcons(scr-&gt;workspaces[workspace]-&gt;clip);
         }
 	if (scr-&gt;flags.clip_balloon_mapped)
+	{
+#if 1
+	   wBalloonChangeText(scr, scr-&gt;workspaces[workspace]-&gt;name);
+#else
 	    showClipBalloon(scr-&gt;clip_icon-&gt;dock, workspace);
+#endif
+	}
     }
 }
 
@@ -3774,10 +3796,12 @@
         }
     }
     
+#if 0
     if (dock-&gt;type == WM_CLIP &amp;&amp; scr-&gt;flags.clip_balloon_mapped) {
 	XUnmapWindow(dpy, scr-&gt;clip_balloon);
 	scr-&gt;flags.clip_balloon_mapped = 0;
     }
+#endif
     
 #ifdef DEBUG
     puts("handling dock");
@@ -3821,6 +3845,7 @@
 }
 
 
+#if 0
 static void
 showClipBalloon(WDock *dock, int workspace)
 {
@@ -3862,6 +3887,7 @@
     wDrawString(scr-&gt;clip_balloon, scr-&gt;clip_title_font, scr-&gt;clip_title_gc,
 		0, scr-&gt;clip_title_font-&gt;y, text, strlen(text));
 }
+#endif
 
 
 static void
@@ -3889,6 +3915,7 @@
                                                    (void *)dock);
     }
 
+#if 0
     if (btn-&gt;xindex == 0 &amp;&amp; btn-&gt;yindex == 0)
 	showClipBalloon(dock, dock-&gt;screen_ptr-&gt;current_workspace);
     else {
@@ -3897,6 +3924,7 @@
 	    dock-&gt;screen_ptr-&gt;flags.clip_balloon_mapped = 0;
 	}
     }
+#endif
     if (dock-&gt;auto_collapse) {
         if (dock-&gt;auto_collapse_magic) {
             WMDeleteTimerHandler(dock-&gt;auto_collapse_magic);

--- ./src/balloon.h.orig	Fri Aug 21 21:58:54 1998
+++ ./src/balloon.h	Thu Sep 24 01:22:41 1998
@@ -26,6 +26,8 @@
 
 void wBalloonEnteredObject(WScreen *scr, WObjDescriptor *object);
 
+void wBalloonChangeText(WScreen *scr, char *text);
+
 void wBalloonHide(WScreen *scr);
 
 #endif
--- ./src/balloon.c.orig	Sat Sep 19 13:48:15 1998
+++ ./src/balloon.c	Thu Sep 24 01:24:43 1998
@@ -386,6 +386,28 @@
 
 
 
+static void
+clipiconBalloon(WObjDescriptor *object)
+{
+    WAppIcon *aicon = (WAppIcon*)object-&gt;parent;
+    WScreen *scr = aicon-&gt;icon-&gt;core-&gt;screen_ptr;
+    int workspace = scr-&gt;current_workspace;
+
+    scr-&gt;balloon-&gt;text = wstrdup(scr-&gt;workspaces[workspace]-&gt;name);
+    scr-&gt;balloon-&gt;h = aicon-&gt;icon-&gt;core-&gt;height;
+    scr-&gt;balloon-&gt;objectWindow = aicon-&gt;icon-&gt;core-&gt;window;
+    if (scr-&gt;balloon-&gt;prevType != 0) {
+	XUnmapWindow(dpy, scr-&gt;balloon-&gt;window);
+	showBalloon(scr);
+    } else {
+	scr-&gt;balloon-&gt;timer = WMAddTimerHandler(BALLOON_DELAY,
+						(WMCallback*)showBalloon, scr);
+    }
+    scr-&gt;flags.clip_balloon_mapped = 1;
+}
+
+
+
 void
 wBalloonInitialize(WScreen *scr)
 {
@@ -430,6 +452,8 @@
 	free(scr-&gt;balloon-&gt;text);
     scr-&gt;balloon-&gt;text = NULL;
 
+    scr-&gt;flags.clip_balloon_mapped = 0;
+    
     if (!object) {
 	wBalloonHide(scr);
 	balloon-&gt;ignoreTimer = 0;
@@ -443,8 +467,11 @@
 	break;
 
      case WCLASS_DOCK_ICON:
-	if (object-&gt;parent != scr-&gt;clip_icon &amp;&amp; wPreferences.appicon_balloon)
+	if (wPreferences.appicon_balloon)
+	if (object-&gt;parent != scr-&gt;clip_icon)
 	    appiconBalloon(object);
+        else
+	    clipiconBalloon(object);
 	break;
 
      case WCLASS_MINIWINDOW:
@@ -465,6 +492,19 @@
 
 
 
+void wBalloonChangeText(WScreen *scr, char *text)
+{
+   if (scr-&gt;balloon-&gt;text) {
+       free(scr-&gt;balloon-&gt;text);
+   }
+   scr-&gt;balloon-&gt;text = wstrdup(text);
+   if (scr-&gt;balloon-&gt;mapped) {
+       showBalloon(scr);
+   }
+}
+
+
+
 void
 wBalloonHide(WScreen *scr)
 {
@@ -476,6 +516,7 @@
 	    WMDeleteTimerHandler(scr-&gt;balloon-&gt;timer);
 	    scr-&gt;balloon-&gt;timer = NULL;
 	}
+        scr-&gt;flags.clip_balloon_mapped = 0;
 	scr-&gt;balloon-&gt;prevType = 0;
     }
 }
</pre></body></html>