From bdbe7805d55d1cf12406cb30678649ef8d091297 Mon Sep 17 00:00:00 2001 From: Mikael Magnusson Date: Sat, 9 Sep 2006 20:09:15 +0000 Subject: [PATCH] really fix getting the active window --- rspanel.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/rspanel.c b/rspanel.c index aa63663..97c4dee 100644 --- a/rspanel.c +++ b/rspanel.c @@ -120,6 +120,7 @@ char *atom_names[] = { "_OB_WM_ACTION", "_NET_WM_NAME", "UTF8_STRING", + "_NET_ACTIVE_WINDOW", }; #define ATOM_COUNT (sizeof (atom_names) / sizeof (atom_names[0])) @@ -146,7 +147,7 @@ Atom atoms[ATOM_COUNT]; #define atom__OB_WM_ACTION atoms[17] #define atom__NET_WM_NAME atoms[18] #define atom_STRING_UTF8 atoms[19] - +#define atom__NET_ACTIVE_WINDOW atoms[20] void *get_prop_data(Window win, Atom prop, Atom type, int *items) { @@ -893,7 +894,7 @@ void move_taskbar(void) void taskbar_read_clientlist(void) { Window *win, focus_win; - int num, i, rev, desk, new_desk = 0; + int num, i, desk, new_desk = 0; task *list, *next; desk = get_current_desktop(); #ifdef MIKACHU @@ -910,7 +911,11 @@ void taskbar_read_clientlist(void) tb.my_desktop = desk; } - XGetInputFocus(dd, &focus_win, &rev); + win = get_prop_data(root_win, atom__NET_ACTIVE_WINDOW, XA_WINDOW, &num); + if (win && num > 0) + focus_win = win[0]; + else + return; win = get_prop_data(root_win, atom__NET_CLIENT_LIST, XA_WINDOW, &num); if (!win) @@ -919,7 +924,7 @@ void taskbar_read_clientlist(void) /* remove windows that arn't in the _NET_CLIENT_LIST anymore */ list = tb.task_list; while (list) { - //list->focused = (focus_win == list->win); + list->focused = (focus_win == list->win); next = list->next; if (!new_desk) -- 2.39.2