1dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/* 2dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Copyright (C) 2009-2010 ProFUSION embedded systems 3dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Copyright (C) 2009-2010 Samsung Electronics 4dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 5dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block This library is free software; you can redistribute it and/or 6dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block modify it under the terms of the GNU Library General Public 7dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block License as published by the Free Software Foundation; either 8dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block version 2 of the License, or (at your option) any later version. 9dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 10dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block This library is distributed in the hope that it will be useful, 11dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block but WITHOUT ANY WARRANTY; without even the implied warranty of 12dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Library General Public License for more details. 14dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 15dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block You should have received a copy of the GNU Library General Public License 16dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block along with this library; see the file COPYING.LIB. If not, write to 17dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 18dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Boston, MA 02110-1301, USA. 19dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block*/ 20dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 21dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block// Uncomment to view frame regions and debug messages 22dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block// #define EWK_FRAME_DEBUG 23dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 24dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "config.h" 25dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "ewk_frame.h" 26dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 27cad810f21b803229eb11403f9209855525a25d57Steve Block#include "DocumentMarkerController.h" 28dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "EWebKit.h" 29dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "EventHandler.h" 30dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "FocusController.h" 31dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "FrameLoaderClientEfl.h" 32dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "FrameTree.h" 33dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "FrameView.h" 34dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "HTMLPlugInElement.h" 35e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke#include "HistoryItem.h" 36dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "HitTestResult.h" 3765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "IntSize.h" 38dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "KURL.h" 39dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "PlatformKeyboardEvent.h" 40dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "PlatformMouseEvent.h" 41cad810f21b803229eb11403f9209855525a25d57Steve Block#include "PlatformTouchEvent.h" 42dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "PlatformWheelEvent.h" 43dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "ProgressTracker.h" 44dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "RefPtr.h" 45dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "RenderTheme.h" 46dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "ResourceRequest.h" 47dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "ScriptValue.h" 48dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "SharedBuffer.h" 49dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "SubstituteData.h" 50dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "WindowsKeyboardCodes.h" 51dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "ewk_private.h" 52dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 53dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <Eina.h> 54dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <Evas.h> 555ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen#include <algorithm> 56dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <eina_safety_checks.h> 575ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen#include <wtf/text/CString.h> 58dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 59dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockstatic const char EWK_FRAME_TYPE_STR[] = "EWK_Frame"; 60dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 61dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockstruct Ewk_Frame_Smart_Data { 62dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Evas_Object_Smart_Clipped_Data base; 63dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Evas_Object* self; 64dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Evas_Object* view; 65dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#ifdef EWK_FRAME_DEBUG 66dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Evas_Object* region; 67dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif 68dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block WebCore::Frame* frame; 69dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block const char* theme; 70dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block const char* title; 71dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block const char* uri; 72dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block const char* name; 73dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block struct { 74dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Evas_Coord w, h; 75dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } contents_size; 7668513a70bcd92384395513322f1b801e7bf9c729Steve Block Eina_Bool textZoom:1; 77dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Eina_Bool editable:1; 78dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block}; 79dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 80dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockstruct Eina_Iterator_Ewk_Frame { 81dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Eina_Iterator base; 82dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Evas_Object* obj; 83dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block WebCore::Frame* last; 84dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block}; 85dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 86dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#ifndef EWK_TYPE_CHECK 87dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#define EWK_FRAME_TYPE_CHECK(o, ...) do { } while (0) 88dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#else 89dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#define EWK_FRAME_TYPE_CHECK(o, ...) \ 90dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block do { \ 91dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block const char* _tmp_otype = evas_object_type_get(o); \ 92dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (EINA_UNLIKELY(_tmp_otype != EWK_FRAME_TYPE_STR)) { \ 93dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_LOG_CRIT \ 94dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ("%p (%s) is not of an ewk_frame!", o, \ 95dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block _tmp_otype ? _tmp_otype : "(null)"); \ 96dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return __VA_ARGS__; \ 97dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } \ 98dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } while (0) 99dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif 100dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 101dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#define EWK_FRAME_SD_GET(o, ptr) \ 102dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Ewk_Frame_Smart_Data* ptr = (Ewk_Frame_Smart_Data*)evas_object_smart_data_get(o) 103dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 104dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#define EWK_FRAME_SD_GET_OR_RETURN(o, ptr, ...) \ 105dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_TYPE_CHECK(o, __VA_ARGS__); \ 106dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET(o, ptr); \ 107dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!ptr) { \ 108dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block CRITICAL("no smart data for object %p (%s)", \ 109dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block o, evas_object_type_get(o)); \ 110dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return __VA_ARGS__; \ 111dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 112dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 113dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockstatic Evas_Smart_Class _parent_sc = EVAS_SMART_CLASS_INIT_NULL; 114dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 115dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#ifdef EWK_FRAME_DEBUG 116dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockstatic inline void _ewk_frame_debug(Evas_Object* o) 117dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 118dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Evas_Object* clip, *parent; 119dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Evas_Coord x, y, w, h, cx, cy, cw, ch; 120dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block int r, g, b, a, cr, cg, cb, ca; 121dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 122dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_color_get(o, &r, &g, &b, &a); 123dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_geometry_get(o, &x, &y, &w, &h); 124dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 125dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block clip = evas_object_clip_get(o); 126dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_color_get(clip, &cr, &cg, &cb, &ca); 127dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_geometry_get(clip, &cx, &cy, &cw, &ch); 128dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 129dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block fprintf(stderr, "%p: type=%s name=%s, visible=%d, color=%02x%02x%02x%02x, %d,%d+%dx%d, clipper=%p (%d, %02x%02x%02x%02x, %d,%d+%dx%d)\n", 130dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block o, evas_object_type_get(o), evas_object_name_get(o), evas_object_visible_get(o), 131dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block r, g, b, a, x, y, w, h, 132dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block clip, evas_object_visible_get(clip), cr, cg, cb, ca, cx, cy, cw, ch); 133dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block parent = evas_object_smart_parent_get(o); 134dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!parent) 135dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block fprintf(stderr, "\n"); 136dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block else 137dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block _ewk_frame_debug(parent); 138dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 139dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif 140dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 141dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockstatic WebCore::FrameLoaderClientEfl* _ewk_frame_loader_efl_get(WebCore::Frame* frame) 142dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 143dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return static_cast<WebCore::FrameLoaderClientEfl*>(frame->loader()->client()); 144dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 145dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 146dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockstatic inline Evas_Object* kit(WebCore::Frame* frame) 147dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 148dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!frame) 149dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return 0; 150dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block WebCore::FrameLoaderClientEfl* fl = _ewk_frame_loader_efl_get(frame); 151dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!fl) 152dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return 0; 153dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return fl->webFrame(); 154dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 155dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 156dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockstatic Eina_Bool _ewk_frame_children_iterator_next(Eina_Iterator_Ewk_Frame* it, Evas_Object** data) 157dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 158dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(it->obj, sd, EINA_FALSE); 159dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(sd->frame, EINA_FALSE); 160dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 161dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block WebCore::FrameTree* tree = sd->frame->tree(); // check if it's still valid 162dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(tree, EINA_FALSE); 163dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 164dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block WebCore::Frame* frame; 165dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (it->last) 166dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block frame = it->last->tree()->nextSibling(); 167dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block else 168dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block frame = tree->firstChild(); 169dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 170dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!frame) 171dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return EINA_FALSE; 172dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 173dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block *data = kit(frame); 174dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return EINA_TRUE; 175dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 176dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 177dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockstatic Evas_Object* _ewk_frame_children_iterator_get_container(Eina_Iterator_Ewk_Frame* it) 178dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 179dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return it->obj; 180dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 181dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 182dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockstatic void _ewk_frame_smart_add(Evas_Object* o) 183dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 184dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET(o, sd); 185dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 186dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!sd) { 187dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block sd = (Ewk_Frame_Smart_Data*)calloc(1, sizeof(Ewk_Frame_Smart_Data)); 188dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!sd) 189dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block CRITICAL("could not allocate Ewk_Frame_Smart_Data"); 190dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block else 191dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_smart_data_set(o, sd); 192dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 193dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 194dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block sd->self = o; 195dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 196dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block _parent_sc.add(o); 197cad810f21b803229eb11403f9209855525a25d57Steve Block evas_object_static_clip_set(sd->base.clipper, EINA_FALSE); 198dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_move(sd->base.clipper, 0, 0); 199dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_resize(sd->base.clipper, 0, 0); 200dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 201dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#ifdef EWK_FRAME_DEBUG 202dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block sd->region = evas_object_rectangle_add(sd->base.evas); 203dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block static int i = 0; 204dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block switch (i) { 205dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block case 0: 206dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_color_set(sd->region, 128, 0, 0, 128); 207dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block break; 208dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block case 1: 209dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_color_set(sd->region, 0, 128, 0, 128); 210dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block break; 211dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block case 2: 212dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_color_set(sd->region, 0, 0, 128, 128); 213dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block break; 214dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block case 3: 215dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_color_set(sd->region, 128, 0, 0, 128); 216dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block break; 217dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block case 4: 218dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_color_set(sd->region, 128, 128, 0, 128); 219dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block break; 220dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block case 5: 221dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_color_set(sd->region, 128, 0, 128, 128); 222dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block break; 223dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block case 6: 224dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_color_set(sd->region, 0, 128, 128, 128); 225dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block break; 226dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block default: 227dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block break; 228dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 229dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block i++; 230dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (i > 6) 231dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block i = 0; 232dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 233dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_smart_member_add(sd->region, o); 234dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_hide(sd->region); 235dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif 236dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 237dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 238dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockstatic void _ewk_frame_smart_del(Evas_Object* o) 239dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 240dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block WRN("o=%p", o); // XXX REMOVE ME LATER 241dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET(o, sd); 242dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 243dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (sd) { 244dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (sd->frame) { 245dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block WebCore::FrameLoaderClientEfl* flc = _ewk_frame_loader_efl_get(sd->frame); 246dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block flc->setWebFrame(0); 247dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block sd->frame->loader()->cancelAndClear(); 248dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block sd->frame = 0; 249dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 250dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 251dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block eina_stringshare_del(sd->title); 252dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block eina_stringshare_del(sd->uri); 253dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block eina_stringshare_del(sd->name); 254dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 255dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 256dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block _parent_sc.del(o); 257dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 258dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 259dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockstatic void _ewk_frame_smart_resize(Evas_Object* o, Evas_Coord w, Evas_Coord h) 260dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 261dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET(o, sd); 262dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_resize(sd->base.clipper, w, h); 263dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 264dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#ifdef EWK_FRAME_DEBUG 265dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_resize(sd->region, w, h); 266dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Evas_Coord x, y; 267dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_geometry_get(sd->region, &x, &y, &w, &h); 268dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block INF("region=%p, visible=%d, geo=%d,%d + %dx%d", 269dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block sd->region, evas_object_visible_get(sd->region), x, y, w, h); 270dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block _ewk_frame_debug(o); 271dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif 272dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 273dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 274dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockstatic void _ewk_frame_smart_set(Evas_Smart_Class* api) 275dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 276dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_smart_clipped_smart_set(api); 277dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block api->add = _ewk_frame_smart_add; 278dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block api->del = _ewk_frame_smart_del; 279dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block api->resize = _ewk_frame_smart_resize; 280dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 281dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 282dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockstatic inline Evas_Smart* _ewk_frame_smart_class_new(void) 283dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 284dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block static Evas_Smart_Class sc = EVAS_SMART_CLASS_INIT_NAME_VERSION(EWK_FRAME_TYPE_STR); 285dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block static Evas_Smart* smart = 0; 286dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 287dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (EINA_UNLIKELY(!smart)) { 288dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_smart_clipped_smart_set(&_parent_sc); 289dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block _ewk_frame_smart_set(&sc); 290dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block smart = evas_smart_class_new(&sc); 291dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 292dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 293dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return smart; 294dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 295dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 296dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 297dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @internal 298dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 299dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Creates a new EFL WebKit Frame object. 300dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 301dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Frames are low level entries contained in a page that is contained 302dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * by a view. Usually one operates on the view and not directly on the 303dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * frame. 304dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 305dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param e canvas where to create the frame object. 306dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 307dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @return frame object or @c NULL if errors. 308dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 309dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockEvas_Object* ewk_frame_add(Evas* e) 310dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 311dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return evas_object_smart_add(e, _ewk_frame_smart_class_new()); 312dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 313dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 314dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 315dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Retrieves the ewk_view object that owns this frame. 316dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 317dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param o frame object to get view from. 318dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 319dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @return view object or @c NULL if errors. 320dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 321dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockEvas_Object* ewk_frame_view_get(const Evas_Object* o) 322dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 323dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd, 0); 324dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return sd->view; 325dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 326dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 327dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 328dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Set the theme path to be used by this frame. 329dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 330dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Frames inherit theme from their parent, this will have all frames 331dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * with unset theme to use this one. 332dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 333dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param o frame object to change theme. 334dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param path theme path, may be @c NULL to reset to default or inherit parent. 335dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 336dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid ewk_frame_theme_set(Evas_Object* o, const char* path) 337dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 338dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd); 339dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!eina_stringshare_replace(&sd->theme, path)) 340dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return; 341dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (sd->frame && sd->frame->view()) { 342dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch sd->frame->view()->setEdjeTheme(WTF::String(path)); 343dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block sd->frame->page()->theme()->themeChanged(); 344dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 345dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 346dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 347dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 348dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Gets the immediate theme set on this frame. 349dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 350dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * This returns the value set by ewk_frame_theme_set(). Note that if 351dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * it is @c NULL, the frame will inherit parent's theme. 352dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 353dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param o frame object to get theme path. 354dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 355dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @return theme path, may be @c NULL if not set. 356dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 357dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockconst char* ewk_frame_theme_get(Evas_Object* o) 358dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 359dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd, 0); 360dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return sd->theme; 361dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 362dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 363dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 364dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Returns a new iterator over all direct children frames. 365dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 366dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Keep frame object intact while iteration happens otherwise frame 367dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * may be destroyed while iterated. 368dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 369dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Iteration results are Evas_Object*, so give eina_iterator_next() a 370dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * pointer to it. 371dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 372dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @return a newly allocated iterator, free using 373dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * eina_iterator_free(). If not possible to create the 374dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * iterator, @c NULL is returned. 375dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 376dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockEina_Iterator* ewk_frame_children_iterator_new(Evas_Object* o) 377dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 378dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd, 0); 379dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Eina_Iterator_Ewk_Frame* it = (Eina_Iterator_Ewk_Frame*) 380dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block calloc(1, sizeof(Eina_Iterator_Ewk_Frame)); 381dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!it) 382dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return 0; 383dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 384dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_MAGIC_SET(&it->base, EINA_MAGIC_ITERATOR); 385dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block it->base.next = FUNC_ITERATOR_NEXT(_ewk_frame_children_iterator_next); 386dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block it->base.get_container = FUNC_ITERATOR_GET_CONTAINER(_ewk_frame_children_iterator_get_container); 387dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block it->base.free = FUNC_ITERATOR_FREE(free); 388dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block it->obj = o; 389dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return &it->base; 390dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 391dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 392dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 393dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Finds a child frame by its name, recursively. 394dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 395dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * For pre-defined names, returns @a o if @a name is "_self" or 396dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * "_current", returns @a o's parent frame if @a name is "_parent", 397dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * and returns the main frame if @a name is "_top". Also returns @a o 398dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * if it is the main frame and @a name is either "_parent" or 399dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * "_top". For other names, this function returns the first frame that 400dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * matches @a name. This function searches @a o and its descendents 401dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * first, then @a o's parent and its children moving up the hierarchy 402dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * until a match is found. If no match is found in @a o's hierarchy, 403dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * this function will search for a matching frame in other main frame 404dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * hierarchies. 405dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 406dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @return object if found, @c NULL if nothing with that name. 407dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 408dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockEvas_Object* ewk_frame_child_find(Evas_Object* o, const char* name) 409dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 410dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd, 0); 411dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(name, 0); 412dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(sd->frame, 0); 413dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch WTF::String s = WTF::String::fromUTF8(name); 414dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch return kit(sd->frame->tree()->find(WTF::AtomicString(s))); 415dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 416dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 417dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 418dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Ask main frame to load the given URI. 419dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 420dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param o frame object to load uri. 421dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param uri uniform resource identifier to load. 422dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 423dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockEina_Bool ewk_frame_uri_set(Evas_Object* o, const char* uri) 424dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 425dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd, EINA_FALSE); 426dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch WebCore::KURL kurl(WebCore::KURL(), WTF::String::fromUTF8(uri)); 427dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block WebCore::ResourceRequest req(kurl); 428dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block WebCore::FrameLoader* loader = sd->frame->loader(); 429dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block loader->load(req, false); 430dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return EINA_TRUE; 431dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 432dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 433dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 434dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Gets the uri of this frame. 435dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 436dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param o frame object to get uri. 437dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 438dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @return frame uri or @c NULL. It's a internal string and should 439dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * not be modified. The string is guaranteed to be stringshared. 440dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 441dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockconst char* ewk_frame_uri_get(const Evas_Object* o) 442dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 443dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd, 0); 444dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return sd->uri; 445dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 446dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 447dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 448dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Gets the title of this frame. 449dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 450dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param o frame object to get title. 451dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 452dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @return frame title or @c NULL. It's a internal string and should 453dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * not be modified. The string is guaranteed to be stringshared. 454dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 455dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockconst char* ewk_frame_title_get(const Evas_Object* o) 456dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 457dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd, 0); 458dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return sd->title; 459dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 460dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 461dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 462dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Gets the name of this frame. 463dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 464dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param o frame object to get name. 465dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 466dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @return frame name or @c NULL. It's a internal string and should 467dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * not be modified. The string is guaranteed to be stringshared. 468dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 469dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockconst char* ewk_frame_name_get(const Evas_Object* o) 470dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 471dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd, 0); 472dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 473dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (sd->name) 474dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return sd->name; 475dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 476dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!sd->frame) { 477dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ERR("could not get name of uninitialized frame."); 478dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return 0; 479dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 480dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 48128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu WTF::String s = sd->frame->tree()->uniqueName(); 482dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block WTF::CString cs = s.utf8(); 483dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block sd->name = eina_stringshare_add_length(cs.data(), cs.length()); 484dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return sd->name; 485dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 486dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 487dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 488dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Get last known contents size. 489dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 490dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param o frame object to get contents size. 491dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param w where to store contents size width. May be @c NULL. 492dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param h where to store contents size height. May be @c NULL. 493dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 494dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @return @c EINA_TRUE on success or @c EINA_FALSE on failure and 495dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @a w and @a h will be zeroed. 496dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 497dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockEina_Bool ewk_frame_contents_size_get(const Evas_Object* o, Evas_Coord* w, Evas_Coord* h) 498dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 499dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (w) 500dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block *w = 0; 501dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (h) 502dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block *h = 0; 503dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd, EINA_FALSE); 504dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (w) 505dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block *w = sd->contents_size.w; 506dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (h) 507dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block *h = sd->contents_size.h; 508dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return EINA_TRUE; 509dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 510dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 511dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockstatic Eina_Bool _ewk_frame_contents_set_internal(Ewk_Frame_Smart_Data *sd, const char* contents, size_t contents_size, const char* mime_type, const char* encoding, const char* base_uri, const char* unreachable_uri) 512dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 51381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch size_t len = strlen(contents); 51481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (contents_size < 1 || contents_size > len) 51581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch contents_size = len; 516dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!mime_type) 517dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block mime_type = "text/html"; 518dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!encoding) 519dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block encoding = "UTF-8"; 520dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!base_uri) 521dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block base_uri = "about:blank"; 522dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 523dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch WebCore::KURL baseKURL(WebCore::KURL(), WTF::String::fromUTF8(base_uri)); 524dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block WebCore::KURL unreachableKURL; 525dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (unreachable_uri) 526dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch unreachableKURL = WebCore::KURL(WebCore::KURL(), WTF::String::fromUTF8(unreachable_uri)); 527dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block else 528dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block unreachableKURL = WebCore::KURL(); 529dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 530dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block WTF::RefPtr<WebCore::SharedBuffer> buffer = WebCore::SharedBuffer::create(contents, contents_size); 531dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block WebCore::SubstituteData substituteData 532dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block (buffer.release(), 533dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch WTF::String::fromUTF8(mime_type), 534dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch WTF::String::fromUTF8(encoding), 535dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block baseKURL, unreachableKURL); 536dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block WebCore::ResourceRequest request(baseKURL); 537dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 538dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block sd->frame->loader()->load(request, substituteData, false); 539dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return EINA_TRUE; 540dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 541dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 542dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 543dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Requests loading the given contents in this frame. 544dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 545dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param o frame object to load document. 546dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param contents what to load into frame. Must not be @c NULL. 547dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param contents_size byte size of data in @a contents. 548dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * If zero, strlen() is used. 549dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param mime_type type of @a contents data. If @c NULL "text/html" is assumed. 550dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param encoding used for @a contents data. If @c NULL "UTF-8" is assumed. 551dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param base_uri base uri to use for relative resources. May be @c NULL. 552dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * If provided must be an absolute uri. 553dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 554dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @return @c EINA_TRUE on successful request, @c EINA_FALSE on errors. 555dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 556dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockEina_Bool ewk_frame_contents_set(Evas_Object* o, const char* contents, size_t contents_size, const char* mime_type, const char* encoding, const char* base_uri) 557dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 558dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd, EINA_FALSE); 559dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_FALSE_RETURN_VAL(sd->frame, EINA_FALSE); 560dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(contents, EINA_FALSE); 561dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return _ewk_frame_contents_set_internal 562dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block (sd, contents, contents_size, mime_type, encoding, base_uri, 0); 563dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 564dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 565dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 566dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Requests loading alternative contents for unreachable URI in this frame. 567dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 568dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * This is similar to ewk_frame_contents_set(), but is used when some 569dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * URI failed to load, using the provided content instead. The main 570dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * difference is that back-forward navigation list is not changed. 571dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 572dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param o frame object to load document. 573dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param contents what to load into frame. Must not be @c NULL. 574dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param contents_size byte size of data in @a contents. 575dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * If zero, strlen() is used. 576dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param mime_type type of @a contents data. If @c NULL "text/html" is assumed. 577dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param encoding used for @a contents data. If @c NULL "UTF-8" is assumed. 578dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param base_uri base uri to use for relative resources. May be @c NULL. 579dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * If provided must be an absolute uri. 580dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param unreachable_uri the URI that failed to load and is getting the 581dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * alternative representation. 582dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 583dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @return @c EINA_TRUE on successful request, @c EINA_FALSE on errors. 584dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 585dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockEina_Bool ewk_frame_contents_alternate_set(Evas_Object* o, const char* contents, size_t contents_size, const char* mime_type, const char* encoding, const char* base_uri, const char* unreachable_uri) 586dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 587dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd, EINA_FALSE); 588dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_FALSE_RETURN_VAL(sd->frame, EINA_FALSE); 589dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(contents, EINA_FALSE); 590dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(unreachable_uri, EINA_FALSE); 591dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return _ewk_frame_contents_set_internal 592dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block (sd, contents, contents_size, mime_type, encoding, base_uri, 593dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block unreachable_uri); 594dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 595dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 596dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 597dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Requests execution of given script. 598dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 599dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param o frame object to execute script. 600dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param script java script to execute. 601dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 602dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @return @c EINA_TRUE if request was done, @c EINA_FALSE on errors. 603dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 604dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockEina_Bool ewk_frame_script_execute(Evas_Object* o, const char* script) 605dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 606dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd, EINA_FALSE); 607dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_FALSE_RETURN_VAL(sd->frame, EINA_FALSE); 608dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(script, EINA_FALSE); 609dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch sd->frame->script()->executeScript(WTF::String::fromUTF8(script), true); 610dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return EINA_TRUE; 611dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 612dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 613dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 614dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Gets if frame is editable. 615dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 616dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param o frame object to get editable state. 617dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 618dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @return @c EINA_TRUE if editable, @c EINA_FALSE otherwise. 619dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 620dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockEina_Bool ewk_frame_editable_get(const Evas_Object* o) 621dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 622dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd, EINA_FALSE); 623dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(sd->frame, EINA_FALSE); 624dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return sd->editable; 625dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 626dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 627dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 628dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Sets if frame is editable. 629dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 630dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param o frame object to set editable state. 631dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param editable new state. 632dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 633dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @return @c EINA_TRUE on success, @c EINA_FALSE otherwise. 634dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 635dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockEina_Bool ewk_frame_editable_set(Evas_Object* o, Eina_Bool editable) 636dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 637dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd, EINA_FALSE); 638dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(sd->frame, EINA_FALSE); 639dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block editable = !!editable; 640dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (sd->editable == editable) 641dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return EINA_TRUE; 642dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (editable) 6435abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick sd->frame->editor()->applyEditingStyleToBodyElement(); 644dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return EINA_TRUE; 645dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 646dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 647dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 648dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Get the copy of the selection text. 649dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 650dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param o frame object to get selection text. 651dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 652dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @return newly allocated string or @c NULL if nothing is selected or failure. 653dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 654dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockchar* ewk_frame_selection_get(const Evas_Object* o) 655dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 656dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd, 0); 657dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(sd->frame, 0); 6585abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick WTF::CString s = sd->frame->editor()->selectedText().utf8(); 659dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (s.isNull()) 660dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return 0; 661dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return strdup(s.data()); 662dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 663dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 664dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockstatic inline Eina_Bool _ewk_frame_editor_command(Ewk_Frame_Smart_Data* sd, const char* command) 665dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 666dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch return sd->frame->editor()->command(WTF::String::fromUTF8(command)).execute(); 667dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 668dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 669dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 670dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Unselects whatever was selected. 671dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 672dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @return @c EINA_TRUE if operation was executed, @c EINA_FALSE otherwise. 673dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 674dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockEina_Bool ewk_frame_select_none(Evas_Object* o) 675dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 676dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd, EINA_FALSE); 677dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(sd->frame, EINA_FALSE); 678dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return _ewk_frame_editor_command(sd, "Unselect"); 679dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 680dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 681dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 682dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Selects everything. 683dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 684dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @return @c EINA_TRUE if operation was executed, @c EINA_FALSE otherwise. 685dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 686dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockEina_Bool ewk_frame_select_all(Evas_Object* o) 687dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 688dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd, EINA_FALSE); 689dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(sd->frame, EINA_FALSE); 690dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return _ewk_frame_editor_command(sd, "SelectAll"); 691dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 692dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 693dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 694dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Selects the current paragrah. 695dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 696dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @return @c EINA_TRUE if operation was executed, @c EINA_FALSE otherwise. 697dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 698dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockEina_Bool ewk_frame_select_paragraph(Evas_Object* o) 699dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 700dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd, EINA_FALSE); 701dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(sd->frame, EINA_FALSE); 702dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return _ewk_frame_editor_command(sd, "SelectParagraph"); 703dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 704dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 705dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 706dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Selects the current sentence. 707dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 708dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @return @c EINA_TRUE if operation was executed, @c EINA_FALSE otherwise. 709dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 710dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockEina_Bool ewk_frame_select_sentence(Evas_Object* o) 711dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 712dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd, EINA_FALSE); 713dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(sd->frame, EINA_FALSE); 714dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return _ewk_frame_editor_command(sd, "SelectSentence"); 715dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 716dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 717dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 718dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Selects the current line. 719dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 720dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @return @c EINA_TRUE if operation was executed, @c EINA_FALSE otherwise. 721dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 722dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockEina_Bool ewk_frame_select_line(Evas_Object* o) 723dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 724dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd, EINA_FALSE); 725dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(sd->frame, EINA_FALSE); 726dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return _ewk_frame_editor_command(sd, "SelectLine"); 727dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 728dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 729dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 730dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Selects the current word. 731dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 732dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @return @c EINA_TRUE if operation was executed, @c EINA_FALSE otherwise. 733dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 734dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockEina_Bool ewk_frame_select_word(Evas_Object* o) 735dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 736dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd, EINA_FALSE); 737dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(sd->frame, EINA_FALSE); 738dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return _ewk_frame_editor_command(sd, "SelectWord"); 739dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 740dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 741dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 742dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Search the given text string in document. 743dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 744dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param o frame object where to search text. 745dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param string reference string to search. 746dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param case_sensitive if search should be case sensitive or not. 747dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param forward if search is from cursor and on or backwards. 748dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param wrap if search should wrap at end. 749dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 750dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @return @c EINA_TRUE if found, @c EINA_FALSE if not or failure. 751dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 752dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockEina_Bool ewk_frame_text_search(const Evas_Object* o, const char* string, Eina_Bool case_sensitive, Eina_Bool forward, Eina_Bool wrap) 753dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 754dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd, EINA_FALSE); 755dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(sd->frame, EINA_FALSE); 756dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(string, EINA_FALSE); 757dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 7585abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick return sd->frame->editor()->findString(WTF::String::fromUTF8(string), forward, case_sensitive, wrap, true); 759dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 760dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 761dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 762dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Mark matches the given text string in document. 763dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 764dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param o frame object where to search text. 765dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param string reference string to match. 766dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param case_sensitive if match should be case sensitive or not. 767dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param highlight if matches should be highlighted. 768dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param limit maximum amount of matches, or zero to unlimited. 769dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 770dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @return number of matches. 771dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 772dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockunsigned int ewk_frame_text_matches_mark(Evas_Object* o, const char* string, Eina_Bool case_sensitive, Eina_Bool highlight, unsigned int limit) 773dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 774dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd, 0); 775dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(sd->frame, EINA_FALSE); 776dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(string, 0); 777dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 7785abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick sd->frame->editor()->setMarkedTextMatchesAreHighlighted(highlight); 7795abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick return sd->frame->editor()->countMatchesForText(WTF::String::fromUTF8(string), case_sensitive, limit, true); 780dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 781dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 782dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 783dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Reverses the effect of ewk_frame_text_matches_mark() 784dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 785dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param o frame object where to search text. 786dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 787dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @return @c EINA_TRUE on success, @c EINA_FALSE for failure. 788dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 789dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockEina_Bool ewk_frame_text_matches_unmark_all(Evas_Object* o) 790dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 791dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd, EINA_FALSE); 792dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(sd->frame, EINA_FALSE); 793dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 794e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block sd->frame->document()->markers()->removeMarkers(WebCore::DocumentMarker::TextMatch); 795dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return EINA_TRUE; 796dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 797dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 798dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 799dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Set if should highlight matches marked with ewk_frame_text_matches_mark(). 800dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 801dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param o frame object where to set if matches are highlighted or not. 802dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param highlight if @c EINA_TRUE, matches will be highlighted. 803dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 804dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @return @c EINA_TRUE on success, @c EINA_FALSE for failure. 805dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 806dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockEina_Bool ewk_frame_text_matches_highlight_set(Evas_Object* o, Eina_Bool highlight) 807dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 808dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd, EINA_FALSE); 809dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(sd->frame, EINA_FALSE); 8105abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick sd->frame->editor()->setMarkedTextMatchesAreHighlighted(highlight); 811dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return EINA_TRUE; 812dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 813dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 814dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 815dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Get if should highlight matches marked with ewk_frame_text_matches_mark(). 816dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 817dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param o frame object to query if matches are highlighted or not. 818dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 819dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @return @c EINA_TRUE if they are highlighted, @c EINA_FALSE otherwise. 820dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 821dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockEina_Bool ewk_frame_text_matches_highlight_get(const Evas_Object* o) 822dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 823dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd, EINA_FALSE); 824dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(sd->frame, EINA_FALSE); 8255abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick return sd->frame->editor()->markedTextMatchesAreHighlighted(); 826dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 827dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 8285ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen/** 8295ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * Comparison function used by ewk_frame_text_matches_nth_pos_get 8305ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen */ 8315ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsenstatic bool _ewk_frame_rect_cmp_less_than(const WebCore::IntRect& i, const WebCore::IntRect& j) 8325ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen{ 8335ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen return (i.y() < j.y() || (i.y() == j.y() && i.x() < j.x())); 8345ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen} 8355ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 8365ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen/** 8375ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * Predicate used by ewk_frame_text_matches_nth_pos_get 8385ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen */ 8395ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsenstatic bool _ewk_frame_rect_is_negative_value(const WebCore::IntRect& i) 8405ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen{ 8415ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen return (i.x() < 0 || i.y() < 0); 8425ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen} 8435ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 8445ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen/** 8455ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * Get x, y position of n-th text match in frame 8465ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * 8475ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * @param o frame object where matches are highlighted. 8485ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * @param n index of element 8495ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * @param x where to return x position. May be @c NULL. 8505ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * @param y where to return y position. May be @c NULL. 8515ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * 8525ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * @return @c EINA_TRUE on success, @c EINA_FALSE for failure - when no matches found or 8535ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * n bigger than search results. 8545ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen */ 855bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian MonsenEina_Bool ewk_frame_text_matches_nth_pos_get(Evas_Object* o, size_t n, int* x, int* y) 8565ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen{ 8575ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen EWK_FRAME_SD_GET_OR_RETURN(o, sd, EINA_FALSE); 8585ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen EINA_SAFETY_ON_NULL_RETURN_VAL(sd->frame, EINA_FALSE); 8595ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 8605ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen Vector<WebCore::IntRect> intRects = sd->frame->document()->markers()->renderedRectsForMarkers(WebCore::DocumentMarker::TextMatch); 8615ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 8625ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen /* remove useless values */ 8635ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen std::remove_if(intRects.begin(), intRects.end(), _ewk_frame_rect_is_negative_value); 8645ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 8655ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen if (intRects.isEmpty() || n > intRects.size()) 8665ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen return EINA_FALSE; 8675ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 8685ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen std::sort(intRects.begin(), intRects.end(), _ewk_frame_rect_cmp_less_than); 8695ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 8705ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen if (x) 8715ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen *x = intRects[n - 1].x(); 8725ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen if (y) 8735ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen *y = intRects[n - 1].y(); 8745ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen return EINA_TRUE; 8755ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen} 8765ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 877dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 878dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Ask frame to stop loading. 879dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 880dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param o frame object to stop loading. 881dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 882dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @return @c EINA_TRUE on success, @c EINA_FALSE otherwise. 883dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 884dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockEina_Bool ewk_frame_stop(Evas_Object* o) 885dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 886dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd, EINA_FALSE); 887dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(sd->frame, EINA_FALSE); 888dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block sd->frame->loader()->stopAllLoaders(); 889dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return EINA_TRUE; 890dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 891dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 892dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 893dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Ask frame to reload current document. 894dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 895dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param o frame object to reload. 896dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 897dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @return @c EINA_TRUE on success, @c EINA_FALSE otherwise. 898dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 899dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @see ewk_frame_reload_full() 900dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 901dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockEina_Bool ewk_frame_reload(Evas_Object* o) 902dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 903dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd, EINA_FALSE); 904dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(sd->frame, EINA_FALSE); 905dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block sd->frame->loader()->reload(); 906dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return EINA_TRUE; 907dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 908dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 909dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 910dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Ask frame to fully reload current document, using no previous caches. 911dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 912dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param o frame object to reload. 913dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 914dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @return @c EINA_TRUE on success, @c EINA_FALSE otherwise. 915dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 916dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockEina_Bool ewk_frame_reload_full(Evas_Object* o) 917dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 918dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd, EINA_FALSE); 919dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(sd->frame, EINA_FALSE); 920dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block sd->frame->loader()->reload(true); 921dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return EINA_TRUE; 922dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 923dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 924dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 925dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Ask frame to navigate back in history. 926dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 927dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param o frame object to navigate back. 928dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 929dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @return @c EINA_TRUE on success, @c EINA_FALSE otherwise. 930dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 931dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @see ewk_frame_navigate() 932dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 933dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockEina_Bool ewk_frame_back(Evas_Object* o) 934dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 935dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return ewk_frame_navigate(o, -1); 936dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 937dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 938dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 939dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Ask frame to navigate forward in history. 940dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 941dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param o frame object to navigate forward. 942dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 943dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @return @c EINA_TRUE on success, @c EINA_FALSE otherwise. 944dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 945dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @see ewk_frame_navigate() 946dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 947dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockEina_Bool ewk_frame_forward(Evas_Object* o) 948dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 949dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return ewk_frame_navigate(o, 1); 950dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 951dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 952dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 953dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Navigate back or forward in history. 954dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 955dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param o frame object to navigate. 956dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param steps if positive navigates that amount forwards, if negative 957dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * does backwards. 958dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 959dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @return @c EINA_TRUE on success, @c EINA_FALSE otherwise. 960dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 961dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockEina_Bool ewk_frame_navigate(Evas_Object* o, int steps) 962dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 963dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd, EINA_FALSE); 964dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(sd->frame, EINA_FALSE); 965dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block WebCore::Page* page = sd->frame->page(); 966dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!page->canGoBackOrForward(steps)) 967dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return EINA_FALSE; 968dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block page->goBackOrForward(steps); 969dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return EINA_TRUE; 970dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 971dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 972dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 973dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Check if it is possible to navigate backwards one item in history. 974dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 975dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param o frame object to check if backward navigation is possible. 976dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 977dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @return @c EINA_TRUE if possible, @c EINA_FALSE otherwise. 978dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 979dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @see ewk_frame_navigate_possible() 980dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 981dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockEina_Bool ewk_frame_back_possible(Evas_Object* o) 982dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 983dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return ewk_frame_navigate_possible(o, -1); 984dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 985dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 986dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 987dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Check if it is possible to navigate forwards one item in history. 988dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 989dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param o frame object to check if forward navigation is possible. 990dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 991dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @return @c EINA_TRUE if possible, @c EINA_FALSE otherwise. 992dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 993dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @see ewk_frame_navigate_possible() 994dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 995dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockEina_Bool ewk_frame_forward_possible(Evas_Object* o) 996dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 997dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return ewk_frame_navigate_possible(o, 1); 998dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 999dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1000dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 1001dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Check if it is possible to navigate given @a steps in history. 1002dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1003dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param o frame object to navigate. 1004dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param steps if positive navigates that amount forwards, if negative 1005dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * does backwards. 1006dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1007dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @return @c EINA_TRUE if possible, @c EINA_FALSE otherwise. 1008dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 1009dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockEina_Bool ewk_frame_navigate_possible(Evas_Object* o, int steps) 1010dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1011dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd, EINA_FALSE); 1012dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(sd->frame, EINA_FALSE); 1013dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block WebCore::Page* page = sd->frame->page(); 1014dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return page->canGoBackOrForward(steps); 1015dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1016dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1017dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 1018dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Get current zoom level used by this frame. 1019dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1020dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param o frame object to query zoom level. 1021dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1022dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @return zoom level or -1.0 on failure. 1023dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 1024dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockfloat ewk_frame_zoom_get(const Evas_Object* o) 1025dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1026dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd, -1.0); 1027dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(sd->frame, -1.0); 102868513a70bcd92384395513322f1b801e7bf9c729Steve Block 102968513a70bcd92384395513322f1b801e7bf9c729Steve Block if (sd->textZoom) 103068513a70bcd92384395513322f1b801e7bf9c729Steve Block return sd->frame->textZoomFactor(); 103168513a70bcd92384395513322f1b801e7bf9c729Steve Block return sd->frame->pageZoomFactor(); 1032dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1033dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1034dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 1035dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Set current zoom level used by this frame. 1036dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1037dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param o frame object to change zoom level. 1038dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param zoom new level. 1039dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1040dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @return @c EINA_TRUE on success or @c EINA_FALSE on failure. 1041dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1042dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @see ewk_frame_zoom_text_only_set() 1043dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 1044dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockEina_Bool ewk_frame_zoom_set(Evas_Object* o, float zoom) 1045dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1046dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd, EINA_FALSE); 1047dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(sd->frame, EINA_FALSE); 104868513a70bcd92384395513322f1b801e7bf9c729Steve Block if (sd->textZoom) 104968513a70bcd92384395513322f1b801e7bf9c729Steve Block sd->frame->setTextZoomFactor(zoom); 105068513a70bcd92384395513322f1b801e7bf9c729Steve Block else 105168513a70bcd92384395513322f1b801e7bf9c729Steve Block sd->frame->setPageZoomFactor(zoom); 1052dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return EINA_TRUE; 1053dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1054dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1055dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 1056dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Query if zoom level just applies to text and not other elements. 1057dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1058dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param o frame to query setting. 1059dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1060dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @return @c EINA_TRUE if just text are scaled, @c EINA_FALSE otherwise. 1061dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 1062dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockEina_Bool ewk_frame_zoom_text_only_get(const Evas_Object* o) 1063dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1064dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd, EINA_FALSE); 106568513a70bcd92384395513322f1b801e7bf9c729Steve Block return sd->textZoom; 1066dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1067dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1068dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 1069dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Set if zoom level just applies to text and not other elements. 1070dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1071dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param o frame to change setting. 1072dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param setting @c EINA_TRUE if zoom should just be applied to text. 1073dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1074dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @return @c EINA_TRUE on success, @c EINA_FALSE otherwise. 1075dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 1076dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockEina_Bool ewk_frame_zoom_text_only_set(Evas_Object* o, Eina_Bool setting) 1077dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1078dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd, EINA_FALSE); 1079dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(sd->frame, EINA_FALSE); 108068513a70bcd92384395513322f1b801e7bf9c729Steve Block if (sd->textZoom == setting) 1081dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return EINA_TRUE; 1082dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 108368513a70bcd92384395513322f1b801e7bf9c729Steve Block float zoom_level = sd->textZoom ? sd->frame->textZoomFactor() : sd->frame->pageZoomFactor(); 108468513a70bcd92384395513322f1b801e7bf9c729Steve Block sd->textZoom = setting; 108568513a70bcd92384395513322f1b801e7bf9c729Steve Block if (sd->textZoom) 108668513a70bcd92384395513322f1b801e7bf9c729Steve Block sd->frame->setPageAndTextZoomFactors(1, zoom_level); 108768513a70bcd92384395513322f1b801e7bf9c729Steve Block else 108868513a70bcd92384395513322f1b801e7bf9c729Steve Block sd->frame->setPageAndTextZoomFactors(zoom_level, 1); 1089dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return EINA_TRUE; 1090dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1091dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1092dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 1093dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Free hit test created with ewk_frame_hit_test_new(). 1094dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1095dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param hit_test instance. Must @b not be @c NULL. 1096dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 1097dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid ewk_frame_hit_test_free(Ewk_Hit_Test* hit_test) 1098dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1099dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN(hit_test); 1100dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block eina_stringshare_del(hit_test->title); 1101dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block eina_stringshare_del(hit_test->alternate_text); 1102dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block eina_stringshare_del(hit_test->link.text); 1103dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block eina_stringshare_del(hit_test->link.url); 1104dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block eina_stringshare_del(hit_test->link.title); 1105dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block free(hit_test); 1106dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1107dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1108dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 1109dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Creates a new hit test for given frame and point. 1110dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1111dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param o frame to do hit test on. 1112dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param x horizontal position to query. 1113dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param y vertical position to query. 1114dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1115dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @return a newly allocated hit test on success, @c NULL otherwise. 1116dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Free memory with ewk_frame_hit_test_free() 1117dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 1118dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockEwk_Hit_Test* ewk_frame_hit_test_new(const Evas_Object* o, int x, int y) 1119dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1120dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd, 0); 1121dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(sd->frame, 0); 1122dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1123dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block WebCore::FrameView* view = sd->frame->view(); 1124dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(view, 0); 1125dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(sd->frame->contentRenderer(), 0); 1126dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1127dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block WebCore::HitTestResult result = sd->frame->eventHandler()->hitTestResultAtPoint 1128dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block (view->windowToContents(WebCore::IntPoint(x, y)), 1129dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block /*allowShadowContent*/ false, /*ignoreClipping*/ true); 1130dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1131dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (result.scrollbar()) 1132dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return 0; 1133dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!result.innerNode()) 1134dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return 0; 1135dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1136dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Ewk_Hit_Test* hit_test = (Ewk_Hit_Test*)calloc(1, sizeof(Ewk_Hit_Test)); 1137dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!hit_test) { 1138dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block CRITICAL("Could not allocate memory for hit test."); 1139dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return 0; 1140dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 1141dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1142dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block hit_test->x = result.point().x(); 1143dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block hit_test->y = result.point().y(); 1144dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#if 0 1145dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // FIXME 1146dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block hit_test->bounding_box.x = result.boundingBox().x(); 1147dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block hit_test->bounding_box.y = result.boundingBox().y(); 1148dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block hit_test->bounding_box.w = result.boundingBox().width(); 1149dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block hit_test->bounding_box.h = result.boundingBox().height(); 1150dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#else 1151dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block hit_test->bounding_box.x = 0; 1152dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block hit_test->bounding_box.y = 0; 1153dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block hit_test->bounding_box.w = 0; 1154dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block hit_test->bounding_box.h = 0; 1155dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif 1156dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1157dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block WebCore::TextDirection dir; 1158dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block hit_test->title = eina_stringshare_add(result.title(dir).utf8().data()); 1159dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block hit_test->alternate_text = eina_stringshare_add(result.altDisplayString().utf8().data()); 1160dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (result.innerNonSharedNode() && result.innerNonSharedNode()->document() 1161dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block && result.innerNonSharedNode()->document()->frame()) 1162dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block hit_test->frame = kit(result.innerNonSharedNode()->document()->frame()); 1163dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1164dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block hit_test->link.text = eina_stringshare_add(result.textContent().utf8().data()); 11656ed1fdfa7999878a811b09cdd647fbeace4353b8Steve Block hit_test->link.url = eina_stringshare_add(result.absoluteLinkURL().string().utf8().data()); 1166dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block hit_test->link.title = eina_stringshare_add(result.titleDisplayString().utf8().data()); 1167dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block hit_test->link.target_frame = kit(result.targetFrame()); 1168dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1169dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block hit_test->flags.editable = result.isContentEditable(); 1170dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block hit_test->flags.selected = result.isSelected(); 1171dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1172dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return hit_test; 1173dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1174dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1175dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 1176dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Relative scroll of given frame. 1177dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1178dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param o frame object to scroll. 1179dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param dx horizontal offset to scroll. 1180dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param dy vertical offset to scroll. 1181dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1182dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @return @c EINA_TRUE if possible, @c EINA_FALSE otherwise. 1183dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 1184dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockEina_Bool 1185dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockewk_frame_scroll_add(Evas_Object* o, int dx, int dy) 1186dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1187dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd, EINA_FALSE); 1188dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(sd->frame, EINA_FALSE); 1189dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(sd->frame->view(), EINA_FALSE); 119065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch sd->frame->view()->scrollBy(WebCore::IntSize(dx, dy)); 1191dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return EINA_TRUE; 1192dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1193dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1194dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 1195dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Set absolute scroll of given frame. 1196dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1197dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Both values are from zero to the contents size minus the viewport 1198dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * size. See ewk_frame_scroll_size_get(). 1199dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1200dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param o frame object to scroll. 1201dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param x horizontal position to scroll. 1202dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param y vertical position to scroll. 1203dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1204dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @return @c EINA_TRUE if possible, @c EINA_FALSE otherwise. 1205dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 1206dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockEina_Bool 1207dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockewk_frame_scroll_set(Evas_Object* o, int x, int y) 1208dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1209dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd, EINA_FALSE); 1210dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(sd->frame, EINA_FALSE); 1211dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(sd->frame->view(), EINA_FALSE); 1212dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block sd->frame->view()->setScrollPosition(WebCore::IntPoint(x, y)); 1213dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return EINA_TRUE; 1214dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1215dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1216dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 1217dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Get the possible scroll size of given frame. 1218dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1219dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Possible scroll size is contents size minus the viewport 1220dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * size. It's the last allowed value for ewk_frame_scroll_set() 1221dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1222dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param o frame object to scroll. 1223dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param w where to return horizontal size that is possible to 1224dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * scroll. May be @c NULL. 1225dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param h where to return vertical size that is possible to scroll. 1226dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * May be @c NULL. 1227dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1228dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @return @c EINA_TRUE if possible, @c EINA_FALSE otherwise and 1229dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * values are zeroed. 1230dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 1231dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockEina_Bool 1232dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockewk_frame_scroll_size_get(const Evas_Object* o, int* w, int* h) 1233dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1234dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (w) 1235dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block *w = 0; 1236dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (h) 1237dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block *h = 0; 1238dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd, EINA_FALSE); 1239dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(sd->frame, EINA_FALSE); 1240dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(sd->frame->view(), EINA_FALSE); 1241dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block WebCore::IntPoint point = sd->frame->view()->maximumScrollPosition(); 1242dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (w) 1243dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block *w = point.x(); 1244dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (h) 1245dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block *h = point.y(); 1246dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return EINA_TRUE; 1247dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1248dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1249dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 1250dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Get the current scroll position of given frame. 1251dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1252dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param o frame object to scroll. 1253dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param x where to return horizontal position. May be @c NULL. 1254dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param y where to return vertical position. May be @c NULL. 1255dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1256dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @return @c EINA_TRUE if possible, @c EINA_FALSE otherwise and 1257dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * values are zeroed. 1258dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 1259dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockEina_Bool 1260dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockewk_frame_scroll_pos_get(const Evas_Object* o, int* x, int* y) 1261dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1262dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (x) 1263dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block *x = 0; 1264dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (y) 1265dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block *y = 0; 1266dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd, EINA_FALSE); 1267dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(sd->frame, EINA_FALSE); 1268dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(sd->frame->view(), EINA_FALSE); 1269dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block WebCore::IntPoint pos = sd->frame->view()->scrollPosition(); 1270dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (x) 1271dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block *x = pos.x(); 1272dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (y) 1273dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block *y = pos.y(); 1274dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return EINA_TRUE; 1275dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1276dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1277dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 1278dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Get the current frame visible content geometry. 1279dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1280dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param o frame object to query visible content geometry. 1281dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param include_scrollbars whenever to include scrollbars size. 1282dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param x horizontal position. May be @c NULL. 1283dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param y vertical position. May be @c NULL. 1284dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param w width. May be @c NULL. 1285dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param h height. May be @c NULL. 1286dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1287dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @return @c EINA_TRUE if possible, @c EINA_FALSE otherwise and 1288dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * values are zeroed. 1289dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 1290dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockEina_Bool ewk_frame_visible_content_geometry_get(const Evas_Object* o, Eina_Bool include_scrollbars, int* x, int* y, int* w, int* h) 1291dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1292dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (x) 1293dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block *x = 0; 1294dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (y) 1295dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block *y = 0; 1296dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (w) 1297dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block *w = 0; 1298dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (h) 1299dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block *h = 0; 1300dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd, EINA_FALSE); 1301dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(sd->frame, EINA_FALSE); 1302dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(sd->frame->view(), EINA_FALSE); 1303dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block WebCore::IntRect rect = sd->frame->view()->visibleContentRect(include_scrollbars); 1304dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (x) 1305dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block *x = rect.x(); 1306dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (y) 1307dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block *y = rect.y(); 1308dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (w) 1309dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block *w = rect.width(); 1310dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (h) 1311dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block *h = rect.height(); 1312dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return EINA_TRUE; 1313dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1314dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1315dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 1316dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Get the current paintsEntireContents flag. 1317dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1318dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * This flag tells if dirty areas should be repainted even if they are 1319dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * out of the screen. 1320dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1321dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param o frame object to query paintsEntireContents flag. 1322dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1323dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @return @c EINA_TRUE if repainting any dirty area, @c EINA_FALSE 1324dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * otherwise. 1325dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 1326dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockEina_Bool ewk_frame_paint_full_get(const Evas_Object* o) 1327dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1328dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd, EINA_FALSE); 1329dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(sd->frame, EINA_FALSE); 1330dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(sd->frame->view(), EINA_FALSE); 1331dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return sd->frame->view()->paintsEntireContents(); 1332dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1333dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1334dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 1335dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Set the current paintsEntireContents flag. 1336dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1337dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * This flag tells if dirty areas should be repainted even if they are 1338dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * out of the screen. 1339dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1340dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param o frame object to set paintsEntireContents flag. 1341dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param flag @c EINA_TRUE if want to always repaint any dirty area, 1342dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @c EINA_FALSE otherwise. 1343dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 1344dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid ewk_frame_paint_full_set(Evas_Object* o, Eina_Bool flag) 1345dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1346dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd); 1347dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN(sd->frame); 1348dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN(sd->frame->view()); 1349dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block sd->frame->view()->setPaintsEntireContents(flag); 1350dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1351dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1352dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 1353dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Feed the focus in signal to this frame. 1354dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1355dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param o frame object to focus. 1356dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1357dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @return @c EINA_TRUE if it was handled, @c EINA_FALSE otherwise. 1358dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 1359dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockEina_Bool ewk_frame_feed_focus_in(Evas_Object* o) 1360dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1361dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd, EINA_FALSE); 1362dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(sd->frame, EINA_FALSE); 1363dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block WebCore::FocusController* c = sd->frame->page()->focusController(); 1364dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block c->setFocusedFrame(sd->frame); 1365dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return EINA_TRUE; 1366dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1367dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1368dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 1369dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Feed the focus out signal to this frame. 1370dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1371dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param o frame object to remove focus. 1372dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 1373dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockEina_Bool ewk_frame_feed_focus_out(Evas_Object* o) 1374dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1375dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // TODO: what to do on focus out? 1376dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ERR("what to do?"); 1377dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return EINA_FALSE; 1378dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1379dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1380dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 1381dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Feed the mouse wheel event to the frame. 1382dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1383dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param o frame object to feed event. 1384dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param ev mouse wheel event. 1385dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1386dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @return @c EINA_TRUE if it was handled, @c EINA_FALSE otherwise. 1387dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 1388dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockEina_Bool ewk_frame_feed_mouse_wheel(Evas_Object* o, const Evas_Event_Mouse_Wheel* ev) 1389dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1390dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd, EINA_FALSE); 1391dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(sd->frame, EINA_FALSE); 1392dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(ev, EINA_FALSE); 1393dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1394dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block WebCore::FrameView* view = sd->frame->view(); 1395dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block DBG("o=%p, view=%p, direction=%d, z=%d, pos=%d,%d", 1396dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block o, view, ev->direction, ev->z, ev->canvas.x, ev->canvas.y); 1397dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(view, EINA_FALSE); 1398dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1399dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block WebCore::PlatformWheelEvent event(ev); 1400dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return sd->frame->eventHandler()->handleWheelEvent(event); 1401dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1402dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1403dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 1404dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Feed the mouse down event to the frame. 1405dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1406dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param o frame object to feed event. 1407dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param ev mouse down event. 1408dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1409dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @return @c EINA_TRUE if it was handled, @c EINA_FALSE otherwise. 1410dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 1411dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockEina_Bool ewk_frame_feed_mouse_down(Evas_Object* o, const Evas_Event_Mouse_Down* ev) 1412dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1413dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd, EINA_FALSE); 1414dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(sd->frame, EINA_FALSE); 1415dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(ev, EINA_FALSE); 1416dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1417dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block WebCore::FrameView* view = sd->frame->view(); 1418dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block DBG("o=%p, view=%p, button=%d, pos=%d,%d", 1419dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block o, view, ev->button, ev->canvas.x, ev->canvas.y); 1420dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(view, EINA_FALSE); 1421dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1422dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Evas_Coord x, y; 1423dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_geometry_get(sd->view, &x, &y, 0, 0); 1424dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1425dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block WebCore::PlatformMouseEvent event(ev, WebCore::IntPoint(x, y)); 1426dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return sd->frame->eventHandler()->handleMousePressEvent(event); 1427dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1428dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1429dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 1430dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Feed the mouse up event to the frame. 1431dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1432dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param o frame object to feed event. 1433dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param ev mouse up event. 1434dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1435dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @return @c EINA_TRUE if it was handled, @c EINA_FALSE otherwise. 1436dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 1437dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockEina_Bool ewk_frame_feed_mouse_up(Evas_Object* o, const Evas_Event_Mouse_Up* ev) 1438dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1439dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd, EINA_FALSE); 1440dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(sd->frame, EINA_FALSE); 1441dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(ev, EINA_FALSE); 1442dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1443dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block WebCore::FrameView* view = sd->frame->view(); 1444dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block DBG("o=%p, view=%p, button=%d, pos=%d,%d", 1445dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block o, view, ev->button, ev->canvas.x, ev->canvas.y); 1446dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(view, EINA_FALSE); 1447dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1448dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Evas_Coord x, y; 1449dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_geometry_get(sd->view, &x, &y, 0, 0); 1450dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1451dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block WebCore::PlatformMouseEvent event(ev, WebCore::IntPoint(x, y)); 1452dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return sd->frame->eventHandler()->handleMouseReleaseEvent(event); 1453dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1454dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1455dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 1456dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Feed the mouse move event to the frame. 1457dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1458dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param o frame object to feed event. 1459dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param ev mouse move event. 1460dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1461dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @return @c EINA_TRUE if it was handled, @c EINA_FALSE otherwise. 1462dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 1463dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockEina_Bool ewk_frame_feed_mouse_move(Evas_Object* o, const Evas_Event_Mouse_Move* ev) 1464dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1465dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd, EINA_FALSE); 1466dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(sd->frame, EINA_FALSE); 1467dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(ev, EINA_FALSE); 1468dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1469dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block WebCore::FrameView* view = sd->frame->view(); 1470dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block DBG("o=%p, view=%p, pos: old=%d,%d, new=%d,%d, buttons=%d", 1471dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block o, view, ev->cur.canvas.x, ev->cur.canvas.y, 1472dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ev->prev.canvas.x, ev->prev.canvas.y, ev->buttons); 1473dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(view, EINA_FALSE); 1474dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1475dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Evas_Coord x, y; 1476dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_geometry_get(sd->view, &x, &y, 0, 0); 1477dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1478dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block WebCore::PlatformMouseEvent event(ev, WebCore::IntPoint(x, y)); 1479dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return sd->frame->eventHandler()->mouseMoved(event); 1480dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1481dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1482cad810f21b803229eb11403f9209855525a25d57Steve BlockEina_Bool ewk_frame_feed_touch_event(Evas_Object* o, Ewk_Touch_Event_Type action, Eina_List* points, int metaState) 1483cad810f21b803229eb11403f9209855525a25d57Steve Block{ 1484cad810f21b803229eb11403f9209855525a25d57Steve Block Eina_Bool ret = EINA_FALSE; 1485cad810f21b803229eb11403f9209855525a25d57Steve Block 1486cad810f21b803229eb11403f9209855525a25d57Steve Block#if ENABLE(TOUCH_EVENTS) 1487cad810f21b803229eb11403f9209855525a25d57Steve Block EINA_SAFETY_ON_NULL_RETURN_VAL(points, EINA_FALSE); 14882bde8e466a4451c7319e3a072d118917957d6554Steve Block EWK_FRAME_SD_GET(o, sd); 14892bde8e466a4451c7319e3a072d118917957d6554Steve Block 14902bde8e466a4451c7319e3a072d118917957d6554Steve Block if (!sd || !sd->frame || !ewk_view_need_touch_events_get(sd->view)) { 14912bde8e466a4451c7319e3a072d118917957d6554Steve Block void* point; 14922bde8e466a4451c7319e3a072d118917957d6554Steve Block EINA_LIST_FREE(points, point); 14932bde8e466a4451c7319e3a072d118917957d6554Steve Block return EINA_FALSE; 14942bde8e466a4451c7319e3a072d118917957d6554Steve Block } 1495cad810f21b803229eb11403f9209855525a25d57Steve Block 1496cad810f21b803229eb11403f9209855525a25d57Steve Block Evas_Coord x, y; 1497cad810f21b803229eb11403f9209855525a25d57Steve Block evas_object_geometry_get(sd->view, &x, &y, 0, 0); 1498cad810f21b803229eb11403f9209855525a25d57Steve Block 1499cad810f21b803229eb11403f9209855525a25d57Steve Block WebCore::TouchEventType type = WebCore::TouchStart; 1500cad810f21b803229eb11403f9209855525a25d57Steve Block switch (action) { 1501cad810f21b803229eb11403f9209855525a25d57Steve Block case EWK_TOUCH_START: 1502cad810f21b803229eb11403f9209855525a25d57Steve Block type = WebCore::TouchStart; 1503cad810f21b803229eb11403f9209855525a25d57Steve Block break; 1504cad810f21b803229eb11403f9209855525a25d57Steve Block case EWK_TOUCH_END: 1505cad810f21b803229eb11403f9209855525a25d57Steve Block type = WebCore::TouchEnd; 1506cad810f21b803229eb11403f9209855525a25d57Steve Block break; 1507cad810f21b803229eb11403f9209855525a25d57Steve Block case EWK_TOUCH_MOVE: 1508cad810f21b803229eb11403f9209855525a25d57Steve Block type = WebCore::TouchMove; 1509cad810f21b803229eb11403f9209855525a25d57Steve Block break; 1510cad810f21b803229eb11403f9209855525a25d57Steve Block case EWK_TOUCH_CANCEL: 1511cad810f21b803229eb11403f9209855525a25d57Steve Block type = WebCore::TouchCancel; 1512cad810f21b803229eb11403f9209855525a25d57Steve Block break; 1513cad810f21b803229eb11403f9209855525a25d57Steve Block default: 1514cad810f21b803229eb11403f9209855525a25d57Steve Block return EINA_FALSE; 1515cad810f21b803229eb11403f9209855525a25d57Steve Block } 1516cad810f21b803229eb11403f9209855525a25d57Steve Block 1517cad810f21b803229eb11403f9209855525a25d57Steve Block WebCore::PlatformTouchEvent te(points, WebCore::IntPoint(x, y), type, metaState); 1518cad810f21b803229eb11403f9209855525a25d57Steve Block ret = sd->frame->eventHandler()->handleTouchEvent(te); 1519cad810f21b803229eb11403f9209855525a25d57Steve Block#endif 1520cad810f21b803229eb11403f9209855525a25d57Steve Block return ret; 1521cad810f21b803229eb11403f9209855525a25d57Steve Block} 1522cad810f21b803229eb11403f9209855525a25d57Steve Block 1523dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockstatic inline Eina_Bool _ewk_frame_handle_key_scrolling(WebCore::Frame* frame, const WebCore::PlatformKeyboardEvent &event) 1524dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1525dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block WebCore::ScrollDirection direction; 1526dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block WebCore::ScrollGranularity granularity; 1527dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1528dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block int keyCode = event.windowsVirtualKeyCode(); 1529dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1530dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block switch (keyCode) { 153121939df44de1705786c545cd1bf519d47250322dBen Murdoch case VK_SPACE: 1532dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block granularity = WebCore::ScrollByPage; 1533dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (event.shiftKey()) 1534dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block direction = WebCore::ScrollUp; 1535dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block else 1536dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block direction = WebCore::ScrollDown; 1537dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block break; 153821939df44de1705786c545cd1bf519d47250322dBen Murdoch case VK_NEXT: 1539dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block granularity = WebCore::ScrollByPage; 1540dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block direction = WebCore::ScrollDown; 1541dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block break; 154221939df44de1705786c545cd1bf519d47250322dBen Murdoch case VK_PRIOR: 1543dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block granularity = WebCore::ScrollByPage; 1544dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block direction = WebCore::ScrollUp; 1545dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block break; 154621939df44de1705786c545cd1bf519d47250322dBen Murdoch case VK_HOME: 1547dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block granularity = WebCore::ScrollByDocument; 1548dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block direction = WebCore::ScrollUp; 1549dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block break; 155021939df44de1705786c545cd1bf519d47250322dBen Murdoch case VK_END: 1551dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block granularity = WebCore::ScrollByDocument; 1552dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block direction = WebCore::ScrollDown; 1553dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block break; 155421939df44de1705786c545cd1bf519d47250322dBen Murdoch case VK_LEFT: 1555dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block granularity = WebCore::ScrollByLine; 1556dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block direction = WebCore::ScrollLeft; 1557dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block break; 155821939df44de1705786c545cd1bf519d47250322dBen Murdoch case VK_RIGHT: 1559dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block granularity = WebCore::ScrollByLine; 1560dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block direction = WebCore::ScrollRight; 1561dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block break; 156221939df44de1705786c545cd1bf519d47250322dBen Murdoch case VK_UP: 1563dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block direction = WebCore::ScrollUp; 1564dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (event.ctrlKey()) 1565dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block granularity = WebCore::ScrollByDocument; 1566dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block else 1567dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block granularity = WebCore::ScrollByLine; 1568dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block break; 156921939df44de1705786c545cd1bf519d47250322dBen Murdoch case VK_DOWN: 1570dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block direction = WebCore::ScrollDown; 1571dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (event.ctrlKey()) 1572dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block granularity = WebCore::ScrollByDocument; 1573dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block else 1574dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block granularity = WebCore::ScrollByLine; 1575dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block break; 1576dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block default: 1577dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return EINA_FALSE; 1578dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 1579dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1580dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (frame->eventHandler()->scrollOverflow(direction, granularity)) 1581dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return EINA_FALSE; 1582dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1583dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block frame->view()->scroll(direction, granularity); 1584dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return EINA_TRUE; 1585dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1586dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1587dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 1588dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Feed the keyboard key down event to the frame. 1589dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1590dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param o frame object to feed event. 1591dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param ev keyboard key down event. 1592dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1593dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @return @c EINA_TRUE if it was handled, @c EINA_FALSE otherwise. 1594dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 1595dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockEina_Bool ewk_frame_feed_key_down(Evas_Object* o, const Evas_Event_Key_Down* ev) 1596dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1597dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd, EINA_FALSE); 1598dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(sd->frame, EINA_FALSE); 1599dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(ev, EINA_FALSE); 1600dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1601dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block DBG("o=%p keyname=%s (key=%s, string=%s)", 1602dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block o, ev->keyname, ev->key ? ev->key : "", ev->string ? ev->string : ""); 1603dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1604dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block WebCore::PlatformKeyboardEvent event(ev); 1605dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (sd->frame->eventHandler()->keyEvent(event)) 1606dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return EINA_TRUE; 1607dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1608dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return _ewk_frame_handle_key_scrolling(sd->frame, event); 1609dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1610dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1611dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 1612dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Feed the keyboard key up event to the frame. 1613dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1614dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param o frame object to feed event. 1615dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @param ev keyboard key up event. 1616dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1617dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @return @c EINA_TRUE if it was handled, @c EINA_FALSE otherwise. 1618dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 1619dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockEina_Bool ewk_frame_feed_key_up(Evas_Object* o, const Evas_Event_Key_Up* ev) 1620dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1621dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd, EINA_FALSE); 1622dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(sd->frame, EINA_FALSE); 1623dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(ev, EINA_FALSE); 1624dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1625dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block DBG("o=%p keyname=%s (key=%s, string=%s)", 1626dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block o, ev->keyname, ev->key ? ev->key : "", ev->string ? ev->string : ""); 1627dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1628dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block WebCore::PlatformKeyboardEvent event(ev); 1629dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return sd->frame->eventHandler()->keyEvent(event); 1630dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1631dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1632dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/* internal methods ****************************************************/ 1633dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1634dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 1635dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @internal 1636dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1637dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Initialize frame based on actual WebKit frame. 1638dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1639dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * This is internal and should never be called by external users. 1640dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 1641dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockEina_Bool ewk_frame_init(Evas_Object* o, Evas_Object* view, WebCore::Frame* frame) 1642dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1643dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd, EINA_FALSE); 1644dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!sd->frame) { 1645dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block WebCore::FrameLoaderClientEfl* flc = _ewk_frame_loader_efl_get(frame); 1646dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block flc->setWebFrame(o); 1647dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block sd->frame = frame; 1648dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block sd->view = view; 1649dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block frame->init(); 1650dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return EINA_TRUE; 1651dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 1652dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1653dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ERR("frame %p already set for %p, ignored new %p", 1654dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block sd->frame, o, frame); 1655dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return EINA_FALSE; 1656dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1657dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1658dd8bb3de4f353a81954234999f1fea748aee2ea9Ben MurdochEvas_Object* ewk_frame_child_add(Evas_Object* o, WTF::PassRefPtr<WebCore::Frame> child, const WTF::String& name, const WebCore::KURL& url, const WTF::String& referrer) 1659dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1660dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd, 0); 1661dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block char buf[256]; 1662dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Evas_Object* frame; 1663dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block WebCore::Frame* cf; 1664dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1665dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block frame = ewk_frame_add(sd->base.evas); 1666dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!frame) { 1667dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ERR("Could not create ewk_frame object."); 1668dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return 0; 1669dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 1670dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1671dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block cf = child.get(); 1672dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (cf->tree()) 1673dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block cf->tree()->setName(name); 1674dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block else 1675dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ERR("no tree for child object"); 167628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu sd->frame->tree()->appendChild(child); 1677dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1678dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!ewk_frame_init(frame, sd->view, cf)) { 1679dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_del(frame); 1680dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return 0; 1681dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 1682dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block snprintf(buf, sizeof(buf), "EWK_Frame:child/%s", name.utf8().data()); 1683dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_name_set(frame, buf); 1684dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_smart_member_add(frame, o); 1685dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_show(frame); 1686dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1687dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!cf->page()) 1688dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block goto died; 1689dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 16902fc2651226baac27029e38c9d6ef883fa32084dbSteve Block sd->frame->loader()->loadURLIntoChildFrame(url, referrer, cf); 1691dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!cf->tree()->parent()) 1692dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block goto died; 1693dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1694dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // TODO: announce frame was created? 1695dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return frame; 1696dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1697dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockdied: 1698dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block CRITICAL("does this work: BEGIN"); 1699dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ewk_frame_core_gone(frame); // CONFIRM 1700dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_del(frame); // CONFIRM 1701dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block CRITICAL("does this work: END"); 1702dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return 0; 1703dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1704dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1705dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 1706dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @internal 1707dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Frame was destroyed by loader, remove internal reference. 1708dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 1709dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid ewk_frame_core_gone(Evas_Object* o) 1710dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1711dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block DBG("o=%p", o); 1712dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd); 1713dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block sd->frame = 0; 1714dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1715dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1716dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 1717dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @internal 1718dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Retrieve WebCore::Frame associated with this object. 1719dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1720dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Avoid using this call from outside, add specific ewk_frame_* 1721dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * actions instead. 1722dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 1723dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockWebCore::Frame* ewk_frame_core_get(const Evas_Object* o) 1724dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1725dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd, 0); 1726dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return sd->frame; 1727dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1728dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1729dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1730dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 1731dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @internal 1732e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * Reports a resource will be requested. User may override behavior of webkit by 1733e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * changing values in @param request. 1734e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * 1735e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * @param o Frame. 1736e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * @param request Request details that user may override. Whenever values on 1737e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * this struct changes, it must be properly malloc'd as it will be freed 1738e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * afterwards. 1739e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * 1740e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * Emits signal: "resource,request,willsend" 1741e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke */ 1742e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarkevoid ewk_frame_request_will_send(Evas_Object *o, Ewk_Frame_Resource_Request *request) 1743e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke{ 1744e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke evas_object_smart_callback_call(o, "resource,request,willsend", request); 1745e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke} 1746e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke 1747e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke/** 1748e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * @internal 1749e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * Reports that there's a new resource. 1750e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * 1751e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * @param o Frame. 1752e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * @param request New request details. No changes are allowed to fields. 1753e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * 1754e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * Emits signal: "resource,request,new" 1755e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke */ 1756e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarkevoid ewk_frame_request_assign_identifier(Evas_Object *o, const Ewk_Frame_Resource_Request *request) 1757e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke{ 1758e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke evas_object_smart_callback_call(o, "resource,request,new", (void *)request); 1759e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke} 1760e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke 1761e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke/** 1762e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * @internal 1763e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * Reports that first navigation occurred 1764e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * 1765e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * @param o Frame. 1766e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * 1767e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * Emits signal: "navigation,first" 1768e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke */ 1769e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarkevoid ewk_frame_did_perform_first_navigation(Evas_Object *o) 1770e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke{ 1771e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke evas_object_smart_callback_call(o, "navigation,first", 0); 1772e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke} 1773e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke 1774e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke/** 1775e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * @internal 1776e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * Reports frame will be saved to current state 1777e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * 1778e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * @param o Frame. 1779e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * @param item History item to save details to. 1780e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * 1781e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * Emits signal: "state,save" 1782e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke */ 1783e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarkevoid ewk_frame_view_state_save(Evas_Object *o, WebCore::HistoryItem* item) 1784e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke{ 1785e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke evas_object_smart_callback_call(o, "state,save", 0); 1786e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke} 1787e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke 1788e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke/** 1789e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * @internal 1790dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Reports the frame started loading something. 1791dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1792dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Emits signal: "load,started" with no parameters. 1793dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 1794dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid ewk_frame_load_started(Evas_Object* o) 1795dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1796dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Evas_Object* main_frame; 1797dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block DBG("o=%p", o); 1798dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_smart_callback_call(o, "load,started", 0); 1799dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd); 1800dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ewk_view_load_started(sd->view); 1801dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1802dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block main_frame = ewk_view_frame_main_get(sd->view); 1803dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (main_frame == o) 1804dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ewk_view_frame_main_load_started(sd->view); 1805dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1806dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1807dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 1808dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @internal 1809e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * Reports the frame started provisional load. 1810e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * 1811e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * @param o Frame. 1812e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * 1813e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * Emits signal: "load,provisional" with no parameters. 1814e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke */ 1815e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarkevoid ewk_frame_load_provisional(Evas_Object* o) 1816e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke{ 1817e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke evas_object_smart_callback_call(o, "load,provisional", 0); 1818e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke} 1819e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke 1820e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke/** 1821e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * @internal 1822e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * Reports the frame finished first layout. 1823e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * 1824e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * @param o Frame. 1825e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * 1826e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * Emits signal: "load,firstlayout,finished" with no parameters. 1827e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke */ 1828e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarkevoid ewk_frame_load_firstlayout_finished(Evas_Object *o) 1829e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke{ 1830e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke evas_object_smart_callback_call(o, "load,firstlayout,finished", 0); 1831e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke} 1832e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke 1833e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke/** 1834e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * @internal 1835e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * Reports the frame finished first non empty layout. 1836e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * 1837e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * @param o Frame. 1838e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * 1839e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * Emits signal: "load,nonemptylayout,finished" with no parameters. 1840e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke */ 1841e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarkevoid ewk_frame_load_firstlayout_nonempty_finished(Evas_Object *o) 1842e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke{ 1843e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke evas_object_smart_callback_call(o, "load,nonemptylayout,finished", 0); 1844e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke} 1845e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke 1846e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke/** 1847e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * @internal 1848e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * Reports the loading of a document has finished on frame. 1849e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * 1850e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * @param o Frame. 1851e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * 1852e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * Emits signal: "load,document,finished" with no parameters. 1853e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke */ 1854e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarkevoid ewk_frame_load_document_finished(Evas_Object *o) 1855e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke{ 1856e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke evas_object_smart_callback_call(o, "load,document,finished", 0); 1857e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke} 1858e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke 1859e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke/** 1860e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * @internal 1861dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Reports load finished, optionally with error information. 1862dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1863dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Emits signal: "load,finished" with pointer to Ewk_Frame_Load_Error 1864dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * if any error, or @c NULL if successful load. 1865dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1866dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @note there should notbe any error stuff here, but trying to be 1867dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * compatible with previous WebKit. 1868dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 1869dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid ewk_frame_load_finished(Evas_Object* o, const char* error_domain, int error_code, Eina_Bool is_cancellation, const char* error_description, const char* failing_url) 1870dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1871dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Ewk_Frame_Load_Error buf, *error; 1872dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!error_domain) { 1873dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block DBG("o=%p, success.", o); 1874dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block error = 0; 1875dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } else { 1876dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block DBG("o=%p, error=%s (%d, cancellation=%hhu) \"%s\", url=%s", 1877dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block o, error_domain, error_code, is_cancellation, 1878dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block error_description, failing_url); 1879dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1880dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block buf.domain = error_domain; 1881dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block buf.code = error_code; 1882dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block buf.is_cancellation = is_cancellation; 1883dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block buf.description = error_description; 1884dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block buf.failing_url = failing_url; 1885dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block buf.frame = o; 1886dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block error = &buf; 1887dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 1888dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_smart_callback_call(o, "load,finished", error); 1889dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd); 1890dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ewk_view_load_finished(sd->view, error); 1891dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1892dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1893dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 1894dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @internal 1895dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Reports load failed with error information. 1896dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1897dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Emits signal: "load,error" with pointer to Ewk_Frame_Load_Error. 1898dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 1899dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid ewk_frame_load_error(Evas_Object* o, const char* error_domain, int error_code, Eina_Bool is_cancellation, const char* error_description, const char* failing_url) 1900dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1901dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Ewk_Frame_Load_Error error; 1902dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1903dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block DBG("o=%p, error=%s (%d, cancellation=%hhu) \"%s\", url=%s", 1904dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block o, error_domain, error_code, is_cancellation, 1905dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block error_description, failing_url); 1906dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1907dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN(error_domain); 1908dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1909dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block error.code = error_code; 1910dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block error.is_cancellation = is_cancellation; 1911dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block error.domain = error_domain; 1912dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block error.description = error_description; 1913dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block error.failing_url = failing_url; 1914dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block error.frame = o; 1915dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_smart_callback_call(o, "load,error", &error); 1916dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd); 1917dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ewk_view_load_error(sd->view, &error); 1918dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1919dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1920dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 1921dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @internal 1922dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Reports load progress changed. 1923dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1924dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Emits signal: "load,progress" with pointer to a double from 0.0 to 1.0. 1925dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 1926dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid ewk_frame_load_progress_changed(Evas_Object* o) 1927dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1928dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd); 1929dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN(sd->frame); 1930dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1931dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // TODO: this is per page, there should be a way to have per-frame. 1932dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block double progress = sd->frame->page()->progress()->estimatedProgress(); 1933dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1934dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block DBG("o=%p (p=%0.3f)", o, progress); 1935dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1936dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_smart_callback_call(o, "load,progress", &progress); 1937dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ewk_view_load_progress_changed(sd->view); 1938dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1939dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1940dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1941dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 1942dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @internal 1943dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1944dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Reports contents size changed. 1945dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 1946dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid ewk_frame_contents_size_changed(Evas_Object* o, Evas_Coord w, Evas_Coord h) 1947dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1948dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block DBG("o=%p: %dx%d", o, w, h); 1949dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd); 1950dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (sd->contents_size.w == w && sd->contents_size.h == h) 1951dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return; 1952dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block sd->contents_size.w = w; 1953dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block sd->contents_size.h = h; 1954dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // TODO: update something else internally? 1955dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1956dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Evas_Coord size[2] = {w, h}; 1957dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_smart_callback_call(o, "contents,size,changed", size); 1958dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1959dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1960dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 1961dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @internal 1962dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1963dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Reports title changed. 1964dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 1965dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid ewk_frame_title_set(Evas_Object* o, const char* title) 1966dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1967dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block DBG("o=%p, title=%s", o, title ? title : "(null)"); 1968dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd); 1969dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!eina_stringshare_replace(&sd->title, title)) 1970dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return; 1971dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_smart_callback_call(o, "title,changed", (void*)sd->title); 1972dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1973dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1974dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid ewk_frame_view_create_for_view(Evas_Object* o, Evas_Object* view) 1975dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1976dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block DBG("o=%p, view=%p", o, view); 1977dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd); 1978dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN(sd->frame); 1979dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Evas_Coord w, h; 1980dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1981dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (sd->frame->view()) 1982dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return; 1983dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1984dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_geometry_get(view, 0, 0, &w, &h); 1985dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1986dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block WebCore::IntSize size(w, h); 1987dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block int r, g, b, a; 1988dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block WebCore::Color bg; 1989dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1990dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ewk_view_bg_color_get(view, &r, &g, &b, &a); 1991dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!a) 1992dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block bg = WebCore::Color(0, 0, 0, 0); 1993dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block else if (a == 255) 1994dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block bg = WebCore::Color(r, g, b, a); 1995dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block else 1996dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block bg = WebCore::Color(r * 255 / a, g * 255 / a, b * 255 / a, a); 1997dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1998dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block sd->frame->createView(size, bg, !a, WebCore::IntSize(), false); 1999dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!sd->frame->view()) 2000dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return; 200168513a70bcd92384395513322f1b801e7bf9c729Steve Block 200268513a70bcd92384395513322f1b801e7bf9c729Steve Block const char* theme = ewk_view_theme_get(view); 200368513a70bcd92384395513322f1b801e7bf9c729Steve Block sd->frame->view()->setEdjeTheme(theme); 2004dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block sd->frame->view()->setEvasObject(o); 2005dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 2006dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 2007dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/** 2008dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * @internal 2009dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Reports uri changed and swap internal string reference. 2010dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 2011dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Emits signal: "uri,changed" with new uri as parameter. 2012dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 2013dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockEina_Bool ewk_frame_uri_changed(Evas_Object* o) 2014dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 2015dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd, EINA_FALSE); 2016dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN_VAL(sd->frame, EINA_FALSE); 20176ed1fdfa7999878a811b09cdd647fbeace4353b8Steve Block WTF::CString uri(sd->frame->document()->url().string().utf8()); 2018dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 2019dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block INF("uri=%s", uri.data()); 2020dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!uri.data()) { 2021dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ERR("no uri"); 2022dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return EINA_FALSE; 2023dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 2024dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 2025dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block eina_stringshare_replace(&sd->uri, uri.data()); 2026dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block evas_object_smart_callback_call(o, "uri,changed", (void*)sd->uri); 2027dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return EINA_TRUE; 2028dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 2029dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 2030dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid ewk_frame_force_layout(Evas_Object* o) 2031dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 2032dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block DBG("o=%p", o); 2033dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EWK_FRAME_SD_GET_OR_RETURN(o, sd); 2034dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block EINA_SAFETY_ON_NULL_RETURN(sd->frame); 2035dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block WebCore::FrameView* view = sd->frame->view(); 2036dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (view) 2037dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block view->forceLayout(true); 2038dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 2039dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 2040f486d19d62f1bc33246748b14b14a9dfa617b57fIain MerrickWTF::PassRefPtr<WebCore::Widget> ewk_frame_plugin_create(Evas_Object* o, const WebCore::IntSize& pluginSize, WebCore::HTMLPlugInElement* element, const WebCore::KURL& url, const WTF::Vector<WTF::String>& paramNames, const WTF::Vector<WTF::String>& paramValues, const WTF::String& mimeType, bool loadManually) 2041dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 2042dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return 0; 2043dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 2044