1dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/* 2dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Copyright (C) 2008 INdT - Instituto Nokia de Tecnologia 3dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Copyright (C) 2009, 2010 ProFUSION embedded systems 481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * Copyright (C) 2009, 2010, 2011 Samsung Electronics 5dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 6dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * All rights reserved. 7dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 8dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Redistribution and use in source and binary forms, with or without 9dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * modification, are permitted provided that the following conditions 10dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * are met: 11dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1. Redistributions of source code must retain the above copyright 12dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * notice, this list of conditions and the following disclaimer. 13dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 2. Redistributions in binary form must reproduce the above copyright 14dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * notice, this list of conditions and the following disclaimer in the 15dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * documentation and/or other materials provided with the distribution. 16dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 17dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 18dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 20dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 21dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 22dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 23dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 24dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 25dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 29dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 30dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "EWebKit.h" 31dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 32dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <ctype.h> 33dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <Ecore.h> 34dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <Ecore_Evas.h> 35dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <Ecore_File.h> 36dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <Ecore_Getopt.h> 37dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <Ecore_X.h> 38dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <Edje.h> 39dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <Evas.h> 40dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <limits.h> 41dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <stdio.h> 42dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <stdlib.h> 43dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <string.h> 4421939df44de1705786c545cd1bf519d47250322dBen Murdoch#include <sys/stat.h> 45dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <sys/types.h> 46dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <unistd.h> 47dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 48dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#define DEFAULT_WIDTH 800 49dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#define DEFAULT_HEIGHT 600 50e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke#define DEFAULT_ZOOM_INIT 1.0 51dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 52dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#define info(format, args...) \ 53dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block do { \ 54dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (verbose) \ 55dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block printf(format, ##args); \ 56dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } while (0) 57dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 58dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#define MIN_ZOOM_LEVEL 0 59dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#define DEFAULT_ZOOM_LEVEL 5 60dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#define MAX_ZOOM_LEVEL 13 61dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 62dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockstatic int currentZoomLevel = DEFAULT_ZOOM_LEVEL; 634576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangstatic float currentZoom = 1.0; 64dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 65dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block// the zoom values are chosen to be like in Mozilla Firefox 3 66dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockstatic int zoomLevels[] = {30, 50, 67, 80, 90, 67dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 100, 68dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 110, 120, 133, 150, 170, 200, 240, 300}; 69dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 70dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockstatic int verbose = 0; 71dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 72dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockstatic Eina_List *windows = NULL; 73dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 74dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockstatic char *themePath = NULL; 75dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 764576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangstatic const char *backingStores[] = { 774576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang "tiled", 784576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang "single", 794576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang NULL 804576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang}; 814576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang 82dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef struct _Window_Properties { 83dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Eina_Bool toolbarsVisible:1; 84dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Eina_Bool statusbarVisible:1; 85dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Eina_Bool scrollbarsVisible:1; 86dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Eina_Bool menubarVisible:1; 87dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} Window_Properties; 88dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 89dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockWindow_Properties windowProperties = { /* Pretend we have them and they are initially visible */ 90dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_TRUE, 91dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_TRUE, 92dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_TRUE, 93dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_TRUE 94dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block}; 95dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 96dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockstatic const Ecore_Getopt options = { 97dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "EWebLauncher", 98dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "%prog [options] [url]", 99dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "0.0.1", 100dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "(C)2008 INdT (The Nokia Technology Institute)\n" 101dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "(C)2009, 2010 ProFUSION embedded systems\n" 10281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch "(C)2009, 2010, 2011 Samsung Electronics", 103dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "GPL", 104dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "Test Web Browser using the Enlightenment Foundation Libraries of WebKit", 105dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_TRUE, { 106dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ECORE_GETOPT_STORE_STR 107dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ('e', "engine", "ecore-evas engine to use."), 108dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ECORE_GETOPT_CALLBACK_NOARGS 109dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ('E', "list-engines", "list ecore-evas engines.", 110dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ecore_getopt_callback_ecore_evas_list_engines, NULL), 1114576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang ECORE_GETOPT_CHOICE 1124576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang ('b', "backing-store", "choose backing store to use.", backingStores), 113dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ECORE_GETOPT_STORE_DEF_BOOL 11481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch ('f', "flattening", "frame flattening.", 0), 11581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch ECORE_GETOPT_STORE_DEF_BOOL 116dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ('F', "fullscreen", "fullscreen mode.", 0), 117dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ECORE_GETOPT_CALLBACK_ARGS 118dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ('g', "geometry", "geometry to use in x:y:w:h form.", "X:Y:W:H", 119dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ecore_getopt_callback_geometry_parse, NULL), 120dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ECORE_GETOPT_STORE_STR 121dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ('t', "theme", "path to read the theme file from."), 122dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ECORE_GETOPT_STORE_STR 123dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ('U', "user-agent", "custom user agent string to use."), 124dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ECORE_GETOPT_STORE_DEF_BOOL 125dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ('S', "sudo-workaround", "Workaround mode for making Flash work with sudo.", 0), 126dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ECORE_GETOPT_COUNT 127dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ('v', "verbose", "be more verbose."), 128dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ECORE_GETOPT_VERSION 129dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ('V', "version"), 130dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ECORE_GETOPT_COPYRIGHT 131dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ('R', "copyright"), 132dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ECORE_GETOPT_LICENSE 133dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ('L', "license"), 134dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ECORE_GETOPT_HELP 135dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ('h', "help"), 136dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ECORE_GETOPT_SENTINEL 137dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 138dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block}; 139dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 140e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarketypedef struct _Viewport { 141e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke int w; 142e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke int h; 143e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke float initScale; 144e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke float minScale; 145e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke float maxScale; 146a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch float devicePixelRatio; 147e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke Eina_Bool userScalable; 148e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke} Viewport; 149e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke 150dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef struct _ELauncher { 151dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Ecore_Evas *ee; 152dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Evas *evas; 153dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Evas_Object *bg; 154dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Evas_Object *browser; 155dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block const char *theme; 156dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block const char *userAgent; 1574576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang const char *backingStore; 15881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch unsigned char isFlattening; 159e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke Viewport viewport; 160dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} ELauncher; 161dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 16221939df44de1705786c545cd1bf519d47250322dBen Murdochstatic void browserDestroy(Ecore_Evas *ee); 16321939df44de1705786c545cd1bf519d47250322dBen Murdochstatic void closeWindow(Ecore_Evas *ee); 16481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochstatic int browserCreate(const char *url, const char *theme, const char *userAgent, Eina_Rectangle geometry, const char *engine, const char *backingStore, unsigned char isFlattening, unsigned char isFullscreen, const char *databasePath); 165dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 16621939df44de1705786c545cd1bf519d47250322dBen Murdochstatic void 167dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockprint_history(Eina_List *list) 168dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 169dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Eina_List *l; 170dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block void *d; 171dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 172dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!verbose) 173dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return; 174dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 175dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block printf("Session history contains:\n"); 176dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 177dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_LIST_FOREACH(list, l, d) { 178dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Ewk_History_Item *item = (Ewk_History_Item*)d; 179dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block cairo_surface_t *cs = ewk_history_item_icon_surface_get(item); 180dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block char buf[PATH_MAX]; 1815af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke int s = snprintf(buf, sizeof(buf), "/tmp/favicon-%s.png", ewk_history_item_uri_original_get(item)); 1825af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke for (s--; s >= (int)sizeof("/tmp/favicon-"); s--) { 183dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!isalnum(buf[s]) && buf[s] != '.') 184dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block buf[s] = '_'; 185dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 186dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block cs = ewk_history_item_icon_surface_get(item); 187dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 188dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (cs && cairo_surface_status(cs) == CAIRO_STATUS_SUCCESS) 189dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block cairo_surface_write_to_png(cs, buf); 190dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block else 191dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block buf[0] = '\0'; 192dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 193dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block printf("* '%s' title='%s' icon='%s'\n", 194dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ewk_history_item_uri_original_get(item), 195dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ewk_history_item_title_get(item), buf); 196dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 197dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 198dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1994576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangstatic int 2004576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangnearest_zoom_level_get(float factor) 2014576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang{ 2024576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang int i, intFactor = (int)(factor * 100.0); 2034576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang for (i = 0; zoomLevels[i] <= intFactor; i++) { } 2044576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang printf("factor=%f, intFactor=%d, zoomLevels[%d]=%d, zoomLevels[%d]=%d\n", 2054576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang factor, intFactor, i-1, zoomLevels[i-1], i, zoomLevels[i]); 2064576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang if (intFactor - zoomLevels[i-1] < zoomLevels[i] - intFactor) 2074576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang return i - 1; 2084576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang return i; 2094576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang} 2104576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang 2114576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangstatic Eina_Bool 212dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockzoom_level_set(Evas_Object *webview, int level) 213dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 214dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block float factor = ((float) zoomLevels[level]) / 100.0; 215dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Evas_Coord ox, oy, mx, my, cx, cy; 216dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_pointer_canvas_xy_get(evas_object_evas_get(webview), &mx, &my); 217dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_geometry_get(webview, &ox, &oy, NULL, NULL); 218dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block cx = mx - ox; 219dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block cy = my - oy; 2204576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang return ewk_view_zoom_animated_set(webview, factor, 0.5, cx, cy); 221dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 222dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 223dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockstatic void 224dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockon_ecore_evas_resize(Ecore_Evas *ee) 225dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 226dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Evas_Object *webview; 227dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Evas_Object *bg; 228dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block int w, h; 229dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 230dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ecore_evas_geometry_get(ee, NULL, NULL, &w, &h); 231dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 232dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block bg = evas_object_name_find(ecore_evas_get(ee), "bg"); 233dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_move(bg, 0, 0); 234dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_resize(bg, w, h); 235dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 236dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block webview = evas_object_name_find(ecore_evas_get(ee), "browser"); 237dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_move(webview, 10, 10); 238dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_resize(webview, w - 20, h - 20); 239dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 240dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 241dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockstatic void 242dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktitle_set(Ecore_Evas *ee, const char *title, int progress) 243dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 244dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block const char *appname = "EFL Test Launcher"; 245dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block const char *separator = " - "; 246dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block char label[4096]; 247dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block int size; 248dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 249dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!title || !strcmp(title, "")) { 250dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ecore_evas_title_set(ee, appname); 251dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return; 252dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 253dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 254dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (progress < 100) 255dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block size = snprintf(label, sizeof(label), "%s (%d%%)%s%s", title, progress, separator, appname); 256dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block else 257dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block size = snprintf(label, sizeof(label), "%s %s%s", title, separator, appname); 258dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 259dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (size >= (int)sizeof(label)) 260dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return; 261dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 262dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ecore_evas_title_set(ee, label); 263dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 264dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 265e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke/** 266e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * This is en example function to adjust viewport via viewport tag's arguments. 267e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * Application can invoke this function in order to adjust viewport tag when it is required. 268e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke */ 269e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarkestatic void 270e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarkeviewport_set() 271e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke{ 272e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke ELauncher *app; 273e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke app = (ELauncher*) eina_list_data_get(windows); 274e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke 275e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke ewk_view_fixed_layout_size_set(app->browser, app->viewport.w, app->viewport.h); 276e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke ewk_view_zoom_set(app->browser, app->viewport.initScale, 0, 0); 277e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke if (!ewk_view_zoom_range_set(app->browser, app->viewport.minScale, app->viewport.maxScale)) 278e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke info(" Fail to set zoom range. minScale = %f, maxScale = %f\n", app->viewport.minScale, app->viewport.maxScale); 279e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke ewk_view_user_scalable_set(app->browser, app->viewport.userScalable); 280e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke} 281e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke 282dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockstatic void 283dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockon_title_changed(void *user_data, Evas_Object *webview, void *event_info) 284dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 285dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ELauncher *app = (ELauncher *)user_data; 286dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block const char *title = (const char *)event_info; 287dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 288dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block title_set(app->ee, title, 100); 289dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 290dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 291dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockstatic void 292dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockon_progress(void *user_data, Evas_Object *webview, void *event_info) 293dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 294dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ELauncher *app = (ELauncher *)user_data; 295dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block double *progress = (double *)event_info; 296dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 297dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block title_set(app->ee, ewk_view_title_get(app->browser), *progress * 100); 298dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 299dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 300dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockstatic void 301dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockon_load_finished(void *user_data, Evas_Object *webview, void *event_info) 302dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 303dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block const Ewk_Frame_Load_Error *err = (const Ewk_Frame_Load_Error *)event_info; 304dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 305dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!err) 306dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block info("Succeeded loading page.\n"); 307dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block else if (err->is_cancellation) 308dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block info("Load was cancelled.\n"); 309dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block else 310dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block info("Failed loading page: %d %s \"%s\", url=%s\n", 311dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block err->code, err->domain, err->description, err->failing_url); 3124576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang 3134576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang currentZoom = ewk_view_zoom_get(webview); 3144576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang currentZoomLevel = nearest_zoom_level_get(currentZoom); 3154576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang info("WebCore Zoom=%f, currentZoomLevel=%d\n", currentZoom, currentZoomLevel); 316dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 317dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 318dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockstatic void 319dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockon_toolbars_visible_set(void* user_data, Evas_Object* webview, void* event_info) 320dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 321dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Eina_Bool *visible = (Eina_Bool *)event_info; 322dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (*visible) { 323dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block info("Toolbars visible changed: show"); 324dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block windowProperties.toolbarsVisible = EINA_TRUE; 325dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } else { 326dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block info("Toolbars visible changed: hide"); 327dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block windowProperties.toolbarsVisible = EINA_FALSE; 328dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 329dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 330dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 331dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockstatic void 332dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockon_toolbars_visible_get(void* user_data, Evas_Object* webview, void* event_info) 333dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 334dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Eina_Bool *visible = (Eina_Bool *)event_info; 335dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block *visible = windowProperties.toolbarsVisible; 336dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 337dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 338dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockstatic void 339dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockon_statusbar_visible_set(void* user_data, Evas_Object* webview, void* event_info) 340dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 341dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Eina_Bool *visible = (Eina_Bool *)event_info; 342dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (*visible) { 343dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block info("Statusbar visible changed: show"); 344dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block windowProperties.statusbarVisible = EINA_TRUE; 345dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } else { 346dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block info("Statusbar visible changed: hide"); 347dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block windowProperties.statusbarVisible = EINA_FALSE; 348dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 349dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 350dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 351dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockstatic void 352dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockon_statusbar_visible_get(void* user_data, Evas_Object* webview, void* event_info) 353dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 354dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Eina_Bool *visible = (Eina_Bool *)event_info; 355dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block *visible = windowProperties.statusbarVisible; 356dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 357dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 358dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockstatic void 359dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockon_scrollbars_visible_set(void* user_data, Evas_Object* webview, void* event_info) 360dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 361dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Eina_Bool *visible = (Eina_Bool *)event_info; 362dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (*visible) { 363dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block info("Scrollbars visible changed: show"); 364dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block windowProperties.scrollbarsVisible = EINA_TRUE; 365dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } else { 366dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block info("Scrollbars visible changed: hide"); 367dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block windowProperties.scrollbarsVisible = EINA_FALSE; 368dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 369dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 370dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 371dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockstatic void 372dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockon_scrollbars_visible_get(void* user_data, Evas_Object* webview, void* event_info) 373dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 374dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Eina_Bool *visible = (Eina_Bool *)event_info; 375dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block *visible = windowProperties.scrollbarsVisible; 376dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 377dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 378dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockstatic void 379dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockon_menubar_visible_set(void* user_data, Evas_Object* webview, void* event_info) 380dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 381dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Eina_Bool *visible = (Eina_Bool *)event_info; 382dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (*visible) { 383dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block info("Menubar visible changed: show"); 384dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block windowProperties.menubarVisible = EINA_TRUE; 385dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } else { 386dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block info("Menubar visible changed: hide"); 387dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block windowProperties.menubarVisible = EINA_FALSE; 388dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 389dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 390dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 391dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockstatic void 392dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockon_menubar_visible_get(void* user_data, Evas_Object* webview, void* event_info) 393dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 394dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Eina_Bool *visible = (Eina_Bool *)event_info; 395dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block *visible = windowProperties.menubarVisible; 396dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 397dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 398dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockstatic void 399dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockon_tooltip_text_set(void* user_data, Evas_Object* webview, void* event_info) 400dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 401dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block const char *text = (const char *)event_info; 402dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (text && *text != '\0') 403dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block info("%s\n", text); 404dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 405dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 4060617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsenstatic void 4070617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsenon_inputmethod_changed(void* user_data, Evas_Object* webview, void* event_info) 4080617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen{ 4090617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen Eina_Bool active = (Eina_Bool)(long)event_info; 4100617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen unsigned int imh; 4110617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen info("Keyboard changed: %d\n", active); 4120617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen 4130617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen if (!active) 4140617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen return; 4150617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen 4160617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen imh = ewk_view_imh_get(webview); 4170617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen info(" Keyboard flags: %#.2x\n", imh); 4180617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen 4190617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen} 4200617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen 421e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke/** 422e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * "viewport,changed" signal will be always emitted regardless of the viewport existence. 423e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * 424e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * If you don't want to process the viewport tag, you can either do nothing in this callback 425e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * or simply ignore the signal in your application. 426e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * 427e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * More information about this can be found at http://developer.apple.com/safari/library/docum 428e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * entation/appleapplications/reference/safariwebcontent/usingtheviewport/usingtheviewport.html 429e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke */ 430e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarkestatic void 431e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarkeon_viewport_changed(void* user_data, Evas_Object* webview, void* event_info) 432e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke{ 433e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke ELauncher *app = (ELauncher *)user_data; 434e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke 435a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch float w, h, initScale, minScale, maxScale, devicePixelRatio; 436a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch Eina_Bool userScalable; 437e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke 438a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch ewk_view_viewport_attributes_get(webview, &w, &h, &initScale, &maxScale, &minScale, &devicePixelRatio, &userScalable); 439e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke 440e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke /** 441e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * If there is no argument in viewport tag, argument's value is -1. 442e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke */ 443e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke if ((int)w == -1) 444e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke w = DEFAULT_WIDTH; 445e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke if ((int)h == -1) 446e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke h = DEFAULT_HEIGHT; 447e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke if ((int)initScale == -1) 448e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke initScale = DEFAULT_ZOOM_INIT; // There's no scale separated from zooming in webkit-efl. 449e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke if ((int)minScale == -1) 450e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke minScale = ewk_view_zoom_range_min_get(webview); 451e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke if ((int)maxScale == -1) 452e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke maxScale = ewk_view_zoom_range_max_get(webview); 453a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if ((int)devicePixelRatio == -1) 454a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch devicePixelRatio = ewk_view_device_pixel_ratio_get(webview); 455e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke if ((int)userScalable == -1) 456e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke userScalable = EINA_TRUE; 457e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke 458e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke app->viewport.w = (int)w; 459e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke app->viewport.h = (int)h; 460e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke app->viewport.initScale = initScale; 461e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke app->viewport.minScale = minScale; 462e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke app->viewport.maxScale = maxScale; 463a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch app->viewport.devicePixelRatio = devicePixelRatio; 464a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch app->viewport.userScalable = userScalable; 465967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch viewport_set(); 466e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke} 467e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke 46821939df44de1705786c545cd1bf519d47250322dBen Murdochstatic void 469dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockon_mouse_down(void* data, Evas* e, Evas_Object* webview, void* event_info) 470dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 471dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Evas_Event_Mouse_Down *ev = (Evas_Event_Mouse_Down*) event_info; 472dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (ev->button == 2) 473dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_focus_set(webview, !evas_object_focus_get(webview)); 474dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 475dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 47621939df44de1705786c545cd1bf519d47250322dBen Murdochstatic void 477dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockon_focus_out(void *data, Evas *e, Evas_Object *obj, void *event_info) 478dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 479dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block info("the webview lost keyboard focus\n"); 480dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 481dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 48221939df44de1705786c545cd1bf519d47250322dBen Murdochstatic void 483dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockon_focus_in(void *data, Evas *e, Evas_Object *obj, void *event_info) 484dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 485dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block info("the webview gained keyboard focus\n"); 486dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 487dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 48821939df44de1705786c545cd1bf519d47250322dBen Murdochstatic void 489dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockon_key_down(void *data, Evas *e, Evas_Object *obj, void *event_info) 490dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 491dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Evas_Event_Key_Down *ev = (Evas_Event_Key_Down*) event_info; 492dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ELauncher *app = data; 4935af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke static const char *encodings[] = { 4945af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke "ISO-8859-1", 4955af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke "UTF-8", 4965af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke NULL 4975af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke }; 4985af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke static int currentEncoding = -1; 499dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 500dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!strcmp(ev->key, "Escape")) { 501dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block closeWindow(app->ee); 502dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } else if (!strcmp(ev->key, "F1")) { 503dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block info("Back (F1) was pressed\n"); 504dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (ewk_view_back_possible(obj)) { 505dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Ewk_History *history = ewk_view_history_get(obj); 506dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Eina_List *list = ewk_history_back_list_get(history); 507dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block print_history(list); 508dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ewk_history_item_list_free(list); 509dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ewk_view_back(obj); 510dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } else 511dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block info("Back ignored: No back history\n"); 512dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } else if (!strcmp(ev->key, "F2")) { 513dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block info("Forward (F2) was pressed\n"); 514dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (ewk_view_forward_possible(obj)) { 515dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Ewk_History *history = ewk_view_history_get(obj); 516dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Eina_List *list = ewk_history_forward_list_get(history); 517dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block print_history(list); 518dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ewk_history_item_list_free(list); 519dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ewk_view_forward(obj); 520dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } else 521dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block info("Forward ignored: No forward history\n"); 5225af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke } else if (!strcmp(ev->key, "F3")) { 5235af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke currentEncoding++; 5245af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke currentEncoding %= (sizeof(encodings) / sizeof(encodings[0])); 5255af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke info("Set encoding (F3) pressed. New encoding to %s", encodings[currentEncoding]); 5265af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke ewk_view_setting_encoding_custom_set(obj, encodings[currentEncoding]); 527dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } else if (!strcmp(ev->key, "F4")) { 528dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Evas_Object *frame = ewk_view_frame_main_get(obj); 529dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Evas_Coord x, y; 530dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Ewk_Hit_Test *ht; 531dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 532dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_pointer_canvas_xy_get(evas_object_evas_get(obj), &x, &y); 533dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ht = ewk_frame_hit_test_new(frame, x, y); 534dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!ht) 535dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block printf("No hit test returned for point %d,%d\n", x, y); 536dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block else { 537dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block printf("Hit test for point %d,%d\n" 538dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block " pos=%3d,%3d\n" 539dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block " bounding_box=%d,%d + %dx%d\n" 540dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block " title='%s'\n" 541dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block " alternate_text='%s'\n" 542dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block " frame=%p (%s)\n" 543dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block " link {\n" 544dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block " text='%s'\n" 545dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block " url='%s'\n" 546dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block " title='%s'\n" 547dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block " target frame=%p (%s)\n" 548dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block " }\n" 549dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block " flags {\n" 550dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block " editable=%hhu\n" 551dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block " selected=%hhu\n" 552dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block " }\n", 553dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block x, y, 554dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ht->x, ht->y, 555dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ht->bounding_box.x, ht->bounding_box.y, ht->bounding_box.w, ht->bounding_box.h, 556dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ht->title, 557dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ht->alternate_text, 558dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ht->frame, evas_object_name_get(ht->frame), 559dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ht->link.text, 560dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ht->link.url, 561dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ht->link.title, 562dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ht->link.target_frame, evas_object_name_get(ht->link.target_frame), 563dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ht->flags.editable, 564dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ht->flags.selected); 565dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ewk_frame_hit_test_free(ht); 566dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 567dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 568dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } else if (!strcmp(ev->key, "F5")) { 569dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block info("Reload (F5) was pressed, reloading.\n"); 570dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ewk_view_reload(obj); 571dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } else if (!strcmp(ev->key, "F6")) { 572dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block info("Stop (F6) was pressed, stop loading.\n"); 573dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ewk_view_stop(obj); 57481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch } else if (!strcmp(ev->key, "F12")) { 57581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch Eina_Bool status = ewk_view_setting_spatial_navigation_get(obj); 57681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch ewk_view_setting_spatial_navigation_set(obj, !status); 57781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch info("Command::keyboard navigation toggle\n"); 578dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } else if (!strcmp(ev->key, "F7")) { 579dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block info("Zoom out (F7) was pressed.\n"); 5804576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang if (currentZoomLevel > MIN_ZOOM_LEVEL && zoom_level_set(obj, currentZoomLevel - 1)) 5814576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang currentZoomLevel--; 582dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } else if (!strcmp(ev->key, "F8")) { 583dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block info("Zoom in (F8) was pressed.\n"); 5844576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang if (currentZoomLevel < MAX_ZOOM_LEVEL && zoom_level_set(obj, currentZoomLevel + 1)) 5854576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang currentZoomLevel++; 586dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } else if (!strcmp(ev->key, "F9")) { 587dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block info("Create new window (F9) was pressed.\n"); 588dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Eina_Rectangle geometry = {0, 0, 0, 0}; 589dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block browserCreate("http://www.google.com", 5904576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang app->theme, app->userAgent, geometry, app-> backingStore, 59181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch NULL, app->isFlattening, 0, NULL); 592dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } else if (!strcmp(ev->key, "F10")) { 593dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Evas_Coord x, y, w, h; 594dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Evas_Object *frame = ewk_view_frame_main_get(obj); 595dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block float zoom = zoomLevels[currentZoomLevel] / 100.0; 596dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 597dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ewk_frame_visible_content_geometry_get(frame, EINA_FALSE, &x, &y, &w, &h); 598dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block x -= w; 599dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block y -= h; 600dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block w *= 4; 601dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block h *= 4; 602dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block info("Pre-render %d,%d + %dx%d\n", x, y, w, h); 603dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ewk_view_pre_render_region(obj, x, y, w, h, zoom); 6044576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang } else if (!strcmp(ev->key, "F11")) { 6054576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang info("Pre-render 1 extra column/row with current zoom"); 6064576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang ewk_view_pre_render_relative_radius(obj, 1); 6074576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang } else if (!strcmp(ev->key, "d")) { 6084576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang info("Render suspended"); 6094576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang ewk_view_disable_render(obj); 6104576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang } else if (!strcmp(ev->key, "e")) { 6114576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang info("Render resumed"); 6124576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang ewk_view_enable_render(obj); 613dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 614dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 615dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 61621939df44de1705786c545cd1bf519d47250322dBen Murdochstatic void 617dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockon_browser_del(void *data, Evas *evas, Evas_Object *browser, void *event) 618dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 619dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ELauncher *app = (ELauncher*) data; 620dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 621dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_event_callback_del(app->browser, EVAS_CALLBACK_KEY_DOWN, on_key_down); 622dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_event_callback_del(app->browser, EVAS_CALLBACK_MOUSE_DOWN, on_mouse_down); 623dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_event_callback_del(app->browser, EVAS_CALLBACK_FOCUS_IN, on_focus_in); 624dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_event_callback_del(app->browser, EVAS_CALLBACK_FOCUS_OUT, on_focus_out); 625dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_event_callback_del(app->browser, EVAS_CALLBACK_DEL, on_browser_del); 626dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 627dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 62821939df44de1705786c545cd1bf519d47250322dBen Murdochstatic void 629dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockon_closeWindow(Ecore_Evas *ee) 630dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 631dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block browserDestroy(ee); 632dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 633dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 63421939df44de1705786c545cd1bf519d47250322dBen Murdochstatic int 635dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockquit(Eina_Bool success, const char *msg) 636dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 637dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block edje_shutdown(); 638dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ecore_evas_shutdown(); 639dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 640dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (msg) 641dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block fputs(msg, (success) ? stdout : stderr); 642dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 643bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (themePath) { 644bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen free(themePath); 645bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen themePath = NULL; 646bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 647dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 648dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!success) 649dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return EXIT_FAILURE; 650dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 651dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return EXIT_SUCCESS; 652dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 653dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 65421939df44de1705786c545cd1bf519d47250322dBen Murdochstatic int 65581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen MurdochbrowserCreate(const char *url, const char *theme, const char *userAgent, Eina_Rectangle geometry, const char *engine, const char *backingStore, unsigned char isFlattening, unsigned char isFullscreen, const char *databasePath) 656dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 657dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if ((geometry.w <= 0) && (geometry.h <= 0)) { 658dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block geometry.w = DEFAULT_WIDTH; 659dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block geometry.h = DEFAULT_HEIGHT; 660dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 661dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 662dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ELauncher *app = (ELauncher*) malloc(sizeof(ELauncher)); 663dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!app) 664dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return quit(EINA_FALSE, "ERROR: could not create EWebLauncher window\n"); 665dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 666dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block app->ee = ecore_evas_new(engine, 0, 0, geometry.w, geometry.h, NULL); 667dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 668dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!app->ee) 669dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return quit(EINA_FALSE, "ERROR: could not construct evas-ecore\n"); 670dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 671dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (isFullscreen) 672dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ecore_evas_fullscreen_set(app->ee, EINA_TRUE); 673dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 674dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ecore_evas_title_set(app->ee, "EFL Test Launcher"); 675dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ecore_evas_callback_resize_set(app->ee, on_ecore_evas_resize); 676dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ecore_evas_callback_delete_request_set(app->ee, closeWindow); 677dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 678dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block app->evas = ecore_evas_get(app->ee); 679dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 680dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!app->evas) 681dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return quit(EINA_FALSE, "ERROR: could not get evas from evas-ecore\n"); 682dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 683dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block app->theme = theme; 684dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block app->userAgent = userAgent; 6854576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang app->backingStore = backingStore; 68681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch app->isFlattening = isFlattening; 687dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 688dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block app->bg = evas_object_rectangle_add(app->evas); 689dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_name_set(app->bg, "bg"); 690dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_color_set(app->bg, 255, 0, 255, 255); 691dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_move(app->bg, 0, 0); 692dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_resize(app->bg, geometry.w, geometry.h); 693dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_layer_set(app->bg, EVAS_LAYER_MIN); 694dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_show(app->bg); 695dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 696cad810f21b803229eb11403f9209855525a25d57Steve Block if (backingStore && !strcasecmp(backingStore, "tiled")) { 6974576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang app->browser = ewk_view_tiled_add(app->evas); 6984576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang info("backing store: tiled\n"); 699cad810f21b803229eb11403f9209855525a25d57Steve Block } else { 700cad810f21b803229eb11403f9209855525a25d57Steve Block app->browser = ewk_view_single_add(app->evas); 701cad810f21b803229eb11403f9209855525a25d57Steve Block info("backing store: single\n"); 7024576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang } 703cad810f21b803229eb11403f9209855525a25d57Steve Block 704dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ewk_view_theme_set(app->browser, theme); 705dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (userAgent) 706dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ewk_view_setting_user_agent_set(app->browser, userAgent); 707bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen ewk_view_setting_local_storage_database_path_set(app->browser, databasePath); 70881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch ewk_view_setting_enable_frame_flattening_set(app->browser, isFlattening); 709bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 710dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_name_set(app->browser, "browser"); 711dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 712dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_smart_callback_add(app->browser, "title,changed", on_title_changed, app); 713dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_smart_callback_add(app->browser, "load,progress", on_progress, app); 714dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_smart_callback_add(app->browser, "load,finished", on_load_finished, app); 715e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke evas_object_smart_callback_add(app->browser, "viewport,changed", on_viewport_changed, app); 716dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 717dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_smart_callback_add(app->browser, "toolbars,visible,set", on_toolbars_visible_set, app); 718dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_smart_callback_add(app->browser, "toolbars,visible,get", on_toolbars_visible_get, app); 719dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_smart_callback_add(app->browser, "statusbar,visible,set", on_statusbar_visible_set, app); 720dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_smart_callback_add(app->browser, "statusbar,visible,get", on_statusbar_visible_get, app); 721dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_smart_callback_add(app->browser, "scrollbars,visible,set", on_scrollbars_visible_set, app); 722dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_smart_callback_add(app->browser, "scrollbars,visible,get", on_scrollbars_visible_get, app); 723dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_smart_callback_add(app->browser, "menubar,visible,set", on_menubar_visible_set, app); 724dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_smart_callback_add(app->browser, "menubar,visible,get", on_menubar_visible_get, app); 725dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_smart_callback_add(app->browser, "tooltip,text,set", on_tooltip_text_set, app); 7260617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen evas_object_smart_callback_add(app->browser, "inputmethod,changed", on_inputmethod_changed, app); 727dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 728dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/* ewk_callback_resize_requested_add(app->browser, on_resize_requested, app->ee); */ 729dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 730dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_event_callback_add(app->browser, EVAS_CALLBACK_KEY_DOWN, on_key_down, app); 731dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_event_callback_add(app->browser, EVAS_CALLBACK_MOUSE_DOWN, on_mouse_down, app); 732dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_event_callback_add(app->browser, EVAS_CALLBACK_FOCUS_IN, on_focus_in, app); 733dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_event_callback_add(app->browser, EVAS_CALLBACK_FOCUS_OUT, on_focus_out, app); 734dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_event_callback_add(app->browser, EVAS_CALLBACK_DEL, on_browser_del, app); 735dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 736dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_move(app->browser, 10, 10); 737dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_resize(app->browser, geometry.w - 20, geometry.h - 20); 738dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 739dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (url && (url[0] != '\0')) 740dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ewk_view_uri_set(app->browser, url); 741dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 742dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_show(app->browser); 743dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ecore_evas_show(app->ee); 744dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 745dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_focus_set(app->browser, EINA_TRUE); 746dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 747dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block windows = eina_list_append(windows, app); 748dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 749dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return 1; 750dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 751dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 75221939df44de1705786c545cd1bf519d47250322dBen Murdochstatic void 753dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockbrowserDestroy(Ecore_Evas *ee) 754dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 755dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ecore_evas_free(ee); 756dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!eina_list_count(windows)) 757dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ecore_main_loop_quit(); 758dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 759dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 76021939df44de1705786c545cd1bf519d47250322dBen Murdochstatic void 761dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockcloseWindow(Ecore_Evas *ee) 762dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 763dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Eina_List *l; 764dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block void *app; 765dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_LIST_FOREACH(windows, l, app) 766dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block { 767dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (((ELauncher*) app)->ee == ee) 768dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block break; 769dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 770dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block windows = eina_list_remove(windows, app); 771dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block browserDestroy(ee); 772dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block free(app); 773dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 774dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 775ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockstatic Eina_Bool 776dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockmain_signal_exit(void *data, int ev_type, void *ev) 777dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 778dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ELauncher *app; 779dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block while (windows) { 780dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block app = (ELauncher*) eina_list_data_get(windows); 781dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ecore_evas_free(app->ee); 782dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block windows = eina_list_remove(windows, app); 783dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 784dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!eina_list_count(windows)) 785dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ecore_main_loop_quit(); 786ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block return EINA_TRUE; 787dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 788dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 78921939df44de1705786c545cd1bf519d47250322dBen Murdochstatic char * 790bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian MonsenfindThemePath(const char *theme) 79121939df44de1705786c545cd1bf519d47250322dBen Murdoch{ 792bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen const char *defaultTheme = DATA_DIR"/default.edj"; 793bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen char *rpath; 794bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen struct stat st; 79521939df44de1705786c545cd1bf519d47250322dBen Murdoch 796bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (!theme) 797bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen theme = defaultTheme; 798bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 799bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen rpath = realpath(theme, NULL); 800bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (!rpath) 801bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return NULL; 802bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 803bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (stat(rpath, &st)) { 804bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen free(rpath); 805bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return NULL; 80621939df44de1705786c545cd1bf519d47250322dBen Murdoch } 80721939df44de1705786c545cd1bf519d47250322dBen Murdoch 808bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return rpath; 80921939df44de1705786c545cd1bf519d47250322dBen Murdoch} 81021939df44de1705786c545cd1bf519d47250322dBen Murdoch 811dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockint 812dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockmain(int argc, char *argv[]) 813dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 814dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block const char *default_url = "http://www.google.com/"; 815dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 816dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Eina_Rectangle geometry = {0, 0, 0, 0}; 817dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block char *url = NULL; 818dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block char *userAgent = NULL; 8195af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke const char *tmp; 8200617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen const char *proxyUri; 821dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block char path[PATH_MAX]; 822dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 823dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block char *engine = NULL; 824dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block char *theme = NULL; 8252bde8e466a4451c7319e3a072d118917957d6554Steve Block char *backingStore = (char *)backingStores[1]; 826dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 827dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block unsigned char quitOption = 0; 82881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch unsigned char isFlattening = 0; 829dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block unsigned char isFullscreen = 0; 830dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block int args; 831dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 832dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Ecore_Getopt_Value values[] = { 833dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ECORE_GETOPT_VALUE_STR(engine), 834dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ECORE_GETOPT_VALUE_BOOL(quitOption), 8354576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang ECORE_GETOPT_VALUE_STR(backingStore), 83681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch ECORE_GETOPT_VALUE_BOOL(isFlattening), 837dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ECORE_GETOPT_VALUE_BOOL(isFullscreen), 838dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ECORE_GETOPT_VALUE_PTR_CAST(geometry), 839dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ECORE_GETOPT_VALUE_STR(theme), 840dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ECORE_GETOPT_VALUE_STR(userAgent), 841dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ECORE_GETOPT_VALUE_INT(verbose), 842dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ECORE_GETOPT_VALUE_BOOL(quitOption), 843dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ECORE_GETOPT_VALUE_BOOL(quitOption), 844dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ECORE_GETOPT_VALUE_BOOL(quitOption), 845dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ECORE_GETOPT_VALUE_BOOL(quitOption), 846dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ECORE_GETOPT_VALUE_NONE 847dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block }; 848dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 849dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!ecore_evas_init()) 850dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return EXIT_FAILURE; 851dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 852dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!edje_init()) { 853dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ecore_evas_shutdown(); 854dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return EXIT_FAILURE; 855dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 856dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 857dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ecore_app_args_set(argc, (const char**) argv); 858dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block args = ecore_getopt_parse(&options, values, argc, argv); 859dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 860dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (args < 0) 861dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return quit(EINA_FALSE, "ERROR: could not parse options.\n"); 862dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 863dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (quitOption) 864dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return quit(EINA_TRUE, NULL); 865dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 866dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (args < argc) 867dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block url = argv[args]; 868dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block else 869dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block url = (char*) default_url; 870dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 871bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen themePath = findThemePath(theme); 872bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (!themePath) 873bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return quit(EINA_FALSE, "ERROR: could not find theme.\n"); 874dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 875dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ewk_init(); 876dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block tmp = getenv("TMPDIR"); 877dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!tmp) 878dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block tmp = "/tmp"; 879dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block snprintf(path, sizeof(path), "%s/.ewebkit-%u", tmp, getuid()); 880dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ecore_file_mkpath(path); 881dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ewk_settings_icon_database_path_set(path); 8825af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke ewk_settings_web_database_path_set(path); 883dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 8840617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen proxyUri = getenv("http_proxy"); 8850617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen if (proxyUri) 8860617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen ewk_settings_proxy_uri_set(proxyUri); 8870617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen 88881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch browserCreate(url, themePath, userAgent, geometry, engine, backingStore, isFlattening, isFullscreen, path); 889dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ecore_event_handler_add(ECORE_EVENT_SIGNAL_EXIT, main_signal_exit, &windows); 890dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 891dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ecore_main_loop_begin(); 892dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 893dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ewk_shutdown(); 894dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 895dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return quit(EINA_TRUE, NULL); 896dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 897