Dan,
I encountered what appears to be the same problem; on my sites (a dev site on my local machine, and a live site) the plugin wasn’t switching to the desktop version when the switcher link was clicked. I think I narrowed it down to 2 things:
1. When the plugin sets a cookie to indicate the preference to view the desktop site, the cookie data wasn’t being set properly. I had a look in the plugin code, and I can see that the last parameter of the setcookie() function is trying to set the correct domain name for the cookie (on line 964 of mobile-smart.php). However, on my two sites, the domain that was being set was invalid, for 2 different reasons:
a) The plugin tries to strip ‘http://www’ from the front of the blog’s home url, to leave a bare domain (eg. example.com). However, I usually use naked domains on my sites, so there’s no ‘www’ in the blog url, and therefor the plugin code doesn’t strip the ‘http’ part from the url (eg. http://example.com). I don’t believe that’s a valid domain for a cookie.
b) My dev site uses a multisite WP install, with subfolders. So the blog url would be something like ‘http://example.com/blogname/’ AFAIK, the domain paramater for setcookie() must be just the domain part, without subfolders.
For me, the easy fix was to just remove the whole domain parameter from the setcookie() function call. I’m not an expert with cookies, but from what I can tell, the domain parameter is optional, and if it’s left out, the current domain is assumed. So, by simply removing the domain parameter, the theme switching link seems to be working on my sites. Or at least, except for issue number 2….
2. I’m not completely sure about this one, as I haven’t had time to have a proper dig into the code, but the issue is that the plugin doesn’t switch themes after the first click of the switcher link. The theme only switches after I do a refresh or navigate elsewhere. The mobile theme in this case is a child theme of the desktop theme. You mentioned some people have reported problems with child themes, and I think this might be the same issue. I’ve had a look at the code, but I’ve found some strange things that appear to be going on, and I’d need more time to figure this one out.