all repos — openbox @ d5eacc5642ad8f5611f7c946d734863bc8898513

openbox fork - make it a bit more like ryudo

add a client_activate function, use it for net_wm_active mesgs and for focus cycling.
Dana Jansens danakj@orodu.net
commit

d5eacc5642ad8f5611f7c946d734863bc8898513

parent

380ddd2b9cd2ffd8d286855b0670e58a553b2b3d

4 files changed, 31 insertions(+), 24 deletions(-)

jump to
M openbox/client.copenbox/client.c

@@ -1192,6 +1192,7 @@ GList *it;

guint32 nums; guint i; char *data = NULL; + gboolean read_title; g_free(self->title);

@@ -1236,15 +1237,18 @@

/* update the icon title */ data = NULL; g_free(self->icon_title); - + + read_title = TRUE; /* try netwm */ if (!PROP_GETS(self->window, net_wm_icon_name, utf8, &data)) /* try old x stuff */ - if (!PROP_GETS(self->window, wm_icon_name, locale, &data)) - data = g_strdup("Unnamed Window"); + if (!PROP_GETS(self->window, wm_icon_name, locale, &data)) { + data = g_strdup(self->title); + read_title = FALSE; + } /* append the title count, dont display the number for the first window */ - if (self->title_count > 1) { + if (read_title && self->title_count > 1) { char *vdata, *ndata; ndata = g_strdup_printf(" - [%u]", self->title_count); vdata = g_strconcat(data, ndata, NULL);

@@ -2290,6 +2294,22 @@ #ifdef DEBUG_FOCUS

g_message("client_unfocus for %lx", self->window); #endif focus_fallback(Fallback_Unfocusing); +} + +void client_activate(Client *self) +{ + if (client_normal(self) && screen_showing_desktop) + screen_show_desktop(FALSE); + if (self->iconic) + client_iconify(self, FALSE, TRUE); + else if (!self->frame->visible) + /* if its not visible for other reasons, then don't mess + with it */ + return; + if (self->shaded) + client_shade(self, FALSE); + client_focus(self); + stacking_raise(self); } gboolean client_focused(Client *self)
M openbox/client.hopenbox/client.h

@@ -427,6 +427,10 @@

/*! Remove focus from the client window */ void client_unfocus(Client *self); +/*! Activates the client for use, focusing, uniconifying it, etc. To be used + when the user deliberately selects a window for use. */ +void client_activate(Client *self); + /*! Calculates the stacking layer for the client window */ void client_calc_layer(Client *self);
M openbox/event.copenbox/event.c

@@ -731,18 +731,7 @@ g_message("net_close_window for 0x%lx", client->window);

client_close(client); } else if (msgtype == prop_atoms.net_active_window) { g_message("net_active_window for 0x%lx", client->window); - if (screen_showing_desktop) - screen_show_desktop(FALSE); - if (client->iconic) - client_iconify(client, FALSE, TRUE); - else if (!client->frame->visible) - /* if its not visible for other reasons, then don't mess - with it */ - break; - if (client->shaded) - client_shade(client, FALSE); - client_focus(client); - stacking_raise(client); + client_activate(client); } else if (msgtype == prop_atoms.net_wm_moveresize) { g_message("net_wm_moveresize for 0x%lx", client->window); if ((Atom)e->xclient.data.l[2] ==
M openbox/focus.copenbox/focus.c

@@ -268,14 +268,8 @@ if (focus_client)

frame_adjust_focus(focus_client->frame, TRUE); goto done_cycle; } else if (done) { - if (focus_cycle_target) { - if (focus_cycle_target->iconic) - client_iconify(focus_cycle_target, FALSE, FALSE); - if (focus_cycle_target->shaded) - client_shade(focus_cycle_target, FALSE); - client_focus(focus_cycle_target); - stacking_raise(focus_cycle_target); - } + if (focus_cycle_target) + client_activate(focus_cycle_target); goto done_cycle; } if (!first) first = focus_client;