diff -r 221f83986218 -r 9441c606ec3c mozilla-kde.patch --- 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;