diff options
author | Alexander Larsson <alexl@redhat.com> | 2009-04-08 08:40:41 +0000 |
---|---|---|
committer | Alexander Larsson <alexl@src.gnome.org> | 2009-04-08 08:40:41 +0000 |
commit | 0934864e259a8aec827ce157a8a2b258a8d6d1f8 (patch) | |
tree | d8c125d15c8e1d3f744cf8f5d58735e844ec6c0f | |
parent | ba25da7d75af2dd956b25f19fea6ca2b3fef4f15 (diff) | |
download | nautilus-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-- | ChangeLog | 14 | ||||
-rw-r--r-- | libnautilus-private/nautilus-file-utilities.c | 21 | ||||
-rw-r--r-- | libnautilus-private/nautilus-file-utilities.h | 2 | ||||
-rw-r--r-- | src/nautilus-application.c | 44 | ||||
-rw-r--r-- | src/nautilus-application.h | 3 | ||||
-rw-r--r-- | src/nautilus-main.c | 2 |
6 files changed, 86 insertions, 0 deletions
@@ -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; } |