Skip to content

Commit 882458a

Browse files
cdumezwebkit-commit-queue
authored andcommitted
[EFL][WK2] Add toolbar buttons to MiniBrowser
https://bugs.webkit.org/show_bug.cgi?id=98883 Patch by Christophe Dumez <christophe.dumez@intel.com> on 2012-10-10 Reviewed by Kenneth Rohde Christiansen. Source/WebKit2: Add "back,forward,list,changed" signal on the Ewk_View to notify the client when the view's back / forward list has changed. This is useful for the UI to update its back / forward buttons disabled state. * UIProcess/API/efl/ewk_view.cpp: (ewk_view_back_forward_list_changed): * UIProcess/API/efl/ewk_view.h: * UIProcess/API/efl/ewk_view_loader_client.cpp: (didChangeBackForwardList): * UIProcess/API/efl/ewk_view_private.h: Tools: Add toolbar buttons to MiniBrowser to support navigation back / forward, refresh and go to home page. * MiniBrowser/efl/main.c: (_Browser_Window): (on_back_forward_list_changed): (on_back_button_clicked): (on_forward_button_clicked): (on_refresh_button_clicked): (on_home_button_clicked): (create_toolbar_button): (window_create): Canonical link: https://commits.webkit.org/116950@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@130978 268f45cc-cd09-0410-ab3c-d52691b4dbfc
1 parent 9467a91 commit 882458a

7 files changed

Lines changed: 185 additions & 5 deletions

File tree

Source/WebKit2/ChangeLog

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,22 @@
1+
2012-10-10 Christophe Dumez <christophe.dumez@intel.com>
2+
3+
[EFL][WK2] Add toolbar buttons to MiniBrowser
4+
https://bugs.webkit.org/show_bug.cgi?id=98883
5+
6+
Reviewed by Kenneth Rohde Christiansen.
7+
8+
Add "back,forward,list,changed" signal on the Ewk_View
9+
to notify the client when the view's back / forward
10+
list has changed. This is useful for the UI to update
11+
its back / forward buttons disabled state.
12+
13+
* UIProcess/API/efl/ewk_view.cpp:
14+
(ewk_view_back_forward_list_changed):
15+
* UIProcess/API/efl/ewk_view.h:
16+
* UIProcess/API/efl/ewk_view_loader_client.cpp:
17+
(didChangeBackForwardList):
18+
* UIProcess/API/efl/ewk_view_private.h:
19+
120
2012-10-10 Jon Lee <jonlee@apple.com>
221

322
[WK2] Activate plugins when user clicks on snapshot

Source/WebKit2/UIProcess/API/efl/ewk_view.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1519,6 +1519,17 @@ void ewk_view_load_provisional_started(Evas_Object* ewkView)
15191519
evas_object_smart_callback_call(ewkView, "load,provisional,started", 0);
15201520
}
15211521

1522+
/**
1523+
* @internal
1524+
* Reports that the view's back / forward list has changed.
1525+
*
1526+
* Emits signal: "back,forward,list,changed".
1527+
*/
1528+
void ewk_view_back_forward_list_changed(Evas_Object* ewkView)
1529+
{
1530+
evas_object_smart_callback_call(ewkView, "back,forward,list,changed", 0);
1531+
}
1532+
15221533
/**
15231534
* @internal
15241535
* Reports that a navigation policy decision should be taken.

Source/WebKit2/UIProcess/API/efl/ewk_view.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
*
2727
* The following signals (see evas_object_smart_callback_add()) are emitted:
2828
*
29+
* - "back,forward,list,changed", void: reports that the view's back / forward list had changed.
2930
* - "close,window", void: window is closed.
3031
* - "create,window", Evas_Object**: a new window is created.
3132
* - "download,cancelled", Ewk_Download_Job*: reports that a download was effectively cancelled.

Source/WebKit2/UIProcess/API/efl/ewk_view_loader_client.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,7 @@ static void didChangeBackForwardList(WKPageRef, WKBackForwardListItemRef addedIt
130130
ASSERT(ewkView);
131131

132132
ewk_back_forward_list_changed(ewk_view_back_forward_list_get(ewkView), addedItem, removedItems);
133+
ewk_view_back_forward_list_changed(ewkView);
133134
}
134135

135136
static void didSameDocumentNavigationForFrame(WKPageRef, WKFrameRef frame, WKSameDocumentNavigationType, WKTypeRef, const void* clientInfo)

Source/WebKit2/UIProcess/API/efl/ewk_view_private.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ void ewk_view_resource_request_sent(Evas_Object* ewkView, uint64_t resourceIdent
8484
void ewk_view_text_found(Evas_Object* ewkView, unsigned int matchCount);
8585
void ewk_view_url_update(Evas_Object* ewkView);
8686
void ewk_view_contents_size_changed(const Evas_Object* ewkView, const WebCore::IntSize&);
87+
void ewk_view_back_forward_list_changed(Evas_Object* ewkView);
8788

8889
Evas_Object* ewk_view_base_add(Evas* canvas, WKContextRef, WKPageGroupRef);
8990

Tools/ChangeLog

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,24 @@
1+
2012-10-10 Christophe Dumez <christophe.dumez@intel.com>
2+
3+
[EFL][WK2] Add toolbar buttons to MiniBrowser
4+
https://bugs.webkit.org/show_bug.cgi?id=98883
5+
6+
Reviewed by Kenneth Rohde Christiansen.
7+
8+
Add toolbar buttons to MiniBrowser to support
9+
navigation back / forward, refresh and go
10+
to home page.
11+
12+
* MiniBrowser/efl/main.c:
13+
(_Browser_Window):
14+
(on_back_forward_list_changed):
15+
(on_back_button_clicked):
16+
(on_forward_button_clicked):
17+
(on_refresh_button_clicked):
18+
(on_home_button_clicked):
19+
(create_toolbar_button):
20+
(window_create):
21+
122
2012-10-10 Andy Estes <aestes@apple.com>
223

324
Fix the Lion build after r130948.

Tools/MiniBrowser/efl/main.c

Lines changed: 131 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ static const int DEFAULT_WIDTH = 800;
2929
static const int DEFAULT_HEIGHT = 600;
3030
static const char DEFAULT_URL[] = "http://www.google.com/";
3131
static const char APP_NAME[] = "EFL MiniBrowser";
32+
static const int TOOL_BAR_ICON_SIZE = 24;
33+
static const int TOOL_BAR_BUTTON_SIZE = 32;
3234

3335
#define info(format, args...) \
3436
do { \
@@ -45,6 +47,8 @@ typedef struct _Browser_Window {
4547
Evas_Object *window;
4648
Evas_Object *webview;
4749
Evas_Object *url_bar;
50+
Evas_Object *back_button;
51+
Evas_Object *forward_button;
4852
} Browser_Window;
4953

5054
static const Ecore_Getopt options = {
@@ -205,6 +209,16 @@ on_url_changed(void *user_data, Evas_Object *webview, void *event_info)
205209
elm_entry_entry_set(window->url_bar, ewk_view_url_get(window->webview));
206210
}
207211

212+
static void
213+
on_back_forward_list_changed(void *user_data, Evas_Object *webview, void *event_info)
214+
{
215+
Browser_Window *window = (Browser_Window *)user_data;
216+
217+
/* Update navigation buttons state */
218+
elm_object_disabled_set(window->back_button, !ewk_view_back_possible(webview));
219+
elm_object_disabled_set(window->forward_button, !ewk_view_forward_possible(webview));
220+
}
221+
208222
static void
209223
on_new_window(void *user_data, Evas_Object *webview, void *event_info)
210224
{
@@ -322,12 +336,72 @@ on_url_bar_clicked(void *user_data, Evas_Object *url_bar, void *event_info)
322336
elm_object_focus_set(url_bar, EINA_TRUE);
323337
}
324338

339+
static void
340+
on_back_button_clicked(void *user_data, Evas_Object *back_button, void *event_info)
341+
{
342+
Browser_Window *app_data = (Browser_Window *)user_data;
343+
344+
ewk_view_back(app_data->webview);
345+
/* Update back button state */
346+
elm_object_disabled_set(back_button, !ewk_view_back_possible(app_data->webview));
347+
}
348+
349+
static void
350+
on_forward_button_clicked(void *user_data, Evas_Object *forward_button, void *event_info)
351+
{
352+
Browser_Window *app_data = (Browser_Window *)user_data;
353+
354+
ewk_view_forward(app_data->webview);
355+
/* Update forward button state */
356+
elm_object_disabled_set(forward_button, !ewk_view_forward_possible(app_data->webview));
357+
}
358+
359+
static void
360+
on_refresh_button_clicked(void *user_data, Evas_Object *refresh_button, void *event_info)
361+
{
362+
Browser_Window *app_data = (Browser_Window *)user_data;
363+
364+
Evas *evas = evas_object_evas_get(refresh_button);
365+
Eina_Bool ctrlPressed = evas_key_modifier_is_set(evas_key_modifier_get(evas), "Control");
366+
if (ctrlPressed) {
367+
info("Reloading and bypassing cache...\n");
368+
ewk_view_reload_bypass_cache(app_data->webview);
369+
} else {
370+
info("Reloading...\n");
371+
ewk_view_reload(app_data->webview);
372+
}
373+
}
374+
375+
static void
376+
on_home_button_clicked(void *user_data, Evas_Object *home_button, void *event_info)
377+
{
378+
Browser_Window *app_data = (Browser_Window *)user_data;
379+
380+
ewk_view_url_set(app_data->webview, DEFAULT_URL);
381+
}
382+
325383
static void
326384
on_window_deletion(void *user_data, Evas_Object *window, void *event_info)
327385
{
328386
window_close(browser_window_find(window));
329387
}
330388

389+
static Evas_Object *
390+
create_toolbar_button(Evas_Object *window, const char *icon_name)
391+
{
392+
Evas_Object *button = elm_button_add(window);
393+
394+
Evas_Object *icon = elm_icon_add(window);
395+
elm_icon_standard_set(icon, icon_name);
396+
evas_object_size_hint_max_set(icon, TOOL_BAR_ICON_SIZE, TOOL_BAR_ICON_SIZE);
397+
evas_object_color_set(icon, 44, 44, 102, 128);
398+
evas_object_show(icon);
399+
elm_object_part_content_set(button, "icon", icon);
400+
evas_object_size_hint_min_set(button, TOOL_BAR_BUTTON_SIZE, TOOL_BAR_BUTTON_SIZE);
401+
402+
return button;
403+
}
404+
331405
static Browser_Window *window_create(const char *url)
332406
{
333407
Browser_Window *app_data = malloc(sizeof(Browser_Window));
@@ -337,28 +411,79 @@ static Browser_Window *window_create(const char *url)
337411
}
338412

339413
/* Create window */
340-
app_data->window = elm_win_util_standard_add("minibrowser-window", APP_NAME);
414+
app_data->window = elm_win_add(NULL, "minibrowser-window", ELM_WIN_BASIC);
415+
elm_win_title_set(app_data->window, APP_NAME);
341416
evas_object_smart_callback_add(app_data->window, "delete,request", on_window_deletion, &app_data);
342417

418+
/* Create window background */
419+
Evas_Object *bg = elm_bg_add(app_data->window);
420+
elm_bg_color_set(bg, 193, 192, 191);
421+
evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
422+
elm_win_resize_object_add(app_data->window, bg);
423+
evas_object_show(bg);
424+
343425
/* Create vertical layout */
344426
Evas_Object *vertical_layout = elm_box_add(app_data->window);
345427
elm_box_padding_set(vertical_layout, 0, 2);
346428
evas_object_size_hint_weight_set(vertical_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
347429
elm_win_resize_object_add(app_data->window, vertical_layout);
348430
evas_object_show(vertical_layout);
349431

432+
/* Create horizontal layout for top bar */
433+
Evas_Object *horizontal_layout = elm_box_add(app_data->window);
434+
elm_box_horizontal_set(horizontal_layout, EINA_TRUE);
435+
evas_object_size_hint_weight_set(horizontal_layout, EVAS_HINT_EXPAND, 0.0);
436+
evas_object_size_hint_align_set(horizontal_layout, EVAS_HINT_FILL, 0.0);
437+
elm_box_pack_end(vertical_layout, horizontal_layout);
438+
evas_object_show(horizontal_layout);
439+
440+
/* Create Back button */
441+
app_data->back_button = create_toolbar_button(app_data->window, "arrow_left");
442+
evas_object_smart_callback_add(app_data->back_button, "clicked", on_back_button_clicked, app_data);
443+
elm_object_disabled_set(app_data->back_button, EINA_TRUE);
444+
evas_object_size_hint_weight_set(app_data->back_button, 0.0, EVAS_HINT_EXPAND);
445+
evas_object_size_hint_align_set(app_data->back_button, 0.0, 0.5);
446+
elm_box_pack_end(horizontal_layout, app_data->back_button);
447+
evas_object_show(app_data->back_button);
448+
449+
/* Create Forward button */
450+
app_data->forward_button = create_toolbar_button(app_data->window, "arrow_right");
451+
evas_object_smart_callback_add(app_data->forward_button, "clicked", on_forward_button_clicked, app_data);
452+
elm_object_disabled_set(app_data->forward_button, EINA_TRUE);
453+
evas_object_size_hint_weight_set(app_data->forward_button, 0.0, EVAS_HINT_EXPAND);
454+
evas_object_size_hint_align_set(app_data->forward_button, 0.0, 0.5);
455+
elm_box_pack_end(horizontal_layout, app_data->forward_button);
456+
evas_object_show(app_data->forward_button);
457+
350458
/* Create URL bar */
351459
app_data->url_bar = elm_entry_add(app_data->window);
460+
elm_entry_scrollable_set(app_data->url_bar, EINA_TRUE);
352461
elm_entry_single_line_set(app_data->url_bar, EINA_TRUE);
353462
elm_entry_cnp_mode_set(app_data->url_bar, ELM_CNP_MODE_PLAINTEXT);
354-
elm_entry_text_style_user_push(app_data->url_bar, "DEFAULT='font_size=16'");
463+
elm_entry_text_style_user_push(app_data->url_bar, "DEFAULT='font_size=18'");
355464
evas_object_smart_callback_add(app_data->url_bar, "activated", on_url_bar_activated, app_data);
356465
evas_object_smart_callback_add(app_data->url_bar, "clicked", on_url_bar_clicked, app_data);
357-
evas_object_size_hint_weight_set(app_data->url_bar, EVAS_HINT_EXPAND, 0.0);
358-
evas_object_size_hint_align_set(app_data->url_bar, EVAS_HINT_FILL, 0.0);
359-
elm_box_pack_end(vertical_layout, app_data->url_bar);
466+
evas_object_size_hint_weight_set(app_data->url_bar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
467+
evas_object_size_hint_align_set(app_data->url_bar, EVAS_HINT_FILL, EVAS_HINT_FILL);
468+
elm_box_pack_end(horizontal_layout, app_data->url_bar);
360469
evas_object_show(app_data->url_bar);
361470

471+
/* Create Refresh button */
472+
Evas_Object *refresh_button = create_toolbar_button(app_data->window, "refresh");
473+
evas_object_smart_callback_add(refresh_button, "clicked", on_refresh_button_clicked, app_data);
474+
evas_object_size_hint_weight_set(refresh_button, 0.0, EVAS_HINT_EXPAND);
475+
evas_object_size_hint_align_set(refresh_button, 1.0, 0.5);
476+
elm_box_pack_end(horizontal_layout, refresh_button);
477+
evas_object_show(refresh_button);
478+
479+
/* Create Home button */
480+
Evas_Object *home_button = create_toolbar_button(app_data->window, "home");
481+
evas_object_smart_callback_add(home_button, "clicked", on_home_button_clicked, app_data);
482+
evas_object_size_hint_weight_set(home_button, 0.0, EVAS_HINT_EXPAND);
483+
evas_object_size_hint_align_set(home_button, 1.0, 0.5);
484+
elm_box_pack_end(horizontal_layout, home_button);
485+
evas_object_show(home_button);
486+
362487
/* Create webview */
363488
Evas *evas = evas_object_evas_get(app_data->window);
364489
app_data->webview = ewk_view_add(evas);
@@ -377,6 +502,7 @@ static Browser_Window *window_create(const char *url)
377502
evas_object_smart_callback_add(app_data->webview, "load,progress", on_progress, app_data);
378503
evas_object_smart_callback_add(app_data->webview, "title,changed", on_title_changed, app_data);
379504
evas_object_smart_callback_add(app_data->webview, "url,changed", on_url_changed, app_data);
505+
evas_object_smart_callback_add(app_data->webview, "back,forward,list,changed", on_back_forward_list_changed, app_data);
380506

381507
evas_object_event_callback_add(app_data->webview, EVAS_CALLBACK_KEY_DOWN, on_key_down, app_data);
382508
evas_object_event_callback_add(app_data->webview, EVAS_CALLBACK_MOUSE_DOWN, on_mouse_down, app_data);

0 commit comments

Comments
 (0)