Today, out of the blue, I decided that I wanted to apply styles to specific windows (and not to window names, classes, or resources, any of which may the same for multiple windows) on my FVWM desktop. I noticed that a request to do this was already pending in the FVWM bug site(id #568), but seeing that it's been over 2 years since the enhancement request was queued in the bug tracking system, I decided to look into it for fun.
I made the following changes to "fvwm/style.c" in fvwm-2.5.6: *** style.c.orig 2003-03-16 15:48:15.000000000 -0800 --- style.c 2003-03-16 15:51:17.000000000 -0800 *************** *** 4033,4038 **** --- 4033,4042 ---- /* clear callers return area */ memset(styles, 0, sizeof(window_style)); + /* Get the window ID: */ + char winId[20]; + sprintf(winId, "0x%x", (unsigned int)FW_W(fw)); + /* look thru all styles in order defined. */ for (nptr = all_styles; nptr != NULL; nptr = SGET_NEXT_STYLE(*nptr)) { *************** *** 4051,4056 **** --- 4055,4063 ---- { merge_styles(styles, nptr, False); } + else if (strcmp(SGET_NAME(*nptr), winId) == 0) { + merge_styles(styles, nptr, False); + } } if (!DO_IGNORE_GNOME_HINTS(fw)) { *************** *** 4800,4808 **** for (t = Scr.FvwmRoot.next; t != NULL && t != &Scr.FvwmRoot; t = t->next) { if (matchWildcards(name, t->class.res_class) == TRUE || matchWildcards(name, t->class.res_name) == TRUE || ! matchWildcards(name, t->name.name) == TRUE) { SET_STYLE_DELETED(t, 1); Scr.flags.do_need_window_update = 1; --- 4807,4820 ---- for (t = Scr.FvwmRoot.next; t != NULL && t != &Scr.FvwmRoot; t = t->next) { + /* Get the window ID: */ + char winId[20]; + sprintf(winId, "0x%x", (unsigned int)FW_W(t)); + if (matchWildcards(name, t->class.res_class) == TRUE || matchWildcards(name, t->class.res_name) == TRUE || ! matchWildcards(name, t->name.name) == TRUE || ! strcmp(name, winId) == 0) { SET_STYLE_DELETED(t, 1); Scr.flags.do_need_window_update = 1; This implements per-window styles, except for the the possibility of the reuse of window IDs. I apologize for the hokey 20-character fixed buffers; consider this a proof-of-concept implementation, not rugged code. Here's a sample menu that applies per-window styles: AddToMenu "WindowOps" "WindowOps" Title + "Focus Policy" Popup FocusPolicyOps AddToMenu "FocusPolicyOps" "Focus Policy" Title + "Click to Focus" Current Style $[w.id] ClickToFocus + "Focus Follows Mouse" Current Style $[w.id] FocusFollowsMouse + "Never Focus" Current Style $[w.id] NeverFocus + "Sloppy Focus" Current Style $[w.id] SloppyFocus Craig Milo Rogers -- 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 [EMAIL PROTECTED] To report problems, send mail to [EMAIL PROTECTED]