summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2003-06-04 18:22:19 +0000
committerDana Jansens <danakj@orodu.net>2003-06-04 18:22:19 +0000
commit4cb48bebb5e13224c0f272809914de679cf395e1 (patch)
treea216df040889918845bab155189a184708d0b62c
parent1139d96e7f109158e27a0605f4de94ccceb41c55 (diff)
reverting the transient focus cycle change, its just not.. right. add the parent's title to the transient's for the popup instead of just relpacing it
-rw-r--r--openbox/client.c1
-rw-r--r--openbox/client.h5
-rw-r--r--openbox/focus.c38
3 files changed, 24 insertions, 20 deletions
diff --git a/openbox/client.c b/openbox/client.c
index 40b0836e..beb5c986 100644
--- a/openbox/client.c
+++ b/openbox/client.c
@@ -2254,6 +2254,7 @@ gboolean client_can_focus(Client *self)
self->desktop == DESKTOP_ALL) &&
!self->iconic))
return FALSE;
+
return TRUE;
}
diff --git a/openbox/client.h b/openbox/client.h
index ad8f506b..70fc5a97 100644
--- a/openbox/client.h
+++ b/openbox/client.h
@@ -493,8 +493,9 @@ Client *client_search_focus_tree(Client *self);
*/
Client *client_search_focus_tree_full(Client *self);
-/*! Return a modal child of the client window
- @return A modal child of the client window, or 0 if none was found.
+/*! Return a modal child of the client window that can be focused.
+ @return A modal child of the client window that can be focused, or 0 if
+ none was found.
*/
Client *client_search_modal_child(Client *self);
diff --git a/openbox/focus.c b/openbox/focus.c
index 45b55012..761d4f4e 100644
--- a/openbox/focus.c
+++ b/openbox/focus.c
@@ -245,6 +245,8 @@ static void popup_cycle(Client *c, gboolean show)
popup_hide(focus_cycle_popup);
} else {
Rect *a;
+ Client *p = c;
+ char *title;
a = screen_area(c->desktop);
popup_position(focus_cycle_popup, CenterGravity,
@@ -257,8 +259,22 @@ static void popup_cycle(Client *c, gboolean show)
*/
popup_size(focus_cycle_popup, 320, 48);
- popup_show(focus_cycle_popup, (c->iconic ? c->icon_title : c->title),
- client_icon(c, 48, 48));
+ /* use the transient's parent's title/icon */
+ while (p->transient_for && p->transient_for != TRAN_GROUP)
+ p = p->transient_for;
+
+ if (p == c)
+ title = NULL;
+ else
+ title = g_strconcat((p->iconic ? p->icon_title : p->title),
+ " - ",
+ (c->iconic ? c->icon_title : c->title),
+ NULL);
+
+ popup_show(focus_cycle_popup,
+ (title ? title : (c->iconic ? c->icon_title : c->title)),
+ client_icon(p, 48, 48));
+ g_free(title);
}
}
@@ -278,22 +294,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) {
- Client *t;
-
- /* actually focus a transient */
-
- /* fist, try for a modal */
- t = client_focus_target(focus_cycle_target);
- if (t != focus_cycle_target)
- focus_cycle_target = t;
- else
- /* just grab the deepest transient you can find */
- while (focus_cycle_target->transients)
- focus_cycle_target = focus_cycle_target->transients->data;
-
+ if (focus_cycle_target)
client_activate(focus_cycle_target);
- }
goto done_cycle;
}
if (!first)
@@ -320,7 +322,7 @@ Client *focus_cycle(gboolean forward, gboolean linear, gboolean done,
}
/*ft = client_focus_target(it->data);*/
ft = it->data;
- if (ft->transient_for == NULL && client_normal(ft) &&
+ if (ft->transients == NULL && client_normal(ft) &&
client_can_focus(ft)) {
if (ft != focus_cycle_target) { /* prevents flicker */
if (focus_cycle_target)