Skip to content

Commit 760e05b

Browse files
committed
(#15) getActiveWindow implementation on Linux
1 parent fef4c28 commit 760e05b

File tree

3 files changed

+23
-2
lines changed

3 files changed

+23
-2
lines changed

src/linux/window_manager.cc

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,20 @@ Display* connectToX() {
1111
return xDisplay;
1212
}
1313

14-
int32_t disconnectFromX(Display* connection) {
15-
return XCloseDisplay(connection);
14+
void disconnectFromX(Display* connection) {
15+
XCloseDisplay(connection);
16+
}
17+
18+
WindowHandle getActiveWindow() {
19+
Display* xServer = connectToX();
20+
Window window;
21+
if (xServer != nullptr) {
22+
int32_t revertToWindow;
23+
XGetInputFocus(xServer, &window, &revertToWindow);
24+
disconnectFromX(xServer);
25+
return window;
26+
}
27+
return NULL;
1628
}
1729

1830
std::vector<WindowHandle> getWindows() {

src/main.cc

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -669,6 +669,13 @@ Napi::Number _highlight(const Napi::CallbackInfo &info)
669669
return Napi::Number::New(env, 1);
670670
}
671671

672+
Napi::Number _getActiveWindow(const Napi::CallbackInfo &info) {
673+
Napi::Env env = info.Env();
674+
675+
WindowHandle windowHandle = getActiveWindow();
676+
return Napi::Number::New(env, windowHandle);
677+
}
678+
672679
Napi::Array _getWindows(const Napi::CallbackInfo &info) {
673680
Napi::Env env = info.Env();
674681

@@ -786,6 +793,7 @@ Napi::Object Init(Napi::Env env, Napi::Object exports) {
786793
exports.Set(Napi::String::New(env, "getScreenSize"), Napi::Function::New(env, _getScreenSize));
787794
exports.Set(Napi::String::New(env, "highlight"), Napi::Function::New(env, _highlight));
788795
exports.Set(Napi::String::New(env, "getWindows"), Napi::Function::New(env, _getWindows));
796+
exports.Set(Napi::String::New(env, "getActiveWindow"), Napi::Function::New(env, _getActiveWindow));
789797
exports.Set(Napi::String::New(env, "getWindowRect"), Napi::Function::New(env, _getWindowRect));
790798
exports.Set(Napi::String::New(env, "getWindowTitle"), Napi::Function::New(env, _getWindowTitle));
791799
exports.Set(Napi::String::New(env, "captureScreen"), Napi::Function::New(env, _captureScreen));

src/window_manager.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#include "types.h"
88

99
std::vector<WindowHandle> getWindows();
10+
WindowHandle getActiveWindow();
1011

1112
std::string getWindowTitle(const WindowHandle windowHandle);
1213
MMRect getWindowRect(const WindowHandle windowHandle);

0 commit comments

Comments
 (0)