Skip to content

Commit

Permalink
Incomplete file dialog implementation for Haiku
Browse files Browse the repository at this point in the history
  • Loading branch information
jacereda committed Feb 25, 2024
1 parent 26149b6 commit 1fd3b7e
Show file tree
Hide file tree
Showing 4 changed files with 86 additions and 11 deletions.
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
Expand Up @@ -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

Expand Down
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

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

0 comments on commit 1fd3b7e

Please sign in to comment.