Documentation: Use G_SOURCE_CONTINUE and G_SOURCE_REMOVE
[geeqie.git] / src / preferences.cc
index c9c386b..bce3d50 100644 (file)
 
 #include "bar-keywords.h"
 #include "cache.h"
+//~ #include "authors.h"
+//~ #include "authors.c"
+//~ #include "translators.h"
+//~ #include "translators.c"
 #include "editors.h"
 #include "filedata.h"
 #include "filefilter.h"
@@ -1363,7 +1367,7 @@ static gboolean filter_add_scroll(gpointer data)
        gtk_tree_path_free(path);
        g_list_free(list_cells);
 
-       return(FALSE);
+       return(G_SOURCE_REMOVE);
 }
 
 static void filter_add_cb(GtkWidget *UNUSED(widget), gpointer data)
@@ -1408,7 +1412,7 @@ static gboolean filter_default_ok_scroll(GtkTreeView *data)
 
        gtk_tree_path_free(path);
 
-       return(FALSE);
+       return(G_SOURCE_REMOVE);
 }
 
 static void filter_default_ok_cb(GenericDialog *gd, gpointer UNUSED(data))
@@ -1729,7 +1733,7 @@ static gboolean accel_default_scroll(GtkTreeView *data)
 
        gtk_tree_path_free(path);
 
-       return(FALSE);
+       return(G_SOURCE_REMOVE);
 }
 
 static void accel_default_cb(GtkWidget *UNUSED(widget), gpointer data)
@@ -1739,10 +1743,10 @@ static void accel_default_cb(GtkWidget *UNUSED(widget), gpointer data)
        g_idle_add((GSourceFunc)accel_default_scroll, data);
 }
 
-//void accel_remove_selection(GtkTreeModel *UNUSED(model), GtkTreePath *UNUSED(path), GtkTreeIter *iter, gpointer UNUSED(data))
-//{
-       //gtk_tree_store_set(accel_store, iter, AE_KEY, "", -1);
-//}
+void accel_clear_selection(GtkTreeModel *UNUSED(model), GtkTreePath *UNUSED(path), GtkTreeIter *iter, gpointer UNUSED(data))
+{
+       gtk_tree_store_set(accel_store, iter, AE_KEY, "", -1);
+}
 
 void accel_reset_selection(GtkTreeModel *model, GtkTreePath *UNUSED(path), GtkTreeIter *iter, gpointer UNUSED(data))
 {
@@ -1760,6 +1764,15 @@ void accel_reset_selection(GtkTreeModel *model, GtkTreePath *UNUSED(path), GtkTr
        g_free(accel);
 }
 
+static void accel_clear_cb(GtkWidget *UNUSED(widget), gpointer data)
+{
+       GtkTreeSelection *selection;
+
+       if (!accel_store) return;
+       selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(data));
+       gtk_tree_selection_selected_foreach(selection, &accel_clear_selection, NULL);
+}
+
 static void accel_reset_cb(GtkWidget *UNUSED(widget), gpointer data)
 {
        GtkTreeSelection *selection;
@@ -3096,7 +3109,7 @@ static gboolean keywords_find_file(gpointer data)
                file_data_unref(fd);
                string_list_free(keywords);
 
-               return (TRUE);
+               return (G_SOURCE_CONTINUE);
                }
        else if (kfd->list_dir)
                {
@@ -3109,12 +3122,12 @@ static gboolean keywords_find_file(gpointer data)
 
                file_data_unref(fd);
 
-               return TRUE;
+               return G_SOURCE_CONTINUE;
                }
 
        keywords_find_finish(kfd);
 
-       return FALSE;
+       return G_SOURCE_REMOVE;
 }
 
 static void keywords_find_start_cb(GenericDialog *UNUSED(fd), gpointer data)
@@ -3762,6 +3775,12 @@ static void config_tab_accelerators(GtkWidget *notebook)
 
        button = pref_button_new(NULL, NULL, _("Reset selected"), FALSE,
                                 G_CALLBACK(accel_reset_cb), accel_view);
+       gtk_widget_set_tooltip_text(button, _("Will only reset changes made before the settings are saved"));
+       gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0);
+       gtk_widget_show(button);
+
+       button = pref_button_new(NULL, NULL, _("Clear selected"), FALSE,
+                                G_CALLBACK(accel_clear_cb), accel_view);
        gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0);
        gtk_widget_show(button);
 }
@@ -4092,18 +4111,27 @@ void show_config_window(LayoutWindow *lw)
 
 void show_about_window(LayoutWindow *lw)
 {
-       GdkPixbuf *pixbuf_logo;
+       GDataInputStream *data_stream;
+       GInputStream *in_stream_authors;
+       GInputStream *in_stream_translators;
+       GString *copyright;
        GdkPixbuf *pixbuf_icon;
+       GdkPixbuf *pixbuf_logo;
+       ZoneDetect *cd;
+       gchar *artists[2];
+       gchar *author_line;
        gchar *authors[1000];
+       gchar *authors_path;
        gchar *comment;
-       gint i_authors = 0;
-       gchar *path;
-       GString *copyright;
        gchar *timezone_path;
-       ZoneDetect *cd;
-       FILE *fp = NULL;
-#define LINE_LENGTH 1000
-       gchar line[LINE_LENGTH];
+       gchar *translators;
+       gchar *translators_path;
+       gint i_authors = 0;
+       gint n = 0;
+       gsize bytes_read;
+       gsize length;
+       gsize size;
+       guint32 flags;
 
        copyright = g_string_new(NULL);
        copyright = g_string_append(copyright, "This program comes with absolutely no warranty.\nGNU General Public License, version 2 or later.\nSee https://www.gnu.org/licenses/old-licenses/gpl-2.0.html\n\n");
@@ -4124,25 +4152,36 @@ void show_about_window(LayoutWindow *lw)
                }
        g_free(timezone_path);
 
+       authors_path = g_build_filename(GQ_RESOURCE_PATH_CREDITS, "authors", NULL);
+
+       in_stream_authors = g_resources_open_stream(authors_path, G_RESOURCE_LOOKUP_FLAGS_NONE, NULL);
+
+       data_stream = g_data_input_stream_new(in_stream_authors);
+
        authors[0] = NULL;
-       path = g_build_filename(gq_helpdir, "AUTHORS", NULL);
-       fp = fopen(path, "r");
-       if (fp)
+       while ((author_line = g_data_input_stream_read_line(G_DATA_INPUT_STREAM(data_stream), &length, NULL, NULL)))
                {
-               while(fgets(line, LINE_LENGTH, fp))
-                       {
-                       /* get rid of ending \n from fgets */
-                       line[strlen(line) - 1] = '\0';
-                       authors[i_authors] = g_strdup(line);
-                       i_authors++;
-                       }
-               authors[i_authors] = NULL;
-               fclose(fp);
+               authors[i_authors] = g_strdup(author_line);
+               i_authors++;
+               g_free(author_line);
                }
-       g_free(path);
+       authors[i_authors] = NULL;
+
+       g_input_stream_close(in_stream_authors, NULL, NULL);
+
+       translators_path = g_build_filename(GQ_RESOURCE_PATH_CREDITS, "translators", NULL);
+
+       g_resources_get_info(translators_path, G_RESOURCE_LOOKUP_FLAGS_NONE, &size, &flags, NULL);
 
-       comment = g_strconcat("Development and bug reports:\n", GQ_EMAIL_ADDRESS,
-                                               "\nhttps://github.com/BestImageViewer/geeqie/issues",NULL);
+       in_stream_translators = g_resources_open_stream(translators_path, G_RESOURCE_LOOKUP_FLAGS_NONE, NULL);
+       translators = static_cast<gchar *>(g_malloc0(size));
+       g_input_stream_read_all(in_stream_translators, translators, size, &bytes_read, NULL, NULL);
+       g_input_stream_close(in_stream_translators, NULL, NULL);
+
+       comment = g_strconcat("Project created by John Ellis\nGQview 1998\nGeeqie 2007\n\n\nDevelopment and bug reports:\n", GQ_EMAIL_ADDRESS, "\nhttps://github.com/BestImageViewer/geeqie/issues",NULL);
+
+       artists[0] = g_strdup("Néstor Díaz Valencia <nestor@estudionexos.com>");
+       artists[1] = NULL;
 
        pixbuf_logo = pixbuf_inline(PIXBUF_INLINE_LOGO);
        pixbuf_icon = pixbuf_inline(PIXBUF_INLINE_ICON);
@@ -4156,21 +4195,29 @@ void show_about_window(LayoutWindow *lw)
                "website", GQ_WEBSITE,
                "website-label", "Website",
                "comments", comment,
+               "artists", artists,
                "authors", authors,
-               "translator-credits", _("translator-credits"),
+               "translator-credits", translators,
                "wrap-license", TRUE,
                "license", copyright->str,
                NULL);
 
        g_string_free(copyright, TRUE);
 
-       gint n = 0;
        while(n < i_authors)
                {
                g_free(authors[n]);
                n++;
                }
+
+       g_free(artists[0]);
+       g_free(authors_path);
        g_free(comment);
+       g_free(translators);
+       g_free(translators_path);
+       g_object_unref(data_stream);
+       g_object_unref(in_stream_authors);
+       g_object_unref(in_stream_translators);
 
        return;
 }