ui.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. // SPDX-FileCopyrightText: GSConnect Developers https://github.com/GSConnect
  2. //
  3. // SPDX-License-Identifier: GPL-2.0-or-later
  4. import Gdk from 'gi://Gdk';
  5. import Gio from 'gi://Gio';
  6. import GLib from 'gi://GLib';
  7. import Gtk from 'gi://Gtk';
  8. import Config from '../../config.js';
  9. /*
  10. * Window State
  11. */
  12. Gtk.Window.prototype.restoreGeometry = function (context = 'default') {
  13. this._windowState = new Gio.Settings({
  14. settings_schema: Config.GSCHEMA.lookup(
  15. 'org.gnome.Shell.Extensions.GSConnect.WindowState',
  16. true
  17. ),
  18. path: `/org/gnome/shell/extensions/gsconnect/${context}/`,
  19. });
  20. // Size
  21. const [width, height] = this._windowState.get_value('window-size').deepUnpack();
  22. if (width && height)
  23. this.set_default_size(width, height);
  24. // Maximized State
  25. if (this._windowState.get_boolean('window-maximized'))
  26. this.maximize();
  27. };
  28. Gtk.Window.prototype.saveGeometry = function () {
  29. const state = this.get_window().get_state();
  30. // Maximized State
  31. const maximized = (state & Gdk.WindowState.MAXIMIZED);
  32. this._windowState.set_boolean('window-maximized', maximized);
  33. // Leave the size at the value before maximizing
  34. if (maximized || (state & Gdk.WindowState.FULLSCREEN))
  35. return;
  36. // Size
  37. const size = this.get_size();
  38. this._windowState.set_value('window-size', new GLib.Variant('(ii)', size));
  39. };