QString DesktopFile::pathFromAppId(QString appId) { QStringList paths; paths << "~/.local/share/applications" << "/usr/local/share/applications/" << "/usr/share/applications/"; return findFileInPaths(appId + ".desktop", paths); }
NPError NPP_New(NPMIMEType pluginType, NPP instance, uint16 mode, int16 argc, char* argn[], char* argv[], NPSavedData* saved) { SqueakPlugin *plugin; char imagename[PATH_MAX]; char *failureUrl= 0; if (instance == NULL) return NPERR_INVALID_INSTANCE_ERROR; plugin= (SqueakPlugin*) NPN_MemAlloc(sizeof(SqueakPlugin)); if (!plugin) return NPERR_OUT_OF_MEMORY_ERROR; plugin->argv= (char**) NPN_MemAlloc(sizeof(char*) * (16 + 2 * argc)); if (!plugin->argv) return NPERR_OUT_OF_MEMORY_ERROR; /* Default settings */ strcpy(imagename, "SqueakPlugin.image"); plugin->instance= instance; plugin->pid= 0; plugin->nswindow= 0; plugin->sqwindow= 0; plugin->display= NULL; plugin->input= 0; plugin->embedded= (mode == NP_EMBED); plugin->srcUrl= NULL; plugin->srcFilename= NULL; plugin->srcId= -1; plugin->failureUrl= 0; plugin->argv[0]= NPN_StrDup(plugin->vmName); plugin->argv[1]= NPN_StrDup("-display"); plugin->argv[2]= NULL; /* inserted later */ plugin->argv[3]= NPN_StrDup("-browserPipes"); plugin->argv[4]= NULL; /* inserted later */ plugin->argv[5]= NULL; /* inserted later */ plugin->argv[7]= NPN_StrDup(""); /* empty document file on cmdline! */ plugin->argc= 8; if (plugin->embedded) { int i; for (i= 0; i < argc; i++) { if (!strcasecmp(argn[i], "imagename")) { strcpy(imagename, argv[i]); } else if (!strcasecmp(argn[i], "failureurl")) failureUrl= argv[i]; plugin->argv[plugin->argc++]= NPN_StrDup(argn[i]); plugin->argv[plugin->argc++]= NPN_StrDup(argv[i] ? argv[i] : ""); if (strcasecmp("SRC", argn[i]) == 0) plugin->srcUrl= NPN_StrDup(argv[i]); } if (!plugin->srcUrl) plugin->srcUrl= NPN_StrDup(""); /* we were embedded without a SRC */ /* find npsqueakrun and image */ { char user_bin_dir[PATH_MAX]; char user_img_dir[PATH_MAX]; char* home= getenv("HOME"); if (home == 0) { fprintf(stderr, "Squeak Plugin: No home directory?!\n"); return NPERR_GENERIC_ERROR; } strcpy(user_bin_dir, home); strcat(user_bin_dir, "/.npsqueak/"); strcpy(user_img_dir, home); strcat(user_img_dir, "/.npsqueak/"); { char* bin_dir_v[PATH_MAX]= {user_bin_dir, SYSTEM_BIN_DIR"/"}; if (findFileInPaths(plugin->vmName, NPSQUEAKRUN, 2 , bin_dir_v) == 0){ fprintf(stderr, "Squeak Plugin: "NPSQUEAKRUN" not found!\n"); return NPERR_GENERIC_ERROR; } } { char* img_dir_v[PATH_MAX]= {user_img_dir, SYSTEM_IMG_DIR"/"}; if (findFileInPaths(plugin->imageName, imagename, 2, img_dir_v) == 0){ fprintf(stderr, "Squeak Plugin: Image file not found: %s\n", imagename); if (failureUrl){ fprintf(stderr, "Squeak Plugin: going to failure URL: %s\n", failureUrl); plugin->failureUrl= NPN_StrDup(failureUrl); }else { fprintf(stderr, "Squeak Plugin: no failure URL.\n"); return NPERR_GENERIC_ERROR; } } plugin->argv[6]= NPN_StrDup(plugin->imageName); } } } else { /* if not embedded srcUrl will be set in NewStream */ plugin->srcUrl= NULL; } plugin->argv[plugin->argc]= 0; if (pipe(&plugin->pipes[SQUEAK_READ]) || pipe(&plugin->pipes[PLUGIN_READ])) { perror("Squeak Plugin: Creating pipes failed"); return NPERR_GENERIC_ERROR; } DPRINT("NP: Created pipes (VM read: %d <- %d, NP read: %d <- %d)\n", plugin->pipes[SQUEAK_READ], plugin->pipes[PLUGIN_WRITE], plugin->pipes[PLUGIN_READ], plugin->pipes[SQUEAK_WRITE]); instance->pdata= (void*) plugin; return NPERR_NO_ERROR; }