~ubuntu-branches/ubuntu/raring/desktop-file-utils/raring

« back to all changes in this revision

Viewing changes to src/validate.c

  • Committer: Package Import Robot
  • Author(s): Sebastien Bacher
  • Date: 2012-11-06 16:58:04 UTC
  • mfrom: (1.1.11)
  • Revision ID: package-import@ubuntu.com-20121106165804-dq363hp9x3uitxro
Tags: 0.21-0ubuntu1
New upstream version

Show diffs side-by-side

added added

removed removed

Lines of Context:
112
112
 
113
113
  gboolean     kde_reserved_warnings;
114
114
  gboolean     no_deprecated_warnings;
 
115
  gboolean     no_hints;
115
116
 
116
117
  char        *main_group;
117
118
  DesktopType  type;
360
361
};
361
362
 
362
363
static const char *show_in_registered[] = {
363
 
  "GNOME", "KDE", "LXDE", "MATE", "Razor", "ROX", "Unity", "XFCE", "Old"
 
364
  "GNOME", "KDE", "LXDE", "MATE", "Razor", "ROX", "TDE", "Unity", "XFCE", "Old"
 
365
};
 
366
 
 
367
static struct {
 
368
  const char   *name;
 
369
  const char   *first_arg[3];
 
370
  unsigned int  additional_args;
 
371
} registered_autostart_condition[] = {
 
372
  { "GNOME",     { NULL }, 1 },
 
373
  { "GNOME3",    { "if-session", "unless-session", NULL }, 1},
 
374
  { "GSettings", { NULL }, 2 }
364
375
};
365
376
 
366
377
static struct {
368
379
  gboolean    main;
369
380
  gboolean    require_only_show_in;
370
381
  gboolean    deprecated;
371
 
  const char *requires[4];
 
382
  const char *requires[2];
 
383
  const char *suggests[4];
372
384
} registered_categories[] = {
373
 
  { "AudioVideo",             TRUE,  FALSE, FALSE, { NULL } },
374
 
  { "Audio",                  TRUE,  FALSE, FALSE, { "AudioVideo", NULL } },
375
 
  { "Video",                  TRUE,  FALSE, FALSE, { "AudioVideo", NULL } },
376
 
  { "Development",            TRUE,  FALSE, FALSE, { NULL } },
377
 
  { "Education",              TRUE,  FALSE, FALSE, { NULL } },
378
 
  { "Game",                   TRUE,  FALSE, FALSE, { NULL } },
379
 
  { "Graphics",               TRUE,  FALSE, FALSE, { NULL } },
380
 
  { "Network",                TRUE,  FALSE, FALSE, { NULL } },
381
 
  { "Office",                 TRUE,  FALSE, FALSE, { NULL } },
382
 
  { "Settings",               TRUE,  FALSE, FALSE, { NULL } },
383
 
  { "System",                 TRUE,  FALSE, FALSE, { NULL } },
384
 
  { "Utility",                TRUE,  FALSE, FALSE, { NULL } },
385
 
  { "Audio",                  FALSE, FALSE, FALSE, { "Development", NULL } },
386
 
  { "Video",                  FALSE, FALSE, FALSE, { "Development", NULL } },
387
 
  { "Building",               FALSE, FALSE, FALSE, { "Development", NULL } },
388
 
  { "Debugger",               FALSE, FALSE, FALSE, { "Development", NULL } },
389
 
  { "IDE",                    FALSE, FALSE, FALSE, { "Development", NULL } },
390
 
  { "GUIDesigner",            FALSE, FALSE, FALSE, { "Development", NULL } },
391
 
  { "Profiling",              FALSE, FALSE, FALSE, { "Development", NULL } },
392
 
  { "RevisionControl",        FALSE, FALSE, FALSE, { "Development", NULL } },
393
 
  { "Translation",            FALSE, FALSE, FALSE, { "Development", NULL } },
394
 
  { "Calendar",               FALSE, FALSE, FALSE, { "Office", NULL } },
395
 
  { "ContactManagement",      FALSE, FALSE, FALSE, { "Office", NULL } },
396
 
  { "Database",               FALSE, FALSE, FALSE, { "Office", "Development", "AudioVideo", NULL } },
397
 
  { "Dictionary",             FALSE, FALSE, FALSE, { "Office;TextTools", NULL } },
398
 
  { "Chart",                  FALSE, FALSE, FALSE, { "Office", NULL } },
399
 
  { "Email",                  FALSE, FALSE, FALSE, { "Office;Network", NULL } },
400
 
  { "Finance",                FALSE, FALSE, FALSE, { "Office", NULL } },
401
 
  { "FlowChart",              FALSE, FALSE, FALSE, { "Office", NULL } },
402
 
  { "PDA",                    FALSE, FALSE, FALSE, { "Office", NULL } },
403
 
  { "ProjectManagement",      FALSE, FALSE, FALSE, { "Office;Development", NULL } },
404
 
  { "Presentation",           FALSE, FALSE, FALSE, { "Office", NULL } },
405
 
  { "Spreadsheet",            FALSE, FALSE, FALSE, { "Office", NULL } },
406
 
  { "WordProcessor",          FALSE, FALSE, FALSE, { "Office", NULL } },
407
 
  { "2DGraphics",             FALSE, FALSE, FALSE, { "Graphics", NULL } },
408
 
  { "VectorGraphics",         FALSE, FALSE, FALSE, { "Graphics;2DGraphics", NULL } },
409
 
  { "RasterGraphics",         FALSE, FALSE, FALSE, { "Graphics;2DGraphics", NULL } },
410
 
  { "3DGraphics",             FALSE, FALSE, FALSE, { "Graphics", NULL } },
411
 
  { "Scanning",               FALSE, FALSE, FALSE, { "Graphics", NULL } },
412
 
  { "OCR",                    FALSE, FALSE, FALSE, { "Graphics;Scanning", NULL } },
413
 
  { "Photography",            FALSE, FALSE, FALSE, { "Graphics", "Office", NULL } },
414
 
  { "Publishing",             FALSE, FALSE, FALSE, { "Graphics", "Office", NULL } },
415
 
  { "Viewer",                 FALSE, FALSE, FALSE, { "Graphics", "Office", NULL } },
416
 
  { "TextTools",              FALSE, FALSE, FALSE, { "Utility", NULL } },
417
 
  { "DesktopSettings",        FALSE, FALSE, FALSE, { "Settings", NULL } },
418
 
  { "HardwareSettings",       FALSE, FALSE, FALSE, { "Settings", NULL } },
419
 
  { "Printing",               FALSE, FALSE, FALSE, { "HardwareSettings;Settings", NULL } },
420
 
  { "PackageManager",         FALSE, FALSE, FALSE, { "Settings", NULL } },
421
 
  { "Dialup",                 FALSE, FALSE, FALSE, { "Network", NULL } },
422
 
  { "InstantMessaging",       FALSE, FALSE, FALSE, { "Network", NULL } },
423
 
  { "Chat",                   FALSE, FALSE, FALSE, { "Network", NULL } },
424
 
  { "IRCClient",              FALSE, FALSE, FALSE, { "Network", NULL } },
425
 
  { "FileTransfer",           FALSE, FALSE, FALSE, { "Network", NULL } },
426
 
  { "HamRadio",               FALSE, FALSE, FALSE, { "Network", "Audio", NULL } },
427
 
  { "News",                   FALSE, FALSE, FALSE, { "Network", NULL } },
428
 
  { "P2P",                    FALSE, FALSE, FALSE, { "Network", NULL } },
429
 
  { "RemoteAccess",           FALSE, FALSE, FALSE, { "Network", NULL } },
430
 
  { "Telephony",              FALSE, FALSE, FALSE, { "Network", NULL } },
431
 
  { "TelephonyTools",         FALSE, FALSE, FALSE, { "Utility", NULL } },
432
 
  { "VideoConference",        FALSE, FALSE, FALSE, { "Network", NULL } },
433
 
  { "WebBrowser",             FALSE, FALSE, FALSE, { "Network", NULL } },
434
 
  { "WebDevelopment",         FALSE, FALSE, FALSE, { "Network", "Development", NULL } },
435
 
  { "Midi",                   FALSE, FALSE, FALSE, { "AudioVideo;Audio", NULL } },
436
 
  { "Mixer",                  FALSE, FALSE, FALSE, { "AudioVideo;Audio", NULL } },
437
 
  { "Sequencer",              FALSE, FALSE, FALSE, { "AudioVideo;Audio", NULL } },
438
 
  { "Tuner",                  FALSE, FALSE, FALSE, { "AudioVideo;Audio", NULL } },
439
 
  { "TV",                     FALSE, FALSE, FALSE, { "AudioVideo;Video", NULL } },
440
 
  { "AudioVideoEditing",      FALSE, FALSE, FALSE, { "Audio", "Video", "AudioVideo", NULL } },
441
 
  { "Player",                 FALSE, FALSE, FALSE, { "Audio", "Video", "AudioVideo", NULL } },
442
 
  { "Recorder",               FALSE, FALSE, FALSE, { "Audio", "Video", "AudioVideo", NULL } },
443
 
  { "DiscBurning",            FALSE, FALSE, FALSE, { "Audio", "Video", "AudioVideo", NULL } },
444
 
  { "ActionGame",             FALSE, FALSE, FALSE, { "Game", NULL } },
445
 
  { "AdventureGame",          FALSE, FALSE, FALSE, { "Game", NULL } },
446
 
  { "ArcadeGame",             FALSE, FALSE, FALSE, { "Game", NULL } },
447
 
  { "BoardGame",              FALSE, FALSE, FALSE, { "Game", NULL } },
448
 
  { "BlocksGame",             FALSE, FALSE, FALSE, { "Game", NULL } },
449
 
  { "CardGame",               FALSE, FALSE, FALSE, { "Game", NULL } },
450
 
  { "KidsGame",               FALSE, FALSE, FALSE, { "Game", NULL } },
451
 
  { "LogicGame",              FALSE, FALSE, FALSE, { "Game", NULL } },
452
 
  { "RolePlaying",            FALSE, FALSE, FALSE, { "Game", NULL } },
453
 
  { "Simulation",             FALSE, FALSE, FALSE, { "Game", NULL } },
454
 
  { "SportsGame",             FALSE, FALSE, FALSE, { "Game", NULL } },
455
 
  { "StrategyGame",           FALSE, FALSE, FALSE, { "Game", NULL } },
456
 
  { "Art",                    FALSE, FALSE, FALSE, { "Education", NULL } },
457
 
  { "Construction",           FALSE, FALSE, FALSE, { "Education", NULL } },
458
 
  { "Music",                  FALSE, FALSE, FALSE, { "AudioVideo;Education", NULL } },
459
 
  { "Languages",              FALSE, FALSE, FALSE, { "Education", NULL } },
460
 
  { "Science",                FALSE, FALSE, FALSE, { "Education", NULL } },
461
 
  { "ArtificialIntelligence", FALSE, FALSE, FALSE, { "Education;Science", NULL } },
462
 
  { "Astronomy",              FALSE, FALSE, FALSE, { "Education;Science", NULL } },
463
 
  { "Biology",                FALSE, FALSE, FALSE, { "Education;Science", NULL } },
464
 
  { "Chemistry",              FALSE, FALSE, FALSE, { "Education;Science", NULL } },
465
 
  { "ComputerScience",        FALSE, FALSE, FALSE, { "Education;Science", NULL } },
466
 
  { "DataVisualization",      FALSE, FALSE, FALSE, { "Education;Science", NULL } },
467
 
  { "Economy",                FALSE, FALSE, FALSE, { "Education", NULL } },
468
 
  { "Electricity",            FALSE, FALSE, FALSE, { "Education;Science", NULL } },
469
 
  { "Geography",              FALSE, FALSE, FALSE, { "Education", NULL } },
470
 
  { "Geology",                FALSE, FALSE, FALSE, { "Education;Science", NULL } },
471
 
  { "Geoscience",             FALSE, FALSE, FALSE, { "Education;Science", NULL } },
472
 
  { "History",                FALSE, FALSE, FALSE, { "Education", NULL } },
473
 
  { "ImageProcessing",        FALSE, FALSE, FALSE, { "Education;Science", NULL } },
474
 
  { "Literature",             FALSE, FALSE, FALSE, { "Education", NULL } },
475
 
  { "Math",                   FALSE, FALSE, FALSE, { "Education;Science", NULL } },
476
 
  { "NumericalAnalysis",      FALSE, FALSE, FALSE, { "Education;Science;Math", NULL } },
477
 
  { "MedicalSoftware",        FALSE, FALSE, FALSE, { "Education;Science", NULL } },
478
 
  { "Physics",                FALSE, FALSE, FALSE, { "Education;Science", NULL } },
479
 
  { "Robotics",               FALSE, FALSE, FALSE, { "Education;Science", NULL } },
480
 
  { "Sports",                 FALSE, FALSE, FALSE, { "Education", NULL } },
481
 
  { "ParallelComputing",      FALSE, FALSE, FALSE, { "Education;Science;ComputerScience", NULL } },
482
 
  { "Amusement",              FALSE, FALSE, FALSE, { NULL } },
483
 
  { "Archiving",              FALSE, FALSE, FALSE, { "Utility", NULL } },
484
 
  { "Compression",            FALSE, FALSE, FALSE, { "Utility;Archiving", NULL } },
485
 
  { "Electronics",            FALSE, FALSE, FALSE, { NULL } },
486
 
  { "Emulator",               FALSE, FALSE, FALSE, { "System", "Game", NULL } },
487
 
  { "Engineering",            FALSE, FALSE, FALSE, { NULL } },
488
 
  { "FileTools",              FALSE, FALSE, FALSE, { "Utility", "System", NULL } },
489
 
  { "FileManager",            FALSE, FALSE, FALSE, { "System;FileTools", NULL } },
490
 
  { "TerminalEmulator",       FALSE, FALSE, FALSE, { "System", NULL } },
491
 
  { "Filesystem",             FALSE, FALSE, FALSE, { "System", NULL } },
492
 
  { "Monitor",                FALSE, FALSE, FALSE, { "System", NULL } },
493
 
  { "Security",               FALSE, FALSE, FALSE, { "Settings", "System", NULL } },
494
 
  { "Accessibility",          FALSE, FALSE, FALSE, { "Settings", "Utility", NULL } },
495
 
  { "Calculator",             FALSE, FALSE, FALSE, { "Utility", NULL } },
496
 
  { "Clock",                  FALSE, FALSE, FALSE, { "Utility", NULL } },
497
 
  { "TextEditor",             FALSE, FALSE, FALSE, { "Utility", NULL } },
498
 
  { "Documentation",          FALSE, FALSE, FALSE, { NULL } },
499
 
  { "Core",                   FALSE, FALSE, FALSE, { NULL } },
500
 
  { "KDE",                    FALSE, FALSE, FALSE, { "Qt", NULL } },
501
 
  { "GNOME",                  FALSE, FALSE, FALSE, { "GTK", NULL } },
502
 
  { "GTK",                    FALSE, FALSE, FALSE, { NULL } },
503
 
  { "Qt",                     FALSE, FALSE, FALSE, { NULL } },
504
 
  { "Motif",                  FALSE, FALSE, FALSE, { NULL } },
505
 
  { "Java",                   FALSE, FALSE, FALSE, { NULL } },
506
 
  { "ConsoleOnly",            FALSE, FALSE, FALSE, { NULL } },
507
 
  { "Screensaver",            FALSE, TRUE,  FALSE, { NULL } },
508
 
  { "TrayIcon",               FALSE, TRUE,  FALSE, { NULL } },
509
 
  { "Applet",                 FALSE, TRUE,  FALSE, { NULL } },
510
 
  { "Shell",                  FALSE, TRUE,  FALSE, { NULL } },
511
 
  { "Application",            FALSE, FALSE, TRUE,  { NULL } },
512
 
  { "Applications",           FALSE, FALSE, TRUE,  { NULL } }
 
385
  { "AudioVideo",             TRUE,  FALSE, FALSE, { NULL }, { NULL } },
 
386
  { "Audio",                  TRUE,  FALSE, FALSE, { "AudioVideo", NULL }, { NULL } },
 
387
  { "Video",                  TRUE,  FALSE, FALSE, { "AudioVideo", NULL }, { NULL } },
 
388
  { "Development",            TRUE,  FALSE, FALSE, { NULL }, { NULL } },
 
389
  { "Education",              TRUE,  FALSE, FALSE, { NULL }, { NULL } },
 
390
  { "Game",                   TRUE,  FALSE, FALSE, { NULL }, { NULL } },
 
391
  { "Graphics",               TRUE,  FALSE, FALSE, { NULL }, { NULL } },
 
392
  { "Network",                TRUE,  FALSE, FALSE, { NULL }, { NULL } },
 
393
  { "Office",                 TRUE,  FALSE, FALSE, { NULL }, { NULL } },
 
394
  { "Science",                TRUE,  FALSE, FALSE, { NULL }, { NULL } },
 
395
  { "Settings",               TRUE,  FALSE, FALSE, { NULL }, { NULL } },
 
396
  { "System",                 TRUE,  FALSE, FALSE, { NULL }, { NULL } },
 
397
  { "Utility",                TRUE,  FALSE, FALSE, { NULL }, { NULL } },
 
398
  { "Audio",                  FALSE, FALSE, FALSE, { NULL }, { "Development", NULL } },
 
399
  { "Video",                  FALSE, FALSE, FALSE, { NULL }, { "Development", NULL } },
 
400
  { "Building",               FALSE, FALSE, FALSE, { NULL }, { "Development", NULL } },
 
401
  { "Debugger",               FALSE, FALSE, FALSE, { NULL }, { "Development", NULL } },
 
402
  { "IDE",                    FALSE, FALSE, FALSE, { NULL }, { "Development", NULL } },
 
403
  { "GUIDesigner",            FALSE, FALSE, FALSE, { NULL }, { "Development", NULL } },
 
404
  { "Profiling",              FALSE, FALSE, FALSE, { NULL }, { "Development", NULL } },
 
405
  { "RevisionControl",        FALSE, FALSE, FALSE, { NULL }, { "Development", NULL } },
 
406
  { "Translation",            FALSE, FALSE, FALSE, { NULL }, { "Development", NULL } },
 
407
  { "Calendar",               FALSE, FALSE, FALSE, { NULL }, { "Office", NULL } },
 
408
  { "ContactManagement",      FALSE, FALSE, FALSE, { NULL }, { "Office", NULL } },
 
409
  { "Database",               FALSE, FALSE, FALSE, { NULL }, { "Office", "Development", "AudioVideo", NULL } },
 
410
  { "Dictionary",             FALSE, FALSE, FALSE, { NULL }, { "Office", "TextTools", NULL } },
 
411
  { "Chart",                  FALSE, FALSE, FALSE, { NULL }, { "Office", NULL } },
 
412
  { "Email",                  FALSE, FALSE, FALSE, { NULL }, { "Office", "Network", NULL } },
 
413
  { "Finance",                FALSE, FALSE, FALSE, { NULL }, { "Office", NULL } },
 
414
  { "FlowChart",              FALSE, FALSE, FALSE, { NULL }, { "Office", NULL } },
 
415
  { "PDA",                    FALSE, FALSE, FALSE, { NULL }, { "Office", NULL } },
 
416
  { "ProjectManagement",      FALSE, FALSE, FALSE, { NULL }, { "Office", "Development", NULL } },
 
417
  { "Presentation",           FALSE, FALSE, FALSE, { NULL }, { "Office", NULL } },
 
418
  { "Spreadsheet",            FALSE, FALSE, FALSE, { NULL }, { "Office", NULL } },
 
419
  { "WordProcessor",          FALSE, FALSE, FALSE, { NULL }, { "Office", NULL } },
 
420
  { "2DGraphics",             FALSE, FALSE, FALSE, { NULL }, { "Graphics", NULL } },
 
421
  { "VectorGraphics",         FALSE, FALSE, FALSE, { NULL }, { "Graphics;2DGraphics", NULL } },
 
422
  { "RasterGraphics",         FALSE, FALSE, FALSE, { NULL }, { "Graphics;2DGraphics", NULL } },
 
423
  { "3DGraphics",             FALSE, FALSE, FALSE, { NULL }, { "Graphics", NULL } },
 
424
  { "Scanning",               FALSE, FALSE, FALSE, { NULL }, { "Graphics", NULL } },
 
425
  { "OCR",                    FALSE, FALSE, FALSE, { NULL }, { "Graphics;Scanning", NULL } },
 
426
  { "Photography",            FALSE, FALSE, FALSE, { NULL }, { "Graphics", "Office", NULL } },
 
427
  { "Publishing",             FALSE, FALSE, FALSE, { NULL }, { "Graphics", "Office", NULL } },
 
428
  { "Viewer",                 FALSE, FALSE, FALSE, { NULL }, { "Graphics", "Office", NULL } },
 
429
  { "TextTools",              FALSE, FALSE, FALSE, { NULL }, { "Utility", NULL } },
 
430
  { "DesktopSettings",        FALSE, FALSE, FALSE, { NULL }, { "Settings", NULL } },
 
431
  { "HardwareSettings",       FALSE, FALSE, FALSE, { NULL }, { "Settings", NULL } },
 
432
  { "Printing",               FALSE, FALSE, FALSE, { NULL }, { "HardwareSettings;Settings", NULL } },
 
433
  { "PackageManager",         FALSE, FALSE, FALSE, { NULL }, { "Settings", NULL } },
 
434
  { "Dialup",                 FALSE, FALSE, FALSE, { NULL }, { "Network", NULL } },
 
435
  { "InstantMessaging",       FALSE, FALSE, FALSE, { NULL }, { "Network", NULL } },
 
436
  { "Chat",                   FALSE, FALSE, FALSE, { NULL }, { "Network", NULL } },
 
437
  { "IRCClient",              FALSE, FALSE, FALSE, { NULL }, { "Network", NULL } },
 
438
  { "Feed",                   FALSE, FALSE, FALSE, { NULL }, { "Network", NULL } },
 
439
  { "FileTransfer",           FALSE, FALSE, FALSE, { NULL }, { "Network", NULL } },
 
440
  { "HamRadio",               FALSE, FALSE, FALSE, { NULL }, { "Network", "Audio", NULL } },
 
441
  { "News",                   FALSE, FALSE, FALSE, { NULL }, { "Network", NULL } },
 
442
  { "P2P",                    FALSE, FALSE, FALSE, { NULL }, { "Network", NULL } },
 
443
  { "RemoteAccess",           FALSE, FALSE, FALSE, { NULL }, { "Network", NULL } },
 
444
  { "Telephony",              FALSE, FALSE, FALSE, { NULL }, { "Network", NULL } },
 
445
  { "TelephonyTools",         FALSE, FALSE, FALSE, { NULL }, { "Utility", NULL } },
 
446
  { "VideoConference",        FALSE, FALSE, FALSE, { NULL }, { "Network", NULL } },
 
447
  { "WebBrowser",             FALSE, FALSE, FALSE, { NULL }, { "Network", NULL } },
 
448
  { "WebDevelopment",         FALSE, FALSE, FALSE, { NULL }, { "Network", "Development", NULL } },
 
449
  { "Midi",                   FALSE, FALSE, FALSE, { NULL }, { "AudioVideo;Audio", NULL } },
 
450
  { "Mixer",                  FALSE, FALSE, FALSE, { NULL }, { "AudioVideo;Audio", NULL } },
 
451
  { "Sequencer",              FALSE, FALSE, FALSE, { NULL }, { "AudioVideo;Audio", NULL } },
 
452
  { "Tuner",                  FALSE, FALSE, FALSE, { NULL }, { "AudioVideo;Audio", NULL } },
 
453
  { "TV",                     FALSE, FALSE, FALSE, { NULL }, { "AudioVideo;Video", NULL } },
 
454
  { "AudioVideoEditing",      FALSE, FALSE, FALSE, { NULL }, { "Audio", "Video", "AudioVideo", NULL } },
 
455
  { "Player",                 FALSE, FALSE, FALSE, { NULL }, { "Audio", "Video", "AudioVideo", NULL } },
 
456
  { "Recorder",               FALSE, FALSE, FALSE, { NULL }, { "Audio", "Video", "AudioVideo", NULL } },
 
457
  { "DiscBurning",            FALSE, FALSE, FALSE, { NULL }, { "Audio", "Video", "AudioVideo", NULL } },
 
458
  { "ActionGame",             FALSE, FALSE, FALSE, { NULL }, { "Game", NULL } },
 
459
  { "AdventureGame",          FALSE, FALSE, FALSE, { NULL }, { "Game", NULL } },
 
460
  { "ArcadeGame",             FALSE, FALSE, FALSE, { NULL }, { "Game", NULL } },
 
461
  { "BoardGame",              FALSE, FALSE, FALSE, { NULL }, { "Game", NULL } },
 
462
  { "BlocksGame",             FALSE, FALSE, FALSE, { NULL }, { "Game", NULL } },
 
463
  { "CardGame",               FALSE, FALSE, FALSE, { NULL }, { "Game", NULL } },
 
464
  { "KidsGame",               FALSE, FALSE, FALSE, { NULL }, { "Game", NULL } },
 
465
  { "LogicGame",              FALSE, FALSE, FALSE, { NULL }, { "Game", NULL } },
 
466
  { "RolePlaying",            FALSE, FALSE, FALSE, { NULL }, { "Game", NULL } },
 
467
  { "Shooter",                FALSE, FALSE, FALSE, { NULL }, { "Game", NULL } },
 
468
  { "Simulation",             FALSE, FALSE, FALSE, { NULL }, { "Game", NULL } },
 
469
  { "SportsGame",             FALSE, FALSE, FALSE, { NULL }, { "Game", NULL } },
 
470
  { "StrategyGame",           FALSE, FALSE, FALSE, { NULL }, { "Game", NULL } },
 
471
  { "Art",                    FALSE, FALSE, FALSE, { NULL }, { "Education", "Science", NULL } },
 
472
  { "Construction",           FALSE, FALSE, FALSE, { NULL }, { "Education", "Science", NULL } },
 
473
  { "Music",                  FALSE, FALSE, FALSE, { NULL }, { "AudioVideo", "Education", NULL } },
 
474
  { "Languages",              FALSE, FALSE, FALSE, { NULL }, { "Education", "Science", NULL } },
 
475
  { "ArtificialIntelligence", FALSE, FALSE, FALSE, { NULL }, { "Education", "Science", NULL } },
 
476
  { "Astronomy",              FALSE, FALSE, FALSE, { NULL }, { "Education", "Science", NULL } },
 
477
  { "Biology",                FALSE, FALSE, FALSE, { NULL }, { "Education", "Science", NULL } },
 
478
  { "Chemistry",              FALSE, FALSE, FALSE, { NULL }, { "Education", "Science", NULL } },
 
479
  { "ComputerScience",        FALSE, FALSE, FALSE, { NULL }, { "Education", "Science", NULL } },
 
480
  { "DataVisualization",      FALSE, FALSE, FALSE, { NULL }, { "Education", "Science", NULL } },
 
481
  { "Economy",                FALSE, FALSE, FALSE, { NULL }, { "Education", "Science", NULL } },
 
482
  { "Electricity",            FALSE, FALSE, FALSE, { NULL }, { "Education", "Science", NULL } },
 
483
  { "Geography",              FALSE, FALSE, FALSE, { NULL }, { "Education", "Science", NULL } },
 
484
  { "Geology",                FALSE, FALSE, FALSE, { NULL }, { "Education", "Science", NULL } },
 
485
  { "Geoscience",             FALSE, FALSE, FALSE, { NULL }, { "Education", "Science", NULL } },
 
486
  { "History",                FALSE, FALSE, FALSE, { NULL }, { "Education", "Science", NULL } },
 
487
  { "Humanities",             FALSE, FALSE, FALSE, { NULL }, { "Education", "Science", NULL } },
 
488
  { "ImageProcessing",        FALSE, FALSE, FALSE, { NULL }, { "Education", "Science", NULL } },
 
489
  { "Literature",             FALSE, FALSE, FALSE, { NULL }, { "Education", "Science", NULL } },
 
490
  { "Maps",                   FALSE, FALSE, FALSE, { NULL }, { "Education", "Science", "Utility", NULL } },
 
491
  { "Math",                   FALSE, FALSE, FALSE, { NULL }, { "Education", "Science", NULL } },
 
492
  { "NumericalAnalysis",      FALSE, FALSE, FALSE, { NULL }, { "Education;Math", "Science;Math", NULL } },
 
493
  { "MedicalSoftware",        FALSE, FALSE, FALSE, { NULL }, { "Education", "Science", NULL } },
 
494
  { "Physics",                FALSE, FALSE, FALSE, { NULL }, { "Education", "Science", NULL } },
 
495
  { "Robotics",               FALSE, FALSE, FALSE, { NULL }, { "Education", "Science", NULL } },
 
496
  { "Spirituality",           FALSE, FALSE, FALSE, { NULL }, { "Education", "Science", "Utility", NULL } },
 
497
  { "Sports",                 FALSE, FALSE, FALSE, { NULL }, { "Education", "Science", NULL } },
 
498
  { "ParallelComputing",      FALSE, FALSE, FALSE, { NULL }, { "Education;ComputerScience", "Science;ComputerScience", NULL } },
 
499
  { "Amusement",              FALSE, FALSE, FALSE, { NULL }, { NULL } },
 
500
  { "Archiving",              FALSE, FALSE, FALSE, { NULL }, { "Utility", NULL } },
 
501
  { "Compression",            FALSE, FALSE, FALSE, { NULL }, { "Utility;Archiving", NULL } },
 
502
  { "Electronics",            FALSE, FALSE, FALSE, { NULL }, { NULL } },
 
503
  { "Emulator",               FALSE, FALSE, FALSE, { NULL }, { "System", "Game", NULL } },
 
504
  { "Engineering",            FALSE, FALSE, FALSE, { NULL }, { NULL } },
 
505
  { "FileTools",              FALSE, FALSE, FALSE, { NULL }, { "Utility", "System", NULL } },
 
506
  { "FileManager",            FALSE, FALSE, FALSE, { NULL }, { "System;FileTools", NULL } },
 
507
  { "TerminalEmulator",       FALSE, FALSE, FALSE, { NULL }, { "System", NULL } },
 
508
  { "Filesystem",             FALSE, FALSE, FALSE, { NULL }, { "System", NULL } },
 
509
  { "Monitor",                FALSE, FALSE, FALSE, { NULL }, { "System", "Network", NULL } },
 
510
  { "Security",               FALSE, FALSE, FALSE, { NULL }, { "Settings", "System", NULL } },
 
511
  { "Accessibility",          FALSE, FALSE, FALSE, { NULL }, { "Settings", "Utility", NULL } },
 
512
  { "Calculator",             FALSE, FALSE, FALSE, { NULL }, { "Utility", NULL } },
 
513
  { "Clock",                  FALSE, FALSE, FALSE, { NULL }, { "Utility", NULL } },
 
514
  { "TextEditor",             FALSE, FALSE, FALSE, { NULL }, { "Utility", NULL } },
 
515
  { "Documentation",          FALSE, FALSE, FALSE, { NULL }, { NULL } },
 
516
  { "Adult",                  FALSE, FALSE, FALSE, { NULL }, { NULL } },
 
517
  { "Core",                   FALSE, FALSE, FALSE, { NULL }, { NULL } },
 
518
  { "KDE",                    FALSE, FALSE, FALSE, { NULL }, { "Qt", NULL } },
 
519
  { "GNOME",                  FALSE, FALSE, FALSE, { NULL }, { "GTK", NULL } },
 
520
  { "XFCE",                   FALSE, FALSE, FALSE, { NULL }, { "GTK", NULL } },
 
521
  { "GTK",                    FALSE, FALSE, FALSE, { NULL }, { NULL } },
 
522
  { "Qt",                     FALSE, FALSE, FALSE, { NULL }, { NULL } },
 
523
  { "Motif",                  FALSE, FALSE, FALSE, { NULL }, { NULL } },
 
524
  { "Java",                   FALSE, FALSE, FALSE, { NULL }, { NULL } },
 
525
  { "ConsoleOnly",            FALSE, FALSE, FALSE, { NULL }, { NULL } },
 
526
  { "Screensaver",            FALSE, TRUE,  FALSE, { NULL }, { NULL } },
 
527
  { "TrayIcon",               FALSE, TRUE,  FALSE, { NULL }, { NULL } },
 
528
  { "Applet",                 FALSE, TRUE,  FALSE, { NULL }, { NULL } },
 
529
  { "Shell",                  FALSE, TRUE,  FALSE, { NULL }, { NULL } },
 
530
  { "Application",            FALSE, FALSE, TRUE,  { NULL }, { NULL } },
 
531
  { "Applications",           FALSE, FALSE, TRUE,  { NULL }, { NULL } }
513
532
};
514
533
 
515
534
static void
565
584
  g_free (str);
566
585
}
567
586
 
 
587
static void
 
588
print_hint (kf_validator *kf, const char *format, ...)
 
589
{
 
590
  va_list args;
 
591
  gchar *str;
 
592
 
 
593
  g_return_if_fail (kf != NULL && format != NULL);
 
594
 
 
595
  if (kf->no_hints)
 
596
    return;
 
597
 
 
598
  va_start (args, format);
 
599
  str = g_strdup_vprintf (format, args);
 
600
  va_end (args);
 
601
 
 
602
  g_print ("%s: hint: %s", kf->filename, str);
 
603
 
 
604
  g_free (str);
 
605
}
 
606
 
568
607
/* + Key names must contain only the characters A-Za-z0-9-.
569
608
 *   Checked.
570
609
 */
1021
1060
  if (g_str_has_suffix (value, ".png") ||
1022
1061
      g_str_has_suffix (value, ".xpm") ||
1023
1062
      g_str_has_suffix (value, ".svg")) {
1024
 
    print_future_fatal (kf, "value \"%s\" for key \"%s\" in group \"%s\" is an icon "
1025
 
                        "name with an extension, but there should be no extension "
1026
 
                        "as described in the Icon Theme Specification if the "
1027
 
                        "value is not an absolute path\n",
1028
 
                        value, locale_key, kf->current_group);
 
1063
    print_future_fatal (kf, "value \"%s\" for key \"%s\" in group \"%s\" is an "
 
1064
                            "icon name with an extension, but there should be "
 
1065
                            "no extension as described in the Icon Theme "
 
1066
                            "Specification if the value is not an absolute "
 
1067
                            "path\n",
 
1068
                            value, locale_key, kf->current_group);
1029
1069
    return FALSE;
1030
1070
  }
1031
1071
 
1428
1468
        break;
1429
1469
      case MU_INVALID:
1430
1470
        print_future_fatal (kf, "value \"%s\" for key \"%s\" in group \"%s\" "
1431
 
                            "contains value \"%s\" which is an invalid MIME "
1432
 
                            "type: %s\n",
1433
 
                            value, locale_key, kf->current_group,
1434
 
                            types[i], valid_error);
 
1471
                                "contains value \"%s\" which is an invalid "
 
1472
                                "MIME type: %s\n",
 
1473
                                value, locale_key, kf->current_group,
 
1474
                                types[i], valid_error);
1435
1475
 
1436
1476
        retval = FALSE;
1437
1477
        g_free (valid_error);
1462
1502
 *   FIXME: it's not really deprecated, so the error message is wrong
1463
1503
 * + All categories extending the format should start with "X-".
1464
1504
 *   Checked.
1465
 
 * + At least one main category must be included.
 
1505
 * + Using multiple main categories may lead to appearing more than once in
 
1506
 *   application menu.
 
1507
 *   Checked.
 
1508
 * + One main category should be included, otherwise application will appear in
 
1509
 *   "catch-all" section of application menu.
1466
1510
 *   Checked.
1467
1511
 *   FIXME: decide if it's okay to have an empty list of categories.
1468
 
 * + Some categories, if include, require that another category is included.
1469
 
 *   Eg: if Audio is there, AudioVideo must be there. Same for most additional
1470
 
 *   categories.
 
1512
 * + Some categories, if included, require that another category is included.
 
1513
 *   Eg: if Audio is there, AudioVideo must be there.
 
1514
 *   Checked.
 
1515
 * + Some categories, if included, suggest that another category is included.
 
1516
 *   Eg: Debugger suggests Development.
 
1517
 *   This is the case for most additional categories.
1471
1518
 *   Checked.
1472
1519
 */
1473
1520
static gboolean
1480
1527
  GHashTable    *hashtable;
1481
1528
  int            i;
1482
1529
  unsigned int   j;
1483
 
  gboolean       main_category_present;
 
1530
  int            main_categories_nb;
1484
1531
 
1485
1532
  handle_key_for_application (kf, locale_key, value);
1486
1533
 
1514
1561
  }
1515
1562
 
1516
1563
  /* second pass */
1517
 
  main_category_present = FALSE;
 
1564
  main_categories_nb = 0;
1518
1565
 
1519
1566
  for (i = 0; categories[i]; i++) {
1520
1567
    unsigned int k;
1541
1588
      continue;
1542
1589
    }
1543
1590
 
1544
 
    if (registered_categories[j].main)
1545
 
      main_category_present = TRUE;
 
1591
    if (registered_categories[j].main) {
 
1592
      /* only count it as a main category if none of the required categories
 
1593
       * for this one is also a main category (and is present) */
 
1594
      gboolean required_main_category_present = FALSE;
 
1595
 
 
1596
      for (k = 0; registered_categories[j].requires[k] != NULL; k++) {
 
1597
        char **required_categories;
 
1598
        int    l;
 
1599
 
 
1600
        required_categories = g_strsplit (registered_categories[j].requires[k],
 
1601
                                          ";", 0);
 
1602
 
 
1603
        for (l = 0; required_categories[l]; l++) {
 
1604
          unsigned int m;
 
1605
 
 
1606
          if (!g_hash_table_lookup (hashtable, required_categories[l]))
 
1607
            continue;
 
1608
 
 
1609
          for (m = 0; m < G_N_ELEMENTS (registered_categories); m++) {
 
1610
            if (strcmp (required_categories[l],
 
1611
                        registered_categories[m].name) != 0)
 
1612
              continue;
 
1613
 
 
1614
            if (registered_categories[m].main)
 
1615
              required_main_category_present = TRUE;
 
1616
 
 
1617
            break;
 
1618
          }
 
1619
 
 
1620
          if (required_main_category_present)
 
1621
            break;
 
1622
        }
 
1623
 
 
1624
        if (required_main_category_present) {
 
1625
          g_strfreev (required_categories);
 
1626
          break;
 
1627
        }
 
1628
 
 
1629
        g_strfreev (required_categories);
 
1630
      }
 
1631
 
 
1632
      if (!required_main_category_present)
 
1633
        main_categories_nb++;
 
1634
    }
 
1635
 
 
1636
    if (registered_categories[j].main && main_categories_nb > 1)
 
1637
      print_hint (kf, "value \"%s\" for key \"%s\" in group \"%s\" "
 
1638
                      "contains more than one main category; application "
 
1639
                      "might appear more than once in the application menu\n",
 
1640
                      value, locale_key, kf->current_group);
 
1641
 
1546
1642
 
1547
1643
    if (registered_categories[j].deprecated) {
1548
1644
      if (!kf->no_deprecated_warnings)
1554
1650
 
1555
1651
    if (registered_categories[j].require_only_show_in) {
1556
1652
      if (!g_hash_table_lookup (kf->current_keys, "OnlyShowIn")) {
1557
 
        print_fatal (kf, "value \"%s\" in key \"%s\" in group \"%s\" "
 
1653
        print_fatal (kf, "value item \"%s\" in key \"%s\" in group \"%s\" "
1558
1654
                         "is a reserved category, so a \"OnlyShowIn\" key "
1559
1655
                         "must be included\n",
1560
1656
                         categories[i], locale_key, kf->current_group);
1562
1658
      }
1563
1659
    }
1564
1660
 
 
1661
    /* required categories */
 
1662
 
1565
1663
    for (k = 0; registered_categories[j].requires[k] != NULL; k++) {
1566
1664
      char **required_categories;
1567
1665
      int    l;
1584
1682
      g_strfreev (required_categories);
1585
1683
    }
1586
1684
 
1587
 
    /* there was a required category and it wasn't found */
 
1685
    /* we've reached the end of a non-empty set of required categories; this
 
1686
     * means none of the possible required category (or list of required
 
1687
     * categories) was found */
1588
1688
    if (k != 0 && registered_categories[j].requires[k] == NULL) {
1589
1689
      GString *output_required;
1590
1690
 
1593
1693
        g_string_append_printf (output_required, ", or %s",
1594
1694
                                registered_categories[j].requires[k]);
1595
1695
 
1596
 
      print_future_fatal (kf, "value \"%s\" in key \"%s\" in group \"%s\" "
1597
 
                          "requires another category to be present among the "
1598
 
                          "following categories: %s\n",
1599
 
                          categories[i], locale_key, kf->current_group,
1600
 
                          output_required->str);
 
1696
      print_future_fatal (kf, "value item \"%s\" in key \"%s\" in group \"%s\" "
 
1697
                              "requires another category to be present among "
 
1698
                              "the following categories: %s\n",
 
1699
                              categories[i], locale_key, kf->current_group,
 
1700
                              output_required->str);
1601
1701
 
1602
1702
      g_string_free (output_required, TRUE);
1603
1703
      retval = FALSE;
1604
1704
    }
1605
1705
 
 
1706
    /* suggested categories */
 
1707
 
 
1708
    for (k = 0; registered_categories[j].suggests[k] != NULL; k++) {
 
1709
      char **suggested_categories;
 
1710
      int    l;
 
1711
 
 
1712
      suggested_categories = g_strsplit (registered_categories[j].suggests[k],
 
1713
                                         ";", 0);
 
1714
 
 
1715
      for (l = 0; suggested_categories[l]; l++) {
 
1716
        if (!g_hash_table_lookup (hashtable, suggested_categories[l]))
 
1717
          break;
 
1718
      }
 
1719
 
 
1720
      /* we've reached the end of a list of suggested categories, so
 
1721
       * the condition is satisfied */
 
1722
      if (suggested_categories[l] == NULL) {
 
1723
        g_strfreev (suggested_categories);
 
1724
        break;
 
1725
      }
 
1726
 
 
1727
      g_strfreev (suggested_categories);
 
1728
    }
 
1729
 
 
1730
    /* we've reached the end of a non-empty set of suggested categories; this
 
1731
     * means none of the possible suggested category (or list of suggested
 
1732
     * categories) was found */
 
1733
    if (k != 0 && registered_categories[j].suggests[k] == NULL) {
 
1734
      GString *output_suggested;
 
1735
 
 
1736
      output_suggested = g_string_new (registered_categories[j].suggests[0]);
 
1737
      for (k = 1; registered_categories[j].suggests[k] != NULL; k++)
 
1738
        g_string_append_printf (output_suggested, ", or %s",
 
1739
                                registered_categories[j].suggests[k]);
 
1740
 
 
1741
      print_hint (kf, "value item \"%s\" in key \"%s\" in group \"%s\" "
 
1742
                      "can be extended with another category among the "
 
1743
                      "following categories: %s\n",
 
1744
                      categories[i], locale_key, kf->current_group,
 
1745
                      output_suggested->str);
 
1746
 
 
1747
      g_string_free (output_suggested, TRUE);
 
1748
    }
 
1749
 
1606
1750
  }
1607
1751
 
1608
1752
  g_strfreev (categories);
1609
1753
  g_hash_table_destroy (hashtable);
1610
1754
 
1611
 
  if (!main_category_present) {
1612
 
    print_future_fatal (kf, "value \"%s\" for key \"%s\" in group \"%s\" "
1613
 
                        "does not contain a registered main category\n",
1614
 
                        value, locale_key, kf->current_group, categories[i]);
1615
 
    retval = FALSE;
1616
 
  }
 
1755
  g_assert (main_categories_nb >= 0);
 
1756
 
 
1757
  if (main_categories_nb == 0)
 
1758
    print_hint (kf, "value \"%s\" for key \"%s\" in group \"%s\" "
 
1759
                    "does not contain a registered main category; application "
 
1760
                    "might only show up in a \"catch-all\" section of the "
 
1761
                    "application menu\n",
 
1762
                    value, locale_key, kf->current_group);
1617
1763
 
1618
1764
  return retval;
1619
1765
}
1740
1886
 *   - if-exists FILE
1741
1887
 *   - unless-exists FILE
1742
1888
 *   - DESKTOP-ENVIRONMENT-NAME [DESKTOP-SPECIFIC-TEST]
 
1889
 *   - other known conditions (GNOME3, GSettings, etc.)
1743
1890
 *   Checked.
1744
1891
 * + FILE must be a path to a filename, relative to $XDG_CONFIG_HOME.
1745
1892
 *   Checked.
1801
1948
                         value, locale_key, kf->current_group, argument);
1802
1949
    }
1803
1950
 
 
1951
  } else if (strncmp (condition, "X-", 2) == 0) {
 
1952
    if (argument && argument[0] == '\0')
 
1953
      print_warning (kf, "value \"%s\" for key \"%s\" in group \"%s\" "
 
1954
                         "has trailing space(s)\n",
 
1955
                         value, locale_key, kf->current_group);
1804
1956
  } else {
1805
 
    if (strncmp (condition, "X-", 2)) {
1806
 
      unsigned int i;
 
1957
    unsigned int i;
 
1958
    unsigned int j;
 
1959
 
 
1960
    /* Look if it's a registered AutostartCondition */
 
1961
 
 
1962
    for (i = 0; i < G_N_ELEMENTS (registered_autostart_condition); i++) {
 
1963
 
 
1964
      if (strcmp (condition, registered_autostart_condition[i].name) != 0)
 
1965
        continue;
 
1966
 
 
1967
      /* check if first argument is one of the expected ones */
 
1968
      for (j = 0; registered_autostart_condition[i].first_arg[j] != NULL; j++) {
 
1969
        const char *first = registered_autostart_condition[i].first_arg[j];
 
1970
        char       *after_first = argument;
 
1971
 
 
1972
        if (argument && !strncmp (argument, first, strlen (first))) {
 
1973
          after_first += strlen (first);
 
1974
          if (after_first[0] == '\0' || after_first[0] == ' ') {
 
1975
            /* find next argument */
 
1976
            argument = after_first;
 
1977
            while (*argument == ' ')
 
1978
              argument++;
 
1979
          }
 
1980
 
 
1981
          break;
 
1982
        }
 
1983
      }
 
1984
 
 
1985
      /* we've reached the end of a non-empty set of first arguments; this
 
1986
       * means none of the possible first arguments was found */
 
1987
      if (j != 0 && registered_autostart_condition[i].first_arg[j] == NULL) {
 
1988
        GString *output;
 
1989
 
 
1990
        output = g_string_new (registered_autostart_condition[i].first_arg[0]);
 
1991
        for (j = 1; registered_autostart_condition[i].first_arg[j] != NULL; j++)
 
1992
          g_string_append_printf (output, ", or %s",
 
1993
                                  registered_autostart_condition[i].first_arg[j]);
 
1994
 
 
1995
        print_fatal (kf, "value \"%s\" for key \"%s\" in group \"%s\" "
 
1996
                         "does not contain a valid first argument for "
 
1997
                         "condition \"%s\"; valid first arguments are: %s\n",
 
1998
                         value, locale_key, kf->current_group,
 
1999
                         condition, output->str);
 
2000
        retval = FALSE;
 
2001
 
 
2002
        g_string_free (output, TRUE);
 
2003
 
 
2004
      } else {
 
2005
 
 
2006
        switch (registered_autostart_condition[i].additional_args) {
 
2007
          case 0:
 
2008
            if (argument && argument[0] != '\0') {
 
2009
              print_fatal (kf, "value \"%s\" for key \"%s\" in group \"%s\" "
 
2010
                               "has too many arguments for condition \"%s\"\n",
 
2011
                               value, locale_key, kf->current_group, condition);
 
2012
              retval = FALSE;
 
2013
            }
 
2014
            break;
 
2015
 
 
2016
          case 1:
 
2017
            /* we handle the "one argument" case specially, as spaces might be
 
2018
             * normal there, and therefore we don't want to split the string
 
2019
             * based on spaces */
 
2020
            if (!argument || argument[0] == '\0') {
 
2021
              print_fatal (kf, "value \"%s\" for key \"%s\" in group \"%s\" "
 
2022
                               "is missing a last argument for condition "
 
2023
                               "\"%s\"\n",
 
2024
                               value, locale_key, kf->current_group, condition);
 
2025
              retval = FALSE;
 
2026
            }
 
2027
            break;
 
2028
 
 
2029
          default:
 
2030
            {
 
2031
              int argc_diff = -registered_autostart_condition[i].additional_args;
 
2032
 
 
2033
              while (argument && argument[0] != '\0') {
 
2034
                argc_diff++;
 
2035
                argument = g_utf8_strchr (argument, -1, ' ');
 
2036
                while (argument && *argument == ' ')
 
2037
                  argument++;
 
2038
              }
 
2039
 
 
2040
              if (argc_diff > 0) {
 
2041
                print_fatal (kf, "value \"%s\" for key \"%s\" in group \"%s\" "
 
2042
                                 "has %d too many arguments for condition "
 
2043
                                 "\"%s\"\n",
 
2044
                                 value, locale_key, kf->current_group,
 
2045
                                 argc_diff, condition);
 
2046
                retval = FALSE;
 
2047
              } else if (argc_diff < 0) {
 
2048
                print_fatal (kf, "value \"%s\" for key \"%s\" in group \"%s\" "
 
2049
                                 "has %d too few arguments for condition "
 
2050
                                 "\"%s\"\n",
 
2051
                                 value, locale_key, kf->current_group,
 
2052
                                 -argc_diff, condition);
 
2053
                retval = FALSE;
 
2054
              }
 
2055
            }
 
2056
            break;
 
2057
        }
 
2058
 
 
2059
      }
 
2060
 
 
2061
      break;
 
2062
 
 
2063
    }
 
2064
 
 
2065
    /* Now, if we didn't find condition in list of registered
 
2066
     * AutostartCondition... */
 
2067
    if (i == G_N_ELEMENTS (registered_autostart_condition)) {
 
2068
      /* Accept conditions with same name as OnlyShowIn values */
1807
2069
 
1808
2070
      for (i = 0; i < G_N_ELEMENTS (show_in_registered); i++) {
1809
2071
        if (!strcmp (condition, show_in_registered[i]))
1818
2080
                         value, locale_key, kf->current_group, condition);
1819
2081
        retval = FALSE;
1820
2082
      }
1821
 
    }
1822
2083
 
1823
 
    if (argument && argument[0] == '\0') {
1824
 
      print_warning (kf, "value \"%s\" for key \"%s\" in group \"%s\" "
1825
 
                         "has trailing space(s)\n",
1826
 
                         value, locale_key, kf->current_group);
 
2084
      if (argument && argument[0] == '\0')
 
2085
        print_warning (kf, "value \"%s\" for key \"%s\" in group \"%s\" "
 
2086
                           "has trailing space(s)\n",
 
2087
                           value, locale_key, kf->current_group);
1827
2088
    }
1828
2089
  }
1829
2090
 
2778
3039
gboolean
2779
3040
desktop_file_validate (const char *filename,
2780
3041
                       gboolean    warn_kde,
2781
 
                       gboolean    no_warn_deprecated)
 
3042
                       gboolean    no_warn_deprecated,
 
3043
                       gboolean    no_hints)
2782
3044
{
2783
3045
  kf_validator kf;
2784
3046
 
2795
3057
  kf.current_keys           = NULL;
2796
3058
  kf.kde_reserved_warnings  = warn_kde;
2797
3059
  kf.no_deprecated_warnings = no_warn_deprecated;
 
3060
  kf.no_hints               = no_hints;
2798
3061
 
2799
3062
  kf.main_group       = NULL;
2800
3063
  kf.type             = INVALID_TYPE;