Skip to content

Commit 012cd26

Browse files
committed
feat: fork Restore focus when switching desktops.
to henkman#22.
1 parent 4e8d9d6 commit 012cd26

File tree

1 file changed

+15
-0
lines changed

1 file changed

+15
-0
lines changed

virgo.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
typedef struct {
2525
HWND *windows;
2626
unsigned count;
27+
HWND focus;
2728
} Windows;
2829

2930
typedef struct {
@@ -43,6 +44,18 @@ typedef struct {
4344
HWND pinned[NUM_PINNED];
4445
} Virgo;
4546

47+
static void save_current_desktops_focus(Windows* desktops) {
48+
desktops->focus = GetForegroundWindow();
49+
}
50+
51+
static unsigned is_valid_window(HWND hwnd);
52+
static void restore_current_desktops_focus(Windows* desktops) {
53+
if (!desktops->focus || !is_valid_window(desktops->focus)) {
54+
return;
55+
}
56+
SetForegroundWindow(desktops->focus);
57+
}
58+
4659
static void *stb__sbgrowf(void *arr, unsigned increment, unsigned itemsize)
4760
{
4861
unsigned dbl_cur = arr ? 2 * stb__sbm(arr) : 0;
@@ -339,8 +352,10 @@ static void virgo_go_to_desk(Virgo *v, unsigned desk)
339352
return;
340353
}
341354
virgo_update(v);
355+
save_current_desktops_focus(&v->desktops[v->current]);
342356
windows_hide(&v->desktops[v->current]);
343357
windows_show(&v->desktops[desk]);
358+
restore_current_desktops_focus(&v->desktops[desk]);
344359
v->current = desk;
345360
trayicon_set(&v->trayicon, v->current + 1);
346361
}

0 commit comments

Comments
 (0)