fix KDE filedialogs esr17
authorWolfgang Rosenauer <wr@rosenauer.org>
Mon, 26 Nov 2012 12:12:26 +0100
branchesr17
changeset 590 882053767ede
parent 586 1d3e0f4f48af
child 593 0bf9876985d9
fix KDE filedialogs
MozillaFirefox/firefox-esr.changes
mozilla-kde.patch
--- a/MozillaFirefox/firefox-esr.changes	Thu Nov 22 10:56:17 2012 +0100
+++ b/MozillaFirefox/firefox-esr.changes	Mon Nov 26 12:12:26 2012 +0100
@@ -1,4 +1,9 @@
 -------------------------------------------------------------------
+Mon Nov 26 11:07:48 UTC 2012 - wr@rosenauer.org
+
+- fix KDE integration for file dialogs
+
+-------------------------------------------------------------------
 Wed Nov 21 10:34:54 UTC 2012 - wr@rosenauer.org
 
 - rebrand package to firefox-esr
--- a/mozilla-kde.patch	Thu Nov 22 10:56:17 2012 +0100
+++ b/mozilla-kde.patch	Mon Nov 26 12:12:26 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;