<feed xmlns='http://www.w3.org/2005/Atom'>
<title>marco/src/core/workspace.c, branch focus-modal-dialogs</title>
<subtitle>MATE default window manager</subtitle>
<link rel='alternate' type='text/html' href='http://git.mate-desktop.org/marco/'/>
<entry>
<title>Add dynamic workspaces support</title>
<updated>2025-10-06T12:04:32+00:00</updated>
<author>
<name>Victor Kareh</name>
<email>vkareh@redhat.com</email>
</author>
<published>2025-07-30T10:45:30+00:00</published>
<link rel='alternate' type='text/html' href='http://git.mate-desktop.org/marco/commit/?id=158e2e64b7fe584ea8fe782e4608df25d6103fc3'/>
<id>158e2e64b7fe584ea8fe782e4608df25d6103fc3</id>
<content type='text'>
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
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
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
</pre>
</div>
</content>
</entry>
<entry>
<title>workspace: ignore not_this_one if not in current workspace</title>
<updated>2024-02-14T00:55:50+00:00</updated>
<author>
<name>Lars R. Damerow</name>
<email>lars@pixar.com</email>
</author>
<published>2024-02-09T02:00:03+00:00</published>
<link rel='alternate' type='text/html' href='http://git.mate-desktop.org/marco/commit/?id=c6fb9cc87bec7dd7abcacc3fd1df080eda1fb6c1'/>
<id>c6fb9cc87bec7dd7abcacc3fd1df080eda1fb6c1</id>
<content type='text'>
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.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
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.
</pre>
</div>
</content>
</entry>
<entry>
<title>window: add support for _GNOME_WM_STRUT_AREA</title>
<updated>2021-06-07T18:09:03+00:00</updated>
<author>
<name>raveit65</name>
<email>mate@raveit.de</email>
</author>
<published>2021-04-10T14:37:40+00:00</published>
<link rel='alternate' type='text/html' href='http://git.mate-desktop.org/marco/commit/?id=3ed0ddb242a4804cd7fcfcfcf39a47766eaa816d'/>
<id>3ed0ddb242a4804cd7fcfcfcf39a47766eaa816d</id>
<content type='text'>
In addition to existing properties use also new _GNOME_WM_STRUT_AREA
property that allows creating struts between monitors.

https://mail.gnome.org/archives/wm-spec-list/2018-December/msg00000.html
https://gitlab.freedesktop.org/xdg/xdg-specs/merge_requests/22

origin commit:
https://gitlab.gnome.org/GNOME/metacity/commit/922de13
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
In addition to existing properties use also new _GNOME_WM_STRUT_AREA
property that allows creating struts between monitors.

https://mail.gnome.org/archives/wm-spec-list/2018-December/msg00000.html
https://gitlab.freedesktop.org/xdg/xdg-specs/merge_requests/22

origin commit:
https://gitlab.gnome.org/GNOME/metacity/commit/922de13
</pre>
</div>
</content>
</entry>
<entry>
<title>Remove multiple empty lines</title>
<updated>2020-08-04T14:39:25+00:00</updated>
<author>
<name>rbuj</name>
<email>robert.buj@gmail.com</email>
</author>
<published>2020-08-04T13:53:16+00:00</published>
<link rel='alternate' type='text/html' href='http://git.mate-desktop.org/marco/commit/?id=37e4d38ca3a61eb843d80732a26f29668352433d'/>
<id>37e4d38ca3a61eb843d80732a26f29668352433d</id>
<content type='text'>
find . \( -name '*.h' -o -name '*.c' \) -exec sed -i 'N;/^\n$/D;P;D;' {} \;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
find . \( -name '*.h' -o -name '*.c' \) -exec sed -i 'N;/^\n$/D;P;D;' {} \;
</pre>
</div>
</content>
</entry>
<entry>
<title>Remove trailing spaces/tabs</title>
<updated>2020-08-04T14:39:25+00:00</updated>
<author>
<name>rbuj</name>
<email>robert.buj@gmail.com</email>
</author>
<published>2020-08-04T08:39:44+00:00</published>
<link rel='alternate' type='text/html' href='http://git.mate-desktop.org/marco/commit/?id=85a22e754cd1f43e178e4a81c182643d4319bc5b'/>
<id>85a22e754cd1f43e178e4a81c182643d4319bc5b</id>
<content type='text'>
find . \( -name '*.h' -o -name '*.c' \) -exec sed -i 's/[[:space:]]*$//' {} \;
find . \( -name '*.h' -o -name '*.c' \) -exec sed -i 's/\t*$//' {} \;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
find . \( -name '*.h' -o -name '*.c' \) -exec sed -i 's/[[:space:]]*$//' {} \;
find . \( -name '*.h' -o -name '*.c' \) -exec sed -i 's/\t*$//' {} \;
</pre>
</div>
</content>
</entry>
<entry>
<title>workspace: Don't try to use per-workspace MRU lists as a hint for focusing</title>
<updated>2020-05-27T15:25:49+00:00</updated>
<author>
<name>rcaridade145</name>
<email>rcaridade145@gmail.com</email>
</author>
<published>2020-03-03T20:51:17+00:00</published>
<link rel='alternate' type='text/html' href='http://git.mate-desktop.org/marco/commit/?id=f96255beb1b23e47048d1e0479fc53ef4c36b747'/>
<id>f96255beb1b23e47048d1e0479fc53ef4c36b747</id>
<content type='text'>
A prior commit switched from focusing the topmost window as the default
window to focusing the MRU window. This was done in alignment with the
introduction of per-workspace MRU lists to avoid problems where the window
stack was inadvertently changed when focusing windows during window switches.

Now that focusing windows don't have as big an impact on the stacking order,
we can revert back to focusing the top window, which is less confusing to the
user.

For now, leave per-workspace MRU lists, as they're a pretty good approximation
of a global MRU list, and it works well enough.

https://bugzilla.gnome.org/show_bug.cgi?id=620744

Based on commit https://gitlab.gnome.org/GNOME/metacity/-/commit/f628d8f8901f46fa9e00707ae9d7ccfd1e85f427
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
A prior commit switched from focusing the topmost window as the default
window to focusing the MRU window. This was done in alignment with the
introduction of per-workspace MRU lists to avoid problems where the window
stack was inadvertently changed when focusing windows during window switches.

Now that focusing windows don't have as big an impact on the stacking order,
we can revert back to focusing the top window, which is less confusing to the
user.

For now, leave per-workspace MRU lists, as they're a pretty good approximation
of a global MRU list, and it works well enough.

https://bugzilla.gnome.org/show_bug.cgi?id=620744

Based on commit https://gitlab.gnome.org/GNOME/metacity/-/commit/f628d8f8901f46fa9e00707ae9d7ccfd1e85f427
</pre>
</div>
</content>
</entry>
<entry>
<title>Replace meta_rectangle_free_list_and_elements with g_list_free_full</title>
<updated>2019-04-11T17:43:20+00:00</updated>
<author>
<name>rbuj</name>
<email>robert.buj@gmail.com</email>
</author>
<published>2019-03-07T14:06:53+00:00</published>
<link rel='alternate' type='text/html' href='http://git.mate-desktop.org/marco/commit/?id=90da480f09838deeff34aa54fc8fe33607adf93a'/>
<id>90da480f09838deeff34aa54fc8fe33607adf93a</id>
<content type='text'>
Use g_list_free_full
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Use g_list_free_full
</pre>
</div>
</content>
</entry>
<entry>
<title>workspace: switch wrapping behavior for 'classic' and 'toroidal'</title>
<updated>2017-01-30T07:52:20+00:00</updated>
<author>
<name>Kevin S.C. Decker</name>
<email>kevin.decker@fu-berlin.de</email>
</author>
<published>2016-12-28T23:06:19+00:00</published>
<link rel='alternate' type='text/html' href='http://git.mate-desktop.org/marco/commit/?id=5a92d0b24a661e160c98c7ecfaf7da0b043d4ef6'/>
<id>5a92d0b24a661e160c98c7ecfaf7da0b043d4ef6</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge pull request #168 from robertek/swith_to_workspace_prev</title>
<updated>2015-09-25T09:33:36+00:00</updated>
<author>
<name>No_name</name>
<email>chat-to-me@raveit.de</email>
</author>
<published>2015-09-25T09:33:36+00:00</published>
<link rel='alternate' type='text/html' href='http://git.mate-desktop.org/marco/commit/?id=2380955609c8bb383226951660d6fd1944481e9b'/>
<id>2380955609c8bb383226951660d6fd1944481e9b</id>
<content type='text'>
Possible keybinding to switch to previous workspace.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Possible keybinding to switch to previous workspace.</pre>
</div>
</content>
</entry>
<entry>
<title>Fix crash when struts change during grab operation</title>
<updated>2015-08-20T12:00:31+00:00</updated>
<author>
<name>Owen W. Taylor</name>
<email>otaylor@fishsoup.net</email>
</author>
<published>2015-08-20T11:58:07+00:00</published>
<link rel='alternate' type='text/html' href='http://git.mate-desktop.org/marco/commit/?id=105c6eb2116ab5db0157b272a22243bba1ae50ef'/>
<id>105c6eb2116ab5db0157b272a22243bba1ae50ef</id>
<content type='text'>
Since meta_workspace_invalidate_work_area() frees the edges
workspace-&gt;screen_edges and workspace-&gt;monitor_edges, we must clean up
our cached edge resistance data when the invalidate_work_area() is
called on the active workspace, or when the workspace changes.

Make the computation of the edge resistance data lazy so that it
will be recomputed the next time we try to access it.
meta_display_compute_resistance_and_snapping_edges() is made
private to edge-resistance.c

Invaliding the data when active workspace changes also will improve
correctness for edge resistance when the current workspace changes
during a grab operation. (Even with this fix we still don't try to
handle window positions changing during a grab operation; that can't
cause a crash since, unlike screen and monitor edges, the window edges
are freshly allocated, it will just cause slight oddness in that
corner case.)

Root cause tracked down due to much effort by Jon Nettleton.
https://bugzilla.gnome.org/show_bug.cgi?id=608800
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Since meta_workspace_invalidate_work_area() frees the edges
workspace-&gt;screen_edges and workspace-&gt;monitor_edges, we must clean up
our cached edge resistance data when the invalidate_work_area() is
called on the active workspace, or when the workspace changes.

Make the computation of the edge resistance data lazy so that it
will be recomputed the next time we try to access it.
meta_display_compute_resistance_and_snapping_edges() is made
private to edge-resistance.c

Invaliding the data when active workspace changes also will improve
correctness for edge resistance when the current workspace changes
during a grab operation. (Even with this fix we still don't try to
handle window positions changing during a grab operation; that can't
cause a crash since, unlike screen and monitor edges, the window edges
are freshly allocated, it will just cause slight oddness in that
corner case.)

Root cause tracked down due to much effort by Jon Nettleton.
https://bugzilla.gnome.org/show_bug.cgi?id=608800
</pre>
</div>
</content>
</entry>
</feed>
