mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-26 03:28:02 +02:00
Implement xdg-desktop-portal for Linux dialogs
This commit is contained in:
parent
b5ceaf9a4e
commit
8f9143a21c
5 changed files with 490 additions and 2 deletions
103
BeefLibs/corlib/src/Linux.bf
Normal file
103
BeefLibs/corlib/src/Linux.bf
Normal file
|
@ -0,0 +1,103 @@
|
|||
#if BF_PLATFORM_LINUX
|
||||
using System.Interop;
|
||||
namespace System;
|
||||
|
||||
class Linux
|
||||
{
|
||||
public struct DBus;
|
||||
public struct DBusMsg;
|
||||
public struct DBusSlot;
|
||||
|
||||
public enum DBusType : char8
|
||||
{
|
||||
Invalid = 0,
|
||||
Byte = 'y',
|
||||
Bool = 'b',
|
||||
Int16 = 'n',
|
||||
UInt16 = 'q',
|
||||
Int32 = 'i',
|
||||
UInt32 = 'u',
|
||||
Int64 = 'x',
|
||||
UInt64 = 't',
|
||||
Double = 'd',
|
||||
String = 's',
|
||||
ObjectPath = 'o',
|
||||
Signature = 'g',
|
||||
UnixFD = 'h',
|
||||
Array = 'a',
|
||||
Variant = 'v',
|
||||
Struct = 'r', /* not actually used in signatures */
|
||||
StructBegin = '(',
|
||||
StructEnd = ')',
|
||||
DictEntry = 'e', /* not actually used in signatures */
|
||||
DictEntryBegin = '{',
|
||||
DictEntryEnd = '}'
|
||||
}
|
||||
|
||||
[CRepr]
|
||||
public struct DBusErr
|
||||
{
|
||||
public char8* name;
|
||||
public char8* message;
|
||||
public c_int _need_free;
|
||||
}
|
||||
|
||||
public typealias DBusMsgHandler = function int32(DBusMsg *m, void *userdata, DBusErr *ret_error);
|
||||
|
||||
[Import("libsystemd.so"), LinkName("sd_bus_open_user")]
|
||||
public static extern c_int SdBusOpenUser(DBus **ret);
|
||||
[Import("libsystemd.so"), LinkName("sd_bus_open_system")]
|
||||
public static extern c_int SdBusOpenSystem(DBus **ret);
|
||||
[Import("libsystemd.so"), LinkName("sd_bus_unref")]
|
||||
public static extern DBus* SdBusUnref(DBus *bus);
|
||||
[Import("libsystemd.so"), LinkName("sd_bus_call")]
|
||||
public static extern c_int SdBusCall(DBus *bus, DBusMsg *m, uint64 usec, DBusErr *ret_error, DBusMsg **reply);
|
||||
[Import("libsystemd.so"), LinkName("sd_bus_process")]
|
||||
public static extern c_int SdBusProcess(DBus *bus, DBusMsg **r);
|
||||
[Import("libsystemd.so"), LinkName("sd_bus_wait")]
|
||||
public static extern c_int SdBusWait(DBus *bus, uint64 timeout_usec);
|
||||
|
||||
[Import("libsystemd.so"), LinkName("sd_bus_message_new_method_call")]
|
||||
public static extern c_int SdBusNewMethodCall(DBus *bus, DBusMsg **m, char8 *destination, char8 *path, char8 *iface, char8 *member);
|
||||
[Import("libsystemd.so"), LinkName("sd_bus_message_unref")]
|
||||
public static extern DBusMsg* SdBusMessageUnref(DBusMsg *m);
|
||||
[Import("libsystemd.so"), LinkName("sd_bus_message_append")]
|
||||
public static extern c_int SdBusMessageAppend(DBusMsg *m, char8 *types, ...);
|
||||
[Import("libsystemd.so"), LinkName("sd_bus_message_append_basic")]
|
||||
public static extern c_int SdBusMessageAppendBasic(DBusMsg *m, DBusType type, void *p);
|
||||
[Import("libsystemd.so"), LinkName("sd_bus_message_append_array")]
|
||||
public static extern c_int SdBusMessageAppendArray(DBusMsg *m, DBusType type, void *ptr, c_size size);
|
||||
[Import("libsystemd.so"), LinkName("sd_bus_message_open_container")]
|
||||
public static extern c_int SdBusMessageOpenContainer(DBusMsg *m, DBusType type, char8 *contents);
|
||||
[Import("libsystemd.so"), LinkName("sd_bus_message_close_container")]
|
||||
public static extern c_int SdBusMessageCloseContainer(DBusMsg *m);
|
||||
|
||||
[Import("libsystemd.so"), LinkName("sd_bus_message_read")]
|
||||
public static extern c_int SdBusMessageRead(DBusMsg *m, char8 *types, ...);
|
||||
[Import("libsystemd.so"), LinkName("sd_bus_message_read_basic")]
|
||||
public static extern c_int SdBusMessageReadBasic(DBusMsg *m, DBusType type, void *p);
|
||||
[Import("libsystemd.so"), LinkName("sd_bus_message_read_array")]
|
||||
public static extern c_int SdBusMessageReadArray(DBusMsg *m, DBusType type, void **ptr, c_size *size);
|
||||
[Import("libsystemd.so"), LinkName("sd_bus_message_skip")]
|
||||
public static extern c_int SdBusMessageSkip(DBusMsg *m, char8 *types);
|
||||
[Import("libsystemd.so"), LinkName("sd_bus_message_enter_container")]
|
||||
public static extern c_int SdBusMessageEnterContainer(DBusMsg *m, DBusType type, char8 *contents);
|
||||
[Import("libsystemd.so"), LinkName("sd_bus_message_exit_container")]
|
||||
public static extern c_int SdBusMessageExitContainer(DBusMsg *m);
|
||||
[Import("libsystemd.so"), LinkName("sd_bus_message_peek_type")]
|
||||
public static extern c_int SdBusMessagePeekType(DBusMsg *m, char8 *type, char8 **contents);
|
||||
|
||||
[Import("libsystemd.so"), LinkName("sd_bus_call_method")]
|
||||
public static extern c_int SdBusCallMethod(DBus *bus, char8 *destination, char8 *path, char8 *iface, char8 *member, DBusErr *ret_error, DBusMsg **reply, char8 *types, ...);
|
||||
[Import("libsystemd.so"), LinkName("sd_bus_match_signal")]
|
||||
public static extern c_int SdBusMatchSignal(DBus *bus, DBusSlot **ret, char8 *sender, char8 *path, char8 *iface, char8 *member, DBusMsgHandler callback, void *userdata);
|
||||
|
||||
[Import("libsystemd.so"), LinkName("sd_bus_error_free")]
|
||||
public static extern void SdBusErrorFree(DBusErr *e);
|
||||
}
|
||||
|
||||
static
|
||||
{
|
||||
public static mixin TryC(int result) { if(result < 0) return .Err; }
|
||||
}
|
||||
#endif
|
Loading…
Add table
Add a link
Reference in a new issue