From b4e0dbd99d0ad296ee17a9f0e6164de3017deafb3f8780da847dfe3fdf69e984 Mon Sep 17 00:00:00 2001 From: Wolfgang Rosenauer Date: Mon, 26 Nov 2012 11:27:34 +0000 Subject: [PATCH] - fix KDE integration for file dialogs OBS-URL: https://build.opensuse.org/package/show/mozilla:Factory/MozillaFirefox?expand=0&rev=305 --- MozillaFirefox.changes | 5 +++++ mozilla-kde.patch | 41 +++++++++++++++++++++++++++-------------- 2 files changed, 32 insertions(+), 14 deletions(-) diff --git a/MozillaFirefox.changes b/MozillaFirefox.changes index 1c3c9b20..a0ba145e 100644 --- a/MozillaFirefox.changes +++ b/MozillaFirefox.changes @@ -1,3 +1,8 @@ +------------------------------------------------------------------- +Mon Nov 26 11:11:38 UTC 2012 - wr@rosenauer.org + +- fix KDE integration for file dialogs + ------------------------------------------------------------------- Tue Nov 20 19:52:02 UTC 2012 - wr@rosenauer.org diff --git a/mozilla-kde.patch b/mozilla-kde.patch index 5921e97d..b3e3caea 100644 --- a/mozilla-kde.patch +++ b/mozilla-kde.patch @@ -3106,27 +3106,40 @@ diff --git a/widget/gtk2/nsFilePicker.cpp b/widget/gtk2/nsFilePicker.cpp 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)); - while (mRunning) { - g_main_context_iteration(nullptr, TRUE); - } + GtkWindow *parent_widget = get_gtk_window_for_nsiwidget(mParentWidget); -@@ -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;