[gnome-shell-extensions/wip/fmuellner/gtk4: 7/13] auto-move-windows: Port to GTK4




commit 955d385f27f1fae961525c487fe9d53074e5270e
Author: Florian Müllner <fmuellner gnome org>
Date:   Wed Apr 15 23:32:20 2020 +0200

    auto-move-windows: Port to GTK4
    
    Just like the previous ports, this consists mostly of
    replacing the old Gtk.Container methods.

 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 1324451..5db6c85 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: '<b>%s</b>'.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);
-
-        this.add(box);
-
-        this.connect('notify::value', () => {
-            const actionGroup = this.get_action_group('rules');
-            actionGroup.activate_action('update', null);
-        });
+        box.append(button);
 
-        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() {


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]