Application.cpp 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. /*
  2. * Copyright (c) 2024, Andrew Kaster <akaster@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include <LibCore/ArgsParser.h>
  7. #include <LibWebView/URL.h>
  8. #include <UI/Qt/Application.h>
  9. #include <UI/Qt/Settings.h>
  10. #include <UI/Qt/StringUtils.h>
  11. #include <UI/Qt/TaskManagerWindow.h>
  12. #include <QFileDialog>
  13. #include <QFileOpenEvent>
  14. namespace Ladybird {
  15. Application::Application(Badge<WebView::Application>, Main::Arguments& arguments)
  16. : QApplication(arguments.argc, arguments.argv)
  17. {
  18. }
  19. void Application::create_platform_options(WebView::ChromeOptions&, WebView::WebContentOptions& web_content_options)
  20. {
  21. web_content_options.config_path = Settings::the()->directory();
  22. }
  23. Application::~Application()
  24. {
  25. close_task_manager_window();
  26. }
  27. bool Application::event(QEvent* event)
  28. {
  29. switch (event->type()) {
  30. case QEvent::FileOpen: {
  31. if (!on_open_file)
  32. break;
  33. auto const& open_event = *static_cast<QFileOpenEvent const*>(event);
  34. auto file = ak_string_from_qstring(open_event.file());
  35. if (auto file_url = WebView::sanitize_url(file); file_url.has_value())
  36. on_open_file(file_url.release_value());
  37. break;
  38. }
  39. default:
  40. break;
  41. }
  42. return QApplication::event(event);
  43. }
  44. void Application::show_task_manager_window()
  45. {
  46. if (!m_task_manager_window) {
  47. m_task_manager_window = new TaskManagerWindow(nullptr);
  48. }
  49. m_task_manager_window->show();
  50. m_task_manager_window->activateWindow();
  51. m_task_manager_window->raise();
  52. }
  53. void Application::close_task_manager_window()
  54. {
  55. if (m_task_manager_window) {
  56. m_task_manager_window->close();
  57. delete m_task_manager_window;
  58. m_task_manager_window = nullptr;
  59. }
  60. }
  61. BrowserWindow& Application::new_window(Vector<URL::URL> const& initial_urls, BrowserWindow::IsPopupWindow is_popup_window, Tab* parent_tab, Optional<u64> page_index)
  62. {
  63. auto* window = new BrowserWindow(initial_urls, is_popup_window, parent_tab, move(page_index));
  64. set_active_window(*window);
  65. window->show();
  66. if (initial_urls.is_empty()) {
  67. auto* tab = window->current_tab();
  68. if (tab) {
  69. tab->set_url_is_hidden(true);
  70. tab->focus_location_editor();
  71. }
  72. }
  73. window->activateWindow();
  74. window->raise();
  75. return *window;
  76. }
  77. Optional<ByteString> Application::ask_user_for_download_folder() const
  78. {
  79. auto path = QFileDialog::getExistingDirectory(nullptr, "Select download directory", QDir::homePath());
  80. if (path.isNull())
  81. return {};
  82. return ak_byte_string_from_qstring(path);
  83. }
  84. }