From cdf15d55f698ad805313970b9aa245e6a5f77628 Mon Sep 17 00:00:00 2001 From: Ed Page Date: Wed, 19 May 2010 22:51:39 -0500 Subject: [PATCH] Propogating fullscreen --- src/mormonchannel_gtk.py | 1 - src/windows/_base.py | 18 +++++++++++++++--- src/windows/conferences.py | 20 +++++++++++++++----- src/windows/magazines.py | 21 +++++++++++++++------ src/windows/scriptures.py | 21 +++++++++++++++------ src/windows/source.py | 5 +++++ 6 files changed, 65 insertions(+), 21 deletions(-) diff --git a/src/mormonchannel_gtk.py b/src/mormonchannel_gtk.py index fb7749d..ffcddfd 100755 --- a/src/mormonchannel_gtk.py +++ b/src/mormonchannel_gtk.py @@ -4,7 +4,6 @@ """ @bug For some reason, the back/close button doesn't work when I nest multiple levels @bug When switching from conference to magazines, it randomly jumps around and duplicates windows -@bug fullscreen does not propgate @todo Re-use windows for better performance @todo Make radio program updates only happen when the app has focus to reduce CPU wakes diff --git a/src/windows/_base.py b/src/windows/_base.py index 96ed2ec..ac81df2 100644 --- a/src/windows/_base.py +++ b/src/windows/_base.py @@ -90,7 +90,7 @@ class BasicWindow(gobject.GObject, go_utils.AutoSignal): def load_settings(self, config, sectionName): try: - self._windowInFullscreen = config.getboolean(sectionName, "fullscreen") + windowInFullscreen = config.getboolean(sectionName, "fullscreen") except ConfigParser.NoSectionError, e: _moduleLogger.info( "Settings file %s is missing section %s" % ( @@ -99,7 +99,7 @@ class BasicWindow(gobject.GObject, go_utils.AutoSignal): ) ) - if self._windowInFullscreen: + if windowInFullscreen: self._window.fullscreen() else: self._window.unfullscreen() @@ -113,11 +113,14 @@ class BasicWindow(gobject.GObject, go_utils.AutoSignal): @misc_utils.log_exception(_moduleLogger) def _on_window_state_change(self, widget, event, *args): + oldIsFull = self._windowInFullscreen if event.new_window_state & gtk.gdk.WINDOW_STATE_FULLSCREEN: self._windowInFullscreen = True else: self._windowInFullscreen = False - self.emit("fullscreen", self._windowInFullscreen) + if oldIsFull != self._windowInFullscreen: + _moduleLogger.info("%r Emit fullscreen %s" % (self, self._windowInFullscreen)) + self.emit("fullscreen", self._windowInFullscreen) @misc_utils.log_exception(_moduleLogger) def _on_key_press(self, widget, event, *args): @@ -157,6 +160,15 @@ class BasicWindow(gobject.GObject, go_utils.AutoSignal): self._window.destroy() @misc_utils.log_exception(_moduleLogger) + def _on_child_fullscreen(self, source, isFull): + if isFull: + _moduleLogger.info("Full screen %r to mirror child %r" % (self, source)) + self._window.fullscreen() + else: + _moduleLogger.info("Unfull screen %r to mirror child %r" % (self, source)) + self._window.unfullscreen() + + @misc_utils.log_exception(_moduleLogger) def _on_jump(self, source, node): raise NotImplementedError("On %s" % self) diff --git a/src/windows/conferences.py b/src/windows/conferences.py index e51aed2..c5a8b0d 100644 --- a/src/windows/conferences.py +++ b/src/windows/conferences.py @@ -6,8 +6,6 @@ import gtk import hildonize import util.go_utils as go_utils import util.misc as misc_utils -import banners -import stream_index import windows @@ -73,10 +71,14 @@ class ConferencesWindow(windows._base.ListWindow): sessionsWindow = ConferenceSessionsWindow(self._app, self._player, self._store, node) sessionsWindow.window.set_modal(True) sessionsWindow.window.set_transient_for(self._window) - sessionsWindow.window.set_default_size(*self._window.get_size()) + if self._windowInFullscreen: + sessionsWindow.window.fullscreen() + else: + sessionsWindow.window.unfullscreen() sessionsWindow.connect("quit", self._on_quit) sessionsWindow.connect("home", self._on_home) sessionsWindow.connect("jump-to", self._on_jump) + sessionsWindow.connect("fullscreen", self._on_child_fullscreen) sessionsWindow.show() return sessionsWindow @@ -133,10 +135,14 @@ class ConferenceSessionsWindow(windows._base.ListWindow): sessionsWindow = ConferenceTalksWindow(self._app, self._player, self._store, node) sessionsWindow.window.set_modal(True) sessionsWindow.window.set_transient_for(self._window) - sessionsWindow.window.set_default_size(*self._window.get_size()) + if self._windowInFullscreen: + sessionsWindow.window.fullscreen() + else: + sessionsWindow.window.unfullscreen() sessionsWindow.connect("quit", self._on_quit) sessionsWindow.connect("home", self._on_home) sessionsWindow.connect("jump-to", self._on_jump) + sessionsWindow.connect("fullscreen", self._on_child_fullscreen) sessionsWindow.show() return sessionsWindow @@ -192,10 +198,14 @@ class ConferenceTalksWindow(windows._base.ListWindow): sessionsWindow = ConferenceTalkWindow(self._app, self._player, self._store, node) sessionsWindow.window.set_modal(True) sessionsWindow.window.set_transient_for(self._window) - sessionsWindow.window.set_default_size(*self._window.get_size()) + if self._windowInFullscreen: + sessionsWindow.window.fullscreen() + else: + sessionsWindow.window.unfullscreen() sessionsWindow.connect("quit", self._on_quit) sessionsWindow.connect("home", self._on_home) sessionsWindow.connect("jump-to", self._on_jump) + sessionsWindow.connect("fullscreen", self._on_child_fullscreen) sessionsWindow.show() return sessionsWindow diff --git a/src/windows/magazines.py b/src/windows/magazines.py index 212c0ef..095c72f 100644 --- a/src/windows/magazines.py +++ b/src/windows/magazines.py @@ -6,9 +6,6 @@ import gtk import hildonize import util.go_utils as go_utils import util.misc as misc_utils -import banners -import presenter -import stream_index import windows @@ -98,10 +95,14 @@ class MagazinesWindow(windows._base.ListWindow): issuesWindow = MagazineIssuesWindow(self._app, self._player, self._store, node) issuesWindow.window.set_modal(True) issuesWindow.window.set_transient_for(self._window) - issuesWindow.window.set_default_size(*self._window.get_size()) + if self._windowInFullscreen: + issuesWindow.window.fullscreen() + else: + issuesWindow.window.unfullscreen() issuesWindow.connect("quit", self._on_quit) issuesWindow.connect("home", self._on_home) issuesWindow.connect("jump-to", self._on_jump) + issuesWindow.connect("fullscreen", self._on_child_fullscreen) issuesWindow.show() return issuesWindow @@ -188,10 +189,14 @@ class MagazineIssuesWindow(windows._base.ListWindow): issuesWindow = MagazineArticlesWindow(self._app, self._player, self._store, node) issuesWindow.window.set_modal(True) issuesWindow.window.set_transient_for(self._window) - issuesWindow.window.set_default_size(*self._window.get_size()) + if self._windowInFullscreen: + issuesWindow.window.fullscreen() + else: + issuesWindow.window.unfullscreen() issuesWindow.connect("quit", self._on_quit) issuesWindow.connect("home", self._on_home) issuesWindow.connect("jump-to", self._on_jump) + issuesWindow.connect("fullscreen", self._on_child_fullscreen) issuesWindow.show() return issuesWindow @@ -247,10 +252,14 @@ class MagazineArticlesWindow(windows._base.ListWindow): issuesWindow = MagazineArticleWindow(self._app, self._player, self._store, node) issuesWindow.window.set_modal(True) issuesWindow.window.set_transient_for(self._window) - issuesWindow.window.set_default_size(*self._window.get_size()) + if self._windowInFullscreen: + issuesWindow.window.fullscreen() + else: + issuesWindow.window.unfullscreen() issuesWindow.connect("quit", self._on_quit) issuesWindow.connect("home", self._on_home) issuesWindow.connect("jump-to", self._on_jump) + issuesWindow.connect("fullscreen", self._on_child_fullscreen) issuesWindow.show() return issuesWindow diff --git a/src/windows/scriptures.py b/src/windows/scriptures.py index 40274b7..ef4a0b5 100644 --- a/src/windows/scriptures.py +++ b/src/windows/scriptures.py @@ -6,9 +6,6 @@ import gtk import hildonize import util.go_utils as go_utils import util.misc as misc_utils -import banners -import presenter -import stream_index import windows @@ -65,10 +62,14 @@ class ScripturesWindow(windows._base.ListWindow): booksWindow = ScriptureBooksWindow(self._app, self._player, self._store, node) booksWindow.window.set_modal(True) booksWindow.window.set_transient_for(self._window) - booksWindow.window.set_default_size(*self._window.get_size()) + if self._windowInFullscreen: + booksWindow.window.fullscreen() + else: + booksWindow.window.unfullscreen() booksWindow.connect("quit", self._on_quit) booksWindow.connect("home", self._on_home) booksWindow.connect("jump-to", self._on_jump) + booksWindow.connect("fullscreen", self._on_child_fullscreen) booksWindow.show() return booksWindow @@ -125,10 +126,14 @@ class ScriptureBooksWindow(windows._base.ListWindow): booksWindow = ScriptureChaptersWindow(self._app, self._player, self._store, node) booksWindow.window.set_modal(True) booksWindow.window.set_transient_for(self._window) - booksWindow.window.set_default_size(*self._window.get_size()) + if self._windowInFullscreen: + booksWindow.window.fullscreen() + else: + booksWindow.window.unfullscreen() booksWindow.connect("quit", self._on_quit) booksWindow.connect("home", self._on_home) booksWindow.connect("jump-to", self._on_jump) + booksWindow.connect("fullscreen", self._on_child_fullscreen) booksWindow.show() return booksWindow @@ -185,10 +190,14 @@ class ScriptureChaptersWindow(windows._base.ListWindow): booksWindow = ScriptureChapterWindow(self._app, self._player, self._store, node) booksWindow.window.set_modal(True) booksWindow.window.set_transient_for(self._window) - booksWindow.window.set_default_size(*self._window.get_size()) + if self._windowInFullscreen: + booksWindow.window.fullscreen() + else: + booksWindow.window.unfullscreen() booksWindow.connect("quit", self._on_quit) booksWindow.connect("home", self._on_home) booksWindow.connect("jump-to", self._on_jump) + booksWindow.connect("fullscreen", self._on_child_fullscreen) booksWindow.show() return booksWindow diff --git a/src/windows/source.py b/src/windows/source.py index 56a745d..169d5fc 100644 --- a/src/windows/source.py +++ b/src/windows/source.py @@ -114,8 +114,13 @@ class SourceSelector(windows._base.BasicWindow): sourceWindow.window.set_modal(True) sourceWindow.window.set_transient_for(self._window) sourceWindow.window.set_default_size(*self._window.get_size()) + if self._windowInFullscreen: + sourceWindow.window.fullscreen() + else: + sourceWindow.window.unfullscreen() sourceWindow.connect("quit", self._on_quit) sourceWindow.connect("jump-to", self._on_jump) + sourceWindow.connect("fullscreen", self._on_child_fullscreen) sourceWindow.show() return sourceWindow -- 1.7.9.5