1
0
mirror of https://github.com/wolfpld/tracy.git synced 2025-03-20 07:40:02 +08:00

Incomplete file dialog implementation for Haiku

This commit is contained in:
Jorge Acereda 2024-02-25 19:28:22 +01:00
parent 945db73ec6
commit dc3823c491
4 changed files with 86 additions and 11 deletions

70
nfd/nfd_haiku.cpp Normal file
View File

@ -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);
}

View File

@ -21,9 +21,14 @@ else
INCLUDES += $(shell pkg-config --cflags gtk+-3.0) INCLUDES += $(shell pkg-config --cflags gtk+-3.0)
LIBS += $(shell pkg-config --libs gtk+-3.0) LIBS += $(shell pkg-config --libs gtk+-3.0)
else else
SRC += ../../../nfd/nfd_portal.cpp ifeq ($(shell uname -o),Haiku)
INCLUDES += $(shell pkg-config --cflags dbus-1) SRC += ../../../nfd/nfd_haiku.cpp
LIBS += $(shell pkg-config --libs dbus-1) 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 endif

View File

@ -1,10 +1,5 @@
ifeq ($(shell uname -o),Haiku)
CFLAGS := -gdwarf-3 -Wall
LDFLAGS := -gdwarf-3
else
CFLAGS := -g3 -Wall CFLAGS := -g3 -Wall
LDFLAGS := -g3 LDFLAGS := -g3
endif
DEFINES := -DDEBUG DEFINES := -DDEBUG
BUILD := debug BUILD := debug

View File

@ -23,9 +23,14 @@ else
INCLUDES += $(shell pkg-config --cflags gtk+-3.0) INCLUDES += $(shell pkg-config --cflags gtk+-3.0)
LIBS += $(shell pkg-config --libs gtk+-3.0) LIBS += $(shell pkg-config --libs gtk+-3.0)
else else
SRC += ../../../nfd/nfd_portal.cpp ifeq ($(shell uname -o),Haiku)
INCLUDES += $(shell pkg-config --cflags dbus-1) SRC += ../../../nfd/nfd_haiku.cpp
LIBS += $(shell pkg-config --libs dbus-1) 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 endif
endif endif