--- a/mozilla-kde.patch Tue Nov 20 21:15:58 2012 +0100
+++ b/mozilla-kde.patch Mon Nov 26 12:13:13 2012 +0100
@@ -3106,27 +3106,40 @@
mFilters.AppendElement(filter);
mFilterNames.AppendElement(name);
-@@ -369,16 +373,19 @@ nsFilePicker::GetFiles(nsISimpleEnumerat
- return NS_ERROR_FAILURE;
- }
+@@ -388,16 +392,32 @@ nsFilePicker::Show(int16_t *aReturn)
NS_IMETHODIMP
- nsFilePicker::Show(int16_t *aReturn)
+ nsFilePicker::Open(nsIFilePickerShownCallback *aCallback)
{
- NS_ENSURE_ARG_POINTER(aReturn);
+ // Can't show two dialogs concurrently with the same filepicker
+ if (mRunning)
+ return NS_ERROR_NOT_AVAILABLE;
-+ if( nsKDEUtils::kdeSupport())
-+ return kdeFileDialog(aReturn);
++ // KDE file picker is not handled via callback
++ if( nsKDEUtils::kdeSupport()) {
++ int16_t result;
++ mCallback = aCallback;
++ mRunning = true;
++ kdeFileDialog(&result);
++ if (mCallback) {
++ mCallback->Done(result);
++ mCallback = nullptr;
++ } else {
++ mResult = result;
++ }
++ mRunning = false;
++ return NS_OK;
++ }
+
- nsresult rv = Open(nullptr);
- if (NS_FAILED(rv))
- return rv;
+ nsXPIDLCString title;
+ title.Adopt(ToNewUTF8String(mTitle));
+
+ GtkWindow *parent_widget = get_gtk_window_for_nsiwidget(mParentWidget);
- while (mRunning) {
- g_main_context_iteration(nullptr, TRUE);
- }
-
-@@ -587,8 +594,235 @@ nsFilePicker::Done(GtkWidget* file_choos
+ GtkFileChooserAction action = GetGtkFileChooserAction(mMode);
+ const gchar *accept_button = (action == GTK_FILE_CHOOSER_ACTION_SAVE)
+ ? GTK_STOCK_SAVE : GTK_STOCK_OPEN;
+@@ -587,8 +607,235 @@ nsFilePicker::Done(GtkWidget* file_choos
if (mCallback) {
mCallback->Done(result);
mCallback = nullptr;