Skip to content

Commit 754d6e7

Browse files
mike-wardclaude
andcommitted
fix: Linux link errors and dbus shutdown warning
Add dialog_linux.c stubs for macOS-only native dialog symbols (gui_native_dialog_result_ex_free et al). Remove invalid dbus_connection_close on shared a11y bus connection. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 0a725f5 commit 754d6e7

3 files changed

Lines changed: 74 additions & 1 deletion

File tree

nativebridge/a11y_linux.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1254,7 +1254,8 @@ void gui_a11y_destroy(void) {
12541254

12551255
dbus_connection_remove_filter(g_a11y_bus, a11y_filter,
12561256
NULL);
1257-
dbus_connection_close(g_a11y_bus);
1257+
// dbus_bus_register makes the connection shared;
1258+
// shared connections must not be closed, only unref'd.
12581259
dbus_connection_unref(g_a11y_bus);
12591260

12601261
g_a11y_bus = NULL;

nativebridge/c_bindings.v

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ module nativebridge
1717
#flag linux -I/usr/lib/x86_64-linux-gnu/dbus-1.0/include
1818
#flag linux @VMODROOT/nativebridge/readback_linux.c
1919
#flag linux @VMODROOT/nativebridge/bookmark_stub.c
20+
#flag linux @VMODROOT/nativebridge/dialog_linux.c
2021
#flag linux @VMODROOT/nativebridge/portal_linux.c
2122
#flag linux -lGL
2223
#include "@VMODROOT/nativebridge/a11y_bridge.h"

nativebridge/dialog_linux.c

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
// dialog_linux.c — Stubs for macOS-only native dialog functions
2+
// and shared result-free logic for Linux portal results.
3+
4+
#include <stdlib.h>
5+
#include "dialog_bridge.h"
6+
7+
static GuiNativeDialogResultEx dialog_stub_error(void) {
8+
GuiNativeDialogResultEx result;
9+
result.status = 2;
10+
result.path_count = 0;
11+
result.entries = NULL;
12+
result.error_code = NULL;
13+
result.error_message = NULL;
14+
return result;
15+
}
16+
17+
GuiNativeDialogResultEx gui_native_open_dialog_ex(
18+
void* ns_window,
19+
const char* title,
20+
const char* start_dir,
21+
const char* extensions_csv,
22+
int allow_multiple
23+
) {
24+
(void)ns_window; (void)title; (void)start_dir;
25+
(void)extensions_csv; (void)allow_multiple;
26+
return dialog_stub_error();
27+
}
28+
29+
GuiNativeDialogResultEx gui_native_save_dialog_ex(
30+
void* ns_window,
31+
const char* title,
32+
const char* start_dir,
33+
const char* default_name,
34+
const char* default_extension,
35+
const char* extensions_csv,
36+
int confirm_overwrite
37+
) {
38+
(void)ns_window; (void)title; (void)start_dir;
39+
(void)default_name; (void)default_extension;
40+
(void)extensions_csv; (void)confirm_overwrite;
41+
return dialog_stub_error();
42+
}
43+
44+
GuiNativeDialogResultEx gui_native_folder_dialog_ex(
45+
void* ns_window,
46+
const char* title,
47+
const char* start_dir,
48+
int can_create_directories
49+
) {
50+
(void)ns_window; (void)title; (void)start_dir;
51+
(void)can_create_directories;
52+
return dialog_stub_error();
53+
}
54+
55+
void gui_native_dialog_result_ex_free(
56+
GuiNativeDialogResultEx result
57+
) {
58+
if (result.entries != NULL) {
59+
for (int i = 0; i < result.path_count; i++) {
60+
free(result.entries[i].path);
61+
free(result.entries[i].data);
62+
}
63+
free(result.entries);
64+
}
65+
if (result.error_code != NULL) {
66+
free(result.error_code);
67+
}
68+
if (result.error_message != NULL) {
69+
free(result.error_message);
70+
}
71+
}

0 commit comments

Comments
 (0)