client: split minimized out of hidden

Signed-off-by: Julien Danjou <julien@danjou.info>
This commit is contained in:
Julien Danjou 2008-09-06 13:52:05 +02:00
parent 7a80fc8fee
commit e0d3da455b
7 changed files with 31 additions and 7 deletions

View File

@ -251,6 +251,7 @@ client_focus(client_t *c)
/* stop hiding c */
c->ishidden = false;
c->isminimized = false;
/* unban the client before focusing or it will fail */
client_unban(c);
@ -1302,6 +1303,15 @@ luaA_client_newindex(lua_State *L)
client_need_arrange(*c);
}
break;
case A_TK_MINIMIZE:
b = luaA_checkboolean(L, 3);
if(b != (*c)->isminimized)
{
client_need_arrange(*c);
(*c)->isminimized = b;
client_need_arrange(*c);
}
break;
case A_TK_FULLSCREEN:
client_setfullscreen(*c, luaA_checkboolean(L, 3));
break;
@ -1393,7 +1403,11 @@ luaA_client_newindex(lua_State *L)
* \lfield machine The machine client is running on.
* \lfield icon_name The client name when iconified.
* \lfield screen Client screen number.
* \lfield hide Define if the client must be hidden, i.e. never mapped.
* \lfield hide Define if the client must be hidden, i.e. never mapped, not
* visible in taskbar.
* invisible in taskbar.
* \lfield minimize Define it the client must be iconify, i.e. only visible in
* taskbar.
* \lfield icon_path Path to the icon used to identify.
* \lfield floating True always floating.
* \lfield honorsizehints Honor size hints, i.e. respect size ratio.
@ -1508,6 +1522,9 @@ luaA_client_index(lua_State *L)
case A_TK_HIDE:
lua_pushboolean(L, (*c)->ishidden);
break;
case A_TK_MINIMIZE:
lua_pushboolean(L, (*c)->isminimized);
break;
case A_TK_FULLSCREEN:
lua_pushboolean(L, (*c)->isfullscreen);
break;

View File

@ -108,7 +108,7 @@ client_isfloating(client_t *c)
static inline bool
client_isvisible(client_t *c, int screen)
{
return (!c->ishidden && client_maybevisible(c, screen));
return (!c->ishidden && !c->isminimized && client_maybevisible(c, screen));
}
/** Check if a client has strut information.

View File

@ -34,6 +34,7 @@ layout
left
line
machine
minimize
mouse_enter
mouse_leave
mwfact

View File

@ -579,9 +579,10 @@ event_handle_maprequest(void *data __attribute__ ((unused)),
}
else if((c = client_getbywin(ev->window)))
{
if(client_maybevisible(c, c->screen))
/* Check that it may be visible, but not asked to be hidden */
if(client_maybevisible(c, c->screen) && !c->ishidden)
{
c->ishidden = false;
c->isminimized = false;
globalconf.screens[c->screen].need_arrange = true;
xcb_map_window(globalconf.connection, ev->window);
/* it will be raised, so just update ourself */
@ -760,7 +761,7 @@ event_handle_clientmessage(void *data __attribute__ ((unused)),
&& ev->data.data32[0] == XCB_WM_STATE_ICONIC)
{
client_need_arrange(c);
c->ishidden = true;
c->isminimized = true;
}
}
else if(ev->type == _XEMBED)

6
ewmh.c
View File

@ -296,12 +296,14 @@ ewmh_process_state_atom(client_t *c, xcb_atom_t state, int set)
if(set == _NET_WM_STATE_REMOVE)
{
client_need_arrange(c);
c->ishidden = false;
c->isminimized = false;
client_need_arrange(c);
}
else if(set == _NET_WM_STATE_ADD)
{
client_need_arrange(c);
c->ishidden = true;
c->isminimized = true;
client_need_arrange(c);
}
}
else if(state == _NET_WM_STATE_DEMANDS_ATTENTION)

View File

@ -306,6 +306,8 @@ struct client_t
bool ismoving;
/** True if the client is hidden */
bool ishidden;
/** True if the client is minimized */
bool isminimized;
/** True if the client is fullscreen */
bool isfullscreen;
/** True if the client is above others */

View File

@ -216,6 +216,7 @@ tasklist_draw(draw_context_t *ctx, int screen,
for(c = globalconf.clients; c; c = c->next)
if(!c->skiptb
&& !c->ishidden
&& c->type != WINDOW_TYPE_SPLASH
&& c->type != WINDOW_TYPE_DOCK
&& c->type != WINDOW_TYPE_DESKTOP)