summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjacksonmj <mj-pt@jacksonmj.co.uk>2011-04-06 17:12:05 (GMT)
committer Simon <simon@hardwired.org.uk>2011-04-08 10:11:20 (GMT)
commit6ac508a5de77ad8ec7cdba374ad4731d1ee2665a (patch)
treea4799c956442b6163159c6183d6b84966658c346 /src
parent75f6ea610a92d3edac186d2d9b531468fd232f9d (diff)
downloadpowder-6ac508a5de77ad8ec7cdba374ad4731d1ee2665a.zip
powder-6ac508a5de77ad8ec7cdba374ad4731d1ee2665a.tar.gz
Start register_extension support for linux
Also fix a limitation on the length of open: paths
Diffstat (limited to 'src')
-rw-r--r--src/main.c4
-rw-r--r--src/misc.c47
2 files changed, 45 insertions, 6 deletions
diff --git a/src/main.c b/src/main.c
index c1be09f..181c84f 100644
--- a/src/main.c
+++ b/src/main.c
@@ -2236,8 +2236,8 @@ int main(int argc, char *argv[])
{
int size;
void *file_data;
- char fn[64];
- strncpy(fn, argv[i]+5, strlen(argv[i]+5));
+ char *fn = malloc(strlen(argv[i]+5)+1);
+ strcpy(fn, argv[i]+5);
file_data = file_load(fn, &size);
if (file_data)
{
diff --git a/src/misc.c b/src/misc.c
index 3b147bd..78f7ffd 100644
--- a/src/misc.c
+++ b/src/misc.c
@@ -10,6 +10,8 @@
#include "powder.h"
#if defined WIN32
#include <windows.h>
+#else
+#include <unistd.h>
#endif
#ifdef MACOSX
#include <ApplicationServices/ApplicationServices.h>
@@ -487,10 +489,47 @@ int register_extension()
RegCloseKey(newkey);
return 1;
-#elif defined LIN32
- return 0;
-#elif defined LIN64
- return 0;
+#elif defined(LIN32) || defined(LIN64)
+ char *currentfilename = exe_name();
+ FILE *f;
+ char *mimedata =
+"<?xml version=\"1.0\"?>\n"
+" <mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'>\n"
+" <mime-type type=\"application/vnd.powdertoy.save\">\n"
+" <comment>Powder Toy save</comment>\n"
+" <glob pattern=\"*.cps\"/>\n"
+" <glob pattern=\"*.stm\"/>\n"
+" </mime-type>\n"
+"</mime-info>\n";
+ f = fopen("powdertoy-save.xml", "wb");
+ if (!f)
+ return 0;
+ fwrite(mimedata, 1, strlen(mimedata), f);
+ fclose(f);
+
+ char *desktopfiledata_tmp =
+"[Desktop Entry]\n"
+"Type=Application\n"
+"Name=Powder Toy\n"
+"Comment=Physics sandbox game\n"
+"MimeType=application/vnd.powdertoy.save;\n"
+"NoDisplay=true\n";
+ char *desktopfiledata = malloc(strlen(desktopfiledata_tmp)+strlen(currentfilename)+100);
+ strcpy(desktopfiledata, desktopfiledata_tmp);
+ strappend(desktopfiledata, "Exec=");
+ strappend(desktopfiledata, currentfilename);
+ strappend(desktopfiledata, " open:%f\n");
+ f = fopen("powdertoy-tpt.desktop", "wb");
+ if (!f)
+ return 0;
+ fwrite(desktopfiledata, 1, strlen(desktopfiledata), f);
+ fclose(f);
+ system("xdg-mime install powdertoy-save.xml");
+ system("xdg-desktop-menu install powdertoy-tpt.desktop");
+ // TODO: icons
+ unlink("powdertoy-save.xml");
+ unlink("powdertoy-tpt.desktop");
+ return 1;
#elif defined MACOSX
return 0;
#endif