Skip to content

Commit faeb3bf

Browse files
committed
fix(launcher): Attempt to open new window by default
1 parent de8cbf3 commit faeb3bf

File tree

3 files changed

+36
-16
lines changed

3 files changed

+36
-16
lines changed

src/launcher.ts

Lines changed: 34 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -78,9 +78,6 @@ export class Launcher extends search.Search {
7878

7979
if (selected) {
8080
this.service?.activate(selected.result.id)
81-
global.log(`service exists? ${this.service !== null}`)
82-
} else {
83-
global.log(`option does not exist`)
8481
}
8582
}
8683

@@ -197,29 +194,51 @@ export class Launcher extends search.Search {
197194
const app = Shell.AppSystem.get_default().lookup_desktop_wmclass(wmclass)
198195

199196
if (app) {
200-
if (app.state === Shell.AppState.RUNNING) {
197+
const info = app.get_app_info()
198+
const is_gnome_settings = info ? info.get_executable() === "gnome-control-center" : false;
199+
200+
if (is_gnome_settings && app.state === Shell.AppState.RUNNING) {
201201
app.activate()
202202
const window = app.get_windows()[0]
203203
if (window) shell_window.activate(true, DefaultPointerPosition.TopLeft, window)
204204
return;
205205
}
206206

207+
const existing_windows = app.get_windows().length
208+
207209
app.launch(0, -1, gpuPref)
208210

209-
GLib.timeout_add(GLib.PRIORITY_DEFAULT, 100, () => {
211+
GLib.timeout_add(GLib.PRIORITY_DEFAULT, 500, () => {
210212
if (app.state === Shell.AppState.STOPPED) {
211-
const info = app.get_app_info()
212213
if (info) {
213-
this.locate_by_app_info(info)?.activate(false)
214+
const window = this.locate_by_app_info(info);
215+
if (window) {
216+
window.activate(false)
217+
return false;
218+
}
219+
}
220+
} else if (app.state === Shell.AppState.RUNNING) {
221+
const windows: Array<Meta.Window> = app.get_windows();
222+
223+
if (windows.length > existing_windows) {
224+
let newest_window = null
225+
let newest_time = -1
226+
for (const window of windows) {
227+
const this_time = window.get_user_time()
228+
if (newest_time < this_time) {
229+
newest_window = window
230+
newest_time = this_time
231+
}
232+
233+
if (this_time === 0) newest_window = window
234+
}
235+
236+
if (newest_window) {
237+
shell_window.activate(true, DefaultPointerPosition.TopLeft, newest_window)
238+
}
239+
240+
return false
214241
}
215-
216-
return false;
217-
}
218-
219-
const window = app.get_windows()[0]
220-
if (window) {
221-
shell_window.activate(true, DefaultPointerPosition.TopLeft, window)
222-
return false
223242
}
224243

225244
return true;

src/launcher_service.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ export class LauncherService {
9494
send(object: Object) {
9595
const message = JSON.stringify(object)
9696
try {
97-
this.service.stdin.write_bytes(new GLib.Bytes(message + "\n"), null)
97+
this.service.stdin.write_all(message + "\n", null)
9898
} catch (why) {
9999
log.error(`failed to send request to pop-launcher: ${why}`)
100100
}

src/mod.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,7 @@ declare namespace Meta {
196196
get_stable_sequence(): number;
197197
get_title(): string;
198198
get_transient_for(): Window | null;
199+
get_user_time(): number;
199200
get_wm_class(): string | null;
200201
get_wm_class_instance(): string | null;
201202
get_work_area_for_monitor(monitor: number): null | Rectangular;

0 commit comments

Comments
 (0)