On Fri 2015.06.19 at 08:49 -0500, b...@cbza.org wrote:
> This patch adds any windows that are completely obscured by other
> windows to the menu of currently hidden windows.  I've found this very
> useful.  When I lose track of a window it doesn't matter to me whether
> I intentionally hid it or it just became obscured, I just want to
> bring it back easily with the mouse.

Hi - Thanks for your patch. I've been sitting on a change that makes the
mouse window/client menu the similar to the keyboard one - basically
showing all windows, but marked up differently based on status, such as
window state(hidden, current, showing), group and label info - mostly
like the keyboard one (likely bringing the keyboard menu up to the same
full data as well). Wonder if that would be a welcome change...(and suit
this visibility use case).

Thanks,
Okan

> 
> Index: calmwm.h
> ===================================================================
> RCS file: /cvs/xenocara/app/cwm/calmwm.h,v
> retrieving revision 1.292
> diff -u -p -r1.292 calmwm.h
> --- calmwm.h  9 Jun 2015 13:02:15 -0000       1.292
> +++ calmwm.h  19 Jun 2015 11:52:25 -0000
> @@ -187,6 +187,7 @@ struct client_ctx {
>  #define CLIENT_FULLSCREEN            0x0800
>  #define CLIENT_STICKY                        0x1000
>  #define CLIENT_ACTIVE                        0x2000
> +#define CLIENT_OBSCURED                      0x4000
>  
>  #define CLIENT_HIGHLIGHT             (CLIENT_GROUP | CLIENT_UNGROUP)
>  #define CLIENT_MAXFLAGS                      (CLIENT_VMAXIMIZED | 
> CLIENT_HMAXIMIZED)
> Index: client.c
> ===================================================================
> RCS file: /cvs/xenocara/app/cwm/client.c,v
> retrieving revision 1.193
> diff -u -p -r1.193 client.c
> --- client.c  8 Jun 2015 15:11:29 -0000       1.193
> +++ client.c  19 Jun 2015 11:52:25 -0000
> @@ -115,7 +115,7 @@ client_init(Window win, struct screen_ct
>       }
>  
>       XSelectInput(X_Dpy, cc->win, ColormapChangeMask | EnterWindowMask |
> -         PropertyChangeMask | KeyReleaseMask);
> +         PropertyChangeMask | KeyReleaseMask | VisibilityChangeMask);
>  
>       XAddToSaveSet(X_Dpy, cc->win);
>  
> Index: mousefunc.c
> ===================================================================
> RCS file: /cvs/xenocara/app/cwm/mousefunc.c,v
> retrieving revision 1.91
> diff -u -p -r1.91 mousefunc.c
> --- mousefunc.c       8 Jun 2015 15:41:27 -0000       1.91
> +++ mousefunc.c       19 Jun 2015 11:52:25 -0000
> @@ -209,7 +209,7 @@ mousefunc_menu_unhide(struct client_ctx 
>  
>       TAILQ_INIT(&menuq);
>       TAILQ_FOREACH(cc, &sc->clientq, entry) {
> -             if (cc->flags & CLIENT_HIDDEN) {
> +             if (cc->flags & (CLIENT_HIDDEN|CLIENT_OBSCURED)) {
>                       menuq_add(&menuq, cc, NULL);
>               }
>       }
> Index: xevents.c
> ===================================================================
> RCS file: /cvs/xenocara/app/cwm/xevents.c,v
> retrieving revision 1.116
> diff -u -p -r1.116 xevents.c
> --- xevents.c 19 Jan 2015 14:54:16 -0000      1.116
> +++ xevents.c 19 Jun 2015 11:52:25 -0000
> @@ -51,6 +51,7 @@ static void  xev_handle_clientmessage(XE
>  static void   xev_handle_randr(XEvent *);
>  static void   xev_handle_mappingnotify(XEvent *);
>  static void   xev_handle_expose(XEvent *);
> +static void   xev_handle_visibilitynotify(XEvent *);
>  
>  void         (*xev_handlers[LASTEvent])(XEvent *) = {
>                       [MapRequest] = xev_handle_maprequest,
> @@ -66,6 +67,7 @@ void                (*xev_handlers[LASTEvent])(XEvent 
>                       [ClientMessage] = xev_handle_clientmessage,
>                       [MappingNotify] = xev_handle_mappingnotify,
>                       [Expose] = xev_handle_expose,
> +                     [VisibilityNotify] = xev_handle_visibilitynotify,
>  };
>  
>  static KeySym modkeys[] = { XK_Alt_L, XK_Alt_R, XK_Super_L, XK_Super_R,
> @@ -404,6 +406,20 @@ xev_handle_expose(XEvent *ee)
>  
>       if ((cc = client_find(e->window)) != NULL && e->count == 0)
>               client_draw_border(cc);
> +}
> +
> +static void
> +xev_handle_visibilitynotify(XEvent *ee)
> +{
> +     XVisibilityEvent        *e = &ee->xvisibility;
> +     struct client_ctx       *cc;
> +
> +     if ((cc = client_find(e->window)) != NULL) {
> +             if (e->state == VisibilityFullyObscured)
> +                     cc->flags |= CLIENT_OBSCURED;
> +             else if (cc->flags & CLIENT_OBSCURED)
> +                     cc->flags &= ~CLIENT_OBSCURED;
> +     }
>  }
>  
>  void
> 

Reply via email to