Mercurial > geeqie
diff src/bar_sort.c @ 1272:e0e12512cde2
read external editors from .desktop files
author | nadvornik |
---|---|
date | Sun, 01 Feb 2009 12:48:14 +0000 |
parents | 0bea79d87065 |
children | 8b89e3ff286b |
line wrap: on
line diff
--- a/src/bar_sort.c Thu Jan 29 19:43:34 2009 +0000 +++ b/src/bar_sort.c Sun Feb 01 12:48:14 2009 +0000 @@ -44,7 +44,7 @@ BAR_SORT_COPY = 0, BAR_SORT_MOVE, BAR_SORT_FILTER, - BAR_SORT_ACTION_COUNT = BAR_SORT_FILTER + GQ_EDITOR_GENERIC_SLOTS + BAR_SORT_ACTION_COUNT } SortActionType; typedef enum { @@ -65,6 +65,8 @@ SortModeType mode; SortActionType action; + const gchar *filter_key; + SortSelectionType selection; GtkWidget *folder_group; @@ -282,13 +284,12 @@ file_util_move_simple(list, path, sd->lw->window); list = NULL; break; + case BAR_SORT_FILTER: + file_util_start_filter_from_filelist(sd->filter_key, list, path, sd->lw->window); + list = NULL; + layout_image_next(sd->lw); + break; default: - if (sd->action >= BAR_SORT_FILTER && sd->action < BAR_SORT_ACTION_COUNT) - { - file_util_start_filter_from_filelist(sd->action - BAR_SORT_FILTER, list, path, sd->lw->window); - list = NULL; - layout_image_next(sd->lw); - } break; } @@ -348,35 +349,46 @@ } } -static void bar_sort_set_action(SortData *sd, SortActionType action) +static void bar_sort_set_action(SortData *sd, SortActionType action, const gchar *filter_key) { options->panels.sort.action_state = sd->action = action; + if (action == BAR_SORT_FILTER) + { + if (!filter_key) filter_key = ""; + sd->filter_key = filter_key; + g_free(options->panels.sort.action_filter); + options->panels.sort.action_filter = g_strdup(filter_key); + } + else + { + sd->filter_key = NULL; + g_free(options->panels.sort.action_filter); + options->panels.sort.action_filter = g_strdup(""); + } } static void bar_sort_set_copy_cb(GtkWidget *button, gpointer data) { SortData *sd = data; if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button))) return; - bar_sort_set_action(sd, BAR_SORT_COPY); + bar_sort_set_action(sd, BAR_SORT_COPY, NULL); } static void bar_sort_set_move_cb(GtkWidget *button, gpointer data) { SortData *sd = data; if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button))) return; - bar_sort_set_action(sd, BAR_SORT_MOVE); + bar_sort_set_action(sd, BAR_SORT_MOVE, NULL); } static void bar_sort_set_filter_cb(GtkWidget *button, gpointer data) { SortData *sd = data; - guint n; + const gchar *key; if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button))) return; - n = GPOINTER_TO_UINT(g_object_get_data(G_OBJECT(button), "filter_idx")); - if (n == 0) return; - n--; - bar_sort_set_action(sd, BAR_SORT_FILTER + n); + key = g_object_get_data(G_OBJECT(button), "filter_key"); + bar_sort_set_action(sd, BAR_SORT_FILTER, key); } static void bar_sort_set_selection(SortData *sd, SortSelectionType selection) @@ -551,7 +563,8 @@ GtkWidget *tbar; GtkWidget *combo; SortModeType mode; - guint i; + GList *editors_list, *work; + gboolean have_filter; if (!lw) return NULL; @@ -562,7 +575,9 @@ mode = CLAMP(options->panels.sort.mode_state, 0, BAR_SORT_MODE_COUNT - 1); sd->action = CLAMP(options->panels.sort.action_state, 0, BAR_SORT_ACTION_COUNT - 1); - while (sd->action >= BAR_SORT_FILTER && !editor_is_filter(sd->action - BAR_SORT_FILTER)) sd->action--; + if (sd->action == BAR_SORT_FILTER && + (!options->panels.sort.action_filter || !options->panels.sort.action_filter[0])) + sd->action = BAR_SORT_COPY; sd->selection = CLAMP(options->panels.sort.selection_state, 0, BAR_SORT_SELECTION_COUNT - 1); sd->undo_src = NULL; @@ -598,21 +613,35 @@ G_CALLBACK(bar_sort_set_move_cb), sd); - for (i = 0; i < GQ_EDITOR_GENERIC_SLOTS; i++) + have_filter = FALSE; + editors_list = editor_list_get(); + work = editors_list; + while (work) { GtkWidget *button; + EditorDescription *editor = work->data; + work = work->next; + gboolean select = FALSE; + + if (!editor_is_filter(editor->key)) continue; - const gchar *name = editor_get_name(i); - if (!name || !editor_is_filter(i)) continue; + if (sd->action == BAR_SORT_FILTER && strcmp(editor->key, options->panels.sort.action_filter) == 0) + { + bar_sort_set_action(sd, sd->action, editor->key); + select = TRUE; + have_filter = TRUE; + } button = pref_radiobutton_new(sd->folder_group, buttongrp, - name, (sd->action == BAR_SORT_FILTER + i), + editor->name, select, G_CALLBACK(bar_sort_set_filter_cb), sd); - g_object_set_data(G_OBJECT(button), "filter_idx", GUINT_TO_POINTER(i + 1)); + g_object_set_data(G_OBJECT(button), "filter_key", editor->key); } - + g_list_free(editors_list); + + if (sd->action == BAR_SORT_FILTER && !have_filter) sd->action = BAR_SORT_COPY; sd->collection_group = pref_box_new(sd->vbox, FALSE, GTK_ORIENTATION_VERTICAL, 0);