settings_provider_gtk.h 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. // Copyright 2017 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #ifndef UI_GTK_SETTINGS_PROVIDER_GTK_H_
  5. #define UI_GTK_SETTINGS_PROVIDER_GTK_H_
  6. #include <memory>
  7. #include <string>
  8. #include <vector>
  9. #include "base/memory/raw_ptr.h"
  10. #include "ui/base/glib/glib_signal.h"
  11. #include "ui/gtk/settings_provider.h"
  12. #include "ui/linux/linux_ui.h"
  13. typedef struct _GParamSpec GParamSpec;
  14. typedef struct _GtkSettings GtkSettings;
  15. namespace gtk {
  16. class GtkUi;
  17. class SettingsProviderGtk : public SettingsProvider {
  18. public:
  19. explicit SettingsProviderGtk(GtkUi* delegate);
  20. SettingsProviderGtk(const SettingsProviderGtk&) = delete;
  21. SettingsProviderGtk& operator=(const SettingsProviderGtk&) = delete;
  22. ~SettingsProviderGtk() override;
  23. private:
  24. class FrameActionSettingWatcher {
  25. public:
  26. FrameActionSettingWatcher(SettingsProviderGtk* settings_provider,
  27. const std::string& setting_name,
  28. ui::LinuxUi::WindowFrameActionSource action_type,
  29. ui::LinuxUi::WindowFrameAction default_action);
  30. FrameActionSettingWatcher(const FrameActionSettingWatcher&) = delete;
  31. FrameActionSettingWatcher& operator=(const FrameActionSettingWatcher&) =
  32. delete;
  33. ~FrameActionSettingWatcher();
  34. CHROMEG_CALLBACK_1(FrameActionSettingWatcher,
  35. void,
  36. OnSettingChanged,
  37. GtkSettings*,
  38. GParamSpec*);
  39. private:
  40. raw_ptr<SettingsProviderGtk> settings_provider_;
  41. std::string setting_name_;
  42. ui::LinuxUi::WindowFrameActionSource action_type_;
  43. ui::LinuxUi::WindowFrameAction default_action_;
  44. unsigned long signal_id_;
  45. };
  46. void SetWindowButtonOrderingFromGtkLayout(const std::string& gtk_layout);
  47. CHROMEG_CALLBACK_1(SettingsProviderGtk,
  48. void,
  49. OnDecorationButtonLayoutChanged,
  50. GtkSettings*,
  51. GParamSpec*);
  52. CHROMEG_CALLBACK_1(SettingsProviderGtk,
  53. void,
  54. OnThemeChanged,
  55. GtkSettings*,
  56. GParamSpec*);
  57. raw_ptr<GtkUi> delegate_;
  58. unsigned long signal_id_decoration_layout_;
  59. std::vector<std::unique_ptr<FrameActionSettingWatcher>>
  60. frame_action_setting_watchers_;
  61. };
  62. } // namespace gtk
  63. #endif // UI_GTK_SETTINGS_PROVIDER_GTK_H_