diff options
-rw-r--r-- | src/fr-init.c | 1 | ||||
-rw-r--r-- | src/fr-init.h | 1 | ||||
-rw-r--r-- | src/fr-window.c | 10 | ||||
-rw-r--r-- | src/main.c | 52 |
4 files changed, 34 insertions, 30 deletions
diff --git a/src/fr-init.c b/src/fr-init.c index 170a613..8a81786 100644 --- a/src/fr-init.c +++ b/src/fr-init.c @@ -164,7 +164,6 @@ FrExtensionType file_ext_type[] = { }; -GList *WindowList; GList *CommandList; gint ForceDirectoryCreation; GHashTable *ProgramsCache; diff --git a/src/fr-init.h b/src/fr-init.h index b89e9c8..8c28de9 100644 --- a/src/fr-init.h +++ b/src/fr-init.h @@ -43,7 +43,6 @@ typedef struct { char *temp_dir; } CommandData; -extern GList *WindowList; extern GList *CommandList; extern gint ForceDirectoryCreation; extern GHashTable *ProgramsCache; diff --git a/src/fr-window.c b/src/fr-window.c index 1ddc30e..17941db 100644 --- a/src/fr-window.c +++ b/src/fr-window.c @@ -654,11 +654,7 @@ fr_window_finalize (GObject *object) window->priv = NULL; } - WindowList = g_list_remove (WindowList, window); - - G_OBJECT_CLASS (parent_class)->finalize (object); - - if (WindowList == NULL) { + if (gtk_application_get_windows (GTK_APPLICATION (g_application_get_default ())) == NULL) { if (pixbuf_hash != NULL) { g_hash_table_foreach (pixbuf_hash, gh_unref_pixbuf, @@ -674,6 +670,8 @@ fr_window_finalize (GObject *object) tree_pixbuf_hash = NULL; } } + + G_OBJECT_CLASS (parent_class)->finalize (object); } @@ -812,8 +810,6 @@ fr_window_init (FrWindow *window) "unrealize", G_CALLBACK (fr_window_unrealized), NULL); - - WindowList = g_list_prepend (WindowList, window); } @@ -33,7 +33,6 @@ #include "fr-init.h" -GList *WindowList = NULL; gint ForceDirectoryCreation; static char **remaining_args; @@ -241,9 +240,11 @@ activate_cb (GApplication *application) { GList *link; - for (link = WindowList; link; link = link->next) { - FrWindow *window = link->data; - gtk_widget_show (GTK_WIDGET (window)); + for (link = gtk_application_get_windows (GTK_APPLICATION (application)); + link != NULL; + link = link->next) + { + gtk_widget_show (GTK_WIDGET (link->data)); } } @@ -253,9 +254,9 @@ fr_save_state (EggSMClient *client, GKeyFile *state, gpointer user_data) { /* discard command is automatically set by EggSMClient */ - GList *window; - const char *argv[2] = { NULL }; - guint i; + const char *argv[2] = { NULL }; + GApplication *application; + guint i = 0; /* restart command */ argv[0] = program_argv0; @@ -264,21 +265,30 @@ fr_save_state (EggSMClient *client, GKeyFile *state, gpointer user_data) egg_sm_client_set_restart_command (client, 1, argv); /* state */ - for (window = WindowList, i = 0; window; window = window->next, i++) { - FrWindow *session = window->data; - gchar *key; - - key = g_strdup_printf ("archive%d", i); - if ((session->archive == NULL) || (session->archive->file == NULL)) { - g_key_file_set_string (state, "Session", key, ""); - } else { - gchar *uri; - - uri = g_file_get_uri (session->archive->file); - g_key_file_set_string (state, "Session", key, uri); - g_free (uri); + application = g_application_get_default (); + if (application != NULL) { + GList *window; + + for (window = gtk_application_get_windows (GTK_APPLICATION (application)), i = 0; + window != NULL; + window = window->next, i++) + { + FrWindow *session = window->data; + gchar *key; + + key = g_strdup_printf ("archive%d", i); + if ((session->archive == NULL) || (session->archive->file == NULL)) { + g_key_file_set_string (state, "Session", key, ""); + } + else { + gchar *uri; + + uri = g_file_get_uri (session->archive->file); + g_key_file_set_string (state, "Session", key, uri); + g_free (uri); + } + g_free (key); } - g_free (key); } g_key_file_set_integer (state, "Session", "archives", i); |