diff --git a/app/tools/media.py b/app/tools/media.py index 595ff769..0dff2477 100644 --- a/app/tools/media.py +++ b/app/tools/media.py @@ -1,6 +1,6 @@ from app.commons import run_idle from app.tools import vlc -from app.ui.uicommons import Gtk +from app.ui.uicommons import Gtk, Gdk MRL = "url" @@ -12,15 +12,24 @@ class Player: handlers = {"on_play": self.on_play, "on_stop": self.on_stop, "on_drawing_area_realize": self.on_drawing_area_realize, + "on_press": self.on_press, + "on_key_release": self.on_key_release, + "on_state_changed": self.on_state_changed, "on_close_window": self.on_close_window} builder = Gtk.Builder() builder.add_objects_from_file("player.glade", ("player_main_window",)) builder.connect_signals(handlers) self._main_window = builder.get_object("player_main_window") + self._main_box = builder.get_object("main_box") + self._buttonbox = builder.get_object("buttonbox") + self._frame = builder.get_object("") + self._drawing_area = builder.get_object("drawing_area") + self._drawing_area.set_events(Gdk.ModifierType.BUTTON1_MASK) self._player = Player.get_vlc_instance().media_player_new() self._is_played = False self._url = url + self._full_screen = False @staticmethod def get_vlc_instance(): @@ -39,6 +48,30 @@ class Player: self._player.stop() self._is_played = False + def on_press(self, area, event: Gdk.EventButton): + if event.button == Gdk.BUTTON_PRIMARY and event.type == Gdk.EventType.DOUBLE_BUTTON_PRESS: + self.change_state() + + def on_state_changed(self, window, event): + if event.new_window_state & Gdk.WindowState.FULLSCREEN: + if self._main_box in window: + window.remove(self._main_box) + self._drawing_area.reparent(self._main_window) + else: + if self._drawing_area in self._main_window: + window.remove(self._drawing_area) + window.add(self._main_box) + self._main_box.pack_start(self._drawing_area, True, True, 0) + self._main_box.reorder_child(self._drawing_area, 0) + + def change_state(self): + self._full_screen = not self._full_screen + self._main_window.fullscreen() if self._full_screen else self._main_window.unfullscreen() + + def on_key_release(self, area, key): + if key.keyval in (Gdk.KEY_F, Gdk.KEY_f): + self.change_state() + def on_drawing_area_realize(self, widget): win_id = widget.get_window().get_xid() if self._player: diff --git a/app/tools/player.glade b/app/tools/player.glade index 150875cf..e311368c 100644 --- a/app/tools/player.glade +++ b/app/tools/player.glade @@ -7,6 +7,7 @@ Player vlc + True @@ -17,7 +18,10 @@ 320 240 True - False + True + True + + @@ -28,7 +32,7 @@ - + True False diff --git a/app/ui/main_app_window.py b/app/ui/main_app_window.py index 0de85934..ea9ef73d 100644 --- a/app/ui/main_app_window.py +++ b/app/ui/main_app_window.py @@ -119,6 +119,8 @@ class MainAppWindow: "on_iptv": self.on_iptv, "on_fav_iptv_mode": self.on_fav_iptv_mode, "on_drawing_area_realize": self.on_drawing_area_realize, + "on_player_press": self.on_player_press, + "on_main_window_state": self.on_main_window_state, "on_new_bouquet": self.on_new_bouquet, "on_bouquets_edit": self.on_bouquets_edit, "on_create_bouquet_for_current_satellite": self.on_create_bouquet_for_current_satellite, @@ -143,6 +145,7 @@ class MainAppWindow: self._iptv_preview_mode = False self._player = None self._is_played = False + self._full_screen = False builder = Gtk.Builder() builder.set_translation_domain("demon-editor") @@ -161,7 +164,11 @@ class MainAppWindow: self._bouquets_model = builder.get_object("bouquets_tree_store") self._status_bar = builder.get_object("status_bar") self._player_frame = builder.get_object("player_frame") + self._player_drawing_area = builder.get_object("player_drawing_area") + # enabling events for the drawing area + self._player_drawing_area.set_events(Gdk.ModifierType.BUTTON1_MASK) self._drawing_area_xid = None + self._main_window_box = builder.get_object("main_window_box") self._fav_iptv_mode_popup_item = builder.get_object("fav_iptv_mode_popup_item") self._profile_label = builder.get_object("profile_label") self._ip_label = builder.get_object("ip_label") @@ -935,7 +942,6 @@ class MainAppWindow: def on_fav_press(self, menu, event): self.on_view_popup_menu(menu, event) - if self._iptv_preview_mode and event.get_event_type() == Gdk.EventType.DOUBLE_BUTTON_PRESS: self.test_iptv() @@ -971,6 +977,30 @@ class MainAppWindow: self._player.stop() self._is_played = False + def on_player_press(self, area, event): + if event.button == Gdk.BUTTON_PRIMARY: + if event.type == Gdk.EventType.DOUBLE_BUTTON_PRESS: + self._full_screen = not self._full_screen + self._main_window.fullscreen() if self._full_screen else self._main_window.unfullscreen() + elif event.type == Gdk.EventType.BUTTON_PRESS: + if self._player: + self._player.stop() if self._player.is_playing() else self._player.play() + + def on_main_window_state(self, window, event): + if event.new_window_state & Gdk.WindowState.FULLSCREEN: + if self._main_window_box in window: + window.remove(self._main_window_box) + self._player_drawing_area.reparent(window) + if self._player: + self._player.set_xwindow(self._player_drawing_area.get_window().get_xid()) + else: + if self._player_drawing_area in window: + window.remove(self._player_drawing_area) + window.add(self._main_window_box) + self._player_frame.add(self._player_drawing_area) + if self._player: + self._player.set_xwindow(self._player_drawing_area.get_window().get_xid()) + def on_drawing_area_realize(self, widget): self._drawing_area_xid = widget.get_window().get_xid() diff --git a/app/ui/main_window.glade b/app/ui/main_window.glade index 60f3eefc..f306f84b 100644 --- a/app/ui/main_window.glade +++ b/app/ui/main_window.glade @@ -444,6 +444,7 @@ accessories-text-editor + True @@ -1842,7 +1843,8 @@ True - False + True +