fix(info): use alternative method to gather active window on X11
This commit is contained in:
parent
c85e063e71
commit
40ad3c8551
|
@ -88,6 +88,22 @@ char *xwm_get_win_title(Display *disp, Window win)
|
|||
return nwname ? nwname : (wname ? wname : NULL);
|
||||
}
|
||||
|
||||
// Function taken from the wmctrl tool source code
|
||||
Window get_active_window(Display *disp) {
|
||||
char *prop;
|
||||
unsigned long size;
|
||||
Window ret = (Window)0;
|
||||
|
||||
prop = get_property(disp, DefaultRootWindow(disp), XA_WINDOW,
|
||||
"_NET_ACTIVE_WINDOW", &size);
|
||||
if (prop) {
|
||||
ret = *((Window*)prop);
|
||||
XFree(prop);
|
||||
}
|
||||
|
||||
return(ret);
|
||||
}
|
||||
|
||||
int32_t info_get_title(char *buffer, int32_t buffer_size)
|
||||
{
|
||||
Display *display = XOpenDisplay(0);
|
||||
|
@ -97,14 +113,12 @@ int32_t info_get_title(char *buffer, int32_t buffer_size)
|
|||
return -1;
|
||||
}
|
||||
|
||||
Window focused;
|
||||
int revert_to;
|
||||
int ret = XGetInputFocus(display, &focused, &revert_to);
|
||||
Window focused = get_active_window(display);
|
||||
|
||||
int result = 1;
|
||||
if (!ret)
|
||||
if (!focused)
|
||||
{
|
||||
fprintf(stderr, "xdo_get_active_window reported an error\n");
|
||||
fprintf(stderr, "get_active_window reported an error\n");
|
||||
result = -2;
|
||||
}
|
||||
else
|
||||
|
@ -130,14 +144,12 @@ int32_t info_get_exec(char *buffer, int32_t buffer_size)
|
|||
return -1;
|
||||
}
|
||||
|
||||
Window focused;
|
||||
int revert_to;
|
||||
int ret = XGetInputFocus(display, &focused, &revert_to);
|
||||
Window focused = get_active_window(display);
|
||||
|
||||
int result = 1;
|
||||
if (!ret)
|
||||
if (!focused)
|
||||
{
|
||||
fprintf(stderr, "xdo_get_active_window reported an error\n");
|
||||
fprintf(stderr, "get_active_window reported an error\n");
|
||||
result = -2;
|
||||
}
|
||||
else
|
||||
|
@ -176,14 +188,12 @@ int32_t info_get_class(char *buffer, int32_t buffer_size)
|
|||
return -1;
|
||||
}
|
||||
|
||||
Window focused;
|
||||
int revert_to;
|
||||
int ret = XGetInputFocus(display, &focused, &revert_to);
|
||||
Window focused = get_active_window(display);
|
||||
|
||||
int result = 1;
|
||||
if (!ret)
|
||||
if (!focused)
|
||||
{
|
||||
fprintf(stderr, "xdo_get_active_window reported an error\n");
|
||||
fprintf(stderr, "get_active_window reported an error\n");
|
||||
result = -2;
|
||||
}
|
||||
else
|
||||
|
|
Loading…
Reference in New Issue
Block a user