[gnome-mines] Patch to pause game when main window changes focus.
- From: Robert Ancell <rancell src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-mines] Patch to pause game when main window changes focus.
- Date: Sun, 17 Feb 2013 23:53:27 +0000 (UTC)
commit ced07a0395907bd849ff1683b275f442cb636e97
Author: Isaac Lenton <isaac isuniversal com>
Date: Sat Feb 16 01:53:38 2013 +1000
Patch to pause game when main window changes focus.
src/gnome-mines.vala | 44 ++++++++++++++++++++++++++++++++++++++++----
src/minefield.vala | 10 +++++++---
2 files changed, 47 insertions(+), 7 deletions(-)
---
diff --git a/src/gnome-mines.vala b/src/gnome-mines.vala
index e7895d8..cc4528f 100644
--- a/src/gnome-mines.vala
+++ b/src/gnome-mines.vala
@@ -44,6 +44,9 @@ public class Mines : Gtk.Application
private int window_height;
private bool is_fullscreen;
private bool is_maximized;
+
+ /* true when the user has requested the game to pause. */
+ private bool pause_requested;
/* Game history */
private History history;
@@ -136,6 +139,8 @@ public class Mines : Gtk.Application
window.title = _("Mines");
window.configure_event.connect (window_configure_event_cb);
window.window_state_event.connect (window_state_event_cb);
+ window.focus_out_event.connect (window_focus_out_event_cb);
+ window.focus_in_event.connect (window_focus_in_event_cb);
window.set_default_size (settings.get_int ("window-width"), settings.get_int ("window-height"));
if (settings.get_boolean ("window-is-fullscreen"))
window.fullscreen ();
@@ -392,6 +397,22 @@ public class Mines : Gtk.Application
return false;
}
+ private bool window_focus_out_event_cb (Gdk.EventFocus event)
+ {
+ if (minefield != null)
+ minefield.paused = true;
+
+ return false;
+ }
+
+ private bool window_focus_in_event_cb (Gdk.EventFocus event)
+ {
+ if (minefield != null && !pause_requested)
+ minefield.paused = false;
+
+ return false;
+ }
+
private string make_minefield_description (string color, int width, int height, int n_mines)
{
var size_label = "%d à %d".printf (width, height);
@@ -446,6 +467,7 @@ public class Mines : Gtk.Application
if (minefield.paused)
{
minefield.paused = false;
+ pause_requested = false;
return true;
}
@@ -524,7 +546,11 @@ public class Mines : Gtk.Application
return;
if (minefield != null)
+ {
+ minefield.paused = false;
+ pause_requested = false;
SignalHandler.disconnect_by_func (minefield, null, this);
+ }
minefield = null;
is_new_game_screen = true;
@@ -538,8 +564,6 @@ public class Mines : Gtk.Application
repeat_size_action.set_enabled (false);
hint_action.set_enabled (false);
pause_action.set_enabled (false);
-
- minefield.paused = false;
}
private void start_game ()
@@ -597,6 +621,7 @@ public class Mines : Gtk.Application
pause_action.set_enabled (true);
minefield.paused = false;
+ pause_requested = false;
}
private void hint_cb ()
@@ -618,7 +643,15 @@ public class Mines : Gtk.Application
private void toggle_pause_cb ()
{
- minefield.paused = !minefield.paused;
+ if (minefield.paused && !pause_requested)
+ {
+ pause_requested = true;
+ }
+ else
+ {
+ minefield.paused = !minefield.paused;
+ pause_requested = minefield.paused;
+ }
}
private void paused_changed_cb ()
@@ -634,7 +667,10 @@ public class Mines : Gtk.Application
hint_action.set_enabled (false);
pause_button.icon_name = "media-playback-start";
pause_button.label = _("Res_ume");
- app_main_menu.insert (3, _("Res_ume"), "app.pause");
+ if (pause_requested)
+ app_main_menu.insert (3, _("Res_ume"), "app.pause");
+ else
+ app_main_menu.insert (3, _("_Pause"), "app.pause");
}
else
{
diff --git a/src/minefield.vala b/src/minefield.vala
index 3ded4c2..8e97cdd 100644
--- a/src/minefield.vala
+++ b/src/minefield.vala
@@ -104,14 +104,18 @@ public class Minefield
{
set
{
- _paused = value;
+ if (is_complete || exploded)
+ return;
+
if (clock != null)
{
- if (value)
+ if (value && !_paused)
stop_clock ();
- else
+ else if (!value && _paused)
continue_clock ();
}
+
+ _paused = value;
paused_changed ();
}
get { return _paused; }
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]