1099 typedef Status (*XInitThreadsFuncPtr)();
1100 typedef Display* (*XOpenDisplayFuncPtr)(char *display_name);
1101
1102 typedef Atom (*XInternAtomFuncPtr)(Display *display, char *atom_name, Bool only_if_exists);
1103
1104 typedef Window (*XDefaultRootWindowFuncPtr)(Display *display);
1105
1106 typedef int (*XCloseDisplayFuncPtr)(Display *display);
1107 }
1108
1109 ProcessReactivator::ProcessReactivator(pid_t pid): _pid(pid) {
1110 const std::string libname = "libX11.so";
1111 if(!libX11.Load(libname)) {
1112 throw std::runtime_error("Failed to load \"" + libname + "\" library");
1113 }
1114
1115 DllFunction<XInitThreadsFuncPtr> XInitThreadsFunc(libX11, "XInitThreads");
1116
1117 XInitThreadsFunc();
1118
1119 DllFunction<XOpenDisplayFuncPtr> XOpenDisplayFunc(libX11, "XOpenDisplay33");
1120
1121 _display = XOpenDisplayFunc(NULL);
1122
1123 DllFunction<XInternAtomFuncPtr> XInternAtomFunc(libX11, "XInternAtom");
1124
1125 _atomPid = XInternAtomFunc(_display, "_NET_WM_PID", True);
1126
1127 if (_atomPid == None) {
1128 return;
1129 }
1130
1131 DllFunction<XDefaultRootWindowFuncPtr> XDefaultRootWindowFunc(libX11, "XDefaultRootWindow");
1132
1133 searchWindowHelper(XDefaultRootWindowFunc(_display));
1134
1135 reactivateProcess();
1136
1137 DllFunction<XCloseDisplayFuncPtr> XCloseDisplayFunc(libX11, "XCloseDisplay");
1138
1139 XCloseDisplayFunc(_display);
|
1099 typedef Status (*XInitThreadsFuncPtr)();
1100 typedef Display* (*XOpenDisplayFuncPtr)(char *display_name);
1101
1102 typedef Atom (*XInternAtomFuncPtr)(Display *display, char *atom_name, Bool only_if_exists);
1103
1104 typedef Window (*XDefaultRootWindowFuncPtr)(Display *display);
1105
1106 typedef int (*XCloseDisplayFuncPtr)(Display *display);
1107 }
1108
1109 ProcessReactivator::ProcessReactivator(pid_t pid): _pid(pid) {
1110 const std::string libname = "libX11.so";
1111 if(!libX11.Load(libname)) {
1112 throw std::runtime_error("Failed to load \"" + libname + "\" library");
1113 }
1114
1115 DllFunction<XInitThreadsFuncPtr> XInitThreadsFunc(libX11, "XInitThreads");
1116
1117 XInitThreadsFunc();
1118
1119 DllFunction<XOpenDisplayFuncPtr> XOpenDisplayFunc(libX11, "XOpenDisplay");
1120
1121 _display = XOpenDisplayFunc(NULL);
1122
1123 DllFunction<XInternAtomFuncPtr> XInternAtomFunc(libX11, "XInternAtom");
1124
1125 _atomPid = XInternAtomFunc(_display, "_NET_WM_PID", True);
1126
1127 if (_atomPid == None) {
1128 return;
1129 }
1130
1131 DllFunction<XDefaultRootWindowFuncPtr> XDefaultRootWindowFunc(libX11, "XDefaultRootWindow");
1132
1133 searchWindowHelper(XDefaultRootWindowFunc(_display));
1134
1135 reactivateProcess();
1136
1137 DllFunction<XCloseDisplayFuncPtr> XCloseDisplayFunc(libX11, "XCloseDisplay");
1138
1139 XCloseDisplayFunc(_display);
|