#193 slow recognition of file move, delete, rename

no target version
open
nobody
geeqie (1)
5
2013-11-04
2013-07-07
Paul E Johnson
No

I'm running Debian Jessie w/geeqie 1.1.

In the past month or so, I see a weird slowdown. Geeqie is slow to recognize changes in the file system. Look at a picture. Use Geeqie to move it. The file moves right away (I'm monitoring Nautilus at same time), but Geeqie does not notice the file has moved and then display next image for 5 seconds or so.

I've been GQView/Geeqie user for 10 years, I'm not a notice. But I don't know where to look for trouble. Is Geeqie using a "file alteration monitor" and should I debug that?

Oh, one more new problem. When I use Geeqie to rename a file, the new name NEVER registers in the titlebar. Name stay same until I move to next image, then shift back again.

thanks in advance.

Discussion

  • Paul E Johnson
    Paul E Johnson
    2013-11-04

    I confirm that the patch in bugs/190 "geeqie-1.1-filedata-change-notification.patch"
    solved the problem for me. I patched the debian source materials for geeqie in Debian Wheezy and after that the lag was completely solved. Now moves and deletions of files register immediately.

    In case that patch disappears for some reason, here is what it does.

    diff -Nur geeqie-1.1-orig/src/filedata.c geeqie-1.1/src/filedata.c
    --- geeqie-1.1-orig/src/filedata.c 2012-08-12 22:13:41.000000000 +0200
    +++ geeqie-1.1/src/filedata.c 2013-02-01 18:44:12.921684510 +0100
    @@ -2707,10 +2707,21 @@

    void file_data_send_notification(FileData fd, NotifyType type)
    {
    + GList
    work = notify_func_list;
    +
    + while (work)
    + {
    + NotifyData nd = (NotifyData )work->data;
    +
    + nd->func(fd, type, nd->data);
    + work = work->next;
    + }
    + /
    NotifyIdleData
    nid = g_new0(NotifyIdleData, 1);
    nid->fd = file_data_ref(fd);
    nid->type = type;
    g_idle_add_full(G_PRIORITY_HIGH, file_data_send_notification_idle_cb, nid, NULL);
    + */
    }

    static GHashTable *file_data_monitor_pool = NULL;