# HG changeset patch # User Wolfgang Rosenauer # Date 1353926966 -3600 # Node ID b3ff3d8ebf9d244101335e9999450386d5ba44a1 # Parent dcdf243fea81524eeb86a2a017df92fe5e2aa2e7 fix KDE filedialog diff -r dcdf243fea81 -r b3ff3d8ebf9d mozilla-kde.patch --- a/mozilla-kde.patch Fri Nov 23 16:18:29 2012 +0100 +++ b/mozilla-kde.patch Mon Nov 26 11:49:26 2012 +0100 @@ -45,7 +45,7 @@ #include "prefapi.h" #include "prefread.h" #include "prefapi_private_data.h" -@@ -896,16 +897,34 @@ pref_LoadPrefsInDir(nsIFile* aDir, char +@@ -950,16 +951,34 @@ pref_LoadPrefsInDir(nsIFile* aDir, char static nsresult pref_LoadPrefsInDirList(const char *listId) { @@ -80,7 +80,7 @@ return NS_OK; bool hasMore; -@@ -921,17 +940,17 @@ static nsresult pref_LoadPrefsInDirList( +@@ -975,17 +994,17 @@ static nsresult pref_LoadPrefsInDirList( nsAutoCString leaf; path->GetNativeLeafName(leaf); @@ -99,7 +99,7 @@ { nsZipItemPtr manifest(jarReader, name, true); NS_ENSURE_TRUE(manifest.Buffer(), NS_ERROR_NOT_AVAILABLE); -@@ -1025,28 +1044,40 @@ static nsresult pref_InitInitialObjects( +@@ -1079,28 +1098,40 @@ static nsresult pref_InitInitialObjects( /* these pref file names should not be used: we process them after all other application pref files for backwards compatibility */ static const char* specialFiles[] = { #if defined(XP_MACOSX) @@ -3109,27 +3109,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); - } - -@@ -588,8 +595,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; +@@ -588,8 +608,235 @@ nsFilePicker::Done(GtkWidget* file_choos if (mCallback) { mCallback->Done(result); mCallback = nullptr;