2010-06-25 Lucas De Marchi <lucas.demarchi@profusion.mobi>
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 25 Jun 2010 11:28:03 +0000 (11:28 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 25 Jun 2010 11:28:03 +0000 (11:28 +0000)
        Reviewed by Kenneth Rohde Christiansen.

        [EFL] Implement runOpenPanel method. The interface with browser was
        already implemented. Now we are actually calling it.
        https://bugs.webkit.org/show_bug.cgi?id=40923

        * efl/WebCoreSupport/ChromeClientEfl.cpp:
        (WebCore::ChromeClientEfl::runOpenPanel): implement method.
        * efl/ewk/ewk_private.h: export to WebCoreSupport the needed method

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@61848 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebKit/ChangeLog
WebKit/efl/WebCoreSupport/ChromeClientEfl.cpp
WebKit/efl/ewk/ewk_private.h

index 6ae918a..c11009e 100644 (file)
@@ -1,3 +1,15 @@
+2010-06-25  Lucas De Marchi  <lucas.demarchi@profusion.mobi>
+
+        Reviewed by Kenneth Rohde Christiansen.
+
+        [EFL] Implement runOpenPanel method. The interface with browser was
+        already implemented. Now we are actually calling it.
+        https://bugs.webkit.org/show_bug.cgi?id=40923
+
+        * efl/WebCoreSupport/ChromeClientEfl.cpp:
+        (WebCore::ChromeClientEfl::runOpenPanel): implement method.
+        * efl/ewk/ewk_private.h: export to WebCoreSupport the needed method
+
 2010-06-24  Jer Noble  <jer.noble@apple.com>
 
         Reviewed by Eric Carlson.
index 7a661e8..8ec65b9 100644 (file)
@@ -38,6 +38,7 @@
 #include "DatabaseTracker.h"
 #endif
 #include "EWebKit.h"
+#include "FileChooser.h"
 #include "FloatRect.h"
 #include "FrameLoader.h"
 #include "FrameLoaderClientEfl.h"
@@ -384,7 +385,35 @@ void ChromeClientEfl::exceededDatabaseQuota(Frame* frame, const String& database
 
 void ChromeClientEfl::runOpenPanel(Frame* frame, PassRefPtr<FileChooser> prpFileChooser)
 {
-    notImplemented();
+    RefPtr<FileChooser> chooser = prpFileChooser;
+    bool confirm;
+    Eina_List* selectedFilenames = 0;
+    Eina_List* suggestedFilenames = 0;
+    void* filename;
+    Vector<String> filenames;
+
+    for (unsigned i = 0; i < chooser->filenames().size(); i++) {
+        CString str = chooser->filenames()[i].utf8();
+        filename = strdup(str.data());
+        suggestedFilenames = eina_list_append(suggestedFilenames, filename);
+    }
+
+    confirm = ewk_view_run_open_panel(m_view, kit(frame), chooser->allowsMultipleFiles(), suggestedFilenames, &selectedFilenames);
+    EINA_LIST_FREE(suggestedFilenames, filename)
+        free(filename);
+
+    if (!confirm)
+        return;
+
+    EINA_LIST_FREE(selectedFilenames, filename) {
+        filenames.append((char *)filename);
+        free(filename);
+    }
+
+    if (chooser->allowsMultipleFiles())
+        chooser->chooseFiles(filenames);
+    else
+        chooser->chooseFile(filenames[0]);
 }
 
 void ChromeClientEfl::formStateDidChange(const Node*)
index 3ad65fc..facd6aa 100644 (file)
@@ -84,6 +84,8 @@ Eina_Bool        ewk_view_run_javascript_prompt(Evas_Object *o, Evas_Object *fra
 Eina_Bool        ewk_view_should_interrupt_javascript(Evas_Object *o);
 uint64_t         ewk_view_exceeded_database_quota(Evas_Object *o, Evas_Object *frame, const char *databaseName, uint64_t current_size, uint64_t expected_size);
 
+Eina_Bool        ewk_view_run_open_panel(Evas_Object *o, Evas_Object *frame, Eina_Bool allows_multiple_files, const Eina_List *suggested_filenames, Eina_List **selected_filenames);
+
 void             ewk_view_repaint(Evas_Object *o, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h);
 void             ewk_view_scroll(Evas_Object *o, Evas_Coord dx, Evas_Coord dy, Evas_Coord sx, Evas_Coord sy, Evas_Coord sw, Evas_Coord sh, Evas_Coord cx, Evas_Coord cy, Evas_Coord cw, Evas_Coord ch, Eina_Bool main_frame);
 WebCore::Page   *ewk_view_core_page_get(const Evas_Object *o);