diff options
| author | jacksonmj <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) |
| commit | 6ac508a5de77ad8ec7cdba374ad4731d1ee2665a (patch) | |
| tree | a4799c956442b6163159c6183d6b84966658c346 /src | |
| parent | 75f6ea610a92d3edac186d2d9b531468fd232f9d (diff) | |
| download | powder-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.c | 4 | ||||
| -rw-r--r-- | src/misc.c | 47 |
2 files changed, 45 insertions, 6 deletions
@@ -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) { @@ -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 |
