⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 130620 in webkit


Ignore:
Timestamp:
Oct 8, 2012, 12:40:58 AM (14 years ago)
Author:
commit-queue@webkit.org
Message:

[EFL][WK2] Support multiple window creation for MiniBrowser
​https://bugs.webkit.org/show_bug.cgi?id=97884

Patch by Jinwoo Song <​jinwoo7.song@samsung.com> on 2012-10-08
Reviewed by Kenneth Rohde Christiansen.

Implement the multiple window creation for MiniBrowser and bind the 'F9' key for opening a new window.
Also, refactored MiniBrowser codes according to EFL coding style.

  • MiniBrowser/efl/main.c:

(_Browser_Window):
(window_free):
(main_signal_exit):
(on_ecore_evas_delete):
(on_ecore_evas_resize):
(on_key_down):
(on_title_changed):
(on_url_changed):
(on_progress):
(window_create):
(main):

Location:
trunk/Tools
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Tools/ChangeLog

    r130617 r130620  
     12012-10-08  Jinwoo Song  <jinwoo7.song@samsung.com>
     2
     3        [EFL][WK2] Support multiple window creation for MiniBrowser
     4        https://bugs.webkit.org/show_bug.cgi?id=97884
     5
     6        Reviewed by Kenneth Rohde Christiansen.
     7
     8        Implement the multiple window creation for MiniBrowser and bind the 'F9' key for opening a new window.
     9        Also, refactored MiniBrowser codes according to EFL coding style.
     10
     11        * MiniBrowser/efl/main.c:
     12        (_Browser_Window):
     13        (window_free):
     14        (main_signal_exit):
     15        (on_ecore_evas_delete):
     16        (on_ecore_evas_resize):
     17        (on_key_down):
     18        (on_title_changed):
     19        (on_url_changed):
     20        (on_progress):
     21        (window_create):
     22        (main):
     23
    1242012-10-07  Seokju Kwon  <seokju.kwon@samsung.com>
    225
  • trunk/Tools/MiniBrowser/efl/main.c

    r130517 r130620  
    3838
    3939static int verbose = 1;
    40 
    41 typedef struct _MiniBrowser {
     40static Eina_List *windows = NULL;
     41static char *evas_engine_name = NULL;
     42
     43typedef struct _Browser_Window {
    4244    Ecore_Evas *ee;
    4345    Evas *evas;
    44     Evas_Object *browser;
     46    Evas_Object *webview;
    4547    Url_Bar *url_bar;
    46 } MiniBrowser;
    47 
    48 MiniBrowser *browser;
     48} Browser_Window;
    4949
    5050static const Ecore_Getopt options = {
    … …  
    7373};
    7474
     75static Browser_Window *window_create(const char *url, Eina_Bool frame_flattening);
     76
     77static Browser_Window *browser_window_find(Ecore_Evas *ee)
     78{
     79    Eina_List *l;
     80    void *data;
     81
     82    if (!ee)
     83        return NULL;
     84
     85    EINA_LIST_FOREACH(windows, l, data) {
     86        Browser_Window *window = (Browser_Window *)data;
     87        if (window->ee == ee)
     88            return window;
     89    }
     90    return NULL;
     91}
     92
     93static void window_free(Browser_Window *window)
     94{
     95    url_bar_del(window->url_bar);
     96    ecore_evas_free(window->ee);
     97    free(window);
     98}
     99
    75100static Eina_Bool main_signal_exit(void *data, int ev_type, void *ev)
    76101{
     102    Browser_Window *window;
     103    EINA_LIST_FREE(windows, window)
     104        window_free(window);
     105
    77106    ecore_main_loop_quit();
    78107    return EINA_TRUE;
    79108}
    80109
    81 static void closeWindow(Ecore_Evas *ee)
    82 {
    83     ecore_main_loop_quit();
     110static void on_ecore_evas_delete(Ecore_Evas *ee)
     111{
     112    Browser_Window *window = browser_window_find(ee);
     113
     114    window_free(window);
     115    windows = eina_list_remove(windows, window);
     116
     117    if (!windows)
     118        ecore_main_loop_quit();
    84119}
    85120
    86121static void on_ecore_evas_resize(Ecore_Evas *ee)
    87122{
     123    Browser_Window *window;
    88124    Evas_Object *webview;
    89125    int w, h;
    90126
     127    window = browser_window_find(ee);
     128    if (!window)
     129        return;
     130
    91131    ecore_evas_geometry_get(ee, NULL, NULL, &w, &h);
    92132
    93133    /* Resize URL bar */
    94     url_bar_width_set(browser->url_bar, w);
    95 
    96     webview = evas_object_name_find(ecore_evas_get(ee), "browser");
    97     evas_object_move(webview, 0, URL_BAR_HEIGHT);
    98     evas_object_resize(webview, w, h - URL_BAR_HEIGHT);
     134    url_bar_width_set(window->url_bar, w);
     135
     136    evas_object_move(window->webview, 0, URL_BAR_HEIGHT);
     137    evas_object_resize(window->webview, w, h - URL_BAR_HEIGHT);
    99138}
    100139
    … …  
    122161        ewk_view_setting_encoding_custom_set(obj, encodings[currentEncoding]);
    123162    } else if (!strcmp(ev->key, "F5")) {
    124             info("Reload (F5) was pressed, reloading.\n");
    125             ewk_view_reload(obj);
     163        info("Reload (F5) was pressed, reloading.\n");
     164        ewk_view_reload(obj);
    126165    } else if (!strcmp(ev->key, "F6")) {
    127             info("Stop (F6) was pressed, stop loading.\n");
    128             ewk_view_stop(obj);
     166        info("Stop (F6) was pressed, stop loading.\n");
     167        ewk_view_stop(obj);
     168    } else if (!strcmp(ev->key, "F9")) {
     169        info("Create new window (F9) was pressed.\n");
     170        Browser_Window *window = window_create(DEFAULT_URL, EINA_FALSE);
     171        windows = eina_list_append(windows, window);
    129172    }
    130173}
    … …  
    164207on_title_changed(void *user_data, Evas_Object *webview, void *event_info)
    165208{
    166     MiniBrowser *app = (MiniBrowser *)user_data;
     209    Browser_Window *window = (Browser_Window *)user_data;
    167210    const char *title = (const char *)event_info;
    168211
    169     title_set(app->ee, title, 100);
     212    title_set(window->ee, title, 100);
    170213}
    171214
    … …  
    173216on_url_changed(void *user_data, Evas_Object *webview, void *event_info)
    174217{
    175     MiniBrowser *app = (MiniBrowser *)user_data;
    176     url_bar_url_set(app->url_bar, ewk_view_uri_get(app->browser));
     218    Browser_Window *window = (Browser_Window *)user_data;
     219    url_bar_url_set(window->url_bar, ewk_view_uri_get(window->webview));
    177220}
    178221
    … …  
    180223on_progress(void *user_data, Evas_Object *webview, void *event_info)
    181224{
    182     MiniBrowser *app = (MiniBrowser *)user_data;
     225    Browser_Window *window = (Browser_Window *)user_data;
    183226    double progress = *(double *)event_info;
    184227
    185     title_set(app->ee, ewk_view_title_get(app->browser), progress * 100);
     228    title_set(window->ee, ewk_view_title_get(window->webview), progress * 100);
    186229}
    187230
    … …  
    250293}
    251294
    252 static MiniBrowser *browserCreate(const char *url, const char *engine, Eina_Bool frame_flattening)
    253 {
    254     MiniBrowser *app = malloc(sizeof(MiniBrowser));
    255 
    256     app->ee = ecore_evas_new(engine, 0, 0, DEFAULT_WIDTH, DEFAULT_HEIGHT, 0);
    257     if (!app->ee)
    258         return 0;
    259 
    260     ecore_evas_title_set(app->ee, APP_NAME);
    261     ecore_evas_callback_resize_set(app->ee, on_ecore_evas_resize);
    262     ecore_evas_borderless_set(app->ee, 0);
    263     ecore_evas_show(app->ee);
    264     ecore_evas_callback_delete_request_set(app->ee, closeWindow);
    265 
    266     app->evas = ecore_evas_get(app->ee);
     295static Browser_Window *window_create(const char *url, Eina_Bool frame_flattening)
     296{
     297    Browser_Window *window = malloc(sizeof(Browser_Window));
     298    if (!window) {
     299        info("ERROR: could not create browser window.\n");
     300        return NULL;
     301    }
     302
     303    window->ee = ecore_evas_new(evas_engine_name, 0, 0, DEFAULT_WIDTH, DEFAULT_HEIGHT, 0);
     304    if (!window->ee) {
     305        info("ERROR: could not construct ecore-evas.\n");
     306        free(window);
     307        return NULL;
     308    }
     309
     310    ecore_evas_title_set(window->ee, APP_NAME);
     311    ecore_evas_callback_resize_set(window->ee, on_ecore_evas_resize);
     312    ecore_evas_borderless_set(window->ee, 0);
     313    ecore_evas_show(window->ee);
     314    ecore_evas_callback_delete_request_set(window->ee, on_ecore_evas_delete);
     315
     316    window->evas = ecore_evas_get(window->ee);
     317    if (!window->evas) {
     318        info("ERROR: could not get evas from evas-ecore.\n");
     319        free(window);
     320        return NULL;
     321    }
    267322
    268323    /* Create webview */
    269     app->browser = ewk_view_add(app->evas);
    270     ewk_view_theme_set(app->browser, THEME_DIR"/default.edj");
    271     ewk_settings_enable_frame_flattening_set(ewk_view_settings_get(app->browser), frame_flattening);
    272     evas_object_name_set(app->browser, "browser");
    273 
    274     Ewk_Settings *settings = ewk_view_settings_get(app->browser);
     324    window->webview = ewk_view_add(window->evas);
     325    ewk_view_theme_set(window->webview, THEME_DIR"/default.edj");
     326    ewk_settings_enable_frame_flattening_set(ewk_view_settings_get(window->webview), frame_flattening);
     327
     328    Ewk_Settings *settings = ewk_view_settings_get(window->webview);
    275329    ewk_settings_file_access_from_file_urls_allowed_set(settings, EINA_TRUE);
    276330
    277     evas_object_smart_callback_add(app->browser, "download,failed", on_download_failed, app);
    278     evas_object_smart_callback_add(app->browser, "download,finished", on_download_finished, app);
    279     evas_object_smart_callback_add(app->browser, "download,request", on_download_request, app);
    280     evas_object_smart_callback_add(app->browser, "load,error", on_error, app);
    281     evas_object_smart_callback_add(app->browser, "load,progress", on_progress, app);
    282     evas_object_smart_callback_add(app->browser, "title,changed", on_title_changed, app);
    283     evas_object_smart_callback_add(app->browser, "uri,changed", on_url_changed, app);
    284 
    285     evas_object_event_callback_add(app->browser, EVAS_CALLBACK_KEY_DOWN, on_key_down, app);
    286     evas_object_event_callback_add(app->browser, EVAS_CALLBACK_MOUSE_DOWN, on_mouse_down, app);
    287 
    288     evas_object_size_hint_weight_set(app->browser, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
    289     evas_object_move(app->browser, 0, URL_BAR_HEIGHT);
    290     evas_object_resize(app->browser, DEFAULT_WIDTH, DEFAULT_HEIGHT - URL_BAR_HEIGHT);
    291     evas_object_show(app->browser);
    292     evas_object_focus_set(app->browser, EINA_TRUE);
    293 
    294     app->url_bar = url_bar_add(app->browser, DEFAULT_WIDTH);
    295 
    296     ewk_view_uri_set(app->browser, url);
    297 
    298     return app;
     331    evas_object_smart_callback_add(window->webview, "download,failed", on_download_failed, window);
     332    evas_object_smart_callback_add(window->webview, "download,finished", on_download_finished, window);
     333    evas_object_smart_callback_add(window->webview, "download,request", on_download_request, window);
     334    evas_object_smart_callback_add(window->webview, "load,error", on_error, window);
     335    evas_object_smart_callback_add(window->webview, "load,progress", on_progress, window);
     336    evas_object_smart_callback_add(window->webview, "title,changed", on_title_changed, window);
     337    evas_object_smart_callback_add(window->webview, "uri,changed", on_url_changed, window);
     338
     339    evas_object_event_callback_add(window->webview, EVAS_CALLBACK_KEY_DOWN, on_key_down, window);
     340    evas_object_event_callback_add(window->webview, EVAS_CALLBACK_MOUSE_DOWN, on_mouse_down, window);
     341
     342    evas_object_size_hint_weight_set(window->webview, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
     343    evas_object_move(window->webview, 0, URL_BAR_HEIGHT);
     344    evas_object_resize(window->webview, DEFAULT_WIDTH, DEFAULT_HEIGHT - URL_BAR_HEIGHT);
     345    evas_object_show(window->webview);
     346    evas_object_focus_set(window->webview, EINA_TRUE);
     347
     348    window->url_bar = url_bar_add(window->webview, DEFAULT_WIDTH);
     349
     350    ewk_view_uri_set(window->webview, url);
     351
     352    return window;
    299353}
    300354
    … …  
    302356{
    303357    int args = 1;
    304     char *engine = NULL;
    305358    unsigned char quitOption = 0;
     359    Browser_Window *window;
    306360
    307361    Eina_Bool frame_flattening = EINA_FALSE;
    308362
    309363    Ecore_Getopt_Value values[] = {
    310         ECORE_GETOPT_VALUE_STR(engine),
     364        ECORE_GETOPT_VALUE_STR(evas_engine_name),
    311365        ECORE_GETOPT_VALUE_BOOL(quitOption),
    312366        ECORE_GETOPT_VALUE_BOOL(frame_flattening),
    … …  
    331385    if (args < argc) {
    332386        char *url = url_from_user_input(argv[args]);
    333         browser = browserCreate(url, engine, frame_flattening);
     387        window = window_create(url, frame_flattening);
    334388        free(url);
    335389    } else
    336         browser = browserCreate(DEFAULT_URL, engine, frame_flattening);
    337 
    338     if (!browser)
    339         return quit(EINA_FALSE, "ERROR: could not create browser.\n");
     390        window = window_create(DEFAULT_URL, frame_flattening);
     391
     392    if (!window)
     393        return quit(EINA_FALSE, "ERROR: could not create browser window.\n");
     394
     395    windows = eina_list_append(windows, window);
    340396
    341397    Ecore_Event_Handler *handle = ecore_event_handler_add(ECORE_EVENT_SIGNAL_EXIT, main_signal_exit, 0);
    … …  
    343399    ecore_main_loop_begin();
    344400
    345     url_bar_del(browser->url_bar);
    346401    ecore_event_handler_del(handle);
    347     ecore_evas_free(browser->ee);
    348     free(browser);
    349402
    350403    return quit(EINA_TRUE, NULL);
Note: See TracChangeset for help on using the changeset viewer.