diff options
author | hongbo.min@intel.com <hongbo.min@intel.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-11-27 18:58:27 +0000 |
---|---|---|
committer | hongbo.min@intel.com <hongbo.min@intel.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-11-27 18:58:27 +0000 |
commit | c7b110ca87997c1ccd3271c0de42203d9104e2ec (patch) | |
tree | 4137030d91f818ac13935a2ba855065d054dcd00 | |
parent | 19921da9681893ac22daede29785bb0cace3d9b0 (diff) | |
download | chromium_src-c7b110ca87997c1ccd3271c0de42203d9104e2ec.zip chromium_src-c7b110ca87997c1ccd3271c0de42203d9104e2ec.tar.gz chromium_src-c7b110ca87997c1ccd3271c0de42203d9104e2ec.tar.bz2 |
This fix is to make the applauncher window will not be closed after uninstall dialog is showed.
BUG=None
Review URL: https://chromiumcodereview.appspot.com/11413161
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@169697 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/ui/app_list/app_list_controller.h | 4 | ||||
-rw-r--r-- | chrome/browser/ui/app_list/extension_app_item.cc | 15 | ||||
-rw-r--r-- | chrome/browser/ui/views/app_list/app_list_controller_win.cc | 19 |
3 files changed, 31 insertions, 7 deletions
diff --git a/chrome/browser/ui/app_list/app_list_controller.h b/chrome/browser/ui/app_list/app_list_controller.h index aa10ecc..a2a6330 100644 --- a/chrome/browser/ui/app_list/app_list_controller.h +++ b/chrome/browser/ui/app_list/app_list_controller.h @@ -31,6 +31,10 @@ class AppListControllerDelegate { virtual void UnpinApp(const std::string& extension_id); virtual bool CanPin() = 0; + // Be aware of the extension uninstalling flow. + virtual void AboutToUninstallApp() {} + virtual void UninstallAppCompleted() {} + // Whether the controller supports showing the Create Shortcuts dialog. virtual bool CanShowCreateShortcutsDialog() = 0; virtual void ShowCreateShortcutsDialog(Profile* profile, diff --git a/chrome/browser/ui/app_list/extension_app_item.cc b/chrome/browser/ui/app_list/extension_app_item.cc index f4bed55..e38d3ae 100644 --- a/chrome/browser/ui/app_list/extension_app_item.cc +++ b/chrome/browser/ui/app_list/extension_app_item.cc @@ -56,9 +56,11 @@ enum CommandId { class ExtensionUninstaller : public ExtensionUninstallDialog::Delegate { public: ExtensionUninstaller(Profile* profile, - const std::string& extension_id) + const std::string& extension_id, + AppListControllerDelegate* controller) : profile_(profile), - extension_id_(extension_id) { + extension_id_(extension_id), + controller_(controller) { } void Run() { @@ -68,7 +70,7 @@ class ExtensionUninstaller : public ExtensionUninstallDialog::Delegate { CleanUp(); return; } - + controller_->AboutToUninstallApp(); ExtensionUninstallDialog* dialog = ExtensionUninstallDialog::Create(NULL, this); dialog->ConfirmUninstall(extension); @@ -84,11 +86,12 @@ class ExtensionUninstaller : public ExtensionUninstallDialog::Delegate { false, /* external_uninstall*/ NULL); } - + controller_->UninstallAppCompleted(); CleanUp(); } virtual void ExtensionUninstallCanceled() OVERRIDE { + controller_->UninstallAppCompleted(); CleanUp(); } @@ -98,6 +101,7 @@ class ExtensionUninstaller : public ExtensionUninstallDialog::Delegate { Profile* profile_; std::string extension_id_; + AppListControllerDelegate* controller_; DISALLOW_COPY_AND_ASSIGN(ExtensionUninstaller); }; @@ -236,7 +240,8 @@ void ExtensionAppItem::ShowExtensionDetails() { void ExtensionAppItem::StartExtensionUninstall() { // ExtensionUninstall deletes itself when done or aborted. ExtensionUninstaller* uninstaller = new ExtensionUninstaller(profile_, - extension_id_); + extension_id_, + controller_); uninstaller->Run(); } diff --git a/chrome/browser/ui/views/app_list/app_list_controller_win.cc b/chrome/browser/ui/views/app_list/app_list_controller_win.cc index 692ee6e..c2e2cf3 100644 --- a/chrome/browser/ui/views/app_list/app_list_controller_win.cc +++ b/chrome/browser/ui/views/app_list/app_list_controller_win.cc @@ -95,6 +95,8 @@ class AppListControllerDelegateWin : public AppListControllerDelegate { virtual void ViewClosing() OVERRIDE; virtual void ViewActivationChanged(bool active) OVERRIDE; virtual bool CanPin() OVERRIDE; + virtual void AboutToUninstallApp() OVERRIDE; + virtual void UninstallAppCompleted() OVERRIDE; virtual bool CanShowCreateShortcutsDialog() OVERRIDE; virtual void ShowCreateShortcutsDialog( Profile* profile, @@ -113,9 +115,11 @@ class AppListControllerDelegateWin : public AppListControllerDelegate { // list to operate, and controls when the app list is opened and closed. class AppListController { public: - AppListController() : current_view_(NULL) {} + AppListController() : current_view_(NULL), can_close_app_list_(true) {} ~AppListController() {} + void set_can_close(bool can_close) { can_close_app_list_ = can_close; } + bool can_close() { return can_close_app_list_; } void ShowAppList(); void CloseAppList(); void AppListClosing(); @@ -148,6 +152,9 @@ class AppListController { app_list::PaginationModel pagination_model_; + // True if the controller can close the app list. + bool can_close_app_list_; + DISALLOW_COPY_AND_ASSIGN(AppListController); }; @@ -178,6 +185,14 @@ bool AppListControllerDelegateWin::CanPin() { return false; } +void AppListControllerDelegateWin::AboutToUninstallApp() { + g_app_list_controller.Get().set_can_close(false); +} + +void AppListControllerDelegateWin::UninstallAppCompleted() { + g_app_list_controller.Get().set_can_close(true); +} + bool AppListControllerDelegateWin::CanShowCreateShortcutsDialog() { return true; } @@ -256,7 +271,7 @@ void AppListController::ShowAppList() { } void AppListController::CloseAppList() { - if (current_view_) + if (current_view_ && can_close_app_list_) current_view_->GetWidget()->Close(); } |