[gnome-games] Reinstate leave fullscreen toolbutton
- From: Robert Ancell <rancell src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-games] Reinstate leave fullscreen toolbutton
- Date: Sat, 24 Apr 2010 00:39:06 +0000 (UTC)
commit 35d0ffae5665c9e5237333c2fe0347d954e95d6c
Author: Robert Ancell <robert ancell gmail com>
Date: Sat Apr 24 09:28:04 2010 +1000
Reinstate leave fullscreen toolbutton
libgames-support/games-fullscreen-action.c | 68 ++++++++++++++++++++++++----
libgames-support/games-fullscreen-action.h | 16 ++++++-
mahjongg/mahjongg.c | 6 +++
3 files changed, 79 insertions(+), 11 deletions(-)
---
diff --git a/libgames-support/games-fullscreen-action.c b/libgames-support/games-fullscreen-action.c
index 9926401..5943df0 100644
--- a/libgames-support/games-fullscreen-action.c
+++ b/libgames-support/games-fullscreen-action.c
@@ -27,13 +27,15 @@
enum {
PROP_0,
PROP_WINDOW,
- PROP_IS_FULLSCREEN
+ PROP_IS_FULLSCREEN,
+ PROP_VISIBLE_POLICY,
};
struct GamesFullscreenActionPrivate
{
GtkWindow *window;
gboolean is_fullscreen;
+ GamesFullscreenActionVisiblePolicy visible_policy;
};
G_DEFINE_TYPE (GamesFullscreenAction, games_fullscreen_action, GTK_TYPE_ACTION);
@@ -41,13 +43,48 @@ G_DEFINE_TYPE (GamesFullscreenAction, games_fullscreen_action, GTK_TYPE_ACTION);
GamesFullscreenAction *
games_fullscreen_action_new (const gchar *name, GtkWindow *window)
{
- return g_object_new (GAMES_FULLSCREEN_ACTION_TYPE, "name", name, "window", window, NULL);
+ return g_object_new (GAMES_TYPE_FULLSCREEN_ACTION, "name", name, "window", window, NULL);
+}
+
+static void
+update_action (GamesFullscreenAction *action)
+{
+ gboolean visible = TRUE;
+
+ if (action->priv->is_fullscreen) {
+ gtk_action_set_stock_id (GTK_ACTION (action), GAMES_STOCK_LEAVE_FULLSCREEN);
+ if (action->priv->visible_policy == GAMES_FULLSCREEN_ACTION_VISIBLE_ON_UNFULLSCREEN)
+ visible = FALSE;
+ }
+ else {
+ if (action->priv->visible_policy == GAMES_FULLSCREEN_ACTION_VISIBLE_ON_FULLSCREEN)
+ visible = FALSE;
+ gtk_action_set_stock_id (GTK_ACTION (action), GAMES_STOCK_FULLSCREEN);
+ }
+
+ gtk_action_set_visible (GTK_ACTION (action), visible);
+}
+
+void
+games_fullscreen_action_set_visible_policy (GamesFullscreenAction *action, GamesFullscreenActionVisiblePolicy visible_policy)
+{
+ g_return_if_fail (GAMES_IS_FULLSCREEN_ACTION (action));
+
+ action->priv->visible_policy = visible_policy;
+ update_action (action);
+}
+
+GamesFullscreenActionVisiblePolicy
+games_fullscreen_action_get_visible_policy (GamesFullscreenAction *action)
+{
+ g_return_val_if_fail (GAMES_IS_FULLSCREEN_ACTION (action), 0);
+ return action->priv->visible_policy;
}
void
games_fullscreen_action_set_is_fullscreen (GamesFullscreenAction *action, gboolean is_fullscreen)
{
-// g_return_if_fail (G
+ g_return_if_fail (GAMES_IS_FULLSCREEN_ACTION (action));
if (is_fullscreen)
gtk_window_fullscreen (action->priv->window);
@@ -58,6 +95,7 @@ games_fullscreen_action_set_is_fullscreen (GamesFullscreenAction *action, gboole
gboolean
games_fullscreen_action_get_is_fullscreen (GamesFullscreenAction *action)
{
+ g_return_val_if_fail (GAMES_IS_FULLSCREEN_ACTION (action), FALSE);
return action->priv->is_fullscreen;
}
@@ -76,10 +114,8 @@ window_state_event_cb (GtkWidget *widget,
return FALSE;
action->priv->is_fullscreen = is_fullscreen;
- if (action->priv->is_fullscreen)
- gtk_action_set_stock_id (GTK_ACTION (action), GAMES_STOCK_LEAVE_FULLSCREEN);
- else
- gtk_action_set_stock_id (GTK_ACTION (action), GAMES_STOCK_FULLSCREEN);
+
+ update_action (action);
g_object_notify (G_OBJECT (action), "is-fullscreen");
@@ -105,6 +141,9 @@ games_fullscreen_action_set_property(GObject *object,
case PROP_IS_FULLSCREEN:
games_fullscreen_action_set_is_fullscreen (self, g_value_get_boolean (value));
break;
+ case PROP_VISIBLE_POLICY:
+ games_fullscreen_action_set_visible_policy (self, g_value_get_int (value));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -128,6 +167,9 @@ games_fullscreen_action_get_property(GObject *object,
case PROP_IS_FULLSCREEN:
g_value_set_boolean (value, games_fullscreen_action_get_is_fullscreen (self));
break;
+ case PROP_VISIBLE_POLICY:
+ g_value_set_int (value, games_fullscreen_action_get_visible_policy (self));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -137,8 +179,8 @@ games_fullscreen_action_get_property(GObject *object,
static void
games_fullscreen_action_init (GamesFullscreenAction *self)
{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GAMES_FULLSCREEN_ACTION_TYPE, GamesFullscreenActionPrivate);
- gtk_action_set_stock_id (GTK_ACTION (self), GAMES_STOCK_FULLSCREEN);
+ self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GAMES_TYPE_FULLSCREEN_ACTION, GamesFullscreenActionPrivate);
+ update_action (self);
}
static void
@@ -174,5 +216,13 @@ games_fullscreen_action_class_init (GamesFullscreenActionClass *klass)
FALSE,
G_PARAM_READWRITE));
+ g_object_class_install_property(object_class,
+ PROP_VISIBLE_POLICY,
+ g_param_spec_boolean("visible-policy",
+ "visible-policy",
+ "Policy when to show this action",
+ GAMES_FULLSCREEN_ACTION_VISIBLE_ALWAYS,
+ G_PARAM_READWRITE));
+
g_type_class_add_private (klass, sizeof (GamesFullscreenActionPrivate));
}
diff --git a/libgames-support/games-fullscreen-action.h b/libgames-support/games-fullscreen-action.h
index 5ac9a64..d814db6 100644
--- a/libgames-support/games-fullscreen-action.h
+++ b/libgames-support/games-fullscreen-action.h
@@ -26,8 +26,9 @@
G_BEGIN_DECLS
-#define GAMES_FULLSCREEN_ACTION_TYPE (games_fullscreen_action_get_type ())
-#define GAMES_FULLSCREEN_ACTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GAMES_FULLSCREEN_ACTION_TYPE, GamesFullscreenAction))
+#define GAMES_TYPE_FULLSCREEN_ACTION (games_fullscreen_action_get_type ())
+#define GAMES_FULLSCREEN_ACTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GAMES_TYPE_FULLSCREEN_ACTION, GamesFullscreenAction))
+#define GAMES_IS_FULLSCREEN_ACTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GAMES_TYPE_FULLSCREEN_ACTION))
typedef struct GamesFullscreenActionPrivate GamesFullscreenActionPrivate;
@@ -42,10 +43,21 @@ typedef struct
GtkActionClass parent_class;
} GamesFullscreenActionClass;
+typedef enum
+{
+ GAMES_FULLSCREEN_ACTION_VISIBLE_ALWAYS,
+ GAMES_FULLSCREEN_ACTION_VISIBLE_ON_FULLSCREEN,
+ GAMES_FULLSCREEN_ACTION_VISIBLE_ON_UNFULLSCREEN
+} GamesFullscreenActionVisiblePolicy;
+
GType games_fullscreen_action_get_type (void);
GamesFullscreenAction *games_fullscreen_action_new (const gchar *name, GtkWindow *window);
+void games_fullscreen_action_set_visible_policy (GamesFullscreenAction *action, GamesFullscreenActionVisiblePolicy visible_policy);
+
+GamesFullscreenActionVisiblePolicy games_fullscreen_action_get_visible_policy (GamesFullscreenAction *action);
+
void games_fullscreen_action_set_is_fullscreen (GamesFullscreenAction *action, gboolean is_fullscreen);
gboolean games_fullscreen_action_get_is_fullscreen (GamesFullscreenAction *action);
diff --git a/mahjongg/mahjongg.c b/mahjongg/mahjongg.c
index 19fb07b..42b7ff6 100644
--- a/mahjongg/mahjongg.c
+++ b/mahjongg/mahjongg.c
@@ -78,6 +78,7 @@ static GtkAction *restart_action;
static GtkAction *scores_action;
static GtkAction *show_toolbar_action;
static GtkAction *fullscreen_action;
+static GtkAction *leave_fullscreen_action;
/* Available tilsets */
static GList *tileset_list = NULL;
@@ -1267,6 +1268,7 @@ static const char ui_description[] =
" <toolitem action='UndoMove'/>"
" <toolitem action='RedoMove'/>"
" <toolitem action='Hint'/>"
+ " <toolitem action='LeaveFullscreen'/>"
" </toolbar>"
"</ui>";
@@ -1300,6 +1302,9 @@ create_menus (GtkUIManager * ui_manager)
fullscreen_action = GTK_ACTION (games_fullscreen_action_new ("Fullscreen", GTK_WINDOW (window)));
gtk_action_group_add_action_with_accel (action_group, fullscreen_action, NULL);
+ leave_fullscreen_action = GTK_ACTION (games_fullscreen_action_new ("LeaveFullscreen", GTK_WINDOW (window)));
+ gtk_action_group_add_action_with_accel (action_group, leave_fullscreen_action, NULL);
+
gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (show_toolbar_action),
games_conf_get_boolean (NULL, KEY_SHOW_TOOLBAR, NULL));
}
@@ -1461,6 +1466,7 @@ main (int argc, char *argv[])
* window knows how big to make the tiles. */
gtk_widget_show_all (window);
+ games_fullscreen_action_set_visible_policy (GAMES_FULLSCREEN_ACTION (leave_fullscreen_action), GAMES_FULLSCREEN_ACTION_VISIBLE_ON_FULLSCREEN);
if (!games_conf_get_boolean (NULL, KEY_SHOW_TOOLBAR, NULL))
gtk_widget_hide (toolbar);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]