Skip to content

Commit

Permalink
Fix toolkit type property
Browse files Browse the repository at this point in the history
Make sure that the Type property of Toolkit is properly set when loading
a toolkit using the class name instead of an enum value.
Conflicts:
	Xwt/Xwt/Toolkit.cs
  • Loading branch information
slluis committed Feb 6, 2015
1 parent 96b916f commit 4cacbc6
Showing 1 changed file with 37 additions and 26 deletions.
63 changes: 37 additions & 26 deletions Xwt/Xwt/Toolkit.cs
Expand Up @@ -46,6 +46,26 @@ public sealed class Toolkit: IFrontend
Queue<Action> exitActions = new Queue<Action> ();
bool exitCallbackRegistered;

static KnownBackend[] knownBackends = new [] {
new KnownBackend { Type = ToolkitType.Gtk3, TypeName = "Xwt.GtkBackend.GtkEngine, Xwt.Gtk3" },
new KnownBackend { Type = ToolkitType.Gtk, TypeName = "Xwt.GtkBackend.GtkEngine, Xwt.Gtk" },
new KnownBackend { Type = ToolkitType.XamMac, TypeName = "Xwt.Mac.MacEngine, Xwt.XamMac" },
new KnownBackend { Type = ToolkitType.Cocoa, TypeName = "Xwt.Mac.MacEngine, Xwt.Mac" },
new KnownBackend { Type = ToolkitType.Wpf, TypeName = "Xwt.WPFBackend.WPFEngine, Xwt.WPF" },
};

class KnownBackend
{
public ToolkitType Type { get; set; }
public string TypeName { get; set; }

public string FullTypeName {
get {
return TypeName + ", Version=" + typeof(Application).Assembly.GetName ().Version;
}
}
}

Dictionary<string,Image> stockIcons = new Dictionary<string, Image> ();

public static Toolkit CurrentEngine {
Expand Down Expand Up @@ -100,20 +120,22 @@ public static Toolkit Load (string fullTypeName)
internal static Toolkit Load (string fullTypeName, bool isGuest)
{
Toolkit t = new Toolkit ();

if (!string.IsNullOrEmpty (fullTypeName)) {
t.LoadBackend (fullTypeName, isGuest, true);
var bk = knownBackends.FirstOrDefault (tk => fullTypeName.StartsWith (tk.TypeName));
if (bk != null)
t.Type = bk.Type;
return t;
}

if (t.LoadBackend (GetBackendType (ToolkitType.Gtk), isGuest, false))
return t;

if (t.LoadBackend (GetBackendType (ToolkitType.Cocoa), isGuest, false))
return t;

if (t.LoadBackend (GetBackendType (ToolkitType.Wpf), isGuest, false))
return t;


foreach (var bk in knownBackends) {
if (t.LoadBackend (bk.FullTypeName, isGuest, false)) {
t.Type = bk.Type;
return t;
}
}

throw new InvalidOperationException ("Xwt engine not found");
}

Expand Down Expand Up @@ -155,22 +177,11 @@ public static bool TryLoad (ToolkitType type, out Toolkit toolkit)

internal static string GetBackendType (ToolkitType type)
{
string version = typeof(Application).Assembly.GetName ().Version.ToString ();

switch (type) {
case ToolkitType.Gtk:
return "Xwt.GtkBackend.GtkEngine, Xwt.Gtk, Version=" + version;
case ToolkitType.Gtk3:
return "Xwt.GtkBackend.GtkEngine, Xwt.Gtk3, Version=" + version;
case ToolkitType.Cocoa:
return "Xwt.Mac.MacEngine, Xwt.Mac, Version=" + version;
case ToolkitType.Wpf:
return "Xwt.WPFBackend.WPFEngine, Xwt.WPF, Version=" + version;
case ToolkitType.XamMac:
return "Xwt.Mac.MacEngine, Xwt.XamMac, Version=" + version;
default:
throw new ArgumentException ("Invalid toolkit type");
}
var t = knownBackends.FirstOrDefault (tk => tk.Type == type);
if (t != null)
return t.FullTypeName;

throw new ArgumentException ("Invalid toolkit type");
}

bool LoadBackend (string type, bool isGuest, bool throwIfFails)
Expand Down

0 comments on commit 4cacbc6

Please sign in to comment.