diff --git a/data/gala.metainfo.xml.in b/data/gala.metainfo.xml.in index 5e95a0702..9ec779262 100644 --- a/data/gala.metainfo.xml.in +++ b/data/gala.metainfo.xml.in @@ -38,6 +38,7 @@ + Prevent PIP overlapping wingpanel? Toggling the active window's maximization state during multitasking view messes up the window preview size Some apps ignore HiDPI mode Invisible window clones @@ -45,6 +46,7 @@ Unthemed cursor style and glitchy menus on some applications Crash when moving windows between workspaces and using gestures to switch Text UI based Scaling: Tiny Titlebars in XWayland Apps + PiP dragging doesn't start until after mouse is released diff --git a/plugins/pip/PopupWindow.vala b/plugins/pip/PopupWindow.vala index 61f167114..c1c3b30fe 100644 --- a/plugins/pip/PopupWindow.vala +++ b/plugins/pip/PopupWindow.vala @@ -68,11 +68,6 @@ public class Gala.Plugins.PIP.PopupWindow : Clutter.Actor { clone = new Clutter.Clone (window_actor); - move_action = new DragDropAction (DragDropActionType.SOURCE, "pip"); - move_action.drag_begin.connect (on_move_begin); - move_action.drag_canceled.connect (on_move_end); - move_action.actor_clicked.connect (activate); - clone_container = new Clutter.Actor () { scale_x = 0.35f, scale_y = 0.35f @@ -84,24 +79,24 @@ public class Gala.Plugins.PIP.PopupWindow : Clutter.Actor { }; container.add_child (clone_container); container.add_effect (new ShadowEffect ("window")); - container.add_action (move_action); + + move_action = new DragDropAction (DragDropActionType.SOURCE, "pip"); + move_action.drag_begin.connect (on_move_begin); + move_action.drag_canceled.connect (on_move_end); + move_action.actor_clicked.connect (activate); + add_action (move_action); update_size (); -#if HAS_MUTTER45 - Mtk.Rectangle monitor_rect; -#else - Meta.Rectangle monitor_rect; -#endif - get_current_monitor_rect (out monitor_rect); + var workarea_rect = display.get_workspace_manager ().get_active_workspace ().get_work_area_all_monitors (); float x_position, y_position; if (Clutter.get_default_text_direction () == Clutter.TextDirection.RTL) { - x_position = SCREEN_MARGIN + monitor_rect.x; + x_position = SCREEN_MARGIN + workarea_rect.x; } else { - x_position = monitor_rect.width + monitor_rect.x - SCREEN_MARGIN - width; + x_position = workarea_rect.x + workarea_rect.width - SCREEN_MARGIN - width; } - y_position = monitor_rect.height + monitor_rect.y - SCREEN_MARGIN - height; + y_position = workarea_rect.y + workarea_rect.height - SCREEN_MARGIN - height; set_position (x_position, y_position); @@ -431,22 +426,12 @@ public class Gala.Plugins.PIP.PopupWindow : Clutter.Actor { private void place_window_in_screen () { off_screen = false; -#if HAS_MUTTER45 - Mtk.Rectangle monitor_rect; -#else - Meta.Rectangle monitor_rect; -#endif - get_current_monitor_rect (out monitor_rect); + var workarea_rect = display.get_workspace_manager ().get_active_workspace ().get_work_area_all_monitors (); - int monitor_x = monitor_rect.x; - int monitor_y = monitor_rect.y; - int monitor_width = monitor_rect.width; - int monitor_height = monitor_rect.height; - - var screen_limit_start_x = SCREEN_MARGIN + monitor_x; - var screen_limit_end_x = monitor_width + monitor_x - SCREEN_MARGIN - width; - var screen_limit_start_y = SCREEN_MARGIN + monitor_y; - var screen_limit_end_y = monitor_height + monitor_y - SCREEN_MARGIN - height; + var screen_limit_start_x = workarea_rect.x + SCREEN_MARGIN; + var screen_limit_end_x = workarea_rect.x + workarea_rect.width - SCREEN_MARGIN - width; + var screen_limit_start_y = workarea_rect.y + SCREEN_MARGIN; + var screen_limit_end_y = workarea_rect.y + workarea_rect.height - SCREEN_MARGIN - height; var duration = AnimationsSettings.get_animation_duration (300); @@ -467,12 +452,7 @@ public class Gala.Plugins.PIP.PopupWindow : Clutter.Actor { set_easing_mode (Clutter.AnimationMode.EASE_OUT_BACK); set_easing_duration (duration); -#if HAS_MUTTER45 - Mtk.Rectangle monitor_rect; -#else - Meta.Rectangle monitor_rect; -#endif - get_current_monitor_rect (out monitor_rect); + var monitor_rect = display.get_monitor_geometry (display.get_current_monitor ()); int monitor_x = monitor_rect.x; int monitor_y = monitor_rect.y; @@ -546,14 +526,6 @@ public class Gala.Plugins.PIP.PopupWindow : Clutter.Actor { return false; } -#if HAS_MUTTER45 - private void get_current_monitor_rect (out Mtk.Rectangle rect) { -#else - private void get_current_monitor_rect (out Meta.Rectangle rect) { -#endif - rect = display.get_monitor_geometry (display.get_current_monitor ()); - } - private void get_target_window_size (out float width, out float height) { if (clone_container.has_clip) { clone_container.get_clip (null, null, out width, out height); diff --git a/po/pl.po b/po/pl.po index 4ec79b236..71eb1f1cd 100644 --- a/po/pl.po +++ b/po/pl.po @@ -8,17 +8,17 @@ msgstr "" "Project-Id-Version: gala\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-03 18:16+0000\n" +"PO-Revision-Date: 2024-12-21 09:16+0000\n" "Last-Translator: Marcin Serwin \n" -"Language-Team: Polish \n" +"Language-Team: Polish " +"\n" "Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 5.6.2\n" +"X-Generator: Weblate 5.8.4\n" "X-Launchpad-Export-Date: 2017-04-20 06:29+0000\n" #: daemon/DBus.vala:82 daemon-gtk3/BackgroundMenu.vala:11 @@ -127,17 +127,15 @@ msgstr "Zaktualizowano tłumaczenia" #: data/gala.metainfo.xml.in:35 msgid "Fixed rare crash when a dock window was killed" -msgstr "" +msgstr "Naprawiono rzadki crash gdy okno doku jest zabite" #: data/gala.metainfo.xml.in:36 msgid "Added interactive screenshot shortcut" -msgstr "" +msgstr "Dodano interaktywny skrót do zrzutów ekranu" #: data/gala.metainfo.xml.in:37 -#, fuzzy -#| msgid "Fix potential crash when taking screenshots" msgid "Fixed crash when using tiling shortcuts" -msgstr "Napraw możliwą awarię przy robieniu zrzutów ekranu" +msgstr "Naprawiono crash podczas korzystania ze skrótów kafelkowania" #: data/gala.metainfo.xml.in:56 msgid "Improved shadows performance" diff --git a/po/zh_TW.po b/po/zh_TW.po index f07f4d8d1..579575d37 100644 --- a/po/zh_TW.po +++ b/po/zh_TW.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: \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-09 11:10+0000\n" +"PO-Revision-Date: 2024-12-21 09:16+0000\n" "Last-Translator: Kisaragi Hiu \n" "Language-Team: Chinese (Traditional Han script) \n" @@ -125,15 +125,15 @@ msgstr "更新翻譯" #: data/gala.metainfo.xml.in:35 msgid "Fixed rare crash when a dock window was killed" -msgstr "" +msgstr "修正 dock 視窗被終止時偶爾會發生的崩潰" #: data/gala.metainfo.xml.in:36 msgid "Added interactive screenshot shortcut" -msgstr "" +msgstr "新增以互動式介面擷取畫面快照的快捷鍵" #: data/gala.metainfo.xml.in:37 msgid "Fixed crash when using tiling shortcuts" -msgstr "" +msgstr "修正使用鋪排快捷鍵時會崩潰的問題" #: data/gala.metainfo.xml.in:56 msgid "Improved shadows performance" diff --git a/src/InternalUtils.vala b/src/InternalUtils.vala index fe761dfbc..c8c044369 100644 --- a/src/InternalUtils.vala +++ b/src/InternalUtils.vala @@ -355,5 +355,19 @@ namespace Gala { return Source.REMOVE; }); } + + public static void wait_for_window_actor_visible (Meta.Window window, owned WindowActorReadyCallback callback) { + wait_for_window_actor (window, (window_actor) => { + if (window_actor.visible) { + callback (window_actor); + } else { + ulong show_handler = 0; + show_handler = window_actor.show.connect (() => { + window_actor.disconnect (show_handler); + callback (window_actor); + }); + } + }); + } } } diff --git a/src/WindowManager.vala b/src/WindowManager.vala index 8a1b90375..75b488b78 100644 --- a/src/WindowManager.vala +++ b/src/WindowManager.vala @@ -2120,9 +2120,10 @@ namespace Gala { // 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)) { - unowned var actor = (Meta.WindowActor) window.get_compositor_private (); - clutter_actor_reparent (actor, notification_group); - notification_stack.show_notification (actor); + InternalUtils.wait_for_window_actor_visible (window, (actor) => { + clutter_actor_reparent (actor, notification_group); + notification_stack.show_notification (actor); + }); } });