summaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2025-10-06Add dynamic workspaces supportHEADmasterVictor Kareh6-22/+305
Adds GNOME3-style dynamic workspace management. Workspaces are created when no empty ones exist and removed when multiple empty workspaces are present, maintaining exactly one empty workspace at the end. Fixes #406
2025-10-03screen: Add dynamic HiDPI scale change supportVictor Kareh1-0/+62
This allows marco to respond to HiDPI scale changes without requiring a restart. When the scale changes, marco now automatically updates all icons (windows, xprops, alt+tab, etc.) and mouse cursor to be at the correct scale factor. Window decorations are handled through an internal GDK signal triggered from XSettings changes, and so already work out of the box.
2025-09-22Release 1.29.1v1.29.1lukefromdc3-4/+9
2025-09-22update translationslukefromdc21-315/+2982
2025-09-22ci: Trigger full release on new tagVictor Kareh2-2/+27
Whenever there's a new v* tag, GitHub will use distcheck to generate tarballs, create a proper release, and trigger the mate-desktop.org webhook.
2025-09-11Release 1.29.0v1.29.0lukefromdc3-3/+22
2025-09-09window: Add configurable mouse actions for titlebarVictor Kareh5-15/+166
Adds support for configurable mouse actions on window titlebars, including middle-click and scroll wheel events. New actions added: - close: Close the window - raise: Raise window to top - toggle_stick: Toggle sticky state (all workspaces) - toggle_above: Toggle always-on-top state Fixes #425 Fixes #787 Note: requries matching mate-control-center changes to work properly
2025-09-05theme: Fix left-side Fitt's Law1.28Victor Kareh1-11/+6
When calculating the clickable area on the left-most button of a maximized window, we need to take into account the layout components, not just the button size. Fixes mate-desktop/mate-themes#318
2025-09-02theme: Extend button clickable area to edge of screenVictor Kareh1-2/+23
Apply Fitt's law to corner window buttons by extending the clickable area all the way to the edge of the screen on maximized/tiled windows. This means that a user moving the pointer all the way to the top-right corner and clicking, will close the maximized (or right-tiled) window. The same applies for top-left on maximized and left-tiled windows.
2025-08-29build(deps): bump actions/cache from 3 to 4dependabot[bot]1-1/+1
Bumps [actions/cache](https://github.com/actions/cache) from 3 to 4. - [Release notes](https://github.com/actions/cache/releases) - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md) - [Commits](https://github.com/actions/cache/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/cache dependency-version: '4' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <[email protected]>
2025-08-21build(deps): bump actions/checkout from 4 to 5dependabot[bot]2-2/+2
Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 5. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v4...v5) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: '5' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <[email protected]>
2025-08-03build(deps): bump dev-hanz-ops/install-gh-cli-action from 0.1.0 to 0.2.1dependabot[bot]1-1/+1
Bumps [dev-hanz-ops/install-gh-cli-action](https://github.com/dev-hanz-ops/install-gh-cli-action) from 0.1.0 to 0.2.1. - [Release notes](https://github.com/dev-hanz-ops/install-gh-cli-action/releases) - [Commits](https://github.com/dev-hanz-ops/install-gh-cli-action/compare/v0.1.0...v0.2.1) --- updated-dependencies: - dependency-name: dev-hanz-ops/install-gh-cli-action dependency-version: 0.2.1 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <[email protected]>
2025-07-28GitHub action (#795)Wu Xiaotian11-296/+570
* CI: use github action * CI: Drop travis CI
2025-07-27Fix GTK deprecations (#798)Victor Kareh4-40/+42
* menu: replace gtk_menu_popup() with gtk_menu_popup_at_rect() Replace deprecated gtk_menu_popup() with gtk_menu_popup_at_rect(). This provides the same menu positioning calculation while eliminating deprecation warnings. * ui: replace gtk_widget_get_realized() with gtk_widget_get_mapped() Replace deprecated gtk_widget_get_realized() with gtk_widget_get_mapped(). Since mapped widgets are guaranteed to be realized, and we only care about widget visibility, this change eliminates deprecation warnings while maintaining the same functionality. * frames: replace gdk_window_process_all_updates() with gdk_display_flush() Replace deprecated gdk_window_process_all_updates() with gdk_display_flush(). Both functions ensure pending updates are processed, but gdk_display_flush is more general for all display requests.
2025-04-02window: Parse _BAMF_DESKTOP_FILE propertyVictor Kareh8-20/+79
In systems with bamfdaemon running, windows get this property for finding the dekstop spec file of an application. This can be used to find the defined icon for any application window that reports this attribute and provider much better icon matching.
2025-04-02iconcache: Add GDesktopAppInfo lookup as an icon caching strategyVictor Kareh5-53/+66
Looking up GDesktopAppInfo from the GTK Application ID we can get a much better match for the icon and load it at the appropriate scale. This results in matching icons to straneous windows and better looking icons overall.
2025-04-02window: Parse _GTK_APPLICATION_ID propertyVictor Kareh4-1/+31
GTK+ has support for the application ID property. This will allow Marco to reconstruct the path to the desktop spec file and so have access to all internal attributes (e.g. name, icon, etc.)
2025-02-11window-props: remove incorrect mask checkColomban Wendling1-5/+4
Based off Metacity 's commit 7c1cc3ca1d8131499b9cf2ef50b295602ffd6112 [1]. [1] https://gitlab.gnome.org/GNOME/metacity/-/commit/7c1cc3ca1d8131499b9cf2ef50b295602ffd6112
2025-02-11window-props: Fix check for XResQueryClientIds() successColomban Wendling1-3/+3
X's Success return value is 0, not a boolean, so the check was effectively inverted.
2024-06-18ci: fix travis deploylukefromdc1-2/+4
2024-02-26tabpopup: Stop spamming the ATs with label changes at startupColomban Wendling1-7/+9
2024-02-26tabpopup: Report the window as active to a11y when it's showingColomban Wendling1-1/+69
The switcher windows aren't actually "active" per GTK's meaning because they do not have actual keyboard focus, but they are controlled by the internal grabs so it's effectively the same as if they were active. Reporting them as such helps the ATs understanding what's going on. Fixes #771.
2024-02-16release 1.28.1v1.28.1raveit653-2/+6
2024-02-16themes/eOS/meson.build: Install missing PNGsBobby Rong1-0/+2
Follow-up of 4a2a5dc092814bfe ("eOS theme: Add single button backgrounds") Without this fix these PNGs are installed when using autotools but not using meson.
2024-02-14release 1.28.0v1.28.0raveit653-3/+8
2024-02-14tx: sync with transifexraveit651-5/+5
2024-02-14workspace: ignore not_this_one if not in current workspaceLars R. Damerow1-2/+3
When the active workspace is changed, marco figures out which window should get focus by calling `focus_ancestor_or_top_window`. In some cases that call might include a window that should not get focus as `not_this_one`. When `not_this_one` refers to a window, the function will check to see if it has a parent, and if it does, it will ignore the new workspace's `mru_list` and will focus that parent window. However, it doesn't check to see if the parent window is actually on the new workspace. If the parent isn't on the new workspace, focusing it will drag it over, including the transient window that was supposed to be ignored. This isn't the result a user would likely expect, and is made more confusing by the parent window being minimized, stuck that way until the user switches to another workspace and back. This change makes `focus_ancestor_or_top_window` ignore the `not_this_one` window if it isn't on the new workspace's `mru_list`. Instead it will just search the new workspace's `mru_list` for a window to focus.
2024-02-02releases 1.27.1v1.27.1raveit653-3/+21
2024-02-02tx: sync with transifexraveit65105-25204/+26356
2024-01-23ci: use ubuntu jammy as dockerraveit651-1/+1
2023-10-19tabpopup: Use more contrasting background when not compositedColomban Wendling1-5/+16
When composited, the tab popup uses an OSD style which typically has a dark background, so we use a light background highlight color. However, when not composited the popup uses a light color and should thus use a dark highlight. This was done for the workspace popup, but not for the window one, leading to the highlight being hardly visible in several themes.
2023-10-14Allow applications to raise windows when raise_on_click is off.ns2-3/+2
This is Metacity commit 50358a95 ("Allow applications to raise windows when raise_on_click is off. Closes #445447.") applied to Marco without modification. It also includes a change to the GSettings key's description to remove the now obsolete warning on the raise-on-click key, & replaces it with an actually useful description. This is copied from the equivalent key in gsettings-desktop-schemas. Fixes: https://github.com/mate-desktop/marco/issues/762
2023-10-05replace deprecated gtk_image_menu_itemraveit654-3/+42
2023-09-01tx: update resourcesraveit651-234/+244
2023-08-17ui/tabpopup: likewise only enable compositing code if available.Mihai Moldovan3-2/+11
2023-08-17ui/frames: check that compositing is not only requested, but also available.Mihai Moldovan5-22/+33
Enabling code that is supposed to be used in compositing conditions is harmful if compositing is not actually available. Just checking the preference is not enough to make sure that compositing is available - the X server might be missing crucial extensions for compositing to work, which in turn correctly disables the internal compositor. The end result is graphical issues like black borders around windows in such situations. Make sure that compositing is both requested AND available to fix this bug.
2023-07-19Fix losing title of windows with a 3 or 4 bytes first characterColomban Wendling1-1/+1
Fixes #757.
2023-04-20meson: Enable verbose mode support by default in line with AutoconfColomban Wendling1-2/+2
Verbose mode is not active by default when running Marco, but can be toggled dynamically to help debug issues, possibly as they happen. This should only be disabled for very performance-sensitive or size-sensitive builds, but not for the regular case where it can be very useful to debug a user issue.
2023-04-20Revert "build: by default disable also the verbose mode for autoconf"Colomban Wendling1-3/+3
Verbose logging shouldn't require a rebuild, as it can help debugging user problems. This reverts commit 397e31879bf79861a1a21ec4e2a75017e243d34b.
2023-04-15configure.ac: The macro 'AC_HELP_STRING' is obsoleterbuj1-9/+9
2023-02-10Show correct window title when owned by superuser. Issue #749insaner1-1/+1
2023-01-18Add setting to raise windows on alt+tab popupsparkida5-3/+41
2023-01-14Test if XResQueryClientIds() is available before using it.Joakim Tjernlund1-0/+2
Needed for X2Go as it does not have XRES 1.2 extension.
2023-01-14Test Xres 1.2 is presentJoakim Tjernlund2-2/+13
Before using any Xres extension one must call XResQueryExtension() Also make sure Xres 1.2 is available as marco need XResQueryClientIds()
2023-01-14test return value from XResQueryClientIds()Joakim Tjernlund1-5/+6
2022-11-11release 1.27.0v1.27.0mbkma3-2/+30
2022-11-11tx: sync with transifexmbkma112-10567/+11952
2022-11-07replace _NET_WM_PID with XResGetClientPid (#741)Jan Novotný4-1/+54
window-props: use XResQueryClientIds to get pid _NET_WM_PID is unreliable! It can be faked or pid might be from different namespace. Ignore _NET_WM_PID and use XResQueryClientIds to get pid. https://gitlab.gnome.org/GNOME/metacity/-/commit/bcbe966511362a8eb8c8c64035ab160086c931f8
2022-11-07Always bring into foreground the previous window after closing oneBalazs Endresz1-1/+1
When opening and then closing certain applications the focus was correctly regained by the previous window but it wasn't brought into the foreground. To fix this we call meta_workspace_focus_default_window() for both NotifyDetailNone and NotifyPointerRoot. These two are always mentioned together in the X docs: https://tronche.com/gui/x/xlib/events/input-focus/normal-and-grabbed.html Some programs will have NotifyDetailNone when closed, while others end up with NotifyPointerRoot.
2022-10-29tx: update resourcembkma1-48/+52