diff --git a/desktop/budgie/budgie-desktop/files/a040ccb.patch b/desktop/budgie/budgie-desktop/files/a040ccb.patch new file mode 100644 index 0000000000..0c5fd889ec --- /dev/null +++ b/desktop/budgie/budgie-desktop/files/a040ccb.patch @@ -0,0 +1,318 @@ +From a040ccb96094f1d3a1ee81a6733c9434722bdf6c Mon Sep 17 00:00:00 2001 +From: Evan Maddock <5157277+EbonJaeger@users.noreply.github.com> +Date: Sat, 2 Mar 2024 09:54:41 -0500 +Subject: [PATCH] vapi: Update libxfce4windowing to 4.19.3 (#547) + +Fixes #546 + +Signed-off-by: Evan Maddock +--- + src/daemon/tabswitcher.vala | 6 +-- + src/panel/applets/workspaces/WindowIcon.vala | 2 +- + .../applets/workspaces/WorkspaceItem.vala | 2 +- + .../applets/workspaces/WorkspacesApplet.vala | 6 +-- + vapi/README.md | 33 +++++++++--- + vapi/libxfce4windowing-0.deps | 1 + + vapi/libxfce4windowing-0.vapi | 52 ++++++++++++++----- + 7 files changed, 75 insertions(+), 27 deletions(-) + +diff --git a/src/daemon/tabswitcher.vala b/src/daemon/tabswitcher.vala +index 8aa97db6d..d7dbd8286 100644 +--- a/src/daemon/tabswitcher.vala ++++ b/src/daemon/tabswitcher.vala +@@ -61,7 +61,7 @@ namespace Budgie { + public TabSwitcherWidget(Budgie.AppSystem app_system, libxfce4windowing.Window? win) { + Object(); + window = win; +- var uid = window.get_id(); ++ ulong uid = (ulong) window.x11_get_xid(); + id = uid.to_string(); + set_title(); + +@@ -334,7 +334,7 @@ namespace Budgie { + } + + private void set_window_as_activated(libxfce4windowing.Window window) { +- string id = window.get_id().to_string(); ++ string id = ((ulong) window.x11_get_xid()).to_string(); + unowned List entries = recency.find_custom(id, strcmp); + recency.remove_link(entries); + recency.prepend(id); +@@ -365,7 +365,7 @@ namespace Budgie { + /* Switch focus to the item with the xid */ + public void focus_item(bool backwards) { + unowned libxfce4windowing.Window? active_window = xfce_screen.get_active_window(); +- TabSwitcherWidget? widget = active_window != null ? ids.get(active_window.get_id().to_string()) : null; ++ TabSwitcherWidget? widget = active_window != null ? ids.get(((ulong) active_window.x11_get_xid()).to_string()) : null; + + // Visible, each input should cycle to previous / next + if (visible) { +diff --git a/src/panel/applets/workspaces/WindowIcon.vala b/src/panel/applets/workspaces/WindowIcon.vala +index a9efc0232..7e36cafe0 100644 +--- a/src/panel/applets/workspaces/WindowIcon.vala ++++ b/src/panel/applets/workspaces/WindowIcon.vala +@@ -72,7 +72,7 @@ namespace Workspaces { + } + + public void on_drag_data_get(Gtk.Widget widget, Gdk.DragContext context, Gtk.SelectionData selection_data, uint target_type, uint time) { +- ulong window_xid = (ulong)window.get_id(); ++ ulong window_xid = (ulong)window.x11_get_xid(); + uchar[] buf; + convert_ulong_to_bytes(window_xid, out buf); + selection_data.set( +diff --git a/src/panel/applets/workspaces/WorkspaceItem.vala b/src/panel/applets/workspaces/WorkspaceItem.vala +index eccab8e70..ef76ee904 100644 +--- a/src/panel/applets/workspaces/WorkspaceItem.vala ++++ b/src/panel/applets/workspaces/WorkspaceItem.vala +@@ -179,7 +179,7 @@ namespace Workspaces { + if (data != null) { + try { + foreach (libxfce4windowing.Window window in WorkspacesApplet.xfce_screen.get_windows()) { +- if (window.get_id() == *data) { ++ if (window.x11_get_xid() == *data) { + window.move_to_workspace(this.workspace); + dnd_success = true; + break; +diff --git a/src/panel/applets/workspaces/WorkspacesApplet.vala b/src/panel/applets/workspaces/WorkspacesApplet.vala +index 5d3435ac4..237bacd2e 100644 +--- a/src/panel/applets/workspaces/WorkspacesApplet.vala ++++ b/src/panel/applets/workspaces/WorkspacesApplet.vala +@@ -278,8 +278,8 @@ namespace Workspaces { + } + + private void connect_signals() { +- connections += workspace_group.workspace_created.connect(workspace_added); +- connections += workspace_group.workspace_destroyed.connect(workspace_removed); ++ connections += workspace_group.workspace_added.connect(workspace_added); ++ connections += workspace_group.workspace_removed.connect(workspace_removed); + connections += workspace_group.active_workspace_changed.connect(set_current_workspace); + connections += xfce_screen.active_window_changed.connect(update_workspaces); + connections += xfce_screen.window_opened.connect(window_opened); +@@ -403,7 +403,7 @@ namespace Workspaces { + + libxfce4windowing.Window? window = null; + foreach (libxfce4windowing.Window win in xfce_screen.get_windows()) { +- if (win.get_id() == *data) { ++ if (win.x11_get_xid() == *data) { + window = win; + break; + } +diff --git a/vapi/README.md b/vapi/README.md +index 6bd29f17d..857655b35 100644 +--- a/vapi/README.md ++++ b/vapi/README.md +@@ -1,17 +1,36 @@ +-Refreshing vapis +--------------- ++## Refreshing vapis ++ ++### Polkit + + To refresh the Polkit vapi files: + +- vapigen --library polkit-gobject-1 /usr/share/gir-1.0/Polkit-1.0.gir --pkg gio-unix-2.0 +- vapigen --library polkit-agent-1 /usr/share/gir-1.0/PolkitAgent-1.0.gir --pkg gio-unix-2.0 --pkg polkit-gobject-1 --girdir=. --vapidir=. ++```bash ++vapigen --library polkit-gobject-1 /usr/share/gir-1.0/Polkit-1.0.gir --pkg gio-unix-2.0 ++vapigen --library polkit-agent-1 /usr/share/gir-1.0/PolkitAgent-1.0.gir --pkg gio-unix-2.0 --pkg polkit-gobject-1 --girdir=. --vapidir=. ++``` ++ ++Then have fun un-mangling it to support vala async syntax. ++ ++### Libxfce4windowing + +-Then have fun un-mangling it to support vala async syntax ++To generate the libxfce4windowing vapi files: ++ ++```bash ++vapigen --library libxfce4windowing-0 /usr/share/gir-1.0/Libxfce4windowing-0-0.gir --metadatadir . ++``` ++ ++### UPower + + To generate the UPower vapi files: + +- vapigen --library upower-glib /usr/share/gir-1.0/UpowerGlib-1.0.gir --metadatadir . --pkg gio-unix-2.0 UPowerGlib-1.0-custom.vala ++```bash ++vapigen --library upower-glib /usr/share/gir-1.0/UpowerGlib-1.0.gir --metadatadir . --pkg gio-unix-2.0 UPowerGlib-1.0-custom.vala ++``` ++ ++### Mutter + + For mutter (and shipped cogl and clutter), once you defined the relative `*.deps`, `*.metadata` and `*-custom.vala` files, you can run: + +- ./vapi/generate-mutter-vapi.sh ++```bash ++./vapi/generate-mutter-vapi.sh ++``` +diff --git a/vapi/libxfce4windowing-0.deps b/vapi/libxfce4windowing-0.deps +index 319bc395a..bfc6c0973 100644 +--- a/vapi/libxfce4windowing-0.deps ++++ b/vapi/libxfce4windowing-0.deps +@@ -1,3 +1,4 @@ + gdk-3.0 + glib-2.0 ++gtk+-3.0 + libwnck-3.0 +diff --git a/vapi/libxfce4windowing-0.vapi b/vapi/libxfce4windowing-0.vapi +index ed3a282b2..50da752bc 100644 +--- a/vapi/libxfce4windowing-0.vapi ++++ b/vapi/libxfce4windowing-0.vapi +@@ -6,13 +6,14 @@ namespace libxfce4windowing { + public abstract class Application : GLib.Object { + [CCode (has_construct_function = false)] + protected Application (); ++ [CCode (cname = "xfw_application_get_class_id")] ++ [Version (since = "4.19.3")] ++ public unowned string get_class_id (); + [CCode (cname = "xfw_application_get_gicon")] + [Version (since = "4.19.1")] + public unowned GLib.Icon get_gicon (); + [CCode (cname = "xfw_application_get_icon")] + public unowned Gdk.Pixbuf? get_icon (int size, int scale); +- [CCode (cname = "xfw_application_get_id")] +- public uint64 get_id (); + [CCode (cname = "xfw_application_get_instance")] + public unowned libxfce4windowing.ApplicationInstance? get_instance (libxfce4windowing.Window window); + [CCode (cname = "xfw_application_get_instances")] +@@ -25,9 +26,10 @@ namespace libxfce4windowing { + [Version (since = "4.19.1")] + public bool icon_is_fallback (); + [NoAccessorMethod] +- public GLib.Icon gicon { owned get; } ++ [Version (since = "4.19.3")] ++ public string class_id { owned get; } + [NoAccessorMethod] +- public uint64 id { get; } ++ public GLib.Icon gicon { owned get; } + [NoAccessorMethod] + public void* instances { get; } + [NoAccessorMethod] +@@ -87,6 +89,9 @@ namespace libxfce4windowing { + public unowned libxfce4windowing.Application get_application (); + [CCode (cname = "xfw_window_get_capabilities")] + public libxfce4windowing.WindowCapabilities get_capabilities (); ++ [CCode (array_length = false, array_null_terminated = true, cname = "xfw_window_get_class_ids")] ++ [Version (since = "4.19.3")] ++ public unowned string[] get_class_ids (); + [CCode (cname = "xfw_window_get_geometry")] + public unowned Gdk.Rectangle? get_geometry (); + [CCode (cname = "xfw_window_get_gicon")] +@@ -94,8 +99,6 @@ namespace libxfce4windowing { + public unowned GLib.Icon get_gicon (); + [CCode (cname = "xfw_window_get_icon")] + public unowned Gdk.Pixbuf? get_icon (int size, int scale); +- [CCode (cname = "xfw_window_get_id")] +- public uint64 get_id (); + [CCode (cname = "xfw_window_get_monitors")] + public unowned GLib.List? get_monitors (); + [CCode (cname = "xfw_window_get_name")] +@@ -165,14 +168,19 @@ namespace libxfce4windowing { + public bool start_move () throws GLib.Error; + [CCode (cname = "xfw_window_start_resize")] + public bool start_resize () throws GLib.Error; ++ [CCode (cname = "xfw_window_x11_get_xid")] ++ [Version (since = "4.19.3")] ++ public X.Window x11_get_xid (); + [NoAccessorMethod] + public libxfce4windowing.Application application { owned get; } + [NoAccessorMethod] + public libxfce4windowing.WindowCapabilities capabilities { get; } ++ [CCode (array_length = false, array_null_terminated = true)] + [NoAccessorMethod] +- public GLib.Icon gicon { owned get; } ++ [Version (since = "4.19.3")] ++ public string[] class_ids { owned get; } + [NoAccessorMethod] +- public uint64 id { get; } ++ public GLib.Icon gicon { owned get; } + [NoAccessorMethod] + public void* monitors { get; } + [NoAccessorMethod] +@@ -186,6 +194,8 @@ namespace libxfce4windowing { + [NoAccessorMethod] + public libxfce4windowing.Workspace workspace { owned get; } + public signal void capabilities_changed (libxfce4windowing.WindowCapabilities changed_mask, libxfce4windowing.WindowCapabilities new_state); ++ [Version (since = "4.19.3")] ++ public signal void class_changed (); + public signal void closed (); + public signal void geometry_changed (); + public signal void icon_changed (); +@@ -313,6 +323,8 @@ namespace libxfce4windowing { + public interface Workspace : GLib.Object { + [CCode (cname = "xfw_workspace_activate")] + public bool activate () throws GLib.Error; ++ [CCode (cname = "xfw_workspace_assign_to_workspace_group")] ++ public bool assign_to_workspace_group (libxfce4windowing.WorkspaceGroup group) throws GLib.Error; + [CCode (cname = "xfw_workspace_get_capabilities")] + public libxfce4windowing.WorkspaceCapabilities get_capabilities (); + [CCode (cname = "xfw_workspace_get_geometry")] +@@ -332,13 +344,13 @@ namespace libxfce4windowing { + [CCode (cname = "xfw_workspace_get_state")] + public libxfce4windowing.WorkspaceState get_state (); + [CCode (cname = "xfw_workspace_get_workspace_group")] +- public unowned libxfce4windowing.WorkspaceGroup get_workspace_group (); ++ public unowned libxfce4windowing.WorkspaceGroup? get_workspace_group (); + [CCode (cname = "xfw_workspace_remove")] + public bool remove () throws GLib.Error; + [NoAccessorMethod] + public abstract libxfce4windowing.WorkspaceCapabilities capabilities { get; set construct; } + [NoAccessorMethod] +- public abstract libxfce4windowing.WorkspaceGroup group { owned get; construct; } ++ public abstract libxfce4windowing.WorkspaceGroup group { owned get; } + [NoAccessorMethod] + public abstract string id { owned get; } + [NoAccessorMethod] +@@ -348,6 +360,7 @@ namespace libxfce4windowing { + [NoAccessorMethod] + public abstract libxfce4windowing.WorkspaceState state { get; set construct; } + public signal void capabilities_changed (libxfce4windowing.WorkspaceCapabilities changed_mask, libxfce4windowing.WorkspaceCapabilities new_capabilities); ++ public signal void group_changed (libxfce4windowing.WorkspaceGroup previous_group); + public signal void name_changed (); + public signal void state_changed (libxfce4windowing.WorkspaceState changed_mask, libxfce4windowing.WorkspaceState new_state); + } +@@ -383,20 +396,32 @@ namespace libxfce4windowing { + public abstract void* workspaces { get; } + public signal void active_workspace_changed (libxfce4windowing.Workspace? previously_active_workspace); + public signal void capabilities_changed (libxfce4windowing.WorkspaceGroupCapabilities changed_mask, libxfce4windowing.WorkspaceGroupCapabilities new_capabilities); ++ public signal void monitor_added (Gdk.Monitor monitor); ++ public signal void monitor_removed (Gdk.Monitor monitor); + public signal void monitors_changed (); + public signal void viewports_changed (); +- public signal void workspace_created (libxfce4windowing.Workspace workspace); +- public signal void workspace_destroyed (libxfce4windowing.Workspace workspace); ++ public signal void workspace_added (libxfce4windowing.Workspace workspace); ++ public signal void workspace_removed (libxfce4windowing.Workspace workspace); + } + [CCode (cheader_filename = "libxfce4windowing/libxfce4windowing.h", cname = "XfwWorkspaceManager", type_id = "xfw_workspace_manager_get_type ()")] + public interface WorkspaceManager : GLib.Object { + [CCode (cname = "xfw_workspace_manager_list_workspace_groups")] + public unowned GLib.List? list_workspace_groups (); ++ [CCode (cname = "xfw_workspace_manager_list_workspaces")] ++ public unowned GLib.List? list_workspaces (); + [NoAccessorMethod] + public abstract Gdk.Screen screen { owned get; construct; } ++ public signal void workspace_created (libxfce4windowing.Workspace workspace); ++ public signal void workspace_destroyed (libxfce4windowing.Workspace workspace); + public signal void workspace_group_created (libxfce4windowing.WorkspaceGroup group); + public signal void workspace_group_destroyed (libxfce4windowing.WorkspaceGroup group); + } ++ [CCode (cheader_filename = "libxfce4windowing/libxfce4windowing.h", cname = "XfwClientType", cprefix = "XFW_CLIENT_TYPE_", has_type_id = false)] ++ [Version (since = "4.19.3")] ++ public enum ClientType { ++ APPLICATION, ++ PAGER ++ } + [CCode (cheader_filename = "libxfce4windowing/libxfce4windowing.h", cname = "XfwDirection", cprefix = "XFW_DIRECTION_", type_id = "xfw_direction_get_type ()")] + public enum Direction { + UP, +@@ -507,6 +532,9 @@ namespace libxfce4windowing { + [CCode (cheader_filename = "libxfce4windowing/libxfce4windowing.h", cname = "xfw_screen_get_default")] + [Version (replacement = "Screen.get_default")] + public static libxfce4windowing.Screen screen_get_default (); ++ [CCode (cheader_filename = "libxfce4windowing/libxfce4windowing.h", cname = "xfw_set_client_type")] ++ [Version (since = "4.19.3")] ++ public static void set_client_type (libxfce4windowing.ClientType client_type); + [CCode (cheader_filename = "libxfce4windowing/libxfce4windowing.h", cname = "xfw_windowing_get")] + public static libxfce4windowing.Windowing windowing_get (); + } diff --git a/desktop/budgie/budgie-desktop/pspec.xml b/desktop/budgie/budgie-desktop/pspec.xml index 6bc12924d6..3975a7d98e 100644 --- a/desktop/budgie/budgie-desktop/pspec.xml +++ b/desktop/budgie/budgie-desktop/pspec.xml @@ -20,14 +20,13 @@ vala-devel intltool glib2-devel - libgee-devel + libgee-devel gobject-introspection-devel sassc budgie-screensaver alsa-lib-devel libnotify-devel accountsservice-devel - libpeas-devel libpeas-1-devel libwnck3-devel magpie-wm-devel @@ -47,8 +46,11 @@ libcanberra-devel libcanberra-gtk3-devel zenity - libxfce4windowing-devel + libxfce4windowing-devel + + a040ccb.patch + @@ -64,7 +66,6 @@ mutter polkit upower - libpeas alsa-lib libglvnd libwnck3 @@ -81,7 +82,7 @@ gnome-bluetooth3 libcanberra-gtk3 pulseaudio-libs - libxfce4windowing + libxfce4windowing gobject-introspection @@ -111,7 +112,7 @@ budgie-desktop gtk3-devel glib2-devel - libpeas-devel + libpeas-1-devel /usr/include