0
0
Fork 0
haikuports/games-engines/instead/patches/instead-3.3.2.patchset

261 lines
5.5 KiB
Plaintext

From 6137e791240ee8300baf21081610bdefe46d4cbb Mon Sep 17 00:00:00 2001
From: Peter Kosyh <p.kosyh@gmail.com>
Date: Thu, 4 Oct 2018 17:15:24 +0300
Subject: instead: open file dialog
diff --git a/Rules.make.system b/Rules.make.system
index a473816..91198ed 100644
--- a/Rules.make.system
+++ b/Rules.make.system
@@ -28,7 +28,8 @@ LUA_LFLAGS=$(shell pkg-config --libs lua5.1)
SDL_CFLAGS=$(shell sdl-config --cflags)
SDL_LFLAGS=$(shell sdl-config --libs) -lSDL_ttf -lSDL_mixer -lSDL_image -lm
-CFLAGS += -Wall -Dunix -D_USE_UNPACK # -D_SDL_MOD_BUG
+CFLAGS += -O2 -Wall -Dunix -D_USE_UNPACK -D_USE_BROWSE -D_LOCAL_APPDATA # -D_SDL_MOD_BUG
+EXTRA_LDFLAGS += -ltracker -lbe -lstdc++
INSTALLD=install -d -m 0755
INSTALLB=install -m 0755
@@ -36,7 +37,7 @@ INSTALL=install -m 0644
LN=ln -sf
EXE=
-PLATFORM=unix.c
+PLATFORM=haiku.cpp unix.c
RESOURCES=
RM=rm
AR=ar rc
diff --git a/src/haiku.cpp b/src/haiku.cpp
new file mode 100644
index 0000000..0ff1a7a
--- /dev/null
+++ b/src/haiku.cpp
@@ -0,0 +1,110 @@
+#include <FilePanel.h>
+#include <Looper.h>
+#include <Path.h>
+#include <Messenger.h>
+#include <Window.h>
+#include <MenuItem.h>
+#include <MenuBar.h>
+#include <stdio.h>
+#include <compat/sys/stat.h>
+#include <string.h>
+
+extern "C" char *open_file_dialog(void);
+
+class FileFilter: public BRefFilter
+{
+ public:
+ bool Filter(const entry_ref *ref,
+ BNode *node,
+ struct stat_beos *stat,
+ const char *mimeType)
+ {
+ if (S_ISDIR(stat->st_mode))
+ return true;
+ if (!strcmp(mimeType, "application/zip"))
+ return true;
+ if (!strcasecmp(ref->name, "main.lua") ||
+ !strcasecmp(ref->name, "main3.lua"))
+ return true;
+ return false;
+ }
+};
+
+class FileHandler: public BLooper
+{
+ public:
+
+ FileHandler()
+ : BLooper("filepanel listener")
+ {
+ lock = create_sem(0, "filepanel sem");
+ path = NULL;
+ Run();
+ }
+
+ ~FileHandler()
+ {
+ delete_sem(lock);
+ if (path != NULL)
+ free(path);
+ }
+ void MessageReceived(BMessage* message)
+ {
+ switch(message->what)
+ {
+ case B_REFS_RECEIVED:
+ {
+ entry_ref ref;
+
+ message->FindRef("refs", 0, &ref);
+ BEntry entry(&ref, true);
+ BPath xpath;
+ entry.GetPath(&xpath);
+ path = strdup(xpath.Path());
+ break;
+ }
+ case B_CANCEL:
+ break;
+ default:
+ BHandler::MessageReceived(message);
+ return;
+ }
+ release_sem(lock);
+ }
+
+ void Wait() {
+ acquire_sem(lock);
+ }
+
+ char* path;
+
+ private:
+ sem_id lock;
+};
+
+static char ret[PATH_MAX];
+
+char *open_file_dialog(void)
+{
+ FileHandler *handler = new FileHandler();
+ FileFilter filter;
+ BMessenger messenger(handler);
+ BFilePanel panel(B_OPEN_PANEL,
+ &messenger,
+ NULL,
+ B_FILE_NODE,
+ false,
+ NULL,
+ &filter,
+ true);
+ panel.Show();
+ handler->Wait();
+ if (handler->path == NULL) {
+ messenger.SendMessage(B_QUIT_REQUESTED);
+ return NULL;
+ }
+ snprintf(ret, sizeof(ret), "%s", handler->path);
+ ret[sizeof(ret) - 1] = 0;
+ messenger.SendMessage(B_QUIT_REQUESTED);
+ return ret;
+}
diff --git a/src/unix.c b/src/unix.c
index 1d62a3d..7e69728 100644
--- a/src/unix.c
+++ b/src/unix.c
@@ -104,6 +104,7 @@ GdkPixbuf *create_pixbuf(const gchar * filename)
extern char *BROWSE_MENU;
+#ifndef __HAIKU__
char *open_file_dialog(void)
{
#ifndef _USE_GTK
@@ -205,7 +206,7 @@ char *open_file_dialog(void)
return (file[0])?file:NULL;
#endif
}
-
+#endif
char *appdir(void)
{
static char dir[PATH_MAX] = "";
--
2.19.1
From 967ccd108c225ffbdd9f4f793d9c40d73fb27bab Mon Sep 17 00:00:00 2001
From: Peter Kosyh <p.kosyh@gmail.com>
Date: Fri, 5 Oct 2018 11:32:40 +0300
Subject: save settings in B_USER_SETTINGS_DIRECTORY: #3185
diff --git a/src/haiku.cpp b/src/haiku.cpp
index 0ff1a7a..6fc0ee0 100644
--- a/src/haiku.cpp
+++ b/src/haiku.cpp
@@ -1,4 +1,5 @@
#include <FilePanel.h>
+#include <FindDirectory.h>
#include <Looper.h>
#include <Path.h>
#include <Messenger.h>
@@ -108,3 +109,15 @@ char *open_file_dialog(void)
messenger.SendMessage(B_QUIT_REQUESTED);
return ret;
}
+
+extern "C" char *appdir(void);
+
+char *appdir(void)
+{
+ static char dir[PATH_MAX] = "";
+ if (find_directory(B_USER_SETTINGS_DIRECTORY, -1, false, dir, sizeof(dir)) != B_OK)
+ sprintf(dir, "/boot/home/config/settings");
+ strncat(dir, "/Instead", sizeof(dir));
+ dir[sizeof(dir) - 1] = 0;
+ return dir;
+}
diff --git a/src/unix.c b/src/unix.c
index 7e69728..84c9cfa 100644
--- a/src/unix.c
+++ b/src/unix.c
@@ -206,7 +206,7 @@ char *open_file_dialog(void)
return (file[0])?file:NULL;
#endif
}
-#endif
+
char *appdir(void)
{
static char dir[PATH_MAX] = "";
@@ -227,7 +227,7 @@ char *appdir(void)
snprintf(dir, sizeof(dir) - 1 , "%s/.instead", pw->pw_dir);
return dir;
}
-
+#endif
char *game_local_games_path(int cr)
{
char *app = appdir();
--
2.19.1
From d217446bf1eb5b739f34896378ed0ca36869daac Mon Sep 17 00:00:00 2001
From: Peter Kosyh <p.kosyh@gmail.com>
Date: Mon, 8 Oct 2018 09:38:12 +0300
Subject: better file open dialog
diff --git a/src/haiku.cpp b/src/haiku.cpp
index 6fc0ee0..c54b321 100644
--- a/src/haiku.cpp
+++ b/src/haiku.cpp
@@ -20,6 +20,7 @@ class FileFilter: public BRefFilter
struct stat_beos *stat,
const char *mimeType)
{
+ int len = strlen(ref->name);
if (S_ISDIR(stat->st_mode))
return true;
if (!strcmp(mimeType, "application/zip"))
@@ -27,6 +28,10 @@ class FileFilter: public BRefFilter
if (!strcasecmp(ref->name, "main.lua") ||
!strcasecmp(ref->name, "main3.lua"))
return true;
+ if (len > 3 &&
+ (!strcasecmp(ref->name + len - 4, ".idf") ||
+ !strcasecmp(ref->name + len - 4, ".zip")))
+ return true;
return false;
}
};
--
2.19.1