summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@redhat.com>2009-04-08 08:40:41 +0000
committerAlexander Larsson <alexl@src.gnome.org>2009-04-08 08:40:41 +0000
commit0934864e259a8aec827ce157a8a2b258a8d6d1f8 (patch)
treed8c125d15c8e1d3f744cf8f5d58735e844ec6c0f
parentba25da7d75af2dd956b25f19fea6ca2b3fef4f15 (diff)
downloadnautilus-0934864e259a8aec827ce157a8a2b258a8d6d1f8.tar.gz
Add nautilus_get_accel_map_file
2009-04-08 Alexander Larsson <alexl@redhat.com> * libnautilus-private/nautilus-file-utilities.[ch]: * libnautilus-private/nautilus-file-utilities.h: Add nautilus_get_accel_map_file * src/nautilus-application.[ch]: Load accel map on startup, queue save when it changes. * src/nautilus-main.c: Save accel map on clean exit if it is dirty. Patch from Holger Berndt <berndth@gmx.de> svn path=/trunk/; revision=15169
-rw-r--r--ChangeLog14
-rw-r--r--libnautilus-private/nautilus-file-utilities.c21
-rw-r--r--libnautilus-private/nautilus-file-utilities.h2
-rw-r--r--src/nautilus-application.c44
-rw-r--r--src/nautilus-application.h3
-rw-r--r--src/nautilus-main.c2
6 files changed, 86 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index b90d66733..72de92bf1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2009-04-08 Alexander Larsson <alexl@redhat.com>
+
+ * libnautilus-private/nautilus-file-utilities.[ch]:
+ * libnautilus-private/nautilus-file-utilities.h:
+ Add nautilus_get_accel_map_file
+
+ * src/nautilus-application.[ch]:
+ Load accel map on startup, queue save when it changes.
+
+ * src/nautilus-main.c:
+ Save accel map on clean exit if it is dirty.
+
+ Patch from Holger Berndt <berndth@gmx.de>
+
2009-04-07 Alexander Larsson <alexl@redhat.com>
* src/nautilus-spatial-window.c:
diff --git a/libnautilus-private/nautilus-file-utilities.c b/libnautilus-private/nautilus-file-utilities.c
index 5ce1bdc46..856261283 100644
--- a/libnautilus-private/nautilus-file-utilities.c
+++ b/libnautilus-private/nautilus-file-utilities.c
@@ -111,6 +111,27 @@ nautilus_get_user_directory (void)
return user_directory;
}
+/**
+ * nautilus_get_accel_map_file:
+ *
+ * Get the path for the filename containing nautilus accelerator map.
+ * The filename need not exist.
+ *
+ * Return value: the filename path, or NULL if the home directory could not be found
+ **/
+char *
+nautilus_get_accel_map_file (void)
+{
+ const gchar *home;
+
+ home = g_get_home_dir();
+ if (home != NULL) {
+ return g_build_filename (home, ".gnome2/accels/nautilus", NULL);
+ }
+
+ return NULL;
+}
+
typedef struct {
char *type;
char *path;
diff --git a/libnautilus-private/nautilus-file-utilities.h b/libnautilus-private/nautilus-file-utilities.h
index a34997018..0482aaefb 100644
--- a/libnautilus-private/nautilus-file-utilities.h
+++ b/libnautilus-private/nautilus-file-utilities.h
@@ -96,4 +96,6 @@ GFile * nautilus_find_existing_uri_in_hierarchy (GFile *location);
GFile *
nautilus_find_file_insensitive (GFile *parent, const gchar *name);
+char * nautilus_get_accel_map_file (void);
+
#endif /* NAUTILUS_FILE_UTILITIES_H */
diff --git a/src/nautilus-application.c b/src/nautilus-application.c
index 83317496a..23a47c3f0 100644
--- a/src/nautilus-application.c
+++ b/src/nautilus-application.c
@@ -96,6 +96,8 @@ enum
#define START_STATE_CONFIG "start-state"
+#define NAUTILUS_ACCEL_MAP_SAVE_DELAY 30
+
/* Keeps track of all the desktop windows. */
static GList *nautilus_application_desktop_windows;
@@ -105,6 +107,9 @@ static GList *nautilus_application_window_list;
/* Keeps track of all the object windows */
static GList *nautilus_application_spatial_window_list;
+/* The saving of the accelerator map was requested */
+static gboolean save_of_accel_map_requested = FALSE;
+
static void desktop_changed_callback (gpointer user_data);
static void desktop_location_changed_callback (gpointer user_data);
static void mount_removed_callback (GVolumeMonitor *monitor,
@@ -801,6 +806,35 @@ message_received_cb (UniqueApp *unique_app,
return res;
}
+gboolean
+nautilus_application_save_accel_map (gpointer data)
+{
+ if (save_of_accel_map_requested) {
+ char *accel_map_filename;
+ accel_map_filename = nautilus_get_accel_map_file ();
+ if (accel_map_filename) {
+ gtk_accel_map_save (accel_map_filename);
+ g_free (accel_map_filename);
+ }
+ save_of_accel_map_requested = FALSE;
+ }
+
+ return FALSE;
+}
+
+
+static void
+queue_accel_map_save_callback (GtkAccelMap *object, gchar *accel_path,
+ guint accel_key, GdkModifierType accel_mods,
+ gpointer user_data)
+{
+ if (!save_of_accel_map_requested) {
+ save_of_accel_map_requested = TRUE;
+ g_timeout_add_seconds (NAUTILUS_ACCEL_MAP_SAVE_DELAY,
+ nautilus_application_save_accel_map, NULL);
+ }
+}
+
void
nautilus_application_startup (NautilusApplication *application,
gboolean kill_shell,
@@ -826,6 +860,8 @@ nautilus_application_startup (NautilusApplication *application,
}
} else {
+ char *accel_map_filename;
+
/* If KDE desktop is running, then force no_desktop */
if (is_kdesktop_present ()) {
no_desktop = TRUE;
@@ -887,6 +923,14 @@ nautilus_application_startup (NautilusApplication *application,
/* Load session info if availible */
nautilus_application_load_session (application);
+
+ /* load accelerator map, and register save callback */
+ accel_map_filename = nautilus_get_accel_map_file ();
+ if (accel_map_filename) {
+ gtk_accel_map_load (accel_map_filename);
+ g_free (accel_map_filename);
+ }
+ g_signal_connect (gtk_accel_map_get (), "changed", G_CALLBACK (queue_accel_map_save_callback), NULL);
}
}
diff --git a/src/nautilus-application.h b/src/nautilus-application.h
index fc54469ef..66e5bf364 100644
--- a/src/nautilus-application.h
+++ b/src/nautilus-application.h
@@ -103,4 +103,7 @@ void nautilus_application_close_parent_windows (NautilusSpat
void nautilus_application_close_all_spatial_windows (void);
void nautilus_application_open_desktop (NautilusApplication *application);
void nautilus_application_close_desktop (void);
+gboolean nautilus_application_save_accel_map (gpointer data);
+
+
#endif /* NAUTILUS_APPLICATION_H */
diff --git a/src/nautilus-main.c b/src/nautilus-main.c
index 485d4e1c3..a3ef5778c 100644
--- a/src/nautilus-main.c
+++ b/src/nautilus-main.c
@@ -526,6 +526,8 @@ main (int argc, char *argv[])
}
eel_debug_shut_down ();
+
+ nautilus_application_save_accel_map (NULL);
return EXIT_SUCCESS;
}