From d88be923837165c19fd377f05267a42bb7654a37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danielle=20For=C3=A9?= Date: Wed, 23 Apr 2025 11:28:48 -0700 Subject: [PATCH 01/19] Update deps --- meson.build | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/meson.build b/meson.build index 5b33394..9dd8a87 100644 --- a/meson.build +++ b/meson.build @@ -17,11 +17,11 @@ add_project_arguments('--vapidir=' + join_paths(meson.project_source_root(), 'va gdk_wl_dep = dependency('gdk-wayland-3.0') glib_dep = dependency('glib-2.0') gobject_dep = dependency('gobject-2.0') -granite_dep = dependency('granite', version: '>=6.0.0') -gtk_dep = dependency('gtk+-3.0') -handy_dep = dependency('libhandy-1', version: '>=1.0') +granite_dep = dependency('granite-7', version: '>=7.0.0') +gtk_dep = dependency('gtk4') +handy_dep = dependency('libadwaita-1', version: '>=1.0') packagekit_dep = dependency('packagekit-glib2') -wingpanel_dep = dependency('wingpanel') +wingpanel_dep = dependency('wingpanel-8') wingpanel_indicatorsdir = wingpanel_dep.get_pkgconfig_variable('indicatorsdir', define_variable: ['libdir', libdir]) wl_client_dep = dependency('wayland-client') portal_dep = dependency('libportal') From 98707beccb1fd1983271e1a5c9eb8445b2ca5bbd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danielle=20For=C3=A9?= Date: Wed, 23 Apr 2025 11:30:30 -0700 Subject: [PATCH 02/19] =?UTF-8?q?Hdy=20=E2=86=92=20Adw?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Widgets/CurrentUser.vala | 4 ++-- src/Widgets/EndSessionDialog.vala | 2 +- src/Widgets/SettingsToggle.vala | 6 +++--- src/Widgets/UserRow.vala | 6 +++--- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/Widgets/CurrentUser.vala b/src/Widgets/CurrentUser.vala index eb84e5b..e9e3fcf 100644 --- a/src/Widgets/CurrentUser.vala +++ b/src/Widgets/CurrentUser.vala @@ -7,7 +7,7 @@ public bool minimal { get; construct; } public Act.User? user { get; set; default = null; } - private Hdy.Avatar avatar; + private Adw.Avatar avatar; private Gtk.Label fullname_label; private Gtk.Label status_label; private Gtk.Button logout_button; @@ -29,7 +29,7 @@ } construct { - avatar = new Hdy.Avatar (minimal ? 32 : 48, null, true); + avatar = new Adw.Avatar (minimal ? 32 : 48, null, true); // We want to use the user's accent, not a random color unowned Gtk.StyleContext avatar_context = avatar.get_style_context (); diff --git a/src/Widgets/EndSessionDialog.vala b/src/Widgets/EndSessionDialog.vala index fbff7ca..8ae8835 100644 --- a/src/Widgets/EndSessionDialog.vala +++ b/src/Widgets/EndSessionDialog.vala @@ -14,7 +14,7 @@ public enum QuickSettings.EndSessionDialogType { RESTART = 2 } -public class QuickSettings.EndSessionDialog : Hdy.Window { +public class QuickSettings.EndSessionDialog : Gtk.Window { public signal void reboot (); public signal void shutdown (); public signal void logout (); diff --git a/src/Widgets/SettingsToggle.vala b/src/Widgets/SettingsToggle.vala index 2fe4b94..1430bb6 100644 --- a/src/Widgets/SettingsToggle.vala +++ b/src/Widgets/SettingsToggle.vala @@ -9,8 +9,6 @@ public class QuickSettings.SettingsToggle : Gtk.FlowBoxChild { public string label { get; construct; } public string settings_uri { get; set; default = "settings://"; } - private Gtk.GestureMultiPress middle_click_gesture; - public SettingsToggle (Icon icon, string label) { Object ( icon: icon, @@ -46,7 +44,7 @@ public class QuickSettings.SettingsToggle : Gtk.FlowBoxChild { bind_property ("icon", image, "gicon"); - middle_click_gesture = new Gtk.GestureMultiPress (button) { + var middle_click_gesture = new Gtk.GestureClick () { button = Gdk.BUTTON_MIDDLE }; middle_click_gesture.pressed.connect (() => { @@ -59,5 +57,7 @@ public class QuickSettings.SettingsToggle : Gtk.FlowBoxChild { critical ("Failed to open system settings: %s", e.message); } }); + + button.add_controller (middle_click_gesture); } } diff --git a/src/Widgets/UserRow.vala b/src/Widgets/UserRow.vala index e0c722d..07d6821 100644 --- a/src/Widgets/UserRow.vala +++ b/src/Widgets/UserRow.vala @@ -16,7 +16,7 @@ public class QuickSettings.UserRow : Gtk.ListBoxRow { } } - private Hdy.Avatar avatar; + private Adw.Avatar avatar; private Gtk.Label fullname_label; private Gtk.Label status_label; @@ -47,7 +47,7 @@ public class QuickSettings.UserRow : Gtk.ListBoxRow { status_label.get_style_context ().add_class (Granite.STYLE_CLASS_SMALL_LABEL); if (user == null) { - avatar = new Hdy.Avatar (ICON_SIZE, null, false); + avatar = new Adw.Avatar (ICON_SIZE, null, false); // We want to use the user's accent, not a random color unowned Gtk.StyleContext avatar_context = avatar.get_style_context (); @@ -66,7 +66,7 @@ public class QuickSettings.UserRow : Gtk.ListBoxRow { avatar_context.remove_class ("color13"); avatar_context.remove_class ("color14"); } else { - avatar = new Hdy.Avatar (ICON_SIZE, fullname, true); + avatar = new Adw.Avatar (ICON_SIZE, fullname, true); avatar.set_loadable_icon (get_avatar_icon ()); user.changed.connect (() => { From d1385f950456cd9f0259bfe1b5dff19af37b55a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danielle=20For=C3=A9?= Date: Wed, 23 Apr 2025 11:37:13 -0700 Subject: [PATCH 03/19] Update protocol stuff --- meson.build | 4 ++-- src/Widgets/EndSessionDialog.vala | 9 +++++---- src/meson.build | 2 +- vapi/gdk-wayland-3.0.vapi | 16 ---------------- 4 files changed, 8 insertions(+), 23 deletions(-) delete mode 100644 vapi/gdk-wayland-3.0.vapi diff --git a/meson.build b/meson.build index 9dd8a87..519dc09 100644 --- a/meson.build +++ b/meson.build @@ -12,13 +12,13 @@ datadir = prefix / get_option('datadir') add_global_arguments('-DGETTEXT_PACKAGE="@0@"'.format(meson.project_name()), language:'c') add_project_arguments('-DG_LOG_DOMAIN="@0@"'.format(meson.project_name()), language:'c') -add_project_arguments('--vapidir=' + join_paths(meson.project_source_root(), 'vapi'), language: 'vala') +# add_project_arguments('--vapidir=' + join_paths(meson.project_source_root(), 'vapi'), language: 'vala') -gdk_wl_dep = dependency('gdk-wayland-3.0') glib_dep = dependency('glib-2.0') gobject_dep = dependency('gobject-2.0') granite_dep = dependency('granite-7', version: '>=7.0.0') gtk_dep = dependency('gtk4') +gtk_wayland_dep = dependency('gtk4-wayland') handy_dep = dependency('libadwaita-1', version: '>=1.0') packagekit_dep = dependency('packagekit-glib2') wingpanel_dep = dependency('wingpanel-8') diff --git a/src/Widgets/EndSessionDialog.vala b/src/Widgets/EndSessionDialog.vala index 8ae8835..1192945 100644 --- a/src/Widgets/EndSessionDialog.vala +++ b/src/Widgets/EndSessionDialog.vala @@ -205,10 +205,11 @@ public class QuickSettings.EndSessionDialog : Gtk.Window { public void registry_handle_global (Wl.Registry wl_registry, uint32 name, string @interface, uint32 version) { if (@interface == "io_elementary_pantheon_shell_v1") { - var desktop_shell = wl_registry.bind (name, ref Pantheon.Desktop.Shell.iface, uint32.min (version, 1)); - unowned var window = get_window (); - if (window is Gdk.Wayland.Window) { - unowned var wl_surface = ((Gdk.Wayland.Window) window).get_wl_surface (); + desktop_shell = wl_registry.bind (name, ref Pantheon.Desktop.Shell.iface, uint32.min (version, 1)); + unowned var surface = get_surface (); + if (surface is Gdk.Wayland.Surface) { + unowned var wl_surface = ((Gdk.Wayland.Surface) surface).get_wl_surface (); + var extended_behavior = desktop_shell.get_extended_behavior (wl_surface); extended_behavior.set_keep_above (); extended_behavior.make_centered (); diff --git a/src/meson.build b/src/meson.build index f4becd8..da31cb4 100644 --- a/src/meson.build +++ b/src/meson.build @@ -36,11 +36,11 @@ shared_module( gresource, sources, dependencies: [ - gdk_wl_dep, glib_dep, gobject_dep, granite_dep, gtk_dep, + gtk_wayland_dep, handy_dep, wingpanel_dep, packagekit_dep, diff --git a/vapi/gdk-wayland-3.0.vapi b/vapi/gdk-wayland-3.0.vapi deleted file mode 100644 index f38aab4..0000000 --- a/vapi/gdk-wayland-3.0.vapi +++ /dev/null @@ -1,16 +0,0 @@ -[CCode (cheader_filename = "gdk/gdkwayland.h")] -namespace Gdk.Wayland { - [CCode (type_id = "GDK_TYPE_WAYLAND_WINDOW", type_check_function = "GDK_IS_WAYLAND_WINDOW")] - public class Window : Gdk.Window { - protected Window (); - - public unowned Wl.Surface get_wl_surface (); - } - - [CCode (type_id = "GDK_TYPE_WAYLAND_DISPLAY", type_check_function = "GDK_IS_WAYLAND_DISPLAY")] - public class Display : Gdk.Display { - protected Display (); - - public unowned Wl.Display get_wl_display (); - } -} From 3918bb3f1434d2f86254cdd10eb055c86ec240fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danielle=20For=C3=A9?= Date: Wed, 23 Apr 2025 11:46:17 -0700 Subject: [PATCH 04/19] Minor syntax changes --- src/PopoverWidget.vala | 48 ++++++++++++++--------------- src/Widgets/CurrentUser.vala | 15 +++++---- src/Widgets/EndSessionDialog.vala | 19 +++++------- src/Widgets/PreventSleepToggle.vala | 4 +-- src/Widgets/SessionBox.vala | 18 +++++------ src/Widgets/SettingsToggle.vala | 8 ++--- src/Widgets/TextScale.vala | 12 ++++---- src/Widgets/UserList.vala | 16 +++++----- src/Widgets/UserRow.vala | 11 +++---- 9 files changed, 70 insertions(+), 81 deletions(-) diff --git a/src/PopoverWidget.vala b/src/PopoverWidget.vala index 8859281..6700e02 100644 --- a/src/PopoverWidget.vala +++ b/src/PopoverWidget.vala @@ -47,8 +47,8 @@ public class QuickSettings.PopoverWidget : Gtk.Box { row_spacing = 12, selection_mode = NONE }; - toggle_box.get_style_context ().add_class ("togglebox"); - toggle_box.add (prevent_sleep_toggle); + toggle_box.add_css_class ("togglebox"); + toggle_box.append (prevent_sleep_toggle); var text_scale = new TextScale (); @@ -59,9 +59,9 @@ public class QuickSettings.PopoverWidget : Gtk.Box { current_user_button = new Gtk.Button () { child = current_user }; - current_user_button.get_style_context ().add_class ("circular"); - current_user_button.get_style_context ().add_class ("flat"); - current_user_button.get_style_context ().add_class ("no-padding"); + current_user_button.add_css_class ("circular"); + current_user_button.add_css_class ("flat"); + current_user_button.add_css_class ("no-padding"); var session_box = new SessionBox (server_type) { halign = END, @@ -70,15 +70,15 @@ public class QuickSettings.PopoverWidget : Gtk.Box { }; var bottom_box = new Gtk.Box (HORIZONTAL, 0); - bottom_box.add (current_user_button); - bottom_box.add (session_box); - bottom_box.get_style_context ().add_class ("togglebox"); + bottom_box.append (current_user_button); + bottom_box.append (session_box); + bottom_box.add_css_class ("togglebox"); main_box = new Gtk.Box (VERTICAL, 0); - main_box.add (toggle_box); - main_box.add (scale_box); - main_box.add (new Gtk.Separator (HORIZONTAL)); - main_box.add (bottom_box); + main_box.append (toggle_box); + main_box.append (scale_box); + main_box.append (new Gtk.Separator (HORIZONTAL)); + main_box.append (bottom_box); accounts_view = new UserList (); @@ -88,10 +88,10 @@ public class QuickSettings.PopoverWidget : Gtk.Box { transition_type = SLIDE_LEFT_RIGHT }; - stack.add (main_box); - stack.add (accounts_view); + stack.add_child (main_box); + stack.add_child (accounts_view); - add (stack); + append (stack); if (server_type == GREETER) { bottom_box.remove (current_user_button); @@ -99,16 +99,14 @@ public class QuickSettings.PopoverWidget : Gtk.Box { if (server_type != GREETER) { var darkmode_button = new DarkModeToggle (); - toggle_box.add (darkmode_button); - show_all (); + toggle_box.append (darkmode_button); } setup_sensor_proxy.begin ((obj, res) => { var sensor_proxy = setup_sensor_proxy.end (res); if (sensor_proxy.has_accelerometer) { var rotation_toggle = new RotationToggle (); - toggle_box.add (rotation_toggle); - show_all (); + toggle_box.append (rotation_toggle); }; }); @@ -123,18 +121,18 @@ public class QuickSettings.PopoverWidget : Gtk.Box { var glib_settings = new Settings ("io.elementary.desktop.quick-settings"); if (server_type == GREETER || glib_settings.get_boolean ("show-a11y")) { - toggle_box.add (screen_reader); - toggle_box.add (onscreen_keyboard); + toggle_box.append (screen_reader); + toggle_box.append (onscreen_keyboard); - scale_box.add (text_scale); + scale_box.append (text_scale); } glib_settings.changed["show-a11y"].connect (() => { if (glib_settings.get_boolean ("show-a11y") && screen_reader.parent == null) { - toggle_box.add (screen_reader); - toggle_box.add (onscreen_keyboard); + toggle_box.append (screen_reader); + toggle_box.append (onscreen_keyboard); - scale_box.add (text_scale); + scale_box.append (text_scale); } else { toggle_box.remove (screen_reader); toggle_box.remove (onscreen_keyboard); diff --git a/src/Widgets/CurrentUser.vala b/src/Widgets/CurrentUser.vala index e9e3fcf..6e7863f 100644 --- a/src/Widgets/CurrentUser.vala +++ b/src/Widgets/CurrentUser.vala @@ -52,14 +52,14 @@ valign = Gtk.Align.END, halign = Gtk.Align.START }; - fullname_label.get_style_context ().add_class (Granite.STYLE_CLASS_H3_LABEL); + fullname_label.add_css_class (Granite.STYLE_CLASS_H3_LABEL); status_label = new Gtk.Label (null) { valign = Gtk.Align.START, halign = Gtk.Align.START }; - status_label.get_style_context ().add_class (Gtk.STYLE_CLASS_DIM_LABEL); - status_label.get_style_context ().add_class (Granite.STYLE_CLASS_SMALL_LABEL); + status_label.add_css_class (Granite.STYLE_CLASS_DIM_LABEL); + status_label.add_css_class (Granite.STYLE_CLASS_SMALL_LABEL); logout_button = new Gtk.Button.from_icon_name ("system-log-out-symbolic") { tooltip_text = _("Log Out…"), @@ -67,10 +67,10 @@ halign = END, valign = CENTER }; - logout_button.get_style_context ().add_class ("circular"); + logout_button.add_css_class ("circular"); if (minimal) { - add (avatar); + append (avatar); } else { var grid = new Gtk.Grid () { column_spacing = 12 @@ -79,11 +79,10 @@ grid.attach (fullname_label, 1, 0, 1, 1); grid.attach (status_label, 1, 1, 1, 1); grid.attach (logout_button, 2, 0, 2, 2); - grid.show_all (); - get_style_context ().add_class ("menuitem"); + add_css_class ("menuitem"); - add (grid); + append (grid); } if (UserManager.get_usermanager ().is_loaded) { diff --git a/src/Widgets/EndSessionDialog.vala b/src/Widgets/EndSessionDialog.vala index 1192945..8b8d3e2 100644 --- a/src/Widgets/EndSessionDialog.vala +++ b/src/Widgets/EndSessionDialog.vala @@ -50,7 +50,8 @@ public class QuickSettings.EndSessionDialog : Gtk.Window { break; } - var image = new Gtk.Image.from_icon_name (icon_name, Gtk.IconSize.DIALOG) { + var image = new Gtk.Image.from_icon_name (icon_name) { + pixel_size = 48, valign = Gtk.Align.START }; @@ -60,7 +61,7 @@ public class QuickSettings.EndSessionDialog : Gtk.Window { wrap = true, xalign = 0 }; - primary_label.get_style_context ().add_class (Granite.STYLE_CLASS_PRIMARY_LABEL); + primary_label.add_css_class (Granite.STYLE_CLASS_PRIMARY_LABEL); var secondary_label = new Gtk.Label (content_text) { max_width_chars = 50, @@ -71,7 +72,7 @@ public class QuickSettings.EndSessionDialog : Gtk.Window { var cancel = new Gtk.Button.with_label (_("Cancel")); var confirm = new Gtk.Button.with_label (button_text); - confirm.get_style_context ().add_class (Gtk.STYLE_CLASS_DESTRUCTIVE_ACTION); + confirm.add_css_class (Granite.STYLE_CLASS_DESTRUCTIVE_ACTION); var action_area = new Gtk.ButtonBox (Gtk.Orientation.HORIZONTAL) { layout_style = Gtk.ButtonBoxStyle.END, @@ -129,17 +130,11 @@ public class QuickSettings.EndSessionDialog : Gtk.Window { grid.attach (action_area, 0, 3, 2); - grid.show_all (); - deletable = false; resizable = false; - skip_taskbar_hint = true; - skip_pager_hint = true; - type_hint = Gdk.WindowTypeHint.DIALOG; - set_keep_above (true); - window_position = Gtk.WindowPosition.CENTER; - stick (); - add (grid); + child = grid; + + add_css_class ("dialog"); cancel.grab_focus (); diff --git a/src/Widgets/PreventSleepToggle.vala b/src/Widgets/PreventSleepToggle.vala index 728bed3..828833e 100644 --- a/src/Widgets/PreventSleepToggle.vala +++ b/src/Widgets/PreventSleepToggle.vala @@ -23,12 +23,12 @@ public class QuickSettings.PreventSleepToggle: SettingsToggle { if (_prevent_sleep_toggle.active && suspend_cookie == 0 && idle_cookie == 0) { suspend_cookie = application.inhibit ( - (Gtk.Window) get_toplevel (), + (Gtk.Window) get_root (), Gtk.ApplicationInhibitFlags.SUSPEND, "Prevent session from suspending" ); idle_cookie = application.inhibit ( - (Gtk.Window) get_toplevel (), + (Gtk.Window) get_root (), Gtk.ApplicationInhibitFlags.IDLE, "Prevent session from idle" ); diff --git a/src/Widgets/SessionBox.vala b/src/Widgets/SessionBox.vala index 43a3f57..274f8d3 100644 --- a/src/Widgets/SessionBox.vala +++ b/src/Widgets/SessionBox.vala @@ -18,28 +18,28 @@ public class QuickSettings.SessionBox : Gtk.Box { var settings_button = new Gtk.Button.from_icon_name ("preferences-system-symbolic") { tooltip_text = _("System Settings…") }; - settings_button.get_style_context ().add_class ("circular"); + settings_button.add_css_class ("circular"); var suspend_button = new Gtk.Button.from_icon_name ("system-suspend-symbolic") { tooltip_text = _("Suspend") }; - suspend_button.get_style_context ().add_class ("circular"); + suspend_button.add_css_class ("circular"); var lock_button = new Gtk.Button.from_icon_name ("system-lock-screen-symbolic") { tooltip_text = _("Lock") }; - lock_button.get_style_context ().add_class ("circular"); + lock_button.add_css_class ("circular"); var shutdown_button = new Gtk.Button.from_icon_name ("system-shutdown-symbolic") { tooltip_text = _("Shut Down…") }; - shutdown_button.get_style_context ().add_class ("circular"); + shutdown_button.add_css_class ("circular"); spacing = 6; - add (settings_button); - add (suspend_button); - add (lock_button); - add (shutdown_button); + append (settings_button); + append (suspend_button); + append (lock_button); + append (shutdown_button); realize.connect (() => { popover = (Gtk.Popover) get_ancestor (typeof (Gtk.Popover)); @@ -143,7 +143,7 @@ public class QuickSettings.SessionBox : Gtk.Box { unowned var server = EndSessionDialogServer.get_default (); current_dialog = new EndSessionDialog (type) { - transient_for = (Gtk.Window) get_toplevel () + transient_for = (Gtk.Window) get_root () }; current_dialog.destroy.connect (() => { server.closed (); diff --git a/src/Widgets/SettingsToggle.vala b/src/Widgets/SettingsToggle.vala index 1430bb6..14f0d87 100644 --- a/src/Widgets/SettingsToggle.vala +++ b/src/Widgets/SettingsToggle.vala @@ -17,7 +17,7 @@ public class QuickSettings.SettingsToggle : Gtk.FlowBoxChild { } construct { - var image = new Gtk.Image.from_gicon (icon, MENU); + var image = new Gtk.Image.from_gicon (icon); var button = new Gtk.ToggleButton () { halign = CENTER, @@ -31,11 +31,11 @@ public class QuickSettings.SettingsToggle : Gtk.FlowBoxChild { max_width_chars = 13, mnemonic_widget = button }; - label_widget.get_style_context ().add_class (Granite.STYLE_CLASS_SMALL_LABEL); + label_widget.add_css_class (Granite.STYLE_CLASS_SMALL_LABEL); var box = new Gtk.Box (VERTICAL, 3); - box.add (button); - box.add (label_widget); + box.append (button); + box.append (label_widget); can_focus = false; child = box; diff --git a/src/Widgets/TextScale.vala b/src/Widgets/TextScale.vala index ce847a2..af605b7 100644 --- a/src/Widgets/TextScale.vala +++ b/src/Widgets/TextScale.vala @@ -16,7 +16,7 @@ public class QuickSettings.TextScale : Gtk.Box { zoom_out_button = new Gtk.Button.from_icon_name ("format-text-smaller-symbolic") { tooltip_text = _("Decrease text size") }; - zoom_out_button.get_style_context ().add_class ("circular"); + zoom_out_button.add_css_class ("circular"); var zoom_adjustment = new Gtk.Adjustment (-1, 0.75, 1.75, 0.05, 0, 0); @@ -30,12 +30,12 @@ public class QuickSettings.TextScale : Gtk.Box { zoom_in_button = new Gtk.Button.from_icon_name ("format-text-larger-symbolic") { tooltip_text = _("Increase text size") }; - zoom_in_button.get_style_context ().add_class ("circular"); + zoom_in_button.add_css_class ("circular"); - get_style_context ().add_class ("font-size"); - add (zoom_out_button); - add (zoom_scale); - add (zoom_in_button); + add_css_class ("font-size"); + append (zoom_out_button); + append (zoom_scale); + append (zoom_in_button); interface_settings = new Settings ("org.gnome.desktop.interface"); interface_settings.bind ("text-scaling-factor", zoom_adjustment, "value", GET); diff --git a/src/Widgets/UserList.vala b/src/Widgets/UserList.vala index 8384f38..778caef 100644 --- a/src/Widgets/UserList.vala +++ b/src/Widgets/UserList.vala @@ -43,8 +43,8 @@ }; var user_list_vbox = new Gtk.Box (VERTICAL, 0); - user_list_vbox.add (new Gtk.Separator (HORIZONTAL)); - user_list_vbox.add (listbox_scrolled); + user_list_vbox.append (new Gtk.Separator (HORIZONTAL)); + user_list_vbox.append (listbox_scrolled); user_list_revealer = new Gtk.Revealer () { child = user_list_vbox, @@ -52,10 +52,10 @@ }; orientation = VERTICAL; - add (current_user); - add (user_list_revealer); - add (new Gtk.Separator (HORIZONTAL)); - add (settings_button); + append (current_user); + append (user_list_revealer); + append (new Gtk.Separator (HORIZONTAL)); + append (settings_button); if (UserManager.get_usermanager ().is_loaded) { init_users (); @@ -171,7 +171,7 @@ user_map[uid] = new UserRow (user); user_map[uid].show (); - listbox.add (user_map[uid]); + listbox.append (user_map[uid]); user_list_revealer.reveal_child = listbox.get_row_at_index (0) != null; } @@ -188,7 +188,7 @@ user_map[GUEST_USER_UID] = new UserRow.guest (); user_map[GUEST_USER_UID].show (); - listbox.add (user_map[GUEST_USER_UID]); + listbox.append (user_map[GUEST_USER_UID]); user_list_revealer.reveal_child = listbox.get_row_at_index (0) != null; } diff --git a/src/Widgets/UserRow.vala b/src/Widgets/UserRow.vala index 07d6821..1e53f00 100644 --- a/src/Widgets/UserRow.vala +++ b/src/Widgets/UserRow.vala @@ -37,14 +37,14 @@ public class QuickSettings.UserRow : Gtk.ListBoxRow { valign = Gtk.Align.END, halign = Gtk.Align.START }; - fullname_label.get_style_context ().add_class (Granite.STYLE_CLASS_H3_LABEL); + fullname_label.add_css_class (Granite.STYLE_CLASS_H3_LABEL); status_label = new Gtk.Label (null) { valign = Gtk.Align.START, halign = Gtk.Align.START }; - status_label.get_style_context ().add_class (Gtk.STYLE_CLASS_DIM_LABEL); - status_label.get_style_context ().add_class (Granite.STYLE_CLASS_SMALL_LABEL); + status_label.add_css_class (Granite.STYLE_CLASS_DIM_LABEL); + status_label.add_css_class (Granite.STYLE_CLASS_SMALL_LABEL); if (user == null) { avatar = new Adw.Avatar (ICON_SIZE, null, false); @@ -80,9 +80,8 @@ public class QuickSettings.UserRow : Gtk.ListBoxRow { grid.attach (avatar, 0, 0, 1, 2); grid.attach (fullname_label, 1, 0, 1, 1); grid.attach (status_label, 1, 1, 1, 1); - grid.show_all (); - get_style_context ().add_class ("menuitem"); + add_css_class ("menuitem"); child = grid; update_state.begin (); @@ -129,8 +128,6 @@ public class QuickSettings.UserRow : Gtk.ListBoxRow { } ((Gtk.ListBox) parent).invalidate_sort (); - - show_all (); } public override bool draw (Cairo.Context ctx) { From f03c1226a35d5375b87dcb5cd1ece6d0fdf7a93c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danielle=20For=C3=A9?= Date: Wed, 23 Apr 2025 11:47:35 -0700 Subject: [PATCH 05/19] Remove commented vapidir --- meson.build | 1 - 1 file changed, 1 deletion(-) diff --git a/meson.build b/meson.build index 519dc09..e613e68 100644 --- a/meson.build +++ b/meson.build @@ -12,7 +12,6 @@ datadir = prefix / get_option('datadir') add_global_arguments('-DGETTEXT_PACKAGE="@0@"'.format(meson.project_name()), language:'c') add_project_arguments('-DG_LOG_DOMAIN="@0@"'.format(meson.project_name()), language:'c') -# add_project_arguments('--vapidir=' + join_paths(meson.project_source_root(), 'vapi'), language: 'vala') glib_dep = dependency('glib-2.0') gobject_dep = dependency('gobject-2.0') From a50e218482311b1183a91177ca35b14dc897e9e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danielle=20For=C3=A9?= Date: Wed, 23 Apr 2025 11:49:34 -0700 Subject: [PATCH 06/19] copy/paste error --- src/Widgets/EndSessionDialog.vala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Widgets/EndSessionDialog.vala b/src/Widgets/EndSessionDialog.vala index 8b8d3e2..afc1cc0 100644 --- a/src/Widgets/EndSessionDialog.vala +++ b/src/Widgets/EndSessionDialog.vala @@ -200,7 +200,7 @@ public class QuickSettings.EndSessionDialog : Gtk.Window { public void registry_handle_global (Wl.Registry wl_registry, uint32 name, string @interface, uint32 version) { if (@interface == "io_elementary_pantheon_shell_v1") { - desktop_shell = wl_registry.bind (name, ref Pantheon.Desktop.Shell.iface, uint32.min (version, 1)); + var desktop_shell = wl_registry.bind (name, ref Pantheon.Desktop.Shell.iface, uint32.min (version, 1)); unowned var surface = get_surface (); if (surface is Gdk.Wayland.Surface) { unowned var wl_surface = ((Gdk.Wayland.Surface) surface).get_wl_surface (); From 19dc14956ee2ac9a8b2abba04f66721ec6ac1dc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danielle=20For=C3=A9?= Date: Wed, 23 Apr 2025 11:51:27 -0700 Subject: [PATCH 07/19] other small changes --- src/Widgets/EndSessionDialog.vala | 2 +- src/Widgets/UserList.vala | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Widgets/EndSessionDialog.vala b/src/Widgets/EndSessionDialog.vala index afc1cc0..1d93f3d 100644 --- a/src/Widgets/EndSessionDialog.vala +++ b/src/Widgets/EndSessionDialog.vala @@ -61,7 +61,7 @@ public class QuickSettings.EndSessionDialog : Gtk.Window { wrap = true, xalign = 0 }; - primary_label.add_css_class (Granite.STYLE_CLASS_PRIMARY_LABEL); + primary_label.add_css_class (Granite.STYLE_CLASS_TITLE_LABEL); var secondary_label = new Gtk.Label (content_text) { max_width_chars = 50, diff --git a/src/Widgets/UserList.vala b/src/Widgets/UserList.vala index 778caef..ef70181 100644 --- a/src/Widgets/UserList.vala +++ b/src/Widgets/UserList.vala @@ -31,7 +31,7 @@ }; listbox.set_sort_func (sort_func); - var listbox_scrolled = new Gtk.ScrolledWindow (null, null) { + var listbox_scrolled = new Gtk.ScrolledWindow () { hscrollbar_policy = NEVER, max_content_height = 200, propagate_natural_height = true, From 213ca01d12d21834afd7220fe03129806f1a2700 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danielle=20For=C3=A9?= Date: Mon, 28 Apr 2025 11:59:03 -0700 Subject: [PATCH 08/19] More little fixes --- src/Indicator.vala | 6 +++--- src/Widgets/SettingsToggle.vala | 3 +-- src/Widgets/UserList.vala | 2 +- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/Indicator.vala b/src/Indicator.vala index 04642b1..c941c6c 100644 --- a/src/Indicator.vala +++ b/src/Indicator.vala @@ -22,7 +22,7 @@ public class QuickSettings.Indicator : Wingpanel.Indicator { // Prevent a race that skips automatic resource loading // https://github.com/elementary/wingpanel-indicator-bluetooth/issues/203 - Gtk.IconTheme.get_default ().add_resource_path ("/org/elementary/wingpanel/icons"); + Gtk.IconTheme.get_for_display (Gdk.Display.get_default ()).add_resource_path ("/org/elementary/wingpanel/icons"); } public override Gtk.Widget get_display_widget () { @@ -39,8 +39,8 @@ public class QuickSettings.Indicator : Wingpanel.Indicator { var provider = new Gtk.CssProvider (); provider.load_from_resource ("io/elementary/quick-settings/Indicator.css"); - Gtk.StyleContext.add_provider_for_screen ( - Gdk.Screen.get_default (), + Gtk.StyleContext.add_provider_for_display ( + Gdk.Display.get_default (), provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION ); diff --git a/src/Widgets/SettingsToggle.vala b/src/Widgets/SettingsToggle.vala index c911367..d16d786 100644 --- a/src/Widgets/SettingsToggle.vala +++ b/src/Widgets/SettingsToggle.vala @@ -19,8 +19,7 @@ public class QuickSettings.SettingsToggle : Gtk.FlowBoxChild { var image = new Gtk.Image (); var button = new Gtk.ToggleButton () { - halign = CENTER, - image = image + halign = CENTER }; var label_widget = new Gtk.Label (label) { diff --git a/src/Widgets/UserList.vala b/src/Widgets/UserList.vala index ef70181..18ebdd5 100644 --- a/src/Widgets/UserList.vala +++ b/src/Widgets/UserList.vala @@ -38,7 +38,7 @@ child = listbox }; - var settings_button = new Gtk.ModelButton () { + var settings_button = new Wingpanel.PopoverMenuItem () { text = _("User Accounts Settings…") }; From df726aabf58ca5225c86e6901ad88b8ab2e19c52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danielle=20For=C3=A9?= Date: Mon, 28 Apr 2025 12:38:50 -0700 Subject: [PATCH 09/19] EndSessionDialog: cast as widget to realize connect --- src/Widgets/EndSessionDialog.vala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Widgets/EndSessionDialog.vala b/src/Widgets/EndSessionDialog.vala index 1d93f3d..1863fbe 100644 --- a/src/Widgets/EndSessionDialog.vala +++ b/src/Widgets/EndSessionDialog.vala @@ -170,7 +170,7 @@ public class QuickSettings.EndSessionDialog : Gtk.Window { destroy (); }); - realize.connect (() => Idle.add_once (() => init_wl ())); + ((Gtk.Widget) this).realize.connect (() => Idle.add_once (() => init_wl ())); } private bool set_offline_trigger (Pk.OfflineAction action) { From ac1afdd70abb2304731451a63623dac0cde9b8d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danielle=20For=C3=A9?= Date: Mon, 28 Apr 2025 12:41:43 -0700 Subject: [PATCH 10/19] Connect to close request --- src/Widgets/SessionBox.vala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Widgets/SessionBox.vala b/src/Widgets/SessionBox.vala index 274f8d3..6616423 100644 --- a/src/Widgets/SessionBox.vala +++ b/src/Widgets/SessionBox.vala @@ -134,7 +134,7 @@ public class QuickSettings.SessionBox : Gtk.Box { if (current_dialog != null) { if (current_dialog.dialog_type != type) { - current_dialog.destroy (); + current_dialog.close (); } else { return; } @@ -145,7 +145,7 @@ public class QuickSettings.SessionBox : Gtk.Box { current_dialog = new EndSessionDialog (type) { transient_for = (Gtk.Window) get_root () }; - current_dialog.destroy.connect (() => { + current_dialog.close_request.connect (() => { server.closed (); current_dialog = null; }); From 9c43e14178b0a389bb8cac4dfc0507d9f1715dd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danielle=20For=C3=A9?= Date: Mon, 28 Apr 2025 14:52:08 -0700 Subject: [PATCH 11/19] merge main --- src/Widgets/EndSessionDialog.vala | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/Widgets/EndSessionDialog.vala b/src/Widgets/EndSessionDialog.vala index 5b26020..2e5bbc1 100644 --- a/src/Widgets/EndSessionDialog.vala +++ b/src/Widgets/EndSessionDialog.vala @@ -23,7 +23,6 @@ public class QuickSettings.EndSessionDialog : Gtk.Window { public EndSessionDialogType dialog_type { get; construct; } private Gtk.CheckButton? updates_check_button; - private Gtk.EventControllerKey key_controller; public EndSessionDialog (QuickSettings.EndSessionDialogType type) { Object (dialog_type: type); @@ -94,11 +93,11 @@ public class QuickSettings.EndSessionDialog : Gtk.Window { destroy (); }); - action_area.add (confirm_restart); + action_area.append (confirm_restart); } - action_area.add (cancel); - action_area.add (confirm); + action_area.append (cancel); + action_area.append (confirm); var grid = new Gtk.Grid () { column_spacing = 12, @@ -149,13 +148,15 @@ public class QuickSettings.EndSessionDialog : Gtk.Window { cancel_action.activate (null); }); - key_controller = new Gtk.EventControllerKey (this); + var key_controller = new Gtk.EventControllerKey (); key_controller.key_released.connect ((keyval, keycode, state) => { if (keyval == Gdk.Key.Escape) { cancel_action.activate (null); } }); + ((Gtk.Widget) this).add_controller (key_controller); + confirm.clicked.connect (() => { if (dialog_type == EndSessionDialogType.RESTART || dialog_type == EndSessionDialogType.SHUTDOWN) { if (set_offline_trigger (POWER_OFF)) { From 4a93e248835b97185e4de36f43462083ac92615c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danielle=20For=C3=A9?= Date: Fri, 6 Jun 2025 11:47:17 -0700 Subject: [PATCH 12/19] Final compilation stuff --- src/Widgets/CurrentUser.vala | 13 ++++++------- src/Widgets/SessionBox.vala | 1 + src/Widgets/UserRow.vala | 18 +++++++++--------- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/Widgets/CurrentUser.vala b/src/Widgets/CurrentUser.vala index 6e7863f..06f219d 100644 --- a/src/Widgets/CurrentUser.vala +++ b/src/Widgets/CurrentUser.vala @@ -131,13 +131,12 @@ } } - private GLib.LoadableIcon? get_avatar_icon () { - var file = File.new_for_path (user.get_icon_file ()); - if (file.query_exists ()) { - return new FileIcon (file); + private Gdk.Texture? get_avatar_icon () { + try { + return Gdk.Texture.from_filename (user.get_icon_file ()); + } catch { + return null; } - - return null; } public async void update_state () { @@ -165,6 +164,6 @@ fullname_label.label = user.real_name; avatar.text = user.real_name; - avatar.set_loadable_icon (get_avatar_icon ()); + avatar.custom_image = get_avatar_icon (); } } diff --git a/src/Widgets/SessionBox.vala b/src/Widgets/SessionBox.vala index 01c7e53..6696166 100644 --- a/src/Widgets/SessionBox.vala +++ b/src/Widgets/SessionBox.vala @@ -148,6 +148,7 @@ public class QuickSettings.SessionBox : Gtk.Box { current_dialog.close_request.connect (() => { server.closed (); current_dialog = null; + return Gdk.EVENT_PROPAGATE; }); current_dialog.cancelled.connect (() => { diff --git a/src/Widgets/UserRow.vala b/src/Widgets/UserRow.vala index c2f34d7..eb3fc76 100644 --- a/src/Widgets/UserRow.vala +++ b/src/Widgets/UserRow.vala @@ -66,8 +66,9 @@ public class QuickSettings.UserRow : Gtk.ListBoxRow { avatar_context.remove_class ("color13"); avatar_context.remove_class ("color14"); } else { - avatar = new Adw.Avatar (ICON_SIZE, fullname, true); - avatar.set_loadable_icon (get_avatar_icon ()); + avatar = new Adw.Avatar (ICON_SIZE, fullname, true) { + custom_image = Gdk.Texture.from_filename (user.get_icon_file ()) + }; user.changed.connect (() => { update_state.begin (); @@ -87,13 +88,12 @@ public class QuickSettings.UserRow : Gtk.ListBoxRow { update_state.begin (); } - private GLib.LoadableIcon? get_avatar_icon () { - var file = File.new_for_path (user.get_icon_file ()); - if (file.query_exists ()) { - return new FileIcon (file); + private Gdk.Texture? get_avatar_icon () { + try { + return Gdk.Texture.from_filename (user.get_icon_file ()); + } catch { + return null; } - - return null; } public async UserState get_user_state () { @@ -119,7 +119,7 @@ public class QuickSettings.UserRow : Gtk.ListBoxRow { if (user != null) { fullname_label.label = user.real_name; avatar.text = user.real_name; - avatar.set_loadable_icon (get_avatar_icon ()); + avatar.custom_image = get_avatar_icon (); sensitive = !user.locked; if (user.locked) { From 8eb0ed12ea2fe110406cfd72dfcdc50b82227ffa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danielle=20For=C3=A9?= Date: Fri, 6 Jun 2025 11:49:59 -0700 Subject: [PATCH 13/19] try to bump deps --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 4ed9add..4bbaada 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -24,7 +24,7 @@ jobs: - name: Install Dependencies run: | apt update - apt install -y libglib2.0-dev libgtk-3-dev libpackagekit-glib2-dev libportal-dev libwingpanel-dev libaccountsservice-dev meson valac + apt install -y libadwaita-1-dev libglib2.0-dev libgtk-4-dev libpackagekit-glib2-dev libportal-dev libwingpanel-7-dev libaccountsservice-dev meson valac - name: Build env: DESTDIR: out From d28a2c9e0d7dbe8f65a80627ee9bfbb844c11d88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danielle=20For=C3=A9?= Date: Fri, 6 Jun 2025 11:52:50 -0700 Subject: [PATCH 14/19] bump wingpanel version --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 4bbaada..e3bf6ec 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -24,7 +24,7 @@ jobs: - name: Install Dependencies run: | apt update - apt install -y libadwaita-1-dev libglib2.0-dev libgtk-4-dev libpackagekit-glib2-dev libportal-dev libwingpanel-7-dev libaccountsservice-dev meson valac + apt install -y libadwaita-1-dev libglib2.0-dev libgtk-4-dev libpackagekit-glib2-dev libportal-dev libwingpanel-8-dev libaccountsservice-dev meson valac - name: Build env: DESTDIR: out From 53b842f61b1ee4cfb22f5ef197599c5e4022178d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danielle=20For=C3=A9?= Date: Fri, 6 Jun 2025 12:05:01 -0700 Subject: [PATCH 15/19] Bump README --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index b035ef0..a667e5e 100644 --- a/README.md +++ b/README.md @@ -7,9 +7,9 @@ You'll need the following dependencies: -* libgranite-dev -* libhandy-1-dev -* libwingpanel-dev +* libgranite-7-dev +* libadwaita-1-dev +* libwingpanel-8-dev * meson * valac From 602ad609a0f09ed8a367d3b8587dccfc5e0aab92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danielle=20For=C3=A9?= Date: Fri, 6 Jun 2025 12:06:25 -0700 Subject: [PATCH 16/19] Fix an oops --- src/Widgets/UserRow.vala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Widgets/UserRow.vala b/src/Widgets/UserRow.vala index eb3fc76..96208ae 100644 --- a/src/Widgets/UserRow.vala +++ b/src/Widgets/UserRow.vala @@ -67,7 +67,7 @@ public class QuickSettings.UserRow : Gtk.ListBoxRow { avatar_context.remove_class ("color14"); } else { avatar = new Adw.Avatar (ICON_SIZE, fullname, true) { - custom_image = Gdk.Texture.from_filename (user.get_icon_file ()) + custom_image = get_avatar_icon () }; user.changed.connect (() => { From a44fe8b88fa910631f5d42c82e6a3f48bb721a2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danielle=20For=C3=A9?= Date: Fri, 6 Jun 2025 12:16:23 -0700 Subject: [PATCH 17/19] Fix missing toggle icons --- src/Widgets/SettingsToggle.vala | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/Widgets/SettingsToggle.vala b/src/Widgets/SettingsToggle.vala index d16d786..fc923c0 100644 --- a/src/Widgets/SettingsToggle.vala +++ b/src/Widgets/SettingsToggle.vala @@ -16,8 +16,6 @@ public class QuickSettings.SettingsToggle : Gtk.FlowBoxChild { } construct { - var image = new Gtk.Image (); - var button = new Gtk.ToggleButton () { halign = CENTER }; @@ -40,7 +38,7 @@ public class QuickSettings.SettingsToggle : Gtk.FlowBoxChild { button.bind_property ("active", this, "active", SYNC_CREATE | BIDIRECTIONAL); - bind_property ("icon-name", image, "icon-name"); + bind_property ("icon-name", button, "icon-name", SYNC_CREATE); var middle_click_gesture = new Gtk.GestureClick () { button = Gdk.BUTTON_MIDDLE From 381d3f0add45525f46e5f3e27fecbcd4305a756c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danielle=20For=C3=A9?= Date: Fri, 6 Jun 2025 12:17:17 -0700 Subject: [PATCH 18/19] center align text scale buttons --- src/Widgets/TextScale.vala | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Widgets/TextScale.vala b/src/Widgets/TextScale.vala index af605b7..2a8395f 100644 --- a/src/Widgets/TextScale.vala +++ b/src/Widgets/TextScale.vala @@ -14,7 +14,8 @@ public class QuickSettings.TextScale : Gtk.Box { construct { zoom_out_button = new Gtk.Button.from_icon_name ("format-text-smaller-symbolic") { - tooltip_text = _("Decrease text size") + tooltip_text = _("Decrease text size"), + valign = CENTER }; zoom_out_button.add_css_class ("circular"); @@ -28,7 +29,8 @@ public class QuickSettings.TextScale : Gtk.Box { zoom_scale.add_mark (1.5, BOTTOM, null); zoom_in_button = new Gtk.Button.from_icon_name ("format-text-larger-symbolic") { - tooltip_text = _("Increase text size") + tooltip_text = _("Increase text size"), + valign = CENTER }; zoom_in_button.add_css_class ("circular"); From dfd575e1686d4bfa4da45ab1788b8dbe405d9898 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danielle=20For=C3=A9?= Date: Tue, 17 Jun 2025 12:01:52 -0700 Subject: [PATCH 19/19] Fix rotation lock style --- src/Widgets/SettingsToggle.vala | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Widgets/SettingsToggle.vala b/src/Widgets/SettingsToggle.vala index 9546071..486714f 100644 --- a/src/Widgets/SettingsToggle.vala +++ b/src/Widgets/SettingsToggle.vala @@ -13,6 +13,7 @@ public class QuickSettings.SettingsToggle : Gtk.FlowBoxChild { set { button.get_child ().unparent (); button.child = value; + button.add_css_class ("image-button"); } }