3a2886dd0b63334e6b36ba63d00f0efd53a8fd74
[platform/framework/web/chromium-efl.git] / tizen_src / ewk / efl_integration / public / ewk_main.cc
1 /*
2  * Copyright (C) 2009-2010 ProFUSION embedded systems
3  * Copyright (C) 2009-2013 Samsung Electronics. All rights reserved.
4  * Copyright (C) 2012 Intel Corporation
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Library General Public
8  * License as published by the Free Software Foundation; either
9  * version 2 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Library General Public License for more details.
15  *
16  * You should have received a copy of the GNU Library General Public
17  * License along with this library; if not, write to the
18  * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
19  * Boston, MA  02110-1301, USA.
20  *
21  */
22
23 #include "ewk_main.h"
24
25 #include <Ecore.h>
26 #include <Ecore_Evas.h>
27 #include <Ecore_IMF.h>
28 #include <Edje.h>
29 #include <Eina.h>
30 #include <Evas.h>
31
32 #include "command_line_efl.h"
33 #include "eweb_context.h"
34 #include "ewk_global_data.h"
35 #include "public/ewk_log.h"
36 #include "public/ewk_view.h"
37 #include "private/webview_delegate_ewk.h"
38 #include "private/ewk_context_private.h"
39 #include "private/ewk_private.h"
40 #include "private/ewk_main_private.h"
41
42 #include "ecore_x_wayland_wrapper.h"
43
44 static int _ewkInitCount = 0;
45
46 /////////////////////////////////////////////////////////////////////////////
47 //private function declaration here
48 static void _ewk_init_web_engine(void);
49 static void _ewk_shutdown_web_engine(void);
50
51 extern std::string g_homeDirectory;
52
53 /**
54  * \var     _ewk_log_dom
55  * @brief   the log domain identifier that is used with EINA's macros
56  */
57 int _ewk_log_dom = -1;
58 #if defined(USE_WAYLAND) && TIZEN_VERSION_AT_LEAST(5, 0, 0)
59 Ecore_Wl2_Display* _ecore_wl2_display = NULL;
60 #endif
61
62 int ewk_init(void)
63 {
64   if (_ewkInitCount)
65       return ++_ewkInitCount;
66
67   if (!eina_init())
68       goto error_eina;
69
70   _ewk_log_dom = eina_log_domain_register("ewebview-blink", EINA_COLOR_ORANGE);
71   if (_ewk_log_dom < 0) {
72       EINA_LOG_CRIT("could not register log domain 'ewebview-blink'");
73       goto error_log_domain;
74   }
75
76   if (!evas_init()) {
77       CRITICAL("could not init evas.");
78       goto error_evas;
79   }
80
81   if (!ecore_init()) {
82       CRITICAL("could not init ecore.");
83       goto error_ecore;
84   }
85
86   if (!ecore_evas_init()) {
87       CRITICAL("could not init ecore_evas.");
88       goto error_ecore_evas;
89   }
90
91   if (!ecore_imf_init()) {
92       CRITICAL("could not init ecore_imf.");
93       goto error_ecore_imf;
94   }
95
96 #if defined(USE_WAYLAND)
97 #if TIZEN_VERSION_AT_LEAST(5, 0, 0)
98   if (!ecore_wl2_init()) {
99 #else
100   if (!ecore_wl_init(0)) {
101 #endif  // TIZEN_VERSION_AT_LEAST(5, 0, 0)
102     ERR("could not init ecore_wl.");
103     goto error_ecore_wl;
104   }
105 #if TIZEN_VERSION_AT_LEAST(5, 0, 0)
106   if (!_ecore_wl2_display)
107     _ecore_wl2_display = ecore_wl2_display_connect(NULL);
108 #endif  // TIZEN_VERSION_AT_LEAST(5, 0, 0)
109 #else
110   if (!ecore_x_init(0)) {
111       CRITICAL("could not init ecore_x.");
112       goto error_ecore_x;
113   }
114 #endif
115
116   if (!edje_init()) {
117       CRITICAL("Could not init edje.");
118       goto error_edje;
119   }
120
121   // FIXME: do we need glib integration like WebKit?
122 #if 0
123 #if !GLIB_CHECK_VERSION(2, 35, 0)
124   g_type_init();
125 #endif
126
127   if (!ecore_main_loop_glib_integrate()) {
128       WARN("Ecore was not compiled with GLib support, some plugins will not "
129           "work (ie: Adobe Flash)");
130   }
131 #endif
132
133   _ewk_init_web_engine();
134   return ++_ewkInitCount;
135
136 error_edje:
137 #if defined(USE_WAYLAND)
138 #if TIZEN_VERSION_AT_LEAST(5, 0, 0)
139   if (_ecore_wl2_display) {
140     ecore_wl2_display_disconnect(_ecore_wl2_display);
141     _ecore_wl2_display = NULL;
142     ecore_wl2_shutdown();
143   }
144 #else
145   ecore_wl_shutdown();
146 #endif  // TIZEN_VERSION_AT_LEAST(5, 0, 0)
147 error_ecore_wl:
148 #else
149   ecore_x_shutdown();
150 error_ecore_x:
151 #endif
152   ecore_imf_shutdown();
153 error_ecore_imf:
154   ecore_evas_shutdown();
155 error_ecore_evas:
156   ecore_shutdown();
157 error_ecore:
158   evas_shutdown();
159 error_evas:
160   eina_log_domain_unregister(_ewk_log_dom);
161   _ewk_log_dom = -1;
162 error_log_domain:
163   eina_shutdown();
164 error_eina:
165   return 0;
166 }
167
168 int ewk_shutdown(void)
169 {
170   if (!_ewkInitCount || --_ewkInitCount)
171       return _ewkInitCount;
172
173   _ewk_shutdown_web_engine();
174
175   edje_shutdown();
176 #if defined(USE_WAYLAND)
177 #if TIZEN_VERSION_AT_LEAST(5, 0, 0)
178   if (_ecore_wl2_display) {
179     ecore_wl2_display_disconnect(_ecore_wl2_display);
180     _ecore_wl2_display = NULL;
181     ecore_wl2_shutdown();
182   }
183 #else
184   ecore_wl_shutdown();
185 #endif  // TIZEN_VERSION_AT_LEAST(5, 0, 0)
186 #else
187   ecore_x_shutdown();
188 #endif
189   ecore_imf_shutdown();
190   ecore_evas_shutdown();
191   ecore_shutdown();
192   evas_shutdown();
193   eina_log_domain_unregister(_ewk_log_dom);
194   _ewk_log_dom = -1;
195   eina_shutdown();
196
197   return 0;
198 }
199
200 void ewk_set_arguments(int argc, char** argv)
201 {
202     CommandLineEfl::Init(argc, argv);
203 }
204
205 void ewk_home_directory_set(const char* path)
206 {
207   if (!path)
208     g_homeDirectory.clear();
209   else
210     g_homeDirectory = path;
211 }
212
213 /////////////////////////////////////////////////////////////////////////////////////////////
214 //Private functions implementations for ewk_main module
215
216 //Initialize web engine
217 void _ewk_init_web_engine()
218 {
219 }
220
221 void _ewk_shutdown_web_engine(void)
222 {
223   //TODO: any web engine destroy to be done here
224   CommandLineEfl::Shutdown();
225   Ewk_Context::DefaultContextRelease();
226   EwkGlobalData::Delete();
227 }
228