various notification improvements
authorVladimir Nadvornik <nadvornik@suse.cz>
Sat, 7 Jun 2008 15:08:33 +0000 (15:08 +0000)
committerVladimir Nadvornik <nadvornik@suse.cz>
Sat, 7 Jun 2008 15:08:33 +0000 (15:08 +0000)
src/filedata.c
src/filedata.h
src/image-overlay.c
src/typedefs.h
src/utilops.c
src/view_file_icon.c
src/view_file_list.c

index ae0bac6..439ab76 100644 (file)
@@ -142,8 +142,6 @@ void file_data_increment_version(FileData *fd)
 {
        fd->version++;
        if (fd->parent) fd->parent->version++;
-
-       file_data_send_notification(fd, NOTIFY_TYPE_REREAD); /* FIXME there are probably situations when we don't want to call this  */
 }
 
 static void file_data_set_collate_keys(FileData *fd)
@@ -233,6 +231,7 @@ static void file_data_check_changed_files(FileData *fd, struct stat *st)
                if (fd->pixbuf) g_object_unref(fd->pixbuf);
                fd->pixbuf = NULL;
                file_data_increment_version(fd);
+               file_data_send_notification(fd, NOTIFY_TYPE_REREAD);
                }
 
        work = fd->sidecar_files;
@@ -915,6 +914,41 @@ GList *filelist_recursive(FileData *dir_fd)
 }
 
 
+/*
+ * marks and orientation
+ */
+gboolean file_data_get_mark(FileData *fd, gint n)
+{
+       return !!(fd->marks & (1 << n));
+}
+
+void file_data_set_mark(FileData *fd, gint n, gboolean value)
+{
+       if (!value == !(fd->marks & (1 << n))) return;
+
+       fd->marks = fd->marks ^ (1 << n);
+       file_data_increment_version(fd);
+       file_data_send_notification(fd, NOTIFY_TYPE_INTERNAL);
+
+}
+
+gint file_data_get_user_orientation(FileData *fd)
+{
+       return fd->user_orientation;
+}
+
+void file_data_set_user_orientation(FileData *fd, gint value)
+{
+       if (fd->user_orientation == value) return;
+
+       fd->user_orientation = value;
+       file_data_increment_version(fd);
+       file_data_send_notification(fd, NOTIFY_TYPE_INTERNAL);
+}
+
+
 
 /*
  * file_data    - operates on the given fd
@@ -1407,6 +1441,7 @@ static void file_data_apply_ci(FileData *fd)
                file_data_set_path(fd, fd->change->dest);
                }
        file_data_increment_version(fd);
+       file_data_send_notification(fd, NOTIFY_TYPE_CHANGE);
 }
 
 gint file_data_sc_apply_ci(FileData *fd)
@@ -1500,11 +1535,6 @@ void file_data_send_notification(FileData *fd, NotifyType type)
                }
 }
 
-void file_data_sc_send_notification(FileData *fd)
-{
-}
-
-
 static GHashTable *file_data_monitor_pool = NULL;
 static gint realtime_monitor_id = -1;
 
@@ -1513,9 +1543,10 @@ static void realtime_monitor_check_cb(gpointer key, gpointer value, gpointer dat
        FileData *fd = key;
        struct stat st;
 
-       stat_utf8(fd->path, &st);
-       
-       file_data_check_changed_files(fd, &st);
+       if (stat_utf8(fd->path, &st))
+               file_data_check_changed_files(fd, &st);
+       else 
+               file_data_send_notification(fd, NOTIFY_TYPE_REREAD);
        
        DEBUG_1("monitor %s", fd->path);
 }
index 8b9988b..80ed4e4 100644 (file)
@@ -48,6 +48,11 @@ GList *filelist_filter(GList *list, gint is_dir_list);
 GList *filelist_sort_path(GList *list);
 GList *filelist_recursive(FileData *dir_fd);
 
+gboolean file_data_get_mark(FileData *fd, gint n);
+void file_data_set_mark(FileData *fd, gint n, gboolean value);
+gint file_data_get_user_orientation(FileData *fd);
+void file_data_set_user_orientation(FileData *fd, gint value);
+
 gchar *file_data_sc_list_to_string(FileData *fd);
 gboolean file_data_add_ci(FileData *fd, FileDataChangeType type, const gchar *src, const gchar *dest);
 gboolean file_data_sc_add_ci_copy(FileData *fd, const gchar *dest_path);
index de8539c..78f47a5 100644 (file)
@@ -539,7 +539,7 @@ static GdkPixbuf *image_osd_info_render(OverlayStateData *osd)
 
                for (mark = 0; mark < FILEDATA_MARKS_SIZE; mark++)
                        {
-                       active_marks += fd->marks[mark];
+                       active_marks += file_data_get_mark(fd, mark);
                        }
 
                if (active_marks > 0)
@@ -548,7 +548,7 @@ static GdkPixbuf *image_osd_info_render(OverlayStateData *osd)
 
                        for (mark = 0; mark < FILEDATA_MARKS_SIZE; mark++)
                                {
-                               g_string_append_printf(buf, fd->marks[mark] ? " <span background='#FF00FF'>%c</span>" : " %c", '1' + mark);
+                               g_string_append_printf(buf, file_data_get_mark(fd, mark) ? " <span background='#FF00FF'>%c</span>" : " %c", '1' + mark);
                                }
 
                        if (*text)
index 0c7a301..775916c 100644 (file)
@@ -441,7 +441,7 @@ struct _FileData {
        gchar *collate_key_name_nocase;
        gint64 size;
        time_t date;
-       gboolean marks[FILEDATA_MARKS_SIZE];
+       gint marks;
        GList *sidecar_files;
        FileData *parent; /* parent file if this is a sidecar file, NULL otherwise */
        FileDataChangeInfo *change; /* for rename, move ... */
index 36a7ce3..28b644d 100644 (file)
@@ -229,37 +229,6 @@ static gint filename_base_length(const gchar *name)
 
 
 
-/*
- *--------------------------------------------------------------------------
- * call these when names change, files move, deleted, etc.
- * so that any open windows are also updated
- *--------------------------------------------------------------------------
- */
-
-/* FIXME this is a temporary solution */
-void file_data_notify_ci(FileData *fd)
-{
-
-       /* this is the new way: */
-       file_data_send_notification(fd, NOTIFY_TYPE_CHANGE);
-}
-
-void file_data_sc_notify_ci(FileData *fd)
-{
-       GList *work;
-       if (fd->parent) fd = fd->parent;
-       
-       file_data_notify_ci(fd);
-       
-       work = fd->sidecar_files;
-       while (work)
-               {
-               FileData *sfd = work->data;
-               file_data_notify_ci(sfd);
-               work = work->next;
-               }
-}
-
 
 typedef enum {
        UTILITY_TYPE_COPY,
@@ -554,7 +523,6 @@ static gint file_util_perform_ci_cb(gpointer resume_data, gint flags, GList *lis
                if (!(flags & EDITOR_ERROR_MASK)) /* files were successfully deleted, call the maint functions */
                        {
                        file_data_sc_apply_ci(fd);
-                       file_data_sc_notify_ci(fd);
                        }
                
                ud->flist = g_list_remove(ud->flist, fd);
index 7d1f84e..4e6064e 100644 (file)
@@ -916,7 +916,7 @@ void vficon_mark_to_selection(ViewFile *vf, gint mark, MarkToSelectionMode mode)
 
                g_assert(fd->magick == 0x12345678);
 
-               mark_val = fd->marks[n];
+               mark_val = file_data_get_mark(fd, n);
                selected = (id->selected & SELECTION_SELECTED);
 
                switch (mode)
@@ -953,15 +953,13 @@ void vficon_selection_to_mark(ViewFile *vf, gint mark, SelectionToMarkMode mode)
 
                switch (mode)
                        {
-                       case STM_MODE_SET: fd->marks[n] = 1;
+                       case STM_MODE_SET: file_data_set_mark(fd, n, 1);
                                break;
-                       case STM_MODE_RESET: fd->marks[n] = 0;
+                       case STM_MODE_RESET: file_data_set_mark(fd, n, 0);
                                break;
-                       case STM_MODE_TOGGLE: fd->marks[n] = !fd->marks[mark];
+                       case STM_MODE_TOGGLE: file_data_set_mark(fd, n, !file_data_get_mark(fd, n));
                                break;
                        }
-               file_data_increment_version(fd);
-
                work = work->next;
                }
        filelist_free(slist);
index 266c057..691a971 100644 (file)
@@ -726,7 +726,7 @@ static void vflist_setup_iter(ViewFile *vf, GtkTreeStore *store, GtkTreeIter *it
                                        FILE_COLUMN_DATE, text_from_time(fd->date),
                                        FILE_COLUMN_COLOR, FALSE, -1);
        for (i = 0; i < FILEDATA_MARKS_SIZE; i++)
-               gtk_tree_store_set(store, iter, FILE_COLUMN_MARKS + i, fd->marks[i], -1);
+               gtk_tree_store_set(store, iter, FILE_COLUMN_MARKS + i, file_data_get_mark(fd, i), -1);
 
        g_free(size);
        if (sidecars)
@@ -1405,7 +1405,7 @@ void vflist_mark_to_selection(ViewFile *vf, gint mark, MarkToSelectionMode mode)
                gboolean mark_val, selected;
                gtk_tree_model_get(GTK_TREE_MODEL(store), &iter, FILE_COLUMN_POINTER, &fd, -1);
 
-               mark_val = fd->marks[n];
+               mark_val = file_data_get_mark(fd, n);
                selected = gtk_tree_selection_iter_is_selected(selection, &iter);
 
                switch (mode)
@@ -1451,21 +1451,21 @@ void vflist_selection_to_mark(ViewFile *vf, gint mark, SelectionToMarkMode mode)
                gtk_tree_model_get_iter(store, &iter, tpath);
                gtk_tree_model_get(store, &iter, FILE_COLUMN_POINTER, &fd, -1);
 
+               file_data_unregister_notify_func(vflist_notify_cb, vf); /* we don't need the notification */
+
                switch (mode)
                        {
-                       case STM_MODE_SET: fd->marks[n] = 1;
+                       case STM_MODE_SET: file_data_set_mark(fd, n, 1);
                                break;
-                       case STM_MODE_RESET: fd->marks[n] = 0;
+                       case STM_MODE_RESET: file_data_set_mark(fd, n, 0);
                                break;
-                       case STM_MODE_TOGGLE: fd->marks[n] = !fd->marks[n];
+                       case STM_MODE_TOGGLE: file_data_set_mark(fd, n, !file_data_get_mark(fd, n));
                                break;
                        }
                
-               file_data_unregister_notify_func(vflist_notify_cb, vf); /* we don't need the notification */
-               file_data_increment_version(fd);
                file_data_register_notify_func(vflist_notify_cb, vf, NOTIFY_PRIORITY_MEDIUM);
 
-               gtk_tree_store_set(GTK_TREE_STORE(store), &iter, FILE_COLUMN_MARKS + n, fd->marks[n], -1);
+               gtk_tree_store_set(GTK_TREE_STORE(store), &iter, FILE_COLUMN_MARKS + n, file_data_get_mark(fd, n), -1);
 
                work = work->next;
                }
@@ -1708,9 +1708,8 @@ static void vflist_listview_mark_toggled_cb(GtkCellRendererToggle *cell, gchar *
 
        gtk_tree_model_get(GTK_TREE_MODEL(store), &iter, FILE_COLUMN_POINTER, &fd, col_idx, &mark, -1);
        mark = !mark;
-       fd->marks[col_idx - FILE_COLUMN_MARKS] = mark;
        file_data_unregister_notify_func(vflist_notify_cb, vf); /* we don't need the notification */
-       file_data_increment_version(fd);
+       file_data_set_mark(fd, col_idx - FILE_COLUMN_MARKS, mark);
        file_data_register_notify_func(vflist_notify_cb, vf, NOTIFY_PRIORITY_MEDIUM);
 
        gtk_tree_store_set(store, &iter, col_idx, mark, -1);