Switching elm config's engine variable from enum to string ptr.
authorGustavo Lima Chaves <glima@profusion.mobi>
Mon, 1 Nov 2010 21:10:07 +0000 (21:10 +0000)
committerGustavo Lima Chaves <glima@profusion.mobi>
Mon, 1 Nov 2010 21:10:07 +0000 (21:10 +0000)
SVN revision: 54081

config/default/base.src
config/illume/base.src
config/standard/base.src
src/lib/elm_config.c
src/lib/elm_main.c
src/lib/elm_priv.h
src/lib/elm_win.c

index ea450eb..a8c42ac 100644 (file)
@@ -1,6 +1,6 @@
 group "Elm_Config" struct {
   value "config_version" int: 65537;
-  value "engine" int: 0;
+  value "engine" string: "software_x11";
   value "thumbscroll_enable" uchar: 1;
   value "thumbscroll_threshold" int: 24;
   value "thumbscroll_momentum_threshold" double: 100.0;
index 851114b..bdeaac2 100644 (file)
@@ -1,6 +1,6 @@
 group "Elm_Config" struct {
   value "config_version" int: 65537;
-  value "engine" int: 0;
+  value "engine" string: "software_x11";
   value "thumbscroll_enable" uchar: 1;
   value "thumbscroll_threshold" int: 24;
   value "thumbscroll_momentum_threshold" double: 100.0;
index badf183..42abf5a 100644 (file)
@@ -1,6 +1,6 @@
 group "Elm_Config" struct {
   value "config_version" int: 65537;
-  value "engine" int: 0;
+  value "engine" string: "software_x11";
   value "thumbscroll_enable" uchar: 0;
   value "thumbscroll_threshold" int: 4;
   value "thumbscroll_momentum_threshold" double: 100.0;
index c553634..b5750fe 100644 (file)
@@ -13,6 +13,22 @@ Elm_Config *_elm_config = NULL;
 char *_elm_profile = NULL;
 static Eet_Data_Descriptor *_config_edd = NULL;
 
+const char *_elm_engines[] = {
+   "software_x11",
+   "fb",
+   "directfb",
+   "software_16_x11",
+   "software_8_x11",
+   "xrender_x11",
+   "opengl_x11",
+   "software_gdi",
+   "software_16_wince_gdi",
+   "sdl",
+   "software_16_sdl",
+   "opengl_sdl",
+   NULL
+};
+
 static void _desc_init(void);
 static void _desc_shutdown(void);
 static void _profile_fetch_from_conf(void);
@@ -207,7 +223,7 @@ _desc_init(void)
    EET_DATA_DESCRIPTOR_ADD_BASIC(_config_edd, Elm_Config, "config_version",
                                  config_version, EET_T_INT);
    EET_DATA_DESCRIPTOR_ADD_BASIC(_config_edd, Elm_Config, "engine", engine,
-                                 EET_T_INT);
+                                 EET_T_STRING);
    EET_DATA_DESCRIPTOR_ADD_BASIC(_config_edd, Elm_Config, "thumbscroll_enable",
                                  thumbscroll_enable, EET_T_UCHAR);
    EET_DATA_DESCRIPTOR_ADD_BASIC(_config_edd, Elm_Config,
@@ -529,6 +545,7 @@ _config_free(void)
      {
         eina_stringshare_del(fontdir);
      }
+   if (_elm_config->engine) eina_stringshare_del(_elm_config->engine);
    if (_elm_config->theme) eina_stringshare_del(_elm_config->theme);
    if (_elm_config->modules) eina_stringshare_del(_elm_config->modules);
    free(_elm_config);
@@ -612,7 +629,7 @@ _config_load(void)
     * without the config, but do we want that? */
    _elm_config = ELM_NEW(Elm_Config);
    _elm_config->config_version = ELM_CONFIG_VERSION;
-   _elm_config->engine = ELM_SOFTWARE_X11;
+   _elm_config->engine = eina_stringshare_add("software_x11");
    _elm_config->thumbscroll_enable = EINA_TRUE;
    _elm_config->thumbscroll_threshold = 24;
    _elm_config->thumbscroll_momentum_threshold = 100.0;
@@ -871,55 +888,55 @@ _env_get(void)
             (!strcasecmp(s, "x")) ||
             (!strcasecmp(s, "software-x11")) ||
             (!strcasecmp(s, "software_x11")))
-          _elm_config->engine = ELM_SOFTWARE_X11;
+          eina_stringshare_replace(&_elm_config->engine, ELM_SOFTWARE_X11);
         else if ((!strcasecmp(s, "opengl")) ||
                  (!strcasecmp(s, "gl")) ||
                  (!strcasecmp(s, "opengl-x11")) ||
                  (!strcasecmp(s, "opengl_x11")))
-          _elm_config->engine = ELM_OPENGL_X11;
+          eina_stringshare_replace(&_elm_config->engine, ELM_OPENGL_X11);
         else if ((!strcasecmp(s, "x11-8")) ||
                  (!strcasecmp(s, "x18")) ||
                  (!strcasecmp(s, "software-8-x11")) ||
                  (!strcasecmp(s, "software_8_x11")))
-          _elm_config->engine = ELM_SOFTWARE_8_X11;
+          eina_stringshare_replace(&_elm_config->engine, ELM_SOFTWARE_8_X11);
         else if ((!strcasecmp(s, "x11-16")) ||
                  (!strcasecmp(s, "x16")) ||
                  (!strcasecmp(s, "software-16-x11")) ||
                  (!strcasecmp(s, "software_16_x11")))
-          _elm_config->engine = ELM_SOFTWARE_16_X11;
+          eina_stringshare_replace(&_elm_config->engine, ELM_SOFTWARE_16_X11);
         else if ((!strcasecmp(s, "xrender")) ||
                  (!strcasecmp(s, "xr")) ||
                  (!strcasecmp(s, "xrender-x11")) ||
                  (!strcasecmp(s, "xrender_x11")))
-          _elm_config->engine = ELM_XRENDER_X11;
+          eina_stringshare_replace(&_elm_config->engine, ELM_XRENDER_X11);
         else if ((!strcasecmp(s, "fb")) ||
                  (!strcasecmp(s, "software-fb")) ||
                  (!strcasecmp(s, "software_fb")))
-          _elm_config->engine = ELM_SOFTWARE_FB;
+          eina_stringshare_replace(&_elm_config->engine, ELM_SOFTWARE_FB);
         else if ((!strcasecmp(s, "directfb")) ||
                  (!strcasecmp(s, "dfb")))
-          _elm_config->engine = ELM_SOFTWARE_DIRECTFB;
+          eina_stringshare_replace(&_elm_config->engine, ELM_SOFTWARE_DIRECTFB);
         else if ((!strcasecmp(s, "sdl")) ||
                  (!strcasecmp(s, "software-sdl")) ||
                  (!strcasecmp(s, "software_sdl")))
-          _elm_config->engine = ELM_SOFTWARE_SDL;
+          eina_stringshare_replace(&_elm_config->engine, ELM_SOFTWARE_SDL);
         else if ((!strcasecmp(s, "sdl-16")) ||
                  (!strcasecmp(s, "software-16-sdl")) ||
                  (!strcasecmp(s, "software_16_sdl")))
-          _elm_config->engine = ELM_SOFTWARE_16_SDL;
+          eina_stringshare_replace(&_elm_config->engine, ELM_SOFTWARE_16_SDL);
         else if ((!strcasecmp(s, "opengl-sdl")) ||
                  (!strcasecmp(s, "opengl_sdl")) ||
                  (!strcasecmp(s, "gl-sdl")) ||
                  (!strcasecmp(s, "gl_sdl")))
-          _elm_config->engine = ELM_OPENGL_SDL;
+          eina_stringshare_replace(&_elm_config->engine, ELM_OPENGL_SDL);
         else if ((!strcasecmp(s, "gdi")) ||
                  (!strcasecmp(s, "software-gdi")) ||
                  (!strcasecmp(s, "software_gdi")))
-          _elm_config->engine = ELM_SOFTWARE_WIN32;
+          eina_stringshare_replace(&_elm_config->engine, ELM_SOFTWARE_WIN32);
         else if ((!strcasecmp(s, "wince-gdi")) ||
                  (!strcasecmp(s, "software-16-wince-gdi")) ||
                  (!strcasecmp(s, "software_16_wince_gdi")))
-          _elm_config->engine = ELM_SOFTWARE_16_WINCE;
+          eina_stringshare_replace(&_elm_config->engine, ELM_SOFTWARE_16_WINCE);
      }
 
    s = getenv("ELM_THUMBSCROLL_ENABLE");
@@ -1051,10 +1068,12 @@ _elm_config_init(void)
 void
 _elm_config_sub_init(void)
 {
-   if ((_elm_config->engine == ELM_SOFTWARE_X11) ||
-       (_elm_config->engine == ELM_SOFTWARE_16_X11) ||
-       (_elm_config->engine == ELM_XRENDER_X11) ||
-       (_elm_config->engine == ELM_OPENGL_X11))
+#define ENGINE_COMPARE(name) (!strcmp(_elm_config->engine, name))
+  if (ENGINE_COMPARE(ELM_SOFTWARE_X11) ||
+      ENGINE_COMPARE(ELM_SOFTWARE_16_X11) ||
+      ENGINE_COMPARE(ELM_XRENDER_X11) ||
+      ENGINE_COMPARE(ELM_OPENGL_X11))
+#undef ENGINE_COMPARE
      {
 #ifdef HAVE_ELEMENTARY_X
         unsigned int val = 1000;
@@ -1174,15 +1193,12 @@ _elm_config_profile_set(const char *profile)
 void
 _elm_config_shutdown(void)
 {
-   if ((_elm_config->engine == ELM_SOFTWARE_X11) ||
-       (_elm_config->engine == ELM_SOFTWARE_16_X11) ||
-       (_elm_config->engine == ELM_XRENDER_X11) ||
-       (_elm_config->engine == ELM_OPENGL_X11) ||
-       (_elm_config->engine == ELM_SOFTWARE_SDL) ||
-       (_elm_config->engine == ELM_SOFTWARE_16_SDL) ||
-       (_elm_config->engine == ELM_OPENGL_SDL) ||
-       (_elm_config->engine == ELM_SOFTWARE_WIN32) ||
-       (_elm_config->engine == ELM_SOFTWARE_16_WINCE))
+#define ENGINE_COMPARE(name) (!strcmp(_elm_config->engine, name))
+  if (ENGINE_COMPARE(ELM_SOFTWARE_X11) ||
+      ENGINE_COMPARE(ELM_SOFTWARE_16_X11) ||
+      ENGINE_COMPARE(ELM_XRENDER_X11) ||
+      ENGINE_COMPARE(ELM_OPENGL_X11))
+#undef ENGINE_COMPARE
      {
 #ifdef HAVE_ELEMENTARY_X
         ecore_event_handler_del(_prop_change_handler);
index 5cb57be..c55e828 100644 (file)
@@ -564,10 +564,12 @@ elm_quicklaunch_sub_init(int argc, char **argv)
         evas_init();
         edje_init();
         _elm_config_sub_init();
-        if ((_elm_config->engine == ELM_SOFTWARE_X11) ||
-            (_elm_config->engine == ELM_SOFTWARE_16_X11) ||
-            (_elm_config->engine == ELM_XRENDER_X11) ||
-            (_elm_config->engine == ELM_OPENGL_X11))
+#define ENGINE_COMPARE(name) (!strcmp(_elm_config->engine, name))
+        if (ENGINE_COMPARE(ELM_SOFTWARE_X11) ||
+            ENGINE_COMPARE(ELM_SOFTWARE_16_X11) ||
+            ENGINE_COMPARE(ELM_XRENDER_X11) ||
+            ENGINE_COMPARE(ELM_OPENGL_X11))
+#undef ENGINE_COMPARE
           {
 #ifdef HAVE_ELEMENTARY_X
              ecore_x_init(NULL);
@@ -597,24 +599,28 @@ elm_quicklaunch_sub_shutdown(void)
         _elm_module_shutdown();
         ecore_imf_shutdown();
         ecore_evas_shutdown();
-        if ((_elm_config->engine == ELM_SOFTWARE_X11) ||
-            (_elm_config->engine == ELM_SOFTWARE_16_X11) ||
-            (_elm_config->engine == ELM_XRENDER_X11) ||
-            (_elm_config->engine == ELM_OPENGL_X11))
+#define ENGINE_COMPARE(name) (!strcmp(_elm_config->engine, name))
+        if (ENGINE_COMPARE(ELM_SOFTWARE_X11) ||
+            ENGINE_COMPARE(ELM_SOFTWARE_16_X11) ||
+            ENGINE_COMPARE(ELM_XRENDER_X11) ||
+            ENGINE_COMPARE(ELM_OPENGL_X11))
+#undef ENGINE_COMPARE
           {
 #ifdef HAVE_ELEMENTARY_X
              ecore_x_disconnect();
 #endif
           }
-        if ((_elm_config->engine == ELM_SOFTWARE_X11) ||
-            (_elm_config->engine == ELM_SOFTWARE_16_X11) ||
-            (_elm_config->engine == ELM_XRENDER_X11) ||
-            (_elm_config->engine == ELM_OPENGL_X11) ||
-            (_elm_config->engine == ELM_SOFTWARE_SDL) ||
-            (_elm_config->engine == ELM_SOFTWARE_16_SDL) ||
-            (_elm_config->engine == ELM_OPENGL_SDL) ||
-            (_elm_config->engine == ELM_SOFTWARE_WIN32) ||
-            (_elm_config->engine == ELM_SOFTWARE_16_WINCE))
+#define ENGINE_COMPARE(name) (!strcmp(_elm_config->engine, name))
+        if (ENGINE_COMPARE(ELM_SOFTWARE_X11) ||
+            ENGINE_COMPARE(ELM_SOFTWARE_16_X11) ||
+            ENGINE_COMPARE(ELM_XRENDER_X11) ||
+            ENGINE_COMPARE(ELM_OPENGL_X11) ||
+            ENGINE_COMPARE(ELM_SOFTWARE_SDL) ||
+            ENGINE_COMPARE(ELM_SOFTWARE_16_SDL) ||
+            ENGINE_COMPARE(ELM_OPENGL_SDL) ||
+            ENGINE_COMPARE(ELM_SOFTWARE_WIN32) ||
+            ENGINE_COMPARE(ELM_SOFTWARE_16_WINCE))
+#undef ENGINE_COMPARE
            evas_cserve_disconnect();
         edje_shutdown();
         evas_shutdown();
@@ -678,10 +684,12 @@ elm_quicklaunch_seed(void)
         ecore_main_loop_iterate();
         evas_object_del(win);
         ecore_main_loop_iterate();
-        if ((_elm_config->engine == ELM_SOFTWARE_X11) ||
-            (_elm_config->engine == ELM_SOFTWARE_16_X11) ||
-            (_elm_config->engine == ELM_XRENDER_X11) ||
-            (_elm_config->engine == ELM_OPENGL_X11))
+#define ENGINE_COMPARE(name) (!strcmp(_elm_config->engine, name))
+        if (ENGINE_COMPARE(ELM_SOFTWARE_X11) ||
+            ENGINE_COMPARE(ELM_SOFTWARE_16_X11) ||
+            ENGINE_COMPARE(ELM_XRENDER_X11) ||
+            ENGINE_COMPARE(ELM_OPENGL_X11))
+#undef ENGINE_COMPARE
           {
 # ifdef HAVE_ELEMENTARY_X
              ecore_x_sync();
@@ -829,10 +837,12 @@ elm_quicklaunch_fork(int argc, char **argv, char *cwd, void (postfork_func) (voi
         evas_init();
         edje_init();
         _elm_config_sub_init();
-        if ((_elm_config->engine == ELM_SOFTWARE_X11) ||
-            (_elm_config->engine == ELM_SOFTWARE_16_X11) ||
-            (_elm_config->engine == ELM_XRENDER_X11) ||
-            (_elm_config->engine == ELM_OPENGL_X11))
+#define ENGINE_COMPARE(name) (!strcmp(_elm_config->engine, name))
+        if (ENGINE_COMPARE(ELM_SOFTWARE_X11) ||
+            ENGINE_COMPARE(ELM_SOFTWARE_16_X11) ||
+            ENGINE_COMPARE(ELM_XRENDER_X11) ||
+            ENGINE_COMPARE(ELM_OPENGL_X11))
+#undef ENGINE_COMPARE
           {
 # ifdef HAVE_ELEMENTARY_X
              ecore_x_init(NULL);
index c289db4..6ccf0be 100644 (file)
@@ -39,24 +39,6 @@ struct _Elm_Theme
    int         ref;
 };
 
-typedef enum _Elm_Engine
-{
-   ELM_SOFTWARE_X11,
-   ELM_SOFTWARE_FB,
-   ELM_SOFTWARE_DIRECTFB,
-   ELM_SOFTWARE_16_X11,
-   ELM_SOFTWARE_8_X11,
-   ELM_XRENDER_X11,
-   ELM_OPENGL_X11,
-   ELM_SOFTWARE_WIN32,
-   ELM_SOFTWARE_16_WINCE,
-   ELM_SOFTWARE_SDL,
-   ELM_SOFTWARE_16_SDL,
-   ELM_OPENGL_SDL
-} Elm_Engine;
-
-
-
 /* increment this whenever we change config enough that you need new
  * defaults for elm to work.
  */
@@ -67,10 +49,26 @@ typedef enum _Elm_Engine
 #define ELM_CONFIG_FILE_GENERATION 0x0001
 #define ELM_CONFIG_VERSION         ((ELM_CONFIG_EPOCH << 16) | ELM_CONFIG_FILE_GENERATION)
 
+/* note: always remember to sync it with elm_config.c */
+extern const char *_elm_engines[];
+
+#define ELM_SOFTWARE_X11 (_elm_engines[0])
+#define ELM_SOFTWARE_FB (_elm_engines[1])
+#define ELM_SOFTWARE_DIRECTFB (_elm_engines[2])
+#define ELM_SOFTWARE_16_X11 (_elm_engines[3])
+#define ELM_SOFTWARE_8_X11 (_elm_engines[4])
+#define ELM_XRENDER_X11 (_elm_engines[5])
+#define ELM_OPENGL_X11 (_elm_engines[6])
+#define ELM_SOFTWARE_WIN32 (_elm_engines[7])
+#define ELM_SOFTWARE_16_WINCE (_elm_engines[8])
+#define ELM_SOFTWARE_SDL (_elm_engines[9])
+#define ELM_SOFTWARE_16_SDL (_elm_engines[10])
+#define ELM_OPENGL_SDL (_elm_engines[11])
+
 struct _Elm_Config
 {
    int          config_version;
-   int          engine;
+   const char  *engine;
    Eina_Bool    thumbscroll_enable;
    int          thumbscroll_threshold;
    double       thumbscroll_momentum_threshold;
index 9a12e1b..d3ad9a2 100644 (file)
@@ -323,36 +323,41 @@ static void
 _elm_win_xwindow_get(Elm_Win *win)
 {
    win->xwin = 0;
-   switch (_elm_config->engine)
+
+#define ENGINE_COMPARE(name) (!strcmp(_elm_config->engine, name))
+   if (ENGINE_COMPARE(ELM_SOFTWARE_X11))
+     {
+       if (win->ee) win->xwin = ecore_evas_software_x11_window_get(win->ee);
+     }
+   else if (ENGINE_COMPARE(ELM_SOFTWARE_X11) ||
+            ENGINE_COMPARE(ELM_SOFTWARE_FB) ||
+            ENGINE_COMPARE(ELM_SOFTWARE_16_WINCE) ||
+            ENGINE_COMPARE(ELM_SOFTWARE_SDL) ||
+            ENGINE_COMPARE(ELM_SOFTWARE_16_SDL) ||
+            ENGINE_COMPARE(ELM_OPENGL_SDL))
+     {
+     }
+   else if (ENGINE_COMPARE(ELM_SOFTWARE_16_X11))
      {
-      case ELM_SOFTWARE_X11:
-       if (win->ee) win->xwin = ecore_evas_software_x11_window_get(win->ee);
-       break;
-      case ELM_SOFTWARE_FB:
-      case ELM_SOFTWARE_DIRECTFB:
-      case ELM_SOFTWARE_16_WINCE:
-      case ELM_SOFTWARE_SDL:
-      case ELM_SOFTWARE_16_SDL:
-      case ELM_OPENGL_SDL:
-       break;
-      case ELM_SOFTWARE_16_X11:
        if (win->ee) win->xwin = ecore_evas_software_x11_16_window_get(win->ee);
-       break;
-      case ELM_SOFTWARE_8_X11:
+     }
+   else if (ENGINE_COMPARE(ELM_SOFTWARE_8_X11))
+     {
        if (win->ee) win->xwin = ecore_evas_software_x11_8_window_get(win->ee);
-       break;
-      case ELM_XRENDER_X11:
+     }
+   else if (ENGINE_COMPARE(ELM_XRENDER_X11))
+     {
        if (win->ee) win->xwin = ecore_evas_xrender_x11_window_get(win->ee);
-       break;
-      case ELM_OPENGL_X11:
+     }
+   else if (ENGINE_COMPARE(ELM_OPENGL_X11))
+     {
        if (win->ee) win->xwin = ecore_evas_gl_x11_window_get(win->ee);
-       break;
-      case ELM_SOFTWARE_WIN32:
+     }
+   else if (ENGINE_COMPARE(ELM_SOFTWARE_WIN32))
+     {
        if (win->ee) win->xwin = (long)ecore_evas_win32_window_get(win->ee);
-       break;
-      default:
-       break;
      }
+#undef ENGINE_COMPARE
 }
 #endif
 
@@ -906,22 +911,26 @@ elm_win_add(Evas_Object *parent, const char *name, Elm_Win_Type type)
    const char *fontpath;
 
    win = ELM_NEW(Elm_Win);
-   switch (_elm_config->engine)
+
+#define ENGINE_COMPARE(name) (!strcmp(_elm_config->engine, name))
+   if (ENGINE_COMPARE(ELM_SOFTWARE_X11))
      {
-      case ELM_SOFTWARE_X11:
        win->ee = ecore_evas_software_x11_new(NULL, 0, 0, 0, 1, 1);
 #ifdef HAVE_ELEMENTARY_X
         win->client_message_handler = ecore_event_handler_add
           (ECORE_X_EVENT_CLIENT_MESSAGE, _elm_win_client_message, win);
 #endif
-       break;
-      case ELM_SOFTWARE_FB:
+     }
+   else if (ENGINE_COMPARE(ELM_SOFTWARE_FB))
+     {
        win->ee = ecore_evas_fb_new(NULL, 0, 1, 1);
-       break;
-      case ELM_SOFTWARE_DIRECTFB:
+     }
+   else if (ENGINE_COMPARE(ELM_SOFTWARE_DIRECTFB))
+     {
         win->ee = ecore_evas_directfb_new(NULL, 1, 0, 0, 1, 1);
-       break;
-      case ELM_SOFTWARE_16_X11:
+     }
+   else if (ENGINE_COMPARE(ELM_SOFTWARE_16_X11))
+     {
        win->ee = ecore_evas_software_x11_16_new(NULL, 0, 0, 0, 1, 1);
         if (!win->ee)
           {
@@ -932,8 +941,9 @@ elm_win_add(Evas_Object *parent, const char *name, Elm_Win_Type type)
         win->client_message_handler = ecore_event_handler_add
           (ECORE_X_EVENT_CLIENT_MESSAGE, _elm_win_client_message, win);
 #endif
-       break;
-      case ELM_SOFTWARE_8_X11:
+     }
+   else if (ENGINE_COMPARE(ELM_SOFTWARE_8_X11))
+     {
        win->ee = ecore_evas_software_x11_8_new(NULL, 0, 0, 0, 1, 1);
         if (!win->ee)
           {
@@ -944,8 +954,9 @@ elm_win_add(Evas_Object *parent, const char *name, Elm_Win_Type type)
         win->client_message_handler = ecore_event_handler_add
           (ECORE_X_EVENT_CLIENT_MESSAGE, _elm_win_client_message, win);
 #endif
-       break;
-      case ELM_XRENDER_X11:
+     }
+   else if (ENGINE_COMPARE(ELM_XRENDER_X11))
+     {
        win->ee = ecore_evas_xrender_x11_new(NULL, 0, 0, 0, 1, 1);
         if (!win->ee)
           {
@@ -956,8 +967,9 @@ elm_win_add(Evas_Object *parent, const char *name, Elm_Win_Type type)
         win->client_message_handler = ecore_event_handler_add
           (ECORE_X_EVENT_CLIENT_MESSAGE, _elm_win_client_message, win);
 #endif
-       break;
-      case ELM_OPENGL_X11:
+     }
+   else if (ENGINE_COMPARE(ELM_OPENGL_X11))
+     {
        win->ee = ecore_evas_gl_x11_new(NULL, 0, 0, 0, 1, 1);
         if (!win->ee)
           {
@@ -968,40 +980,43 @@ elm_win_add(Evas_Object *parent, const char *name, Elm_Win_Type type)
         win->client_message_handler = ecore_event_handler_add
           (ECORE_X_EVENT_CLIENT_MESSAGE, _elm_win_client_message, win);
 #endif
-       break;
-      case ELM_SOFTWARE_WIN32:
+     }
+   else if (ENGINE_COMPARE(ELM_SOFTWARE_WIN32))
+     {
        win->ee = ecore_evas_software_gdi_new(NULL, 0, 0, 1, 1);
-       break;
-      case ELM_SOFTWARE_16_WINCE:
+     }
+   else if (ENGINE_COMPARE(ELM_SOFTWARE_16_WINCE))
+     {
        win->ee = ecore_evas_software_wince_gdi_new(NULL, 0, 0, 1, 1);
-       break;
-      case ELM_SOFTWARE_SDL:
+     }
+   else if (ENGINE_COMPARE(ELM_SOFTWARE_SDL))
+     {
        win->ee = ecore_evas_sdl_new(NULL, 0, 0, 0, 0, 0, 1);
         if (!win->ee)
           {
              CRITICAL("Software SDL engine create failed. Try software.");
              win->ee = ecore_evas_software_x11_new(NULL, 0, 0, 0, 1, 1);
           }
-       break;
-      case ELM_SOFTWARE_16_SDL:
+     }
+   else if (ENGINE_COMPARE(ELM_SOFTWARE_16_SDL))
+     {
        win->ee = ecore_evas_sdl16_new(NULL, 0, 0, 0, 0, 0, 1);
         if (!win->ee)
           {
              CRITICAL("Sofware-16-SDL engine create failed. Try software.");
              win->ee = ecore_evas_software_x11_new(NULL, 0, 0, 0, 1, 1);
           }
-       break;
-      case ELM_OPENGL_SDL:
+     }
+   else if (ENGINE_COMPARE(ELM_OPENGL_SDL))
+     {
        win->ee = ecore_evas_gl_sdl_new(NULL, 1, 1, 0, 0);
         if (!win->ee)
           {
              CRITICAL("OpenGL SDL engine create failed. Try software.");
              win->ee = ecore_evas_software_x11_new(NULL, 0, 0, 0, 1, 1);
           }
-       break;
-      default:
-       break;
      }
+
    if (!win->ee)
      {
        ERR("Cannot create window.");
@@ -1073,24 +1088,11 @@ elm_win_add(Evas_Object *parent, const char *name, Elm_Win_Type type)
 
    _elm_win_list = eina_list_append(_elm_win_list, win->win_obj);
 
-   switch (_elm_config->engine)
+   if (ENGINE_COMPARE(ELM_SOFTWARE_FB))
      {
-      case ELM_SOFTWARE_16_WINCE:
-      case ELM_SOFTWARE_FB:
        ecore_evas_fullscreen_set(win->ee, 1);
-       break;
-      case ELM_SOFTWARE_X11:
-      case ELM_SOFTWARE_16_X11:
-      case ELM_SOFTWARE_8_X11:
-      case ELM_XRENDER_X11:
-      case ELM_OPENGL_X11:
-      case ELM_SOFTWARE_WIN32:
-      case ELM_SOFTWARE_SDL:
-      case ELM_SOFTWARE_16_SDL:
-      case ELM_OPENGL_SDL:
-      default:
-       break;
      }
+#undef ENGINE_COMPARE
 
    if (_elm_config->focus_highlight_enable)
      elm_win_focus_highlight_enabled_set(win->win_obj, EINA_TRUE);
@@ -1513,19 +1515,22 @@ elm_win_fullscreen_set(Evas_Object *obj, Eina_Bool fullscreen)
    ELM_CHECK_WIDTYPE(obj, widtype);
    win = elm_widget_data_get(obj);
    if (!win) return;
-   switch (_elm_config->engine)
+
+#define ENGINE_COMPARE(name) (!strcmp(_elm_config->engine, name))
+   if (ENGINE_COMPARE(ELM_SOFTWARE_FB) ||
+       ENGINE_COMPARE(ELM_SOFTWARE_16_WINCE))
      {
-     case ELM_SOFTWARE_16_WINCE:
-     case ELM_SOFTWARE_FB:
        // these engines... can ONLY be fullscreen
-       break;
-     default:
+       return;
+     }
+   else
+     {
        ecore_evas_fullscreen_set(win->ee, fullscreen);
 #ifdef HAVE_ELEMENTARY_X
        _elm_win_xwin_update(win);
 #endif
-       break;
      }
+#undef ENGINE_COMPARE
 }
 
 /**
@@ -1543,18 +1548,19 @@ elm_win_fullscreen_get(const Evas_Object *obj)
    ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE;
    win = elm_widget_data_get(obj);
    if (!win) return EINA_FALSE;
-   switch (_elm_config->engine)
+
+#define ENGINE_COMPARE(name) (!strcmp(_elm_config->engine, name))
+   if (ENGINE_COMPARE(ELM_SOFTWARE_FB) ||
+       ENGINE_COMPARE(ELM_SOFTWARE_16_WINCE))
      {
-     case ELM_SOFTWARE_16_WINCE:
-     case ELM_SOFTWARE_FB:
        // these engines... can ONLY be fullscreen
        return EINA_TRUE;
-       break;
-     default:
+     }
+   else
+     {
        return ecore_evas_fullscreen_get(win->ee);
-       break;
      }
-   return EINA_FALSE;
+#undef ENGINE_COMPARE
 }
 
 /**