[webkit-gtk] Handling the run-file-chooser signal
Mario Sanchez Prada
mario.prada at samsung.com
Tue Nov 5 01:22:08 PST 2013
Hi,
> -----Original Message-----
> [...]
> I've made some progress - it appears that initially I wasn't waiting
> long enough for the page to load and draw. I am now using a function
> that spins in the event loop for X seconds (which I want anyway to pace
> my interaction with the web servers), and that got things to the point
> where I can "click" on the control and get the run-file-chooser signal
> to fire.
Ah, yes... you need to wait for the web page to load before you can use that
signal, that's right.
> I defined my handler as such:
>
> $view->signal_connect('run-file-chooser' => sub {
> my ($view, $FileChooserRequest) = @_;
>
> print "Inside run-file-chooser handler\n";
>
> return('/home/me/test.txt');
> });
>
> I see my text and and this keeps the native file chooser from
> appearing, and doesn't raise any errors -- however I don't see the
> input element update with the file name like I expect. After I send the
> click event I go into GTK events for X seconds loop, so this should not
> be another timing issue.
>
> I am wondering if I am returning the right thing, or if I'm supposed to
> call a method to set the file list and then return success or failure.
> Looking at the C version of the docs it appears I should return an
> array of file names. Does anyone have any insights?
So, first of all, I'm not a perl guy so I don't know exactly how you are
supposed to use the API in there. However, the code snippet above seems a
bit strange to me, as I don't think you're doing the right thing.
In other words, I don't think returning an string with the path is going to
do anything unless you have something underneath doing some magical
translation, which I see unlikely :)
What you have to do however, is to use the API defined in
WebKitFileChooserRequest, which in the C version is as follows:
WEBKIT_API const gchar * const *
webkit_file_chooser_request_get_mime_types
(WebKitFileChooserRequest *request);
WEBKIT_API GtkFileFilter *
webkit_file_chooser_request_get_mime_types_filter
(WebKitFileChooserRequest *request);
WEBKIT_API gboolean
webkit_file_chooser_request_get_select_multiple
(WebKitFileChooserRequest *request);
WEBKIT_API void
webkit_file_chooser_request_select_files
(WebKitFileChooserRequest *request,
const gchar * const
*files);
WEBKIT_API const gchar * const *
webkit_file_chooser_request_get_selected_files
(WebKitFileChooserRequest *request);
Basically, you probably want to use the webkit_file_chooser_request_get_*()
functions in your callback above to define how you want to show a file
chooser dialog (or whatever other method you want to use to select paths).
Then, once you have selected the interesting paths through that
dialog/whatever, you can tell WebCore that you actually want to "select"
them by using webkit_file_chooser_request_select_files().
You can see a good example of how to use this in
Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp: just search for
webkitWebViewRunFileChooser(), which is the default handler provided by
WebKit2GTK, and fileChooserDialogResponseCallback(), which is the callback
for the used GtkFileChooserDialog, where
webkit_file_chooser_request_select_files() is set.
Of course, you need to translate all this to Perl jargon, but shouldn't be
too hard, I suppose.
Hope this helps,
Mario
More information about the webkit-gtk
mailing list