ui.js 1.4 KB

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