aboutsummaryrefslogtreecommitdiff
path: root/gpu-screen-recorder-overlay-daemon
diff options
context:
space:
mode:
Diffstat (limited to 'gpu-screen-recorder-overlay-daemon')
-rw-r--r--gpu-screen-recorder-overlay-daemon/main.c121
1 files changed, 2 insertions, 119 deletions
diff --git a/gpu-screen-recorder-overlay-daemon/main.c b/gpu-screen-recorder-overlay-daemon/main.c
index 7a97c64..ff510c0 100644
--- a/gpu-screen-recorder-overlay-daemon/main.c
+++ b/gpu-screen-recorder-overlay-daemon/main.c
@@ -4,7 +4,6 @@
#include <sys/wait.h>
#include <X11/Xlib.h>
#include <X11/keysym.h>
-#include <X11/Xatom.h>
bool exec_program(const char **args, pid_t *process_id) {
*process_id = -1;
@@ -63,121 +62,7 @@ static void grab_keys(Display *display) {
XSetErrorHandler(prev_error_handler);
}
-static bool window_has_atom(Display *display, Window window, Atom atom) {
- Atom type;
- unsigned long len, bytes_left;
- int format;
- unsigned char *properties = NULL;
- if(XGetWindowProperty(display, window, atom, 0, 1024, False, AnyPropertyType, &type, &format, &len, &bytes_left, &properties) < Success)
- return false;
-
- if(properties)
- XFree(properties);
-
- return type != None;
-}
-
-static Window window_get_target_window_child(Display *display, Window window) {
- if(window == None)
- return None;
-
- Atom wm_state_atom = XInternAtom(display, "_NET_WM_STATE", False);
- if(!wm_state_atom)
- return None;
-
- if(window_has_atom(display, window, wm_state_atom))
- return window;
-
- Window root;
- Window parent;
- Window *children = NULL;
- unsigned int num_children = 0;
- if(!XQueryTree(display, window, &root, &parent, &children, &num_children) || !children)
- return None;
-
- Window found_window = None;
- for(int i = num_children - 1; i >= 0; --i) {
- if(children[i] && window_has_atom(display, children[i], wm_state_atom)) {
- found_window = children[i];
- goto finished;
- }
- }
-
- for(int i = num_children - 1; i >= 0; --i) {
- if(children[i]) {
- Window win = window_get_target_window_child(display, children[i]);
- if(win) {
- found_window = win;
- goto finished;
- }
- }
- }
-
- finished:
- XFree(children);
- return found_window;
-}
-
-static Window window_get_target_window_parent(Display *display, Window window) {
- fprintf(stderr, "window: %ld\n", window);
-
- if(window == None || window == DefaultRootWindow(display))
- return None;
-
- Atom wm_state_atom = XInternAtom(display, "WM_STATE", False);
- if(!wm_state_atom)
- return None;
-
- if(window_has_atom(display, window, wm_state_atom))
- return window;
-
- Window root;
- Window parent = None;
- Window *children = NULL;
- unsigned int num_children = 0;
- if(!XQueryTree(display, window, &root, &parent, &children, &num_children))
- return None;
-
- if(children)
- XFree(children);
-
- if(!parent)
- return None;
-
- return window_get_target_window_parent(display, parent);
-}
-
-static Window get_input_focus(Display *display) {
- Window focused_window = None;
-
- Atom net_active_window_atom = XInternAtom(display, "_NET_ACTIVE_WINDOW", False);
- Atom type;
- unsigned long len, bytes_left;
- int format;
- unsigned char *properties = NULL;
- if(XGetWindowProperty(display, DefaultRootWindow(display), net_active_window_atom, 0, 1024, False, XA_WINDOW, &type, &format, &len, &bytes_left, &properties) == Success) {
- if(properties) {
- if(len > 0)
- focused_window = *(Window*)properties;
- XFree(properties);
- }
- }
-
- if(!focused_window) {
- int rev;
- if(!XGetInputFocus(display, &focused_window, &rev))
- focused_window = None;
- }
-
- return focused_window;
-}
-
-static Window get_window_with_input_focus(Display *display) {
- Window window = get_input_focus(display);
- return window_get_target_window_parent(display, window);
-}
-
-int main() {
+int main(void) {
Display *display = XOpenDisplay(NULL);
if(!display) {
fprintf(stderr, "Error: XOpenDisplay failed\n");
@@ -213,9 +98,7 @@ int main() {
}
}
- //Window window_with_input_focus = get_window_with_input_focus(display);
- //fprintf(stderr, "window with focus: %ld\n", window_with_input_focus);
- if(/*window_with_input_focus && window_with_input_focus != DefaultRootWindow(display) && */overlay_pid == -1) {
+ if(overlay_pid == -1) {
fprintf(stderr, "launch overlay\n");
// TODO: window_with_input_focus
const char *args[] = {