Esempio n. 1
0
QString DesktopFile::pathFromAppId(QString appId)
{
    QStringList paths;
    paths << "~/.local/share/applications"
          << "/usr/local/share/applications/"
          << "/usr/share/applications/";

    return findFileInPaths(appId + ".desktop", paths);
}
Esempio n. 2
0
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;
}