Fix #162: Cannot symlink file if two geeqie instances are running
authorColin Clark <colin.clark@cclark.uk>
Thu, 29 Mar 2018 16:10:58 +0000 (17:10 +0100)
committerColin Clark <colin.clark@cclark.uk>
Thu, 29 Mar 2018 16:10:58 +0000 (17:10 +0100)
https://github.com/BestImageViewer/geeqie/issues/162

Do not permit a second instance of Geeqie to be started.

There is only one geeqierc.xml file - it is not sensible to allow more
than one instance to be run.

File/New Window can be used instead.

src/main.c
src/remote.c
src/remote.h

index edcb906..7b4c894 100644 (file)
@@ -782,6 +782,7 @@ gint main(gint argc, gchar *argv[])
        CollectionData *first_collection = NULL;
        gchar *buf;
        CollectionData *cd = NULL;
+       gchar *app_lock;
 
 #ifdef HAVE_GTHREAD
 #if !GLIB_CHECK_VERSION(2,32,0)
@@ -857,6 +858,16 @@ gint main(gint argc, gchar *argv[])
        DEBUG_1("%s main: parse_command_line", get_exec_time());
        parse_command_line(argc, argv);
 
+       /* If Geeqie is already running, prevent a second instance
+        * from being started
+        */
+       app_lock = g_build_filename(get_rc_dir(), ".command", NULL);
+       if (remote_server_exists(app_lock))
+               {
+               _exit(0);
+               }
+       g_free(app_lock);
+
        DEBUG_1("%s main: mkdir_if_not_exists", get_exec_time());
        /* these functions don't depend on config file */
        mkdir_if_not_exists(get_rc_dir());
index 8649bcf..6fd1d6a 100644 (file)
@@ -181,7 +181,7 @@ static gboolean remote_server_read_cb(GIOChannel *source, GIOCondition condition
        return TRUE;
 }
 
-static gboolean remote_server_exists(const gchar *path)
+gboolean remote_server_exists(const gchar *path)
 {
        RemoteConnection *rc;
 
index 9214016..b37799b 100644 (file)
@@ -47,6 +47,7 @@ void remote_control(const gchar *arg_exec, GList *remote_list, const gchar *path
                    GList *cmd_list, GList *collection_list);
 
 RemoteConnection *remote_server_init(gchar *path, CollectionData *command_collection);
+gboolean remote_server_exists(const gchar *path);
 
 
 #endif