From 67d96993ce8cffaab23c9c06c510ede42fc527be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Wed, 15 Apr 2020 23:32:20 +0200 Subject: [PATCH] auto-move-windows: Port to GTK4 Just like the previous ports, this consists mostly of replacing the old Gtk.Container methods. Part-of: --- extensions/auto-move-windows/prefs.js | 74 ++++++++++++--------------- 1 file changed, 32 insertions(+), 42 deletions(-) diff --git a/extensions/auto-move-windows/prefs.js b/extensions/auto-move-windows/prefs.js index 13244515..5db6c858 100644 --- a/extensions/auto-move-windows/prefs.js +++ b/extensions/auto-move-windows/prefs.js @@ -29,9 +29,9 @@ class AutoMoveSettingsWidget extends Gtk.ScrolledWindow { margin_start: 36, margin_end: 36, }); - this.add(box); + this.set_child(box); - box.add(new Gtk.Label({ + box.append(new Gtk.Label({ label: '%s'.format(_('Workspace Rules')), use_markup: true, halign: Gtk.Align.START, @@ -42,7 +42,7 @@ class AutoMoveSettingsWidget extends Gtk.ScrolledWindow { valign: Gtk.Align.START, }); this._list.set_header_func(this._updateHeader.bind(this)); - box.add(this._list); + box.append(this._list); const context = this._list.get_style_context(); const cssProvider = new Gtk.CssProvider(); @@ -53,7 +53,7 @@ class AutoMoveSettingsWidget extends Gtk.ScrolledWindow { Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION); context.add_class('frame'); - this._list.add(new NewRuleRow()); + this._list.append(new NewRuleRow()); this._actionGroup = new Gio.SimpleActionGroup(); this._list.insert_action_group('rules', this._actionGroup); @@ -84,12 +84,10 @@ class AutoMoveSettingsWidget extends Gtk.ScrolledWindow { this._sync(); this.connect('destroy', () => this._settings.run_dispose()); - - this.show_all(); } _onAddActivated() { - const dialog = new NewRuleDialog(this.get_toplevel()); + const dialog = new NewRuleDialog(this.get_root()); dialog.connect('response', (dlg, id) => { const appInfo = id === Gtk.ResponseType.OK ? dialog.get_widget().get_app_info() : null; @@ -101,6 +99,7 @@ class AutoMoveSettingsWidget extends Gtk.ScrolledWindow { } dialog.destroy(); }); + dialog.show(); } _onRemoveActivated(action, param) { @@ -113,7 +112,7 @@ class AutoMoveSettingsWidget extends Gtk.ScrolledWindow { } _getRuleRows() { - return this._list.get_children().filter(row => !!row.id); + return [...this._list].filter(row => !!row.id); } _sync() { @@ -139,7 +138,7 @@ class AutoMoveSettingsWidget extends Gtk.ScrolledWindow { const removed = oldRules.filter( ({ id }) => !newRules.find(r => r.id === id)); - removed.forEach(r => r.destroy()); + removed.forEach(r => this._list.remove(r)); this._settings.unblock_signal_handler(this._changedId); this._updateAction.enabled = true; @@ -165,12 +164,6 @@ const RuleRow = GObject.registerClass({ }, }, class RuleRow extends Gtk.ListBoxRow { _init(appInfo, value) { - super._init({ - activatable: false, - value, - }); - this._appInfo = appInfo; - const box = new Gtk.Box({ spacing: 6, margin_top: 6, @@ -179,12 +172,19 @@ const RuleRow = GObject.registerClass({ margin_end: 6, }); + super._init({ + activatable: false, + value, + child: box, + }); + this._appInfo = appInfo; + const icon = new Gtk.Image({ gicon: appInfo.get_icon(), pixel_size: 32, }); icon.get_style_context().add_class('icon-dropshadow'); - box.add(icon); + box.append(icon); const label = new Gtk.Label({ label: appInfo.get_display_name(), @@ -193,7 +193,7 @@ const RuleRow = GObject.registerClass({ max_width_chars: 20, ellipsize: Pango.EllipsizeMode.END, }); - box.add(label); + box.append(label); const spinButton = new Gtk.SpinButton({ adjustment: new Gtk.Adjustment({ @@ -207,26 +207,20 @@ const RuleRow = GObject.registerClass({ this.bind_property('value', spinButton, 'value', GObject.BindingFlags.SYNC_CREATE | GObject.BindingFlags.BIDIRECTIONAL); - box.add(spinButton); + box.append(spinButton); const button = new Gtk.Button({ action_name: 'rules.remove', action_target: new GLib.Variant('s', this.id), - image: new Gtk.Image({ + child: new Gtk.Image({ icon_name: 'edit-delete-symbolic', pixel_size: 16, }), }); - box.add(button); + box.append(button); - this.add(box); - - this.connect('notify::value', () => { - const actionGroup = this.get_action_group('rules'); - actionGroup.activate_action('update', null); - }); - - this.show_all(); + this.connect('notify::value', + () => this.activate_action('rules.update', null)); } get id() { @@ -239,19 +233,17 @@ class NewRuleRow extends Gtk.ListBoxRow { _init() { super._init({ action_name: 'rules.add', + child: new Gtk.Image({ + icon_name: 'list-add-symbolic', + pixel_size: 16, + margin_top: 12, + margin_bottom: 12, + margin_start: 12, + margin_end: 12, + }), }); - this.get_accessible().set_name(_('Add Rule')); - - this.add(new Gtk.Image({ - icon_name: 'list-add-symbolic', - pixel_size: 16, - margin_top: 12, - margin_bottom: 12, - margin_start: 12, - margin_end: 12, - })); - - this.show_all(); + this.update_property( + [Gtk.AccessibleProperty.LABEL], [_('Add Rule')]); } }); @@ -273,8 +265,6 @@ class NewRuleDialog extends Gtk.AppChooserDialog { this.get_widget().connect('application-selected', this._updateSensitivity.bind(this)); this._updateSensitivity(); - - this.show(); } _updateSensitivity() {