patch to let wmctrl and others set _NET_WM_STATE_HIDDEN to minimize windows, by Timo Hirvonen
Mikael Magnusson mikachu@comhem.se
1 files changed,
17 insertions(+),
4 deletions(-)
jump to
M
openbox/client.c
→
openbox/client.c
@@ -460,8 +460,6 @@ }
/* tell our parent(s) that we're gone */ if (self->transient_for == OB_TRAN_GROUP) { /* transient of group */ - GSList *it; - for (it = self->group->members; it; it = g_slist_next(it)) if (it->data != self) ((ObClient*)it->data)->transients =@@ -1446,15 +1444,17 @@
old_title = self->title; /* try netwm */ - if (!PROP_GETS(self->window, net_wm_name, utf8, &data)) + if (!PROP_GETS(self->window, net_wm_name, utf8, &data)) { /* try old x stuff */ - if (!PROP_GETS(self->window, wm_name, locale, &data)) + if (!PROP_GETS(self->window, wm_name, locale, &data)) { // http://developer.gnome.org/projects/gup/hig/draft_hig_new/windows-alert.html if (self->transient) { data = g_strdup(""); goto no_number; } else data = g_strdup("Unnamed Window"); + } + } /* did the title change? then reset the title_count */ if (old_title && 0 != strncmp(old_title, data, strlen(data)))@@ -2527,6 +2527,7 @@ gboolean undecorated = self->undecorated;
gboolean max_horz = self->max_horz; gboolean max_vert = self->max_vert; gboolean modal = self->modal; + gboolean iconic = self->iconic; gint i; if (!(action == prop_atoms.net_wm_state_add ||@@ -2562,6 +2563,10 @@ else if (state == prop_atoms.net_wm_state_skip_pager)
action = self->skip_pager ? prop_atoms.net_wm_state_remove : prop_atoms.net_wm_state_add; + else if (state == prop_atoms.net_wm_state_hidden) + action = self->iconic ? + prop_atoms.net_wm_state_remove : + prop_atoms.net_wm_state_add; else if (state == prop_atoms.net_wm_state_fullscreen) action = fullscreen ? prop_atoms.net_wm_state_remove :@@ -2590,6 +2595,8 @@ } else if (state == prop_atoms.net_wm_state_skip_taskbar) {
self->skip_taskbar = TRUE; } else if (state == prop_atoms.net_wm_state_skip_pager) { self->skip_pager = TRUE; + } else if (state == prop_atoms.net_wm_state_hidden) { + iconic = TRUE; } else if (state == prop_atoms.net_wm_state_fullscreen) { fullscreen = TRUE; } else if (state == prop_atoms.net_wm_state_above) {@@ -2615,6 +2622,8 @@ } else if (state == prop_atoms.net_wm_state_skip_taskbar) {
self->skip_taskbar = FALSE; } else if (state == prop_atoms.net_wm_state_skip_pager) { self->skip_pager = FALSE; + } else if (state == prop_atoms.net_wm_state_hidden) { + iconic = FALSE; } else if (state == prop_atoms.net_wm_state_fullscreen) { fullscreen = FALSE; } else if (state == prop_atoms.net_wm_state_above) {@@ -2657,6 +2666,9 @@ /* when a window changes modality, then its stacking order with its
transients needs to change */ client_raise(self); } + if (iconic != self->iconic) + client_iconify(self, iconic, FALSE); + client_calc_layer(self); client_change_state(self); /* change the hint to reflect these changes */ }@@ -3312,6 +3324,7 @@ case OB_DIRECTION_SOUTHWEST:
/* not implemented */ default: g_assert_not_reached(); + dest = 0; /* suppress warning */ } return dest; }