diff --git a/po/hu.po b/po/hu.po index 94fb70350..708cbef65 100644 --- a/po/hu.po +++ b/po/hu.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: noise\n" "Report-Msgid-Bugs-To: https://github.com/elementary/gala/issues\n" "POT-Creation-Date: 2024-12-18 21:23+0000\n" -"PO-Revision-Date: 2024-12-08 11:16+0000\n" +"PO-Revision-Date: 2025-01-16 17:55+0000\n" "Last-Translator: TomiOhl \n" "Language-Team: Hungarian \n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.8.4\n" +"X-Generator: Weblate 5.9.2\n" "X-Launchpad-Export-Date: 2017-02-21 05:47+0000\n" #: daemon/DBus.vala:82 daemon-gtk3/BackgroundMenu.vala:11 @@ -128,17 +128,17 @@ msgstr "Frissített fordítások" #: data/gala.metainfo.xml.in:35 msgid "Fixed rare crash when a dock window was killed" -msgstr "" +msgstr "Ritka összeomlás javítva dokk ablak leállításakor" #: data/gala.metainfo.xml.in:36 msgid "Added interactive screenshot shortcut" -msgstr "" +msgstr "Gyorsparancs interaktív képernyőképhez" #: data/gala.metainfo.xml.in:37 -#, fuzzy -#| msgid "Fix potential crash when taking screenshots" msgid "Fixed crash when using tiling shortcuts" -msgstr "Esetleges összeomlás javítva képernyőkép készítésekor" +msgstr "" +"Összeomlás javítva ablakok felosztásával kapcsolatos gyorsparancsok " +"használatakor" #: data/gala.metainfo.xml.in:56 msgid "Improved shadows performance" diff --git a/src/InternalUtils.vala b/src/InternalUtils.vala index 1f5ccd599..14cff7dec 100644 --- a/src/InternalUtils.vala +++ b/src/InternalUtils.vala @@ -388,5 +388,15 @@ namespace Gala { Clutter.get_default_backend ().get_default_seat ().bell_notify (); #endif } + + public static void update_transients_visible (Meta.Window window, bool visible) { + window.foreach_transient ((transient) => { + unowned var actor = (Meta.WindowActor) transient.get_compositor_private (); + + actor.visible = visible; + + return true; + }); + } } } diff --git a/src/ShellClients/HideTracker.vala b/src/ShellClients/HideTracker.vala index 092b26c54..d0eda2e39 100644 --- a/src/ShellClients/HideTracker.vala +++ b/src/ShellClients/HideTracker.vala @@ -152,7 +152,7 @@ public class Gala.HideTracker : Object { }); } - private void update_overlap () { + public void update_overlap () { overlap = false; focus_overlap = false; focus_maximized_overlap = false; diff --git a/src/ShellClients/PanelClone.vala b/src/ShellClients/PanelClone.vala index 46e0d404d..82c92525c 100644 --- a/src/ShellClients/PanelClone.vala +++ b/src/ShellClients/PanelClone.vala @@ -55,6 +55,8 @@ public class Gala.PanelClone : Object { } }); + wm.get_display ().in_fullscreen_changed.connect (check_hide); + Idle.add_once (() => { if (hide_mode == NEVER) { show (); @@ -89,13 +91,17 @@ public class Gala.PanelClone : Object { return; } - new GesturePropertyTransition (actor, default_gesture_tracker, "translation-y", null, calculate_translation_y (true)).start (); + InternalUtils.update_transients_visible (panel.window, false); + + new GesturePropertyTransition ( + actor, default_gesture_tracker, "translation-y", null, calculate_translation_y (true) + ).start (() => InternalUtils.update_transients_visible (panel.window, !panel_hidden)); default_gesture_tracker.add_success_callback (() => panel_hidden = true); } private void show () { - if (!panel_hidden || default_gesture_tracker.has_started) { + if (!panel_hidden || default_gesture_tracker.has_started || wm.get_display ().get_monitor_in_fullscreen (panel.window.get_monitor ())) { return; } @@ -103,8 +109,20 @@ public class Gala.PanelClone : Object { Utils.x11_unset_window_pass_through (panel.window); } - new GesturePropertyTransition (actor, default_gesture_tracker, "translation-y", null, calculate_translation_y (false)).start (); + new GesturePropertyTransition ( + actor, default_gesture_tracker, "translation-y", null, calculate_translation_y (false) + ).start (() => InternalUtils.update_transients_visible (panel.window, !panel_hidden)); default_gesture_tracker.add_success_callback (() => panel_hidden = false); } + + private void check_hide () { + if (wm.get_display ().get_monitor_in_fullscreen (panel.window.get_monitor ())) { + hide (); + } else if (hide_mode == NEVER) { + show (); + } else { + hide_tracker.update_overlap (); + } + } } diff --git a/src/ShellClients/ShellClientsManager.vala b/src/ShellClients/ShellClientsManager.vala index dfaa8b0ff..31e5b5c71 100644 --- a/src/ShellClients/ShellClientsManager.vala +++ b/src/ShellClients/ShellClientsManager.vala @@ -191,7 +191,7 @@ public class Gala.ShellClientsManager : Object { } private bool is_itself_positioned (Meta.Window window) { - return (window in positioned_windows) || (window in panel_windows); + return (window in positioned_windows) || (window in panel_windows) || NotificationStack.is_notification (window); } public bool is_positioned_window (Meta.Window window) { diff --git a/src/Widgets/MultitaskingView.vala b/src/Widgets/MultitaskingView.vala index 44b6875c0..26237fbbe 100644 --- a/src/Widgets/MultitaskingView.vala +++ b/src/Widgets/MultitaskingView.vala @@ -28,7 +28,7 @@ namespace Gala { private GestureTracker multitasking_gesture_tracker; private GestureTracker workspace_gesture_tracker; - public WindowManager wm { get; construct; } + public WindowManagerGala wm { get; construct; } private Meta.Display display; private ModalProxy modal_proxy; @@ -53,7 +53,7 @@ namespace Gala { } } - public MultitaskingView (WindowManager wm) { + public MultitaskingView (WindowManagerGala wm) { Object (wm: wm); } @@ -631,6 +631,7 @@ namespace Gala { wm.background_group.hide (); wm.window_group.hide (); wm.top_window_group.hide (); + wm.shell_group.hide (); show (); grab_key_focus (); @@ -693,6 +694,7 @@ namespace Gala { wm.background_group.show (); wm.window_group.show (); wm.top_window_group.show (); + wm.shell_group.show (); dock_clones.destroy_all_children (); @@ -721,7 +723,7 @@ namespace Gala { foreach (unowned Meta.WindowActor actor in window_actors) { const int MAX_OFFSET = 200; - if (actor.is_destroyed () || !actor.visible) { + if (actor.is_destroyed () || !actor.visible || actor.translation_y != 0) { continue; } diff --git a/src/WindowManager.vala b/src/WindowManager.vala index 06873e990..b62f0e4d0 100644 --- a/src/WindowManager.vala +++ b/src/WindowManager.vala @@ -37,7 +37,13 @@ namespace Gala { */ public Clutter.Actor top_window_group { get; protected set; } - public Clutter.Actor notification_group { get; protected set; } + /** + * The group that contains all WindowActors that make shell elements, that is all windows reported as + * ShellClientsManager.is_positioned_window. + * It will (eventually) never be hidden by other components and is always on top of everything. Therefore elements are + * responsible themselves for hiding depending on the state we are currently in (e.g. normal desktop, open multitasking view, fullscreen, etc.). + */ + public Clutter.Actor shell_group { get; private set; } /** * {@inheritDoc} @@ -104,8 +110,6 @@ namespace Gala { private bool animating_switch_workspace = false; private bool switch_workspace_with_gesture = false; - private signal void window_created (Meta.Window window); - /** * Amount of pixels to move on the nudge animation. */ @@ -253,14 +257,6 @@ namespace Gala { stage.remove_child (top_window_group); ui_group.add_child (top_window_group); -#if HAS_MUTTER44 - var feedback_group = display.get_compositor ().get_feedback_group (); -#else - var feedback_group = display.get_feedback_group (); -#endif - stage.remove_child (feedback_group); - ui_group.add_child (feedback_group); - // Initialize plugins and add default components if no plugin overrides them unowned var plugin_manager = PluginManager.get_default (); plugin_manager.initialize (this); @@ -293,8 +289,16 @@ namespace Gala { } // Add the remaining components that should be on top - notification_group = new Clutter.Actor (); - ui_group.add_child (notification_group); + shell_group = new Clutter.Actor (); + ui_group.add_child (shell_group); + +#if HAS_MUTTER44 + var feedback_group = display.get_compositor ().get_feedback_group (); +#else + var feedback_group = display.get_feedback_group (); +#endif + stage.remove_child (feedback_group); + ui_group.add_child (feedback_group); pointer_locator = new PointerLocator (display); ui_group.add_child (pointer_locator); @@ -381,12 +385,14 @@ namespace Gala { update_input_area (); - display.window_created.connect ((window) => window_created (window)); - var scroll_action = new SuperScrollAction (display); scroll_action.triggered.connect (handle_super_scroll); stage.add_action_full ("wm-super-scroll-action", CAPTURE, scroll_action); + display.window_created.connect ((window) => + InternalUtils.wait_for_window_actor_visible (window, check_shell_window) + ); + stage.show (); plugin_manager.load_waiting_plugins (); @@ -1162,6 +1168,17 @@ namespace Gala { show_window_menu (window, menu, rect.x, rect.y); } + private void check_shell_window (Meta.WindowActor actor) { + unowned var window = actor.get_meta_window (); + if (ShellClientsManager.get_instance ().is_positioned_window (window)) { + InternalUtils.clutter_actor_reparent (actor, shell_group); + } + + if (NotificationStack.is_notification (window)) { + notification_stack.show_notification (actor); + } + } + /* * effects */ @@ -1436,12 +1453,8 @@ namespace Gala { actor.remove_all_transitions (); actor.show (); - // Notifications are a special case and have to be always be handled - // (also regardless of the animation setting) + // Notifications initial animation is handled by the notification stack if (NotificationStack.is_notification (window)) { - InternalUtils.clutter_actor_reparent (actor, notification_group); - notification_stack.show_notification (actor); - map_completed (actor); return; } @@ -1843,7 +1856,6 @@ namespace Gala { private List? windows; private List? parents; private List? tmp_actors; - private ulong switch_workspace_window_created_id = 0; private Clutter.Actor? out_group; private Clutter.Actor? in_group; private Clutter.Actor? wallpaper; @@ -1932,7 +1944,10 @@ namespace Gala { continue; } - if (!window.showing_on_its_workspace () || move_primary_only && !window.is_on_primary_monitor ()) { + if (!window.showing_on_its_workspace () || + move_primary_only && !window.is_on_primary_monitor () || + actor.get_parent () == shell_group + ) { continue; } @@ -2045,17 +2060,6 @@ namespace Gala { prepare_workspace_switch (from, to, direction); - // while a workspace is being switched mutter doesn't map windows - // TODO: currently only notifications are handled here, other windows should be too - switch_workspace_window_created_id = window_created.connect ((window) => { - if (NotificationStack.is_notification (window)) { - InternalUtils.wait_for_window_actor_visible (window, (actor) => { - InternalUtils.clutter_actor_reparent (actor, notification_group); - notification_stack.show_notification (actor); - }); - } - }); - var animation_mode = Clutter.AnimationMode.EASE_OUT_CUBIC; var x2 = -in_group.x; @@ -2127,11 +2131,8 @@ namespace Gala { return; } - if (switch_workspace_window_created_id > 0) { - disconnect (switch_workspace_window_created_id); - switch_workspace_window_created_id = 0; - } end_switch_workspace (); + if (!is_nudge_animation) { switch_workspace_completed (); } @@ -2157,7 +2158,7 @@ namespace Gala { } private void end_switch_workspace () { - if (windows == null || parents == null) + if ((windows == null || parents == null) && tmp_actors == null) return; unowned var display = get_display ();