home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / boot / i386 / root / usr / share / YaST2 / clients / desktop_finish.ycp < prev    next >
Text File  |  2006-11-29  |  6KB  |  220 lines

  1. /**
  2.  * File:
  3.  *  desktop_finish.ycp
  4.  *
  5.  * Module:
  6.  *  Step of base installation finish
  7.  *
  8.  * Authors:
  9.  *  Jiri Srain <jsrain@suse.cz>
  10.  *
  11.  * $Id: desktop_finish.ycp 31885 2006-07-17 08:14:59Z jsrain $
  12.  *
  13.  */
  14.  
  15. {
  16.  
  17. textdomain "installation";
  18.  
  19. import "DefaultDesktop";
  20. import "Directory";
  21. import "Mode";
  22. import "ProductFeatures";
  23.  
  24. any ret = nil;
  25. string func = "";
  26. map param = $[];
  27.  
  28. /* Check arguments */
  29. if(size(WFM::Args()) > 0 && is(WFM::Args(0), string)) {
  30.     func = (string)WFM::Args(0);
  31.     if(size(WFM::Args()) > 1 && is(WFM::Args(1), map))
  32.     param = (map)WFM::Args(1);
  33. }
  34.  
  35. y2milestone ("starting desktop_finish");
  36. y2debug("func=%1", func);
  37. y2debug("param=%1", param);
  38.  
  39. if (func == "Info")
  40. {
  41.     return (any)$[
  42.     "steps" : 1,
  43.     // progress step title
  44.     "title" : _("Initializing default window manager..."),
  45.     "when" : [ `installation, `autoinst ],
  46.     ];
  47. }
  48. else if (func == "Write")
  49. {
  50.     boolean doc_server = false;
  51.     // check who provides suse_help_viewer
  52.     // if kdebase3-SuSE isn't installed by apache or apache2, set /etc/sysconfig/apache:DOC_SERVER
  53.  
  54.     if ((!(Pkg::IsProvided ("kdebase3-SuSE") || Pkg::IsSelected ("kdebase3-SuSE")))
  55.     &&
  56.         (Pkg::IsProvided ("apache2") || Pkg::IsSelected ("apache2")
  57.         || Pkg::IsProvided ("apache") || Pkg::IsSelected ("apache")))
  58.     {
  59.     doc_server = true;
  60.     }
  61.     // this detects WM and DM according to selected patterns and
  62.     // installed packages
  63.     if ( !Mode::update () )
  64.     {
  65.     map<string,map<string,string> > desktop_data = $[
  66.         "gnome" : $[
  67.         "package" : "gdm",
  68.         "wm" : "gnome",
  69.         "dm" : "gdm",
  70.         "cursor" : "Industrial",
  71.         ],
  72.         "kde" : $[
  73.         "package" : "kdebase3-kdm",
  74.         "wm" : "kde",
  75.         "dm" : "kdm",
  76.         "cursor" : "crystalwhite",
  77.         ],
  78.         "twm" : $[
  79.         "package" : "xorg-x11",
  80.         "wm" : "",
  81.         "dm" : "xdm",
  82.         "cursor" : "crystalwhite",
  83.         ],
  84.     ];
  85.  
  86.     string default_wm = "gnome";
  87.     string default_dm = "gdm";
  88.     string default_cursor = "Industrial";
  89.  
  90.     string selected_desktop = DefaultDesktop::Desktop ();
  91.     if (selected_desktop != "" && selected_desktop != nil)
  92.     {
  93.         y2milestone ("Desktop was set to %1", selected_desktop);
  94.         default_wm = desktop_data[selected_desktop, "wm"]:"";
  95.         default_dm = desktop_data[selected_desktop, "dm"]:"";
  96.         default_cursor = desktop_data[selected_desktop, "cursor"]:"";
  97.     }
  98.     else
  99.     {
  100.         list<map<string,any> > patterns
  101.         = Pkg::ResolvableDependencies ("", `pattern, "");
  102.         patterns = filter (map<string,any> p, patterns, {
  103.         return p["status"]:nil == `installed
  104.             || p["status"]:nil == `selected;
  105.         });
  106.         list<list<string> > packages2 = [];
  107.         foreach (map<string,any> p, patterns, {
  108.         y2internal ("P: %1", p);
  109.         list<map<string,any> > deps = p["dependencies"]:[];
  110.         y2internal ("Deps: %1", deps);
  111.         deps = filter (map<string,any> d, deps, {
  112.             return d["res_kind"]:"" == "package"
  113.             && contains (["recommends", "suggests", "requires"],
  114.                 d["dep_kind"]:"");
  115.         });
  116.         packages2 = add (packages2, maplist (map<string,any> d, deps, {
  117.             return d["name"]:"";
  118.         }));
  119.         y2internal ("Packages2: %1", packages2);
  120.         });
  121.         list<string> packages = (list<string>)toset (flatten (packages2));
  122.         y2debug ("All packages in selected patterns: %1", packages);
  123.  
  124.         list<string> desktop_order = ["gnome", "kde"];
  125.  
  126.         boolean desktop_found = false;
  127.         string pattern_desktop = "gnome";
  128.  
  129.         // check what packages are in the patterns
  130.         // and adjust logon and window manager according to it
  131.         find (string d, desktop_order, {
  132.         if (contains (packages, desktop_data[d, "package"]:""))
  133.         {
  134.             if (! desktop_found)
  135.             {
  136.             desktop_found = true;
  137.             pattern_desktop = d;
  138.             y2milestone ("Setting desktop according to pattern to %1", pattern_desktop);
  139.             }
  140.         }
  141.         return desktop_found;
  142.         });
  143.  
  144.         // if no desktop was found according to pattern, try
  145.         // installed packages
  146.         // first the logon manager
  147.         desktop_order = add (desktop_order, "twm");
  148.         desktop_order = prepend (desktop_order, pattern_desktop);
  149.         desktop_found = false;
  150.         find (string d, desktop_order, {
  151.             string package = desktop_data[d, "package"]:"";
  152.             if (Pkg::IsProvided (package)
  153.             || Pkg::IsSelected (package))
  154.             {
  155.             y2milestone ("package %1 selected or installed", package);
  156.             if (! desktop_found)
  157.             {
  158.                 desktop_found = true;
  159.                 default_dm = desktop_data[d, "dm"]:"";
  160.                 y2milestone (
  161.                 "Setting logon manager %1 - package selecteed",
  162.                 default_dm);
  163.                 default_wm = desktop_data[d, "wm"]:"";
  164.                 y2milestone (
  165.                 "Setting window manager %1 - package selecteed",
  166.                 default_wm);
  167.                 default_cursor
  168.                 = desktop_data[d, "cursor"]:default_cursor;
  169.                 y2milestone (
  170.                 "Setting cursor theme %1 - package selected",
  171.                 default_cursor);
  172.             }
  173.             }
  174.             else if (! desktop_found)
  175.             {
  176.             y2milestone ("Package %1 not selected or installed, trying next desktop...", package);
  177.             }
  178.             return desktop_found;
  179.         });
  180.     }
  181.     y2milestone ("Default desktop: %1", default_wm);
  182.     y2milestone ("Default logon manager: %1", default_dm);
  183.     y2milestone ("Default cursor theme: %1", default_cursor);
  184.  
  185.     SCR::Write (.sysconfig.windowmanager.DEFAULT_WM, default_wm);
  186.     SCR::Write (.sysconfig.windowmanager.X_MOUSE_CURSOR, default_cursor);
  187.     SCR::Write (.sysconfig.windowmanager, nil);
  188.     string dm_shutdown = ProductFeatures::GetStringFeature ("globals",
  189.         "displaymanager_shutdown");
  190.     y2milestone ("Logon manager shutdown: %1", dm_shutdown);
  191.     if (dm_shutdown != nil && dm_shutdown != "")
  192.     {
  193.         SCR::Write (.sysconfig.displaymanager.DISPLAYMANAGER_SHUTDOWN,
  194.         dm_shutdown);
  195.     }
  196.     SCR::Write (.sysconfig.displaymanager.DISPLAYMANAGER, default_dm);
  197.     SCR::Write (.sysconfig.displaymanager, nil);
  198.     }
  199.  
  200.  
  201.     if (doc_server)
  202.     {
  203.     SCR::Write (.sysconfig.apache.DOC_SERVER, doc_server);
  204.     SCR::Write (.sysconfig.apache, nil);
  205.     }
  206. }
  207. else
  208. {
  209.     y2error ("unknown function: %1", func);
  210.     ret = nil;
  211. }
  212.  
  213. y2debug("ret=%1", ret);
  214. y2milestone("desktop_finish finished");
  215. return ret;
  216.  
  217.  
  218. } /* EOF */
  219.  
  220.