Changeset 130620 in webkit
- Timestamp:
- Oct 8, 2012, 12:40:58 AM (14 years ago)
- Location:
- trunk/Tools
- Files:
-
- 2 edited
-
ChangeLog (modified) (1 diff)
-
MiniBrowser/efl/main.c (modified) (10 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Tools/ChangeLog
r130617 r130620 1 2012-10-08 Jinwoo Song <jinwoo7.song@samsung.com> 2 3 [EFL][WK2] Support multiple window creation for MiniBrowser 4 https://bugs.webkit.org/show_bug.cgi?id=97884 5 6 Reviewed by Kenneth Rohde Christiansen. 7 8 Implement the multiple window creation for MiniBrowser and bind the 'F9' key for opening a new window. 9 Also, refactored MiniBrowser codes according to EFL coding style. 10 11 * MiniBrowser/efl/main.c: 12 (_Browser_Window): 13 (window_free): 14 (main_signal_exit): 15 (on_ecore_evas_delete): 16 (on_ecore_evas_resize): 17 (on_key_down): 18 (on_title_changed): 19 (on_url_changed): 20 (on_progress): 21 (window_create): 22 (main): 23 1 24 2012-10-07 Seokju Kwon <seokju.kwon@samsung.com> 2 25 -
trunk/Tools/MiniBrowser/efl/main.c
r130517 r130620 38 38 39 39 static int verbose = 1; 40 41 typedef struct _MiniBrowser { 40 static Eina_List *windows = NULL; 41 static char *evas_engine_name = NULL; 42 43 typedef struct _Browser_Window { 42 44 Ecore_Evas *ee; 43 45 Evas *evas; 44 Evas_Object * browser;46 Evas_Object *webview; 45 47 Url_Bar *url_bar; 46 } MiniBrowser; 47 48 MiniBrowser *browser; 48 } Browser_Window; 49 49 50 50 static const Ecore_Getopt options = { … … 73 73 }; 74 74 75 static Browser_Window *window_create(const char *url, Eina_Bool frame_flattening); 76 77 static Browser_Window *browser_window_find(Ecore_Evas *ee) 78 { 79 Eina_List *l; 80 void *data; 81 82 if (!ee) 83 return NULL; 84 85 EINA_LIST_FOREACH(windows, l, data) { 86 Browser_Window *window = (Browser_Window *)data; 87 if (window->ee == ee) 88 return window; 89 } 90 return NULL; 91 } 92 93 static void window_free(Browser_Window *window) 94 { 95 url_bar_del(window->url_bar); 96 ecore_evas_free(window->ee); 97 free(window); 98 } 99 75 100 static Eina_Bool main_signal_exit(void *data, int ev_type, void *ev) 76 101 { 102 Browser_Window *window; 103 EINA_LIST_FREE(windows, window) 104 window_free(window); 105 77 106 ecore_main_loop_quit(); 78 107 return EINA_TRUE; 79 108 } 80 109 81 static void closeWindow(Ecore_Evas *ee) 82 { 83 ecore_main_loop_quit(); 110 static void on_ecore_evas_delete(Ecore_Evas *ee) 111 { 112 Browser_Window *window = browser_window_find(ee); 113 114 window_free(window); 115 windows = eina_list_remove(windows, window); 116 117 if (!windows) 118 ecore_main_loop_quit(); 84 119 } 85 120 86 121 static void on_ecore_evas_resize(Ecore_Evas *ee) 87 122 { 123 Browser_Window *window; 88 124 Evas_Object *webview; 89 125 int w, h; 90 126 127 window = browser_window_find(ee); 128 if (!window) 129 return; 130 91 131 ecore_evas_geometry_get(ee, NULL, NULL, &w, &h); 92 132 93 133 /* Resize URL bar */ 94 url_bar_width_set(browser->url_bar, w); 95 96 webview = evas_object_name_find(ecore_evas_get(ee), "browser"); 97 evas_object_move(webview, 0, URL_BAR_HEIGHT); 98 evas_object_resize(webview, w, h - URL_BAR_HEIGHT); 134 url_bar_width_set(window->url_bar, w); 135 136 evas_object_move(window->webview, 0, URL_BAR_HEIGHT); 137 evas_object_resize(window->webview, w, h - URL_BAR_HEIGHT); 99 138 } 100 139 … … 122 161 ewk_view_setting_encoding_custom_set(obj, encodings[currentEncoding]); 123 162 } else if (!strcmp(ev->key, "F5")) { 124 info("Reload (F5) was pressed, reloading.\n");125 ewk_view_reload(obj);163 info("Reload (F5) was pressed, reloading.\n"); 164 ewk_view_reload(obj); 126 165 } else if (!strcmp(ev->key, "F6")) { 127 info("Stop (F6) was pressed, stop loading.\n"); 128 ewk_view_stop(obj); 166 info("Stop (F6) was pressed, stop loading.\n"); 167 ewk_view_stop(obj); 168 } else if (!strcmp(ev->key, "F9")) { 169 info("Create new window (F9) was pressed.\n"); 170 Browser_Window *window = window_create(DEFAULT_URL, EINA_FALSE); 171 windows = eina_list_append(windows, window); 129 172 } 130 173 } … … 164 207 on_title_changed(void *user_data, Evas_Object *webview, void *event_info) 165 208 { 166 MiniBrowser *app = (MiniBrowser*)user_data;209 Browser_Window *window = (Browser_Window *)user_data; 167 210 const char *title = (const char *)event_info; 168 211 169 title_set( app->ee, title, 100);212 title_set(window->ee, title, 100); 170 213 } 171 214 … … 173 216 on_url_changed(void *user_data, Evas_Object *webview, void *event_info) 174 217 { 175 MiniBrowser *app = (MiniBrowser*)user_data;176 url_bar_url_set( app->url_bar, ewk_view_uri_get(app->browser));218 Browser_Window *window = (Browser_Window *)user_data; 219 url_bar_url_set(window->url_bar, ewk_view_uri_get(window->webview)); 177 220 } 178 221 … … 180 223 on_progress(void *user_data, Evas_Object *webview, void *event_info) 181 224 { 182 MiniBrowser *app = (MiniBrowser*)user_data;225 Browser_Window *window = (Browser_Window *)user_data; 183 226 double progress = *(double *)event_info; 184 227 185 title_set( app->ee, ewk_view_title_get(app->browser), progress * 100);228 title_set(window->ee, ewk_view_title_get(window->webview), progress * 100); 186 229 } 187 230 … … 250 293 } 251 294 252 static MiniBrowser *browserCreate(const char *url, const char *engine, Eina_Bool frame_flattening) 253 { 254 MiniBrowser *app = malloc(sizeof(MiniBrowser)); 255 256 app->ee = ecore_evas_new(engine, 0, 0, DEFAULT_WIDTH, DEFAULT_HEIGHT, 0); 257 if (!app->ee) 258 return 0; 259 260 ecore_evas_title_set(app->ee, APP_NAME); 261 ecore_evas_callback_resize_set(app->ee, on_ecore_evas_resize); 262 ecore_evas_borderless_set(app->ee, 0); 263 ecore_evas_show(app->ee); 264 ecore_evas_callback_delete_request_set(app->ee, closeWindow); 265 266 app->evas = ecore_evas_get(app->ee); 295 static Browser_Window *window_create(const char *url, Eina_Bool frame_flattening) 296 { 297 Browser_Window *window = malloc(sizeof(Browser_Window)); 298 if (!window) { 299 info("ERROR: could not create browser window.\n"); 300 return NULL; 301 } 302 303 window->ee = ecore_evas_new(evas_engine_name, 0, 0, DEFAULT_WIDTH, DEFAULT_HEIGHT, 0); 304 if (!window->ee) { 305 info("ERROR: could not construct ecore-evas.\n"); 306 free(window); 307 return NULL; 308 } 309 310 ecore_evas_title_set(window->ee, APP_NAME); 311 ecore_evas_callback_resize_set(window->ee, on_ecore_evas_resize); 312 ecore_evas_borderless_set(window->ee, 0); 313 ecore_evas_show(window->ee); 314 ecore_evas_callback_delete_request_set(window->ee, on_ecore_evas_delete); 315 316 window->evas = ecore_evas_get(window->ee); 317 if (!window->evas) { 318 info("ERROR: could not get evas from evas-ecore.\n"); 319 free(window); 320 return NULL; 321 } 267 322 268 323 /* Create webview */ 269 app->browser = ewk_view_add(app->evas); 270 ewk_view_theme_set(app->browser, THEME_DIR"/default.edj"); 271 ewk_settings_enable_frame_flattening_set(ewk_view_settings_get(app->browser), frame_flattening); 272 evas_object_name_set(app->browser, "browser"); 273 274 Ewk_Settings *settings = ewk_view_settings_get(app->browser); 324 window->webview = ewk_view_add(window->evas); 325 ewk_view_theme_set(window->webview, THEME_DIR"/default.edj"); 326 ewk_settings_enable_frame_flattening_set(ewk_view_settings_get(window->webview), frame_flattening); 327 328 Ewk_Settings *settings = ewk_view_settings_get(window->webview); 275 329 ewk_settings_file_access_from_file_urls_allowed_set(settings, EINA_TRUE); 276 330 277 evas_object_smart_callback_add( app->browser, "download,failed", on_download_failed, app);278 evas_object_smart_callback_add( app->browser, "download,finished", on_download_finished, app);279 evas_object_smart_callback_add( app->browser, "download,request", on_download_request, app);280 evas_object_smart_callback_add( app->browser, "load,error", on_error, app);281 evas_object_smart_callback_add( app->browser, "load,progress", on_progress, app);282 evas_object_smart_callback_add( app->browser, "title,changed", on_title_changed, app);283 evas_object_smart_callback_add( app->browser, "uri,changed", on_url_changed, app);284 285 evas_object_event_callback_add( app->browser, EVAS_CALLBACK_KEY_DOWN, on_key_down, app);286 evas_object_event_callback_add( app->browser, EVAS_CALLBACK_MOUSE_DOWN, on_mouse_down, app);287 288 evas_object_size_hint_weight_set( app->browser, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);289 evas_object_move( app->browser, 0, URL_BAR_HEIGHT);290 evas_object_resize( app->browser, DEFAULT_WIDTH, DEFAULT_HEIGHT - URL_BAR_HEIGHT);291 evas_object_show( app->browser);292 evas_object_focus_set( app->browser, EINA_TRUE);293 294 app->url_bar = url_bar_add(app->browser, DEFAULT_WIDTH);295 296 ewk_view_uri_set( app->browser, url);297 298 return app;331 evas_object_smart_callback_add(window->webview, "download,failed", on_download_failed, window); 332 evas_object_smart_callback_add(window->webview, "download,finished", on_download_finished, window); 333 evas_object_smart_callback_add(window->webview, "download,request", on_download_request, window); 334 evas_object_smart_callback_add(window->webview, "load,error", on_error, window); 335 evas_object_smart_callback_add(window->webview, "load,progress", on_progress, window); 336 evas_object_smart_callback_add(window->webview, "title,changed", on_title_changed, window); 337 evas_object_smart_callback_add(window->webview, "uri,changed", on_url_changed, window); 338 339 evas_object_event_callback_add(window->webview, EVAS_CALLBACK_KEY_DOWN, on_key_down, window); 340 evas_object_event_callback_add(window->webview, EVAS_CALLBACK_MOUSE_DOWN, on_mouse_down, window); 341 342 evas_object_size_hint_weight_set(window->webview, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); 343 evas_object_move(window->webview, 0, URL_BAR_HEIGHT); 344 evas_object_resize(window->webview, DEFAULT_WIDTH, DEFAULT_HEIGHT - URL_BAR_HEIGHT); 345 evas_object_show(window->webview); 346 evas_object_focus_set(window->webview, EINA_TRUE); 347 348 window->url_bar = url_bar_add(window->webview, DEFAULT_WIDTH); 349 350 ewk_view_uri_set(window->webview, url); 351 352 return window; 299 353 } 300 354 … … 302 356 { 303 357 int args = 1; 304 char *engine = NULL;305 358 unsigned char quitOption = 0; 359 Browser_Window *window; 306 360 307 361 Eina_Bool frame_flattening = EINA_FALSE; 308 362 309 363 Ecore_Getopt_Value values[] = { 310 ECORE_GETOPT_VALUE_STR(e ngine),364 ECORE_GETOPT_VALUE_STR(evas_engine_name), 311 365 ECORE_GETOPT_VALUE_BOOL(quitOption), 312 366 ECORE_GETOPT_VALUE_BOOL(frame_flattening), … … 331 385 if (args < argc) { 332 386 char *url = url_from_user_input(argv[args]); 333 browser = browserCreate(url, engine, frame_flattening);387 window = window_create(url, frame_flattening); 334 388 free(url); 335 389 } else 336 browser = browserCreate(DEFAULT_URL, engine, frame_flattening); 337 338 if (!browser) 339 return quit(EINA_FALSE, "ERROR: could not create browser.\n"); 390 window = window_create(DEFAULT_URL, frame_flattening); 391 392 if (!window) 393 return quit(EINA_FALSE, "ERROR: could not create browser window.\n"); 394 395 windows = eina_list_append(windows, window); 340 396 341 397 Ecore_Event_Handler *handle = ecore_event_handler_add(ECORE_EVENT_SIGNAL_EXIT, main_signal_exit, 0); … … 343 399 ecore_main_loop_begin(); 344 400 345 url_bar_del(browser->url_bar);346 401 ecore_event_handler_del(handle); 347 ecore_evas_free(browser->ee);348 free(browser);349 402 350 403 return quit(EINA_TRUE, NULL);
Note:
See TracChangeset
for help on using the changeset viewer.