3104 CopyUTF16toUTF8(aFilter, filter); |
3104 CopyUTF16toUTF8(aFilter, filter); |
3105 CopyUTF16toUTF8(aTitle, name); |
3105 CopyUTF16toUTF8(aTitle, name); |
3106 |
3106 |
3107 mFilters.AppendElement(filter); |
3107 mFilters.AppendElement(filter); |
3108 mFilterNames.AppendElement(name); |
3108 mFilterNames.AppendElement(name); |
3109 @@ -369,16 +373,19 @@ nsFilePicker::GetFiles(nsISimpleEnumerat |
3109 @@ -388,16 +392,32 @@ nsFilePicker::Show(int16_t *aReturn) |
3110 return NS_ERROR_FAILURE; |
|
3111 } |
|
3112 |
3110 |
3113 NS_IMETHODIMP |
3111 NS_IMETHODIMP |
3114 nsFilePicker::Show(int16_t *aReturn) |
3112 nsFilePicker::Open(nsIFilePickerShownCallback *aCallback) |
3115 { |
3113 { |
3116 NS_ENSURE_ARG_POINTER(aReturn); |
3114 // Can't show two dialogs concurrently with the same filepicker |
3117 |
3115 if (mRunning) |
3118 + if( nsKDEUtils::kdeSupport()) |
3116 return NS_ERROR_NOT_AVAILABLE; |
3119 + return kdeFileDialog(aReturn); |
3117 |
3120 + |
3118 + // KDE file picker is not handled via callback |
3121 nsresult rv = Open(nullptr); |
3119 + if( nsKDEUtils::kdeSupport()) { |
3122 if (NS_FAILED(rv)) |
3120 + int16_t result; |
3123 return rv; |
3121 + mCallback = aCallback; |
3124 |
3122 + mRunning = true; |
3125 while (mRunning) { |
3123 + kdeFileDialog(&result); |
3126 g_main_context_iteration(nullptr, TRUE); |
3124 + if (mCallback) { |
3127 } |
3125 + mCallback->Done(result); |
3128 |
3126 + mCallback = nullptr; |
3129 @@ -587,8 +594,235 @@ nsFilePicker::Done(GtkWidget* file_choos |
3127 + } else { |
|
3128 + mResult = result; |
|
3129 + } |
|
3130 + mRunning = false; |
|
3131 + return NS_OK; |
|
3132 + } |
|
3133 + |
|
3134 nsXPIDLCString title; |
|
3135 title.Adopt(ToNewUTF8String(mTitle)); |
|
3136 |
|
3137 GtkWindow *parent_widget = get_gtk_window_for_nsiwidget(mParentWidget); |
|
3138 |
|
3139 GtkFileChooserAction action = GetGtkFileChooserAction(mMode); |
|
3140 const gchar *accept_button = (action == GTK_FILE_CHOOSER_ACTION_SAVE) |
|
3141 ? GTK_STOCK_SAVE : GTK_STOCK_OPEN; |
|
3142 @@ -587,8 +607,235 @@ nsFilePicker::Done(GtkWidget* file_choos |
3130 if (mCallback) { |
3143 if (mCallback) { |
3131 mCallback->Done(result); |
3144 mCallback->Done(result); |
3132 mCallback = nullptr; |
3145 mCallback = nullptr; |
3133 } else { |
3146 } else { |
3134 mResult = result; |
3147 mResult = result; |