StickyIconsAreReallySticky (was Re: FVWM: non-auto-compacted icons?)

From: Benjamin Low <ben_at_snrc.uow.edu.au>
Date: Thu, 09 Sep 1999 00:32:15 +1000

Dan Espen wrote:
...
> In my opinion, the functionality requested is reasonable. I might
> apply a patch if it was submitted. (Hacks won't do.)
>
> I think this is better described as "icons automatically remember
> their place".

Attached is a unified diff against fvwm-2.2.2. Basically, it enhances
the symantics of StickIcons to also mean "FixedIcons" (or
"IconsThatRememberTheirPlace" or whatever is deemed the best way to
describe this :-) (StickyIconsAreReallySticky??)

With this patch, StickyIcons are AutoPlaced when first iconised, from
then on stay where they were placed, exactly as if they were manually
placed. Non-StickyIcons will shuffle aside when changing pages to avoid
landing on top of a StickyIcon.

Works a treat :-)

Regards,

Ben

--- fvwm-2.2.2.orig/fvwm/icons.c Thu Jan 14 12:42:52 1999
+++ fvwm-2.2.2/fvwm/icons.c Thu Sep 9 00:00:52 1999
_at_@ -418,7 +418,7 @@
       int end_at; /* ending edge */
       int base; /* base for screen */
       int icon_dimension; /* height or width */
- int nom_dimension; /* nonminal height or width */
+ int nom_dimension; /* nominal height or width */
       int screen_dimension; /* screen height or width */
     } dimension;
     dimension dim[3]; /* space for work, 1st, 2nd dimen */
_at_@ -532,7 +532,9 @@
           while((test_window != (FvwmWindow *)0)
                 &&(loc_ok == True)) { /* test overlap */
             if(test_window->Desk == t->Desk) {
- if((test_window->flags&ICONIFIED) &&
+ if((test_window->flags&ICONIFIED ||
+ /* include non-iconised StickyIcon windows in decision BDL */
+ test_window->flags&StickyIcon) &&
                  (!(test_window->flags&TRANSIENT) ||
                   !test_window->tmpflags.IconifiedByParent) &&
                  (test_window->icon_w||test_window->icon_pixmap_w) &&
_at_@ -560,6 +562,12 @@
       return; /* just leave it */
     t->icon_x_loc = real_x;
     t->icon_y_loc = real_y;
+
+ if (t->flags&StickyIcon)
+ {
+ /* make StickyIcons icons stay where they've been placed BDL */
+ t->flags |= ICON_MOVED;
+ }
 
     if(t->icon_pixmap_w)
       XMoveWindow(dpy,t->icon_pixmap_w,t->icon_x_loc, t->icon_y_loc);
--- fvwm-2.2.2.orig/fvwm/virtual.c Sat Feb 27 01:47:14 1999
+++ fvwm-2.2.2/fvwm/virtual.c Wed Sep 8 23:30:28 1999
_at_@ -589,10 +589,10 @@
       for (t = Scr.FvwmRoot.next; t != NULL; t = t->next)
         {
           t->tmpflags.ViewportMoved = False; /* Clear double move blocker. */
- /* If its an icon, and its sticking, autoplace it so
+ /* If its an icon, and is *not* sticking (BDL), autoplace it so
            * that it doesn't wind up on top a a stationary
            * icon */
- if(((t->flags & STICKY)||(t->flags & StickyIcon))&&
+ if(((!(t->flags & STICKY)||(t->flags & StickyIcon)))&&
              (t->flags & ICONIFIED)&&(!(t->flags & ICON_MOVED))&&
              (!(t->flags & ICON_UNMAPPED)))
             AutoPlace(t);


--
Visit the official FVWM web page at <URL: http://www.fvwm.org/>.
To unsubscribe from the list, send "unsubscribe fvwm" in the body of a
message to majordomo_at_fvwm.org.
To report problems, send mail to fvwm-owner_at_fvwm.org.
Received on Wed Sep 08 1999 - 09:40:15 BST

This archive was generated by hypermail 2.3.0 : Mon Aug 29 2016 - 19:38:02 BST