diff --git a/nfd/nfd_haiku.cpp b/nfd/nfd_haiku.cpp new file mode 100644 index 0000000000..0c35c9debd --- /dev/null +++ b/nfd/nfd_haiku.cpp @@ -0,0 +1,70 @@ +#include "nfd.h" + +#include +#include +#include +#include + +nfdresult_t NFD_Init(void) { + return NFD_OKAY; +} + +void NFD_Quit(void) {} + +static nfdresult_t dialog(BFilePanel &p, nfdnchar_t **outPath, + const nfdnfilteritem_t *filterList, + nfdfiltersize_t filterCount) { + p.Show(); + while (p.IsShowing()) + usleep(100000); + entry_ref sel; + if (p.GetNextSelectedRef(&sel) == B_OK) { + BEntry e(&sel); + BPath path; + if (e.GetPath(&path) == B_OK) { + outPath[0] = strdup(path.Path()); + return NFD_OKAY; + } + } + return NFD_CANCEL; +} + +class NFDFilter : public BRefFilter { +public: + NFDFilter(const nfdnfilteritem_t *filterList, nfdfiltersize_t filterCount) {} + + bool Filter(const entry_ref *ref, BNode *node, struct stat_beos *stat, + const char *mimeType) override { + return true; + } +}; + +nfdresult_t +NFD_OpenDialogN(nfdnchar_t **outPath, const nfdnfilteritem_t *filterList, + nfdfiltersize_t filterCount, const nfdnchar_t *defaultPath) { + NFDFilter f(filterList, filterCount); + BFilePanel p(B_OPEN_PANEL, NULL, NULL, 0, false, NULL, &f, true, true); + p.Window()->SetTitle(filterList[0].name); + if (defaultPath) + p.SetPanelDirectory(defaultPath); + return dialog(p, outPath, filterList, filterCount); +} + +nfdresult_t NFD_SaveDialogN(nfdnchar_t** outPath, + const nfdnfilteritem_t* filterList, + nfdfiltersize_t filterCount, + const nfdnchar_t* defaultPath, + const nfdnchar_t* defaultName) { + NFDFilter f(filterList, filterCount); + BFilePanel p(B_SAVE_PANEL, NULL, NULL, 0, false, NULL, &f, true, true); + p.Window()->SetTitle(filterList[0].name); + if (defaultPath) + p.SetPanelDirectory(defaultPath); + if (defaultName) + p.SetSaveText(defaultName); + return dialog(p, outPath, filterList, filterCount); +} + +void NFD_FreePathN(nfdnchar_t* filePath) { + free(filePath); +} diff --git a/profiler/build/unix/build.mk b/profiler/build/unix/build.mk index 93b4938535..153dfb91ec 100644 --- a/profiler/build/unix/build.mk +++ b/profiler/build/unix/build.mk @@ -21,9 +21,14 @@ else INCLUDES += $(shell pkg-config --cflags gtk+-3.0) LIBS += $(shell pkg-config --libs gtk+-3.0) else - SRC += ../../../nfd/nfd_portal.cpp - INCLUDES += $(shell pkg-config --cflags dbus-1) - LIBS += $(shell pkg-config --libs dbus-1) + ifeq ($(shell uname -o),Haiku) + SRC += ../../../nfd/nfd_haiku.cpp + LIBS += -lbe -ltracker + else + SRC += ../../../nfd/nfd_portal.cpp + INCLUDES += $(shell pkg-config --cflags dbus-1) + LIBS += $(shell pkg-config --libs dbus-1) + endif endif endif diff --git a/profiler/build/unix/debug.mk b/profiler/build/unix/debug.mk index 0187f96c1f..2afc422dc0 100644 --- a/profiler/build/unix/debug.mk +++ b/profiler/build/unix/debug.mk @@ -1,10 +1,5 @@ -ifeq ($(shell uname -o),Haiku) -CFLAGS := -gdwarf-3 -Wall -LDFLAGS := -gdwarf-3 -else CFLAGS := -g3 -Wall LDFLAGS := -g3 -endif DEFINES := -DDEBUG BUILD := debug diff --git a/profiler/build/unix/legacy.mk b/profiler/build/unix/legacy.mk index 87e154076e..f2410c7ade 100644 --- a/profiler/build/unix/legacy.mk +++ b/profiler/build/unix/legacy.mk @@ -23,9 +23,14 @@ else INCLUDES += $(shell pkg-config --cflags gtk+-3.0) LIBS += $(shell pkg-config --libs gtk+-3.0) else - SRC += ../../../nfd/nfd_portal.cpp - INCLUDES += $(shell pkg-config --cflags dbus-1) - LIBS += $(shell pkg-config --libs dbus-1) + ifeq ($(shell uname -o),Haiku) + SRC += ../../../nfd/nfd_haiku.cpp + LIBS += -lbe -ltracker + else + SRC += ../../../nfd/nfd_portal.cpp + INCLUDES += $(shell pkg-config --cflags dbus-1) + LIBS += $(shell pkg-config --libs dbus-1) + endif endif endif endif