summaryrefslogtreecommitdiff
path: root/mozilla-1129873-apppicker.patch
diff options
context:
space:
mode:
Diffstat (limited to 'mozilla-1129873-apppicker.patch')
-rw-r--r--mozilla-1129873-apppicker.patch423
1 files changed, 0 insertions, 423 deletions
diff --git a/mozilla-1129873-apppicker.patch b/mozilla-1129873-apppicker.patch
deleted file mode 100644
index 468ca53..0000000
--- a/mozilla-1129873-apppicker.patch
+++ /dev/null
@@ -1,423 +0,0 @@
-diff -up mozilla-release/toolkit/mozapps/downloads/nsHelperAppDlg.js.1129873-apppicker mozilla-release/toolkit/mozapps/downloads/nsHelperAppDlg.js
---- mozilla-release/toolkit/mozapps/downloads/nsHelperAppDlg.js.1129873-apppicker 2015-05-25 23:28:55.000000000 +0200
-+++ mozilla-release/toolkit/mozapps/downloads/nsHelperAppDlg.js 2015-06-09 09:37:35.313305562 +0200
-@@ -1004,6 +1004,34 @@ nsUnknownContentTypeDialog.prototype = {
- return file.leafName;
- },
-
-+ finishChooseApp: function() {
-+ if (this.chosenApp) {
-+ // Show the "handler" menulist since we have a (user-specified)
-+ // application now.
-+ this.dialogElement("modeDeck").setAttribute("selectedIndex", "0");
-+
-+ // Update dialog.
-+ var otherHandler = this.dialogElement("otherHandler");
-+ otherHandler.removeAttribute("hidden");
-+ otherHandler.setAttribute("path", this.getPath(this.chosenApp.executable));
-+#ifdef XP_WIN
-+ otherHandler.label = this.getFileDisplayName(this.chosenApp.executable);
-+#else
-+ otherHandler.label = this.chosenApp.name;
-+#endif
-+ this.dialogElement("openHandler").selectedIndex = 1;
-+ this.dialogElement("openHandler").setAttribute("lastSelectedItemID", "otherHandler");
-+
-+ this.dialogElement("mode").selectedItem = this.dialogElement("open");
-+ }
-+ else {
-+ var openHandler = this.dialogElement("openHandler");
-+ var lastSelectedID = openHandler.getAttribute("lastSelectedItemID");
-+ if (!lastSelectedID)
-+ lastSelectedID = "defaultHandler";
-+ openHandler.selectedItem = this.dialogElement(lastSelectedID);
-+ }
-+ },
- // chooseApp: Open file picker and prompt user for application.
- chooseApp: function() {
- #ifdef XP_WIN
-@@ -1047,7 +1075,23 @@ nsUnknownContentTypeDialog.prototype = {
- params.handlerApp.executable.isFile()) {
- // Remember the file they chose to run.
- this.chosenApp = params.handlerApp;
--
-+ }
-+#else
-+#if MOZ_WIDGET_GTK == 3
-+ var nsIApplicationChooser = Components.interfaces.nsIApplicationChooser;
-+ var appChooser = Components.classes["@mozilla.org/applicationchooser;1"]
-+ .createInstance(nsIApplicationChooser);
-+ appChooser.init(this.mDialog, this.dialogElement("strings").getString("chooseAppFilePickerTitle"));
-+ var contentTypeDialogObj = this;
-+ let appChooserCallback = function appChooserCallback_done(aResult) {
-+ if (aResult) {
-+ contentTypeDialogObj.chosenApp = aResult.QueryInterface(Components.interfaces.nsILocalHandlerApp);
-+ }
-+ contentTypeDialogObj.finishChooseApp();
-+ };
-+ appChooser.open(this.mLauncher.MIMEInfo.MIMEType, appChooserCallback);
-+ // The finishChooseApp is called from appChooserCallback
-+ return;
- #else
- var nsIFilePicker = Components.interfaces.nsIFilePicker;
- var fp = Components.classes["@mozilla.org/filepicker;1"]
-@@ -1065,29 +1109,11 @@ nsUnknownContentTypeDialog.prototype = {
- createInstance(Components.interfaces.nsILocalHandlerApp);
- localHandlerApp.executable = fp.file;
- this.chosenApp = localHandlerApp;
--#endif
--
-- // Show the "handler" menulist since we have a (user-specified)
-- // application now.
-- this.dialogElement("modeDeck").setAttribute("selectedIndex", "0");
--
-- // Update dialog.
-- var otherHandler = this.dialogElement("otherHandler");
-- otherHandler.removeAttribute("hidden");
-- otherHandler.setAttribute("path", this.getPath(this.chosenApp.executable));
-- otherHandler.label = this.getFileDisplayName(this.chosenApp.executable);
-- this.dialogElement("openHandler").selectedIndex = 1;
-- this.dialogElement("openHandler").setAttribute("lastSelectedItemID", "otherHandler");
--
-- this.dialogElement("mode").selectedItem = this.dialogElement("open");
-- }
-- else {
-- var openHandler = this.dialogElement("openHandler");
-- var lastSelectedID = openHandler.getAttribute("lastSelectedItemID");
-- if (!lastSelectedID)
-- lastSelectedID = "defaultHandler";
-- openHandler.selectedItem = this.dialogElement(lastSelectedID);
- }
-+#endif // MOZ_WIDGET_GTK3
-+
-+#endif // XP_WIN
-+ this.finishChooseApp();
- },
-
- // Turn this on to get debugging messages.
-diff -up mozilla-release/widget/gtk/moz.build.1129873-apppicker mozilla-release/widget/gtk/moz.build
---- mozilla-release/widget/gtk/moz.build.1129873-apppicker 2015-05-25 23:28:56.000000000 +0200
-+++ mozilla-release/widget/gtk/moz.build 2015-06-09 09:37:35.313305562 +0200
-@@ -74,6 +74,7 @@ if CONFIG['MOZ_ENABLE_GTK2']:
- else:
- UNIFIED_SOURCES += [
- 'gtk3drawing.c',
-+ 'nsApplicationChooser.cpp',
- ]
-
- include('/ipc/chromium/chromium-config.mozbuild')
-diff -up mozilla-release/widget/gtk/mozgtk/mozgtk.c.1129873-apppicker mozilla-release/widget/gtk/mozgtk/mozgtk.c
---- mozilla-release/widget/gtk/mozgtk/mozgtk.c.1129873-apppicker 2015-05-25 23:28:56.000000000 +0200
-+++ mozilla-release/widget/gtk/mozgtk/mozgtk.c 2015-06-09 09:37:35.313305562 +0200
-@@ -533,6 +533,11 @@ STUB(gtk_widget_get_style_context)
- STUB(gtk_widget_path_append_type)
- STUB(gtk_widget_path_new)
- STUB(gtk_widget_set_visual)
-+STUB(gtk_app_chooser_dialog_new_for_content_type)
-+STUB(gtk_app_chooser_get_type)
-+STUB(gtk_app_chooser_get_app_info)
-+STUB(gtk_app_chooser_dialog_get_type)
-+STUB(gtk_app_chooser_dialog_set_heading)
- #endif
-
- #ifdef GTK2_SYMBOLS
-diff -up mozilla-release/widget/gtk/nsApplicationChooser.cpp.1129873-apppicker mozilla-release/widget/gtk/nsApplicationChooser.cpp
---- mozilla-release/widget/gtk/nsApplicationChooser.cpp.1129873-apppicker 2015-06-09 09:37:35.314305558 +0200
-+++ mozilla-release/widget/gtk/nsApplicationChooser.cpp 2015-06-09 09:37:35.313305562 +0200
-@@ -0,0 +1,123 @@
-+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-+/* This Source Code Form is subject to the terms of the Mozilla Public
-+ * License, v. 2.0. If a copy of the MPL was not distributed with this
-+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-+
-+#include "mozilla/Types.h"
-+
-+#include <gtk/gtk.h>
-+
-+#include "nsApplicationChooser.h"
-+#include "WidgetUtils.h"
-+#include "nsIMIMEInfo.h"
-+#include "nsCExternalHandlerService.h"
-+#include "nsGtkUtils.h"
-+
-+using namespace mozilla;
-+
-+NS_IMPL_ISUPPORTS(nsApplicationChooser, nsIApplicationChooser)
-+
-+nsApplicationChooser::nsApplicationChooser()
-+{
-+}
-+
-+nsApplicationChooser::~nsApplicationChooser()
-+{
-+}
-+
-+NS_IMETHODIMP
-+nsApplicationChooser::Init(nsIDOMWindow* aParent, const nsACString& aTitle)
-+{
-+ NS_ENSURE_TRUE(aParent, NS_ERROR_FAILURE);
-+ mParentWidget = widget::WidgetUtils::DOMWindowToWidget(aParent);
-+ mWindowTitle.Assign(aTitle);
-+ return NS_OK;
-+}
-+
-+NS_IMETHODIMP
-+nsApplicationChooser::Open(const nsACString& aContentType, nsIApplicationChooserFinishedCallback *aCallback)
-+{
-+ MOZ_ASSERT(aCallback);
-+ if (mCallback) {
-+ NS_WARNING("Chooser is already in progress.");
-+ return NS_ERROR_ALREADY_INITIALIZED;
-+ }
-+ mCallback = aCallback;
-+ NS_ENSURE_TRUE(mParentWidget, NS_ERROR_FAILURE);
-+ GtkWindow *parent_widget =
-+ GTK_WINDOW(mParentWidget->GetNativeData(NS_NATIVE_SHELLWIDGET));
-+
-+ GtkWidget* chooser =
-+ gtk_app_chooser_dialog_new_for_content_type(parent_widget,
-+ (GtkDialogFlags) (GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT),
-+ PromiseFlatCString(aContentType).get());
-+ gtk_app_chooser_dialog_set_heading(GTK_APP_CHOOSER_DIALOG(chooser), mWindowTitle.BeginReading());
-+ NS_ADDREF_THIS();
-+ g_signal_connect(chooser, "response", G_CALLBACK(OnResponse), this);
-+ g_signal_connect(chooser, "destroy", G_CALLBACK(OnDestroy), this);
-+ gtk_widget_show(chooser);
-+ return NS_OK;
-+}
-+
-+/* static */ void
-+nsApplicationChooser::OnResponse(GtkWidget* chooser, gint response_id, gpointer user_data)
-+{
-+ static_cast<nsApplicationChooser*>(user_data)->Done(chooser, response_id);
-+}
-+
-+/* static */ void
-+nsApplicationChooser::OnDestroy(GtkWidget *chooser, gpointer user_data)
-+{
-+ static_cast<nsApplicationChooser*>(user_data)->Done(chooser, GTK_RESPONSE_CANCEL);
-+}
-+
-+void nsApplicationChooser::Done(GtkWidget* chooser, gint response)
-+{
-+ nsCOMPtr<nsILocalHandlerApp> localHandler;
-+ nsresult rv;
-+ switch (response) {
-+ case GTK_RESPONSE_OK:
-+ case GTK_RESPONSE_ACCEPT:
-+ {
-+ localHandler = do_CreateInstance(NS_LOCALHANDLERAPP_CONTRACTID, &rv);
-+ if (NS_FAILED(rv)) {
-+ NS_WARNING("Out of memory.");
-+ break;
-+ }
-+ GAppInfo *app_info = gtk_app_chooser_get_app_info(GTK_APP_CHOOSER(chooser));
-+
-+ nsCOMPtr<nsIFile> localExecutable;
-+ gchar *fileWithFullPath = g_find_program_in_path(g_app_info_get_executable(app_info));
-+ rv = NS_NewNativeLocalFile(nsDependentCString(fileWithFullPath), false, getter_AddRefs(localExecutable));
-+ g_free(fileWithFullPath);
-+ if (NS_FAILED(rv)) {
-+ NS_WARNING("Cannot create local filename.");
-+ localHandler = nullptr;
-+ } else {
-+ localHandler->SetExecutable(localExecutable);
-+ localHandler->SetName(NS_ConvertUTF8toUTF16(g_app_info_get_display_name(app_info)));
-+ }
-+ g_object_unref(app_info);
-+ }
-+
-+ break;
-+ case GTK_RESPONSE_CANCEL:
-+ case GTK_RESPONSE_CLOSE:
-+ case GTK_RESPONSE_DELETE_EVENT:
-+ break;
-+ default:
-+ NS_WARNING("Unexpected response");
-+ break;
-+ }
-+
-+ // A "response" signal won't be sent again but "destroy" will be.
-+ g_signal_handlers_disconnect_by_func(chooser, FuncToGpointer(OnDestroy), this);
-+ gtk_widget_destroy(chooser);
-+
-+ if (mCallback) {
-+ mCallback->Done(localHandler);
-+ mCallback = nullptr;
-+ }
-+ NS_RELEASE_THIS();
-+}
-+
-diff -up mozilla-release/widget/gtk/nsApplicationChooser.h.1129873-apppicker mozilla-release/widget/gtk/nsApplicationChooser.h
---- mozilla-release/widget/gtk/nsApplicationChooser.h.1129873-apppicker 2015-06-09 09:37:35.314305558 +0200
-+++ mozilla-release/widget/gtk/nsApplicationChooser.h 2015-06-09 09:37:35.314305558 +0200
-@@ -0,0 +1,28 @@
-+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-+/* This Source Code Form is subject to the terms of the Mozilla Public
-+ * License, v. 2.0. If a copy of the MPL was not distributed with this
-+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-+
-+#ifndef nsApplicationChooser_h__
-+#define nsApplicationChooser_h__
-+
-+#include <gtk/gtk.h>
-+#include "nsIApplicationChooser.h"
-+
-+class nsApplicationChooser : public nsIApplicationChooser
-+{
-+public:
-+ nsApplicationChooser();
-+ NS_DECL_ISUPPORTS
-+ NS_DECL_NSIAPPLICATIONCHOOSER
-+ void Done(GtkWidget* chooser, gint response);
-+
-+private:
-+ ~nsApplicationChooser();
-+ nsCOMPtr<nsIWidget> mParentWidget;
-+ nsCString mWindowTitle;
-+ nsCOMPtr<nsIApplicationChooserFinishedCallback> mCallback;
-+ static void OnResponse(GtkWidget* chooser, gint response_id, gpointer user_data);
-+ static void OnDestroy(GtkWidget* chooser, gpointer user_data);
-+};
-+#endif
-diff -up mozilla-release/widget/gtk/nsWidgetFactory.cpp.1129873-apppicker mozilla-release/widget/gtk/nsWidgetFactory.cpp
---- mozilla-release/widget/gtk/nsWidgetFactory.cpp.1129873-apppicker 2015-05-25 23:28:56.000000000 +0200
-+++ mozilla-release/widget/gtk/nsWidgetFactory.cpp 2015-06-09 09:37:35.314305558 +0200
-@@ -21,6 +21,9 @@
- #include "nsClipboard.h"
- #include "nsDragService.h"
- #endif
-+#if (MOZ_WIDGET_GTK == 3)
-+#include "nsApplicationChooser.h"
-+#endif
- #include "nsColorPicker.h"
- #include "nsFilePicker.h"
- #include "nsSound.h"
-@@ -152,6 +155,25 @@ nsFilePickerConstructor(nsISupports *aOu
- return picker->QueryInterface(aIID, aResult);
- }
-
-+#if (MOZ_WIDGET_GTK == 3)
-+static nsresult
-+nsApplicationChooserConstructor(nsISupports *aOuter, REFNSIID aIID,
-+ void **aResult)
-+{
-+ *aResult = nullptr;
-+ if (aOuter != nullptr) {
-+ return NS_ERROR_NO_AGGREGATION;
-+ }
-+ nsCOMPtr<nsIApplicationChooser> chooser = new nsApplicationChooser;
-+
-+ if (!chooser) {
-+ return NS_ERROR_OUT_OF_MEMORY;
-+ }
-+
-+ return chooser->QueryInterface(aIID, aResult);
-+}
-+#endif
-+
- static nsresult
- nsColorPickerConstructor(nsISupports *aOuter, REFNSIID aIID,
- void **aResult)
-@@ -175,6 +197,9 @@ NS_DEFINE_NAMED_CID(NS_CHILD_CID);
- NS_DEFINE_NAMED_CID(NS_APPSHELL_CID);
- NS_DEFINE_NAMED_CID(NS_COLORPICKER_CID);
- NS_DEFINE_NAMED_CID(NS_FILEPICKER_CID);
-+#if (MOZ_WIDGET_GTK == 3)
-+NS_DEFINE_NAMED_CID(NS_APPLICATIONCHOOSER_CID);
-+#endif
- NS_DEFINE_NAMED_CID(NS_SOUND_CID);
- NS_DEFINE_NAMED_CID(NS_TRANSFERABLE_CID);
- #ifdef MOZ_X11
-@@ -206,6 +231,9 @@ static const mozilla::Module::CIDEntry k
- { &kNS_APPSHELL_CID, false, nullptr, nsAppShellConstructor },
- { &kNS_COLORPICKER_CID, false, nullptr, nsColorPickerConstructor, Module::MAIN_PROCESS_ONLY },
- { &kNS_FILEPICKER_CID, false, nullptr, nsFilePickerConstructor, Module::MAIN_PROCESS_ONLY },
-+#if (MOZ_WIDGET_GTK == 3)
-+ { &kNS_APPLICATIONCHOOSER_CID, false, nullptr, nsApplicationChooserConstructor, Module::MAIN_PROCESS_ONLY },
-+#endif
- { &kNS_SOUND_CID, false, nullptr, nsSoundConstructor, Module::MAIN_PROCESS_ONLY },
- { &kNS_TRANSFERABLE_CID, false, nullptr, nsTransferableConstructor },
- #ifdef MOZ_X11
-@@ -239,6 +267,9 @@ static const mozilla::Module::ContractID
- { "@mozilla.org/widget/appshell/gtk;1", &kNS_APPSHELL_CID },
- { "@mozilla.org/colorpicker;1", &kNS_COLORPICKER_CID, Module::MAIN_PROCESS_ONLY },
- { "@mozilla.org/filepicker;1", &kNS_FILEPICKER_CID, Module::MAIN_PROCESS_ONLY },
-+#if (MOZ_WIDGET_GTK == 3)
-+ { "@mozilla.org/applicationchooser;1", &kNS_APPLICATIONCHOOSER_CID, Module::MAIN_PROCESS_ONLY },
-+#endif
- { "@mozilla.org/sound;1", &kNS_SOUND_CID, Module::MAIN_PROCESS_ONLY },
- { "@mozilla.org/widget/transferable;1", &kNS_TRANSFERABLE_CID },
- #ifdef MOZ_X11
-diff -up mozilla-release/widget/moz.build.1129873-apppicker mozilla-release/widget/moz.build
---- mozilla-release/widget/moz.build.1129873-apppicker 2015-05-25 23:28:56.000000000 +0200
-+++ mozilla-release/widget/moz.build 2015-06-09 09:36:01.000000000 +0200
-@@ -207,6 +207,10 @@ if toolkit in ('qt', 'gtk2', 'gtk3', 'wi
- UNIFIED_SOURCES += [
- 'nsNativeTheme.cpp',
- ]
-+if toolkit == 'gtk3':
-+ XPIDL_SOURCES += [
-+ 'nsIApplicationChooser.idl',
-+ ]
-
- if not CONFIG['MOZ_B2G']:
- DEFINES['MOZ_CROSS_PROCESS_IME'] = True
-diff -up mozilla-release/widget/nsIApplicationChooser.idl.1129873-apppicker mozilla-release/widget/nsIApplicationChooser.idl
---- mozilla-release/widget/nsIApplicationChooser.idl.1129873-apppicker 2015-06-09 09:37:35.314305558 +0200
-+++ mozilla-release/widget/nsIApplicationChooser.idl 2015-06-09 09:37:35.314305558 +0200
-@@ -0,0 +1,39 @@
-+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-+ *
-+ * This Source Code Form is subject to the terms of the Mozilla Public
-+ * License, v. 2.0. If a copy of the MPL was not distributed with this
-+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-+
-+#include "nsISupports.idl"
-+#include "nsIMIMEInfo.idl"
-+interface nsIDOMWindow;
-+
-+[scriptable, function, uuid(8144404d-e6c7-4861-bcca-47de912ee811)]
-+interface nsIApplicationChooserFinishedCallback : nsISupports
-+{
-+ void done(in nsIHandlerApp handlerApp);
-+};
-+
-+[scriptable, uuid(8413fc42-d6c4-4d78-bf70-64cd78ebcc5c)]
-+interface nsIApplicationChooser : nsISupports
-+{
-+ /**
-+ * Initialize the application chooser picker widget. The application chooser
-+ * is not valid until this method is called.
-+ *
-+ * @param parent nsIDOMWindow parent. This dialog will be dependent
-+ * on this parent. parent must be non-null.
-+ * @param title The title for the file widget
-+ *
-+ */
-+ void init(in nsIDOMWindow parent, in ACString title);
-+
-+ /**
-+ * Open application chooser dialog.
-+ *
-+ * @param contentType content type of file to open
-+ * @param applicationChooserFinishedCallback callback fuction to run when dialog is closed
-+ */
-+ void open(in ACString contentType, in nsIApplicationChooserFinishedCallback applicationChooserFinishedCallback);
-+};
-+
-diff -up mozilla-release/widget/nsWidgetsCID.h.1129873-apppicker mozilla-release/widget/nsWidgetsCID.h
---- mozilla-release/widget/nsWidgetsCID.h.1129873-apppicker 2015-05-25 23:28:56.000000000 +0200
-+++ mozilla-release/widget/nsWidgetsCID.h 2015-06-09 09:37:35.315305554 +0200
-@@ -24,6 +24,11 @@
- { 0xbd57cee8, 0x1dd1, 0x11b2, \
- {0x9f, 0xe7, 0x95, 0xcf, 0x47, 0x09, 0xae, 0xa3} }
-
-+/* e221df9b-3d66-4045-9a66-5720949f8d10 */
-+#define NS_APPLICATIONCHOOSER_CID \
-+{ 0xe221df9b, 0x3d66, 0x4045, \
-+ {0x9a, 0x66, 0x57, 0x20, 0x94, 0x9f, 0x8d, 0x10} }
-+
- /* 0f872c8c-3ee6-46bd-92a2-69652c6b474e */
- #define NS_COLORPICKER_CID \
- { 0x0f872c8c, 0x3ee6, 0x46bd, \
bgstack15