Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Haiku port #735

Draft
wants to merge 9 commits into
base: master
Choose a base branch
from
Draft
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Incomplete file dialog implementation for Haiku
jacereda committed Feb 26, 2024
commit dc3823c4913558a17e5592bb7265a22d0a776de6
70 changes: 70 additions & 0 deletions nfd/nfd_haiku.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
#include "nfd.h"

#include <FilePanel.h>
#include <Window.h>
#include <Path.h>
#include <string.h>

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);
}
11 changes: 8 additions & 3 deletions profiler/build/unix/build.mk
Original file line number Diff line number Diff line change
@@ -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

5 changes: 0 additions & 5 deletions profiler/build/unix/debug.mk
Original file line number Diff line number Diff line change
@@ -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

11 changes: 8 additions & 3 deletions profiler/build/unix/legacy.mk
Original file line number Diff line number Diff line change
@@ -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