[yelp] [yelp-application] Move global actions (cursor, font) into YelpApplication
- From: Shaun McCance <shaunm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [yelp] [yelp-application] Move global actions (cursor, font) into YelpApplication
- Date: Fri, 23 Apr 2010 20:21:54 +0000 (UTC)
commit 1a98a06ecb3b63577a81a78c74f5cd2a7c6a76b9
Author: Shaun McCance <shaunm gnome org>
Date: Fri Apr 23 15:20:36 2010 -0500
[yelp-application] Move global actions (cursor, font) into YelpApplication
src/yelp-application.c | 161 +++++++++++++++++++++-----------
src/yelp-application.h | 5 +-
src/yelp-window.c | 246 ++++++++++++++++++++++--------------------------
3 files changed, 221 insertions(+), 191 deletions(-)
---
diff --git a/src/yelp-application.c b/src/yelp-application.c
index b1ace48..cea71b1 100644
--- a/src/yelp-application.c
+++ b/src/yelp-application.c
@@ -24,10 +24,15 @@
#include <config.h>
#endif
+#define G_SETTINGS_ENABLE_BACKEND
+
#include <dbus/dbus-glib-bindings.h>
#include <dbus/dbus-glib.h>
+#include <gio/gio.h>
+#include <gio/gsettingsbackend.h>
#include <glib/gi18n.h>
#include <gtk/gtk.h>
+#include <gdk/gdkx.h>
#include "yelp-settings.h"
#include "yelp-view.h"
@@ -57,12 +62,16 @@ static void yelp_application_class_init (YelpApplicationClass *k
static void yelp_application_dispose (GObject *object);
static void yelp_application_finalize (GObject *object);
+static void application_setup (YelpApplication *app);
static void application_uri_resolved (YelpUri *uri,
YelpApplicationLoad *data);
static gboolean application_window_deleted (YelpWindow *window,
GdkEvent *event,
YelpApplication *app);
static gboolean application_maybe_quit (YelpApplication *app);
+static void application_adjust_font (GtkAction *action,
+ YelpApplication *app);
+static void application_set_font_sensitivity (YelpApplication *app);
G_DEFINE_TYPE (YelpApplication, yelp_application, G_TYPE_OBJECT);
#define GET_PRIV(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), YELP_TYPE_APPLICATION, YelpApplicationPrivate))
@@ -72,40 +81,29 @@ struct _YelpApplicationPrivate {
DBusGConnection *connection;
GSList *windows;
-
GHashTable *windows_by_document;
+ GtkActionGroup *action_group;
+
GSettings *gsettings;
};
+static const GtkActionEntry action_entries[] = {
+ { "LargerText", GTK_STOCK_ZOOM_IN,
+ N_("_Larger Text"),
+ "<Control>plus",
+ N_("Increase the size of the text"),
+ G_CALLBACK (application_adjust_font) },
+ { "SmallerText", GTK_STOCK_ZOOM_OUT,
+ N_("_Smaller Text"),
+ "<Control>minus",
+ N_("Descrease the size of the text"),
+ G_CALLBACK (application_adjust_font) }
+};
+
static void
yelp_application_init (YelpApplication *app)
{
- YelpSettings *settings = yelp_settings_get_default ();
- YelpApplicationPrivate *priv = GET_PRIV (app);
-
- priv->windows_by_document = g_hash_table_new_full (g_str_hash,
- g_str_equal,
- g_free,
- NULL);
- /* FIXME: is there a better way to see if there's a real backend in use? */
- if (g_getenv ("GSETTINGS_BACKEND") == NULL) {
- gchar *keyfile = g_build_filename (g_get_user_config_dir (),
- "yelp", "yelp.cfg",
- NULL);
- g_settings_backend_setup_keyfile ("yelp-", keyfile);
- priv->gsettings = g_settings_new_with_context ("org.gnome.yelp", "yelp-");
- g_free (keyfile);
- }
- else {
- priv->gsettings = g_settings_new ("org.gnome.yelp");
- }
- g_settings_bind (priv->gsettings, "show-cursor",
- settings, "show-text-cursor",
- G_SETTINGS_BIND_DEFAULT);
- g_settings_bind (priv->gsettings, "font-adjustment",
- settings, "font-adjustment",
- G_SETTINGS_BIND_DEFAULT);
}
static void
@@ -132,6 +130,11 @@ yelp_application_dispose (GObject *object)
priv->connection = NULL;
}
+ if (priv->action_group) {
+ g_object_unref (priv->action_group);
+ priv->action_group = NULL;
+ }
+
if (priv->gsettings) {
g_object_unref (priv->gsettings);
priv->gsettings = NULL;
@@ -151,38 +154,92 @@ yelp_application_finalize (GObject *object)
}
+static void
+application_setup (YelpApplication *app)
+{
+ YelpApplicationPrivate *priv = GET_PRIV (app);
+ YelpSettings *settings = yelp_settings_get_default ();
+ GtkAction *action;
+
+ priv->windows_by_document = g_hash_table_new_full (g_str_hash,
+ g_str_equal,
+ g_free,
+ NULL);
+ /* FIXME: is there a better way to see if there's a real backend in use? */
+ if (g_getenv ("GSETTINGS_BACKEND") == NULL) {
+ gchar *keyfile = g_build_filename (g_get_user_config_dir (),
+ "yelp", "yelp.cfg",
+ NULL);
+ g_settings_backend_setup_keyfile ("yelp-", keyfile);
+ priv->gsettings = g_settings_new_with_context ("org.gnome.yelp", "yelp-");
+ g_free (keyfile);
+ }
+ else {
+ priv->gsettings = g_settings_new ("org.gnome.yelp");
+ }
+ g_settings_bind (priv->gsettings, "show-cursor",
+ settings, "show-text-cursor",
+ G_SETTINGS_BIND_DEFAULT);
+ g_settings_bind (priv->gsettings, "font-adjustment",
+ settings, "font-adjustment",
+ G_SETTINGS_BIND_DEFAULT);
+
+ priv->action_group = gtk_action_group_new ("ApplicationActions");
+ gtk_action_group_set_translation_domain (priv->action_group, GETTEXT_PACKAGE);
+ gtk_action_group_add_actions (priv->action_group,
+ action_entries, G_N_ELEMENTS (action_entries),
+ app);
+ action = (GtkAction *) gtk_toggle_action_new ("ShowTextCursor",
+ _("Show Text _Cursor"),
+ NULL, NULL);
+ gtk_action_group_add_action_with_accel (priv->action_group,
+ action, "F7");
+ g_settings_bind (priv->gsettings, "show-cursor",
+ action, "active",
+ G_SETTINGS_BIND_DEFAULT);
+ g_object_unref (action);
+ application_set_font_sensitivity (app);
+}
+
/******************************************************************************/
-void
-yelp_application_adjust_font (YelpApplication *app,
- gint adjust)
+GtkActionGroup *
+yelp_application_get_action_group (YelpApplication *app)
{
- GSList *cur;
- YelpSettings *settings = yelp_settings_get_default ();
- GParamSpec *spec = g_object_class_find_property ((GObjectClass *) YELP_SETTINGS_GET_CLASS (settings),
- "font-adjustment");
YelpApplicationPrivate *priv = GET_PRIV (app);
- gint adjustment = g_settings_get_int (priv->gsettings, "font-adjustment");
+ return priv->action_group;
+}
- if (!G_PARAM_SPEC_INT (spec)) {
- g_warning ("Expcected integer param spec for font-adjustment");
- return;
- }
+static void
+application_adjust_font (GtkAction *action,
+ YelpApplication *app)
+{
+ YelpApplicationPrivate *priv = GET_PRIV (app);
+ gint adjustment = g_settings_get_int (priv->gsettings, "font-adjustment");
+ gint adjust = g_str_equal (gtk_action_get_name (action), "LargerText") ? 1 : -1;
adjustment += adjust;
g_settings_set_int (priv->gsettings, "font-adjustment", adjustment);
- for (cur = priv->windows; cur != NULL; cur = cur->next) {
- YelpWindow *win = (YelpWindow *) cur->data;
- GtkActionGroup *group = yelp_window_get_action_group (win);
- GtkAction *larger, *smaller;
-
- larger = gtk_action_group_get_action (group, "LargerText");
- gtk_action_set_sensitive (larger, adjustment < ((GParamSpecInt *) spec)->maximum);
+ application_set_font_sensitivity (app);
+}
- smaller = gtk_action_group_get_action (group, "SmallerText");
- gtk_action_set_sensitive (smaller, adjustment > ((GParamSpecInt *) spec)->minimum);
+static void
+application_set_font_sensitivity (YelpApplication *app)
+{
+ YelpApplicationPrivate *priv = GET_PRIV (app);
+ YelpSettings *settings = yelp_settings_get_default ();
+ GParamSpec *spec = g_object_class_find_property ((GObjectClass *) YELP_SETTINGS_GET_CLASS (settings),
+ "font-adjustment");
+ gint adjustment = g_settings_get_int (priv->gsettings, "font-adjustment");
+ if (!G_PARAM_SPEC_INT (spec)) {
+ g_warning ("Expcected integer param spec for font-adjustment");
+ return;
}
+ gtk_action_set_sensitive (gtk_action_group_get_action (priv->action_group, "LargerText"),
+ adjustment < ((GParamSpecInt *) spec)->maximum);
+ gtk_action_set_sensitive (gtk_action_group_get_action (priv->action_group, "SmallerText"),
+ adjustment > ((GParamSpecInt *) spec)->minimum);
}
/******************************************************************************/
@@ -284,6 +341,8 @@ yelp_application_run (YelpApplication *app,
"/org/gnome/Yelp",
G_OBJECT (app));
+ application_setup (app);
+
yelp_settings_set_editor_mode (yelp_settings_get_default (), editor_mode);
yelp_application_load_uri (app, uri, gtk_get_current_event_time (), NULL);
@@ -352,17 +411,9 @@ application_uri_resolved (YelpUri *uri,
window = g_hash_table_lookup (priv->windows_by_document, doc_uri);
if (window == NULL) {
- GtkActionGroup *group;
- GtkAction *action;
window = yelp_window_new (data->app);
priv->windows = g_slist_prepend (priv->windows, window);
- group = yelp_window_get_action_group (window);
- action = gtk_action_group_get_action (group, "ShowTextCursor");
- g_settings_bind (priv->gsettings, "show-cursor",
- action, "active",
- G_SETTINGS_BIND_DEFAULT);
-
if (!data->new) {
g_hash_table_insert (priv->windows_by_document, doc_uri, window);
g_object_set_data (G_OBJECT (window), "doc_uri", doc_uri);
diff --git a/src/yelp-application.h b/src/yelp-application.h
index b272381..c753212 100644
--- a/src/yelp-application.h
+++ b/src/yelp-application.h
@@ -55,10 +55,7 @@ gboolean yelp_application_load_uri (YelpApplication *app,
GError **error);
void yelp_application_new_window (YelpApplication *app,
const gchar *uri);
-
-void yelp_application_adjust_font (YelpApplication *app,
- gint adjust);
-
+GtkActionGroup * yelp_application_get_action_group (YelpApplication *app);
void yelp_application_install_package (YelpApplication *app,
const gchar *pkg,
const gchar *alt);
diff --git a/src/yelp-window.c b/src/yelp-window.c
index e60ef6b..3f7fe0b 100644
--- a/src/yelp-window.c
+++ b/src/yelp-window.c
@@ -49,14 +49,13 @@ static void yelp_window_set_property (GObject *object,
const GValue *value,
GParamSpec *pspec);
+static void window_construct (YelpWindow *window);
static void window_new (GtkAction *action,
YelpWindow *window);
static void window_close (GtkAction *action,
YelpWindow *window);
static void window_open_location (GtkAction *action,
YelpWindow *window);
-static void window_font_adjustment (GtkAction *action,
- YelpWindow *window);
static void window_go_back (GtkAction *action,
YelpWindow *window);
static void window_go_forward (GtkAction *action,
@@ -138,6 +137,7 @@ typedef struct _YelpWindowPrivate YelpWindowPrivate;
struct _YelpWindowPrivate {
GtkListStore *history;
GtkListStore *completion;
+ GtkUIManager *ui_manager;
GtkActionGroup *action_group;
YelpApplication *application;
@@ -180,16 +180,6 @@ static const GtkActionEntry entries[] = {
"<Control>L",
NULL,
G_CALLBACK (window_open_location) },
- { "LargerText", NULL,
- N_("_Larger Text"),
- "<Control>plus",
- NULL,
- G_CALLBACK (window_font_adjustment) },
- { "SmallerText", NULL,
- N_("_Smaller Text"),
- "<Control>minus",
- NULL,
- G_CALLBACK (window_font_adjustment) },
{"GoBack", GTK_STOCK_GO_BACK,
N_("_Back"),
"<Alt>Left",
@@ -205,8 +195,109 @@ static const GtkActionEntry entries[] = {
static void
yelp_window_init (YelpWindow *window)
{
+}
+
+static void
+yelp_window_class_init (YelpWindowClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->dispose = yelp_window_dispose;
+ object_class->finalize = yelp_window_finalize;
+ object_class->get_property = yelp_window_get_property;
+ object_class->set_property = yelp_window_set_property;
+
+ g_object_class_install_property (object_class,
+ PROP_APPLICATION,
+ g_param_spec_object ("application",
+ _("Application"),
+ _("A YelpApplication instance that controls this window"),
+ YELP_TYPE_APPLICATION,
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_READWRITE | G_PARAM_STATIC_NAME |
+ G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB));
+
+ g_type_class_add_private (klass, sizeof (YelpWindowPrivate));
+}
+
+static void
+yelp_window_dispose (GObject *object)
+{
+ YelpWindowPrivate *priv = GET_PRIV (object);
+
+ if (priv->history) {
+ g_object_unref (priv->history);
+ priv->history = NULL;
+ }
+
+ if (priv->action_group) {
+ g_object_unref (priv->action_group);
+ priv->action_group = NULL;
+ }
+
+ if (priv->align_location) {
+ g_object_unref (priv->align_location);
+ priv->align_location = NULL;
+ }
+
+ if (priv->align_hidden) {
+ g_object_unref (priv->align_hidden);
+ priv->align_hidden = NULL;
+ }
+
+ while (priv->back_list) {
+ back_entry_free ((YelpBackEntry *) priv->back_list->data);
+ priv->back_list = g_list_delete_link (priv->back_list, priv->back_list);
+ }
+
+ G_OBJECT_CLASS (yelp_window_parent_class)->dispose (object);
+}
+
+static void
+yelp_window_finalize (GObject *object)
+{
+ G_OBJECT_CLASS (yelp_window_parent_class)->finalize (object);
+}
+
+static void
+yelp_window_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ YelpWindowPrivate *priv = GET_PRIV (object);
+ switch (prop_id) {
+ case PROP_APPLICATION:
+ g_value_set_object (value, priv->application);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+yelp_window_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ YelpWindowPrivate *priv = GET_PRIV (object);
+ switch (prop_id) {
+ case PROP_APPLICATION:
+ priv->application = g_value_get_object (value);
+ window_construct ((YelpWindow *) object);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+window_construct (YelpWindow *window)
+{
GtkWidget *vbox, *scroll;
- GtkUIManager *ui_manager;
GtkAction *action;
GError *error = NULL;
GtkTreeIter iter;
@@ -218,22 +309,20 @@ yelp_window_init (YelpWindow *window)
vbox = gtk_vbox_new (FALSE, 0);
gtk_container_add (GTK_CONTAINER (window), vbox);
- priv->action_group = gtk_action_group_new ("MenuActions");
+ priv->action_group = gtk_action_group_new ("WindowActions");
gtk_action_group_set_translation_domain (priv->action_group, GETTEXT_PACKAGE);
gtk_action_group_add_actions (priv->action_group,
entries, G_N_ELEMENTS (entries),
window);
- action = (GtkAction *) gtk_toggle_action_new ("ShowTextCursor",
- _("Show Text _Cursor"),
- NULL, NULL);
- gtk_action_group_add_action_with_accel (priv->action_group,
- action, "F7");
-
- ui_manager = gtk_ui_manager_new ();
- gtk_ui_manager_insert_action_group (ui_manager, priv->action_group, 0);
+
+ priv->ui_manager = gtk_ui_manager_new ();
+ gtk_ui_manager_insert_action_group (priv->ui_manager, priv->action_group, 0);
+ gtk_ui_manager_insert_action_group (priv->ui_manager,
+ yelp_application_get_action_group (priv->application),
+ 1);
gtk_window_add_accel_group (GTK_WINDOW (window),
- gtk_ui_manager_get_accel_group (ui_manager));
- if (!gtk_ui_manager_add_ui_from_file (ui_manager,
+ gtk_ui_manager_get_accel_group (priv->ui_manager));
+ if (!gtk_ui_manager_add_ui_from_file (priv->ui_manager,
DATADIR "/yelp/ui/yelp-ui.xml",
&error)) {
GtkWidget *dialog = gtk_message_dialog_new (NULL, 0,
@@ -247,7 +336,7 @@ yelp_window_init (YelpWindow *window)
g_error_free (error);
}
gtk_box_pack_start (GTK_BOX (vbox),
- gtk_ui_manager_get_widget (ui_manager, "/ui/menubar"),
+ gtk_ui_manager_get_widget (priv->ui_manager, "/ui/menubar"),
FALSE, FALSE, 0);
priv->hbox = gtk_hbox_new (FALSE, 0);
@@ -342,103 +431,6 @@ yelp_window_init (YelpWindow *window)
gtk_widget_grab_focus (GTK_WIDGET (priv->view));
}
-static void
-yelp_window_class_init (YelpWindowClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->dispose = yelp_window_dispose;
- object_class->finalize = yelp_window_finalize;
- object_class->get_property = yelp_window_get_property;
- object_class->set_property = yelp_window_set_property;
-
- g_object_class_install_property (object_class,
- PROP_APPLICATION,
- g_param_spec_object ("application",
- _("Application"),
- _("A YelpApplication instance that controls this window"),
- YELP_TYPE_APPLICATION,
- G_PARAM_CONSTRUCT_ONLY |
- G_PARAM_READWRITE | G_PARAM_STATIC_NAME |
- G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB));
-
- g_type_class_add_private (klass, sizeof (YelpWindowPrivate));
-}
-
-static void
-yelp_window_dispose (GObject *object)
-{
- YelpWindowPrivate *priv = GET_PRIV (object);
-
- if (priv->history) {
- g_object_unref (priv->history);
- priv->history = NULL;
- }
-
- if (priv->action_group) {
- g_object_unref (priv->action_group);
- priv->action_group = NULL;
- }
-
- if (priv->align_location) {
- g_object_unref (priv->align_location);
- priv->align_location = NULL;
- }
-
- if (priv->align_hidden) {
- g_object_unref (priv->align_hidden);
- priv->align_hidden = NULL;
- }
-
- while (priv->back_list) {
- back_entry_free ((YelpBackEntry *) priv->back_list->data);
- priv->back_list = g_list_delete_link (priv->back_list, priv->back_list);
- }
-
- G_OBJECT_CLASS (yelp_window_parent_class)->dispose (object);
-}
-
-static void
-yelp_window_finalize (GObject *object)
-{
- G_OBJECT_CLASS (yelp_window_parent_class)->finalize (object);
-}
-
-static void
-yelp_window_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- YelpWindowPrivate *priv = GET_PRIV (object);
- switch (prop_id) {
- case PROP_APPLICATION:
- g_value_set_object (value, priv->application);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-yelp_window_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- YelpWindowPrivate *priv = GET_PRIV (object);
- switch (prop_id) {
- case PROP_APPLICATION:
- priv->application = g_value_get_object (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-
/******************************************************************************/
YelpWindow *
@@ -534,16 +526,6 @@ window_open_location (GtkAction *action, YelpWindow *window)
}
static void
-window_font_adjustment (GtkAction *action,
- YelpWindow *window)
-{
- YelpWindowPrivate *priv = GET_PRIV (window);
-
- yelp_application_adjust_font (priv->application,
- g_str_equal (gtk_action_get_name (action), "LargerText") ? 1 : -1);
-}
-
-static void
window_go_back (GtkAction *action,
YelpWindow *window)
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]