From d5eacc5642ad8f5611f7c946d734863bc8898513 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Fri, 9 May 2003 22:53:11 +0000 Subject: [PATCH] add a client_activate function, use it for net_wm_active mesgs and for focus cycling. --- openbox/client.c | 28 ++++++++++++++++++++++++---- openbox/client.h | 4 ++++ openbox/event.c | 13 +------------ openbox/focus.c | 10 ++-------- 4 files changed, 31 insertions(+), 24 deletions(-) diff --git a/openbox/client.c b/openbox/client.c index 2cd92125..dd25e4d2 100644 --- a/openbox/client.c +++ b/openbox/client.c @@ -1192,6 +1192,7 @@ void client_update_title(Client *self) guint32 nums; guint i; char *data = NULL; + gboolean read_title; g_free(self->title); @@ -1236,15 +1237,18 @@ void client_update_title(Client *self) /* 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); @@ -2292,6 +2296,22 @@ void client_unfocus(Client *self) 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) { return self == focus_client; diff --git a/openbox/client.h b/openbox/client.h index faa04e63..9fe9c9d3 100644 --- a/openbox/client.h +++ b/openbox/client.h @@ -427,6 +427,10 @@ gboolean client_focus(Client *self); /*! 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); diff --git a/openbox/event.c b/openbox/event.c index 39dfca5c..2e2d5c0c 100644 --- a/openbox/event.c +++ b/openbox/event.c @@ -731,18 +731,7 @@ static void event_handle_client(Client *client, XEvent *e) 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] == diff --git a/openbox/focus.c b/openbox/focus.c index 4fa123cb..2ee2cf2f 100644 --- a/openbox/focus.c +++ b/openbox/focus.c @@ -268,14 +268,8 @@ Client *focus_cycle(gboolean forward, gboolean linear, gboolean done, 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; -- 2.39.2