From 2b29acfb9f70cb7aff7d5da1f5fc59ee319e3606 Mon Sep 17 00:00:00 2001 From: dec05eba Date: Thu, 10 Mar 2022 16:15:59 +0100 Subject: Focus video player when focusing the main window --- src/QuickMedia.cpp | 39 ++++++++++++++++++++++++++------------- 1 file changed, 26 insertions(+), 13 deletions(-) (limited to 'src/QuickMedia.cpp') diff --git a/src/QuickMedia.cpp b/src/QuickMedia.cpp index cf7d058..6dda729 100644 --- a/src/QuickMedia.cpp +++ b/src/QuickMedia.cpp @@ -2906,6 +2906,17 @@ namespace QuickMedia { || is_soundcloud(url); } + static void show_video_player_window(Display *disp, Window video_player_window, Window window) { + XMapWindow(disp, video_player_window); + XSync(disp, False); + + Window focused_window = None; + int dummy; + XGetInputFocus(disp, &focused_window, &dummy); + if(focused_window == window) + XSetInputFocus(disp, video_player_window, RevertToParent, CurrentTime); + } + void Program::video_page_download_video(const std::string &url, mgl::WindowHandle video_player_window) { bool separate_audio_option = url_should_download_with_youtube_dl(url); std::string video_id; @@ -2939,10 +2950,8 @@ namespace QuickMedia { tabs.push_back(Tab{ std::move(body), std::move(options_page), nullptr }); bool selected = page_loop(tabs); - if(video_player_window) { - XMapWindow(disp, video_player_window); - XSync(disp, False); - } + if(video_player_window) + show_video_player_window(disp, video_player_window, window.get_system_handle()); if(!selected) return; @@ -3069,6 +3078,12 @@ namespace QuickMedia { if(!subtitle_data.url.empty()) video_player->add_subtitle(subtitle_data.url, subtitle_data.title, "eng"); + Window focused_window = None; + int dummy; + XGetInputFocus(disp, &focused_window, &dummy); + if(focused_window == window.get_system_handle()) + XSetInputFocus(disp, video_player_window, RevertToParent, CurrentTime); + update_time_pos = true; }; @@ -3377,7 +3392,9 @@ namespace QuickMedia { while (current_page == PageType::VIDEO_CONTENT && window.is_open() && !go_to_previous_page) { while (window.poll_event(event)) { common_event_handler(event); - if(event.type == mgl::Event::Resized) { + if(event.type == mgl::Event::GainedFocus && video_player_window) { + XSetInputFocus(disp, video_player_window, RevertToParent, CurrentTime); + } else if(event.type == mgl::Event::Resized) { window_size.x = event.size.width; window_size.y = event.size.height; } else if(event.type == mgl::Event::KeyPressed && (event.key.code == mgl::Keyboard::Escape || event.key.code == mgl::Keyboard::Q || event.key.code == mgl::Keyboard::Backspace)) { @@ -3446,8 +3463,7 @@ namespace QuickMedia { }); if(task_result == TaskResult::CANCEL) { - XMapWindow(disp, video_player_window); - XSync(disp, False); + show_video_player_window(disp, video_player_window, window.get_system_handle()); cancelled = true; } } @@ -3463,8 +3479,7 @@ namespace QuickMedia { }); if(related_pages_result == TaskResult::FALSE) { - XMapWindow(disp, video_player_window); - XSync(disp, False); + show_video_player_window(disp, video_player_window, window.get_system_handle()); show_notification("QuickMedia", "Failed to get related pages", Urgency::CRITICAL); } else if(related_pages_result == TaskResult::TRUE && !related_pages.empty()) { video_page->set_watch_progress(video_time_pos, video_duration); @@ -3498,12 +3513,10 @@ namespace QuickMedia { current_page = PageType::VIDEO_CONTENT; load_video_error_check(resume_start_time > 0.1 ? std::to_string((int)resume_start_time) : ""); } else { - XMapWindow(disp, video_player_window); - XSync(disp, False); + show_video_player_window(disp, video_player_window, window.get_system_handle()); } } else { - XMapWindow(disp, video_player_window); - XSync(disp, False); + show_video_player_window(disp, video_player_window, window.get_system_handle()); } } } else if(pressed_keysym == XK_c && pressing_ctrl) { -- cgit v1.2.3