From a6fb79a9aee3b16eadd450cfcd261f0d3fe9bd9d Mon Sep 17 00:00:00 2001 From: Vladimir Nadvornik Date: Sat, 14 Feb 2009 20:26:30 +0000 Subject: [PATCH] droped Preferences dialog, sidebar should replace it completely --- src/Makefile.am | 4 - src/bar.c | 1 - src/bar_info.c | 1047 ------------------------------------------ src/bar_info.h | 34 -- src/bar_keywords.c | 3 +- src/bar_keywords.h | 4 + src/collect-table.c | 10 - src/collect.c | 4 - src/dupe.c | 13 - src/img-view.c | 15 - src/info.c | 953 -------------------------------------- src/info.h | 54 --- src/layout_image.c | 11 - src/layout_util.c | 16 - src/options.c | 4 - src/pan-view.c | 16 - src/search.c | 15 +- src/view_file.c | 10 - src/view_file_icon.c | 2 - src/view_file_list.c | 2 - 20 files changed, 6 insertions(+), 2212 deletions(-) delete mode 100644 src/bar_info.c delete mode 100644 src/bar_info.h delete mode 100644 src/info.c delete mode 100644 src/info.h diff --git a/src/Makefile.am b/src/Makefile.am index f2edba3e..0ffca1b9 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -80,8 +80,6 @@ geeqie_SOURCES = \ bar.h \ bar_comment.c \ bar_comment.h \ - bar_info.c \ - bar_info.h \ bar_keywords.c \ bar_keywords.h \ bar_exif.c \ @@ -154,8 +152,6 @@ geeqie_SOURCES = \ image-overlay.h \ img-view.c \ img-view.h \ - info.c \ - info.h \ layout.c \ layout.h \ layout_config.c \ diff --git a/src/bar.c b/src/bar.c index 0481fd4d..dd7fe0f0 100644 --- a/src/bar.c +++ b/src/bar.c @@ -16,7 +16,6 @@ #include "filedata.h" #include "history_list.h" -#include "info.h" #include "metadata.h" #include "misc.h" #include "ui_fileops.h" diff --git a/src/bar_info.c b/src/bar_info.c deleted file mode 100644 index 37a4152b..00000000 --- a/src/bar_info.c +++ /dev/null @@ -1,1047 +0,0 @@ -/* - * Geeqie - * (C) 2004 John Ellis - * Copyright (C) 2008 - 2009 The Geeqie Team - * - * Author: John Ellis - * - * This software is released under the GNU General Public License (GNU GPL). - * Please read the included file COPYING for more information. - * This software comes with no warranty of any kind, use at your own risk! - */ - - -#include "main.h" -#include "bar_info.h" - -#include "filedata.h" -#include "history_list.h" -#include "info.h" -#include "metadata.h" -#include "misc.h" -#include "ui_fileops.h" -#include "ui_misc.h" -#include "ui_utildlg.h" -#include "utilops.h" - -static const gchar *keyword_favorite_defaults[] = { - N_("Favorite"), - N_("Todo"), - N_("People"), - N_("Places"), - N_("Art"), - N_("Nature"), - N_("Possessions"), - NULL -}; - - -static void bar_info_keyword_update_all(void); -static void bar_info_changed(GtkTextBuffer *buffer, gpointer data); - -/* - *------------------------------------------------------------------- - * keyword / comment utils - *------------------------------------------------------------------- - */ - - -static gchar *comment_pull(GtkWidget *textview) -{ - GtkTextBuffer *buffer; - GtkTextIter start, end; - - buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview)); - gtk_text_buffer_get_bounds(buffer, &start, &end); - - return gtk_text_buffer_get_text(buffer, &start, &end, FALSE); -} - -GList *keyword_list_pull(GtkWidget *text_widget) -{ - GList *list; - gchar *text; - - if (GTK_IS_TEXT_VIEW(text_widget)) - { - text = comment_pull(text_widget); - } - else if (GTK_IS_ENTRY(text_widget)) - { - text = g_strdup(gtk_entry_get_text(GTK_ENTRY(text_widget))); - } - else - { - return NULL; - } - - list = string_to_keywords_list(text); - - g_free(text); - - return list; -} - -void keyword_list_push(GtkWidget *textview, GList *list) -{ - GtkTextBuffer *buffer; - GtkTextIter start, end; - - buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview)); - gtk_text_buffer_get_bounds(buffer, &start, &end); - gtk_text_buffer_delete(buffer, &start, &end); - - while (list) - { - const gchar *word = list->data; - GtkTextIter iter; - - gtk_text_buffer_get_end_iter(buffer, &iter); - if (word) gtk_text_buffer_insert(buffer, &iter, word, -1); - gtk_text_buffer_get_end_iter(buffer, &iter); - gtk_text_buffer_insert(buffer, &iter, "\n", -1); - - list = list->next; - } -} - - -/* - *------------------------------------------------------------------- - * keyword list dialog - *------------------------------------------------------------------- - */ - -#define KEYWORD_DIALOG_WIDTH 200 -#define KEYWORD_DIALOG_HEIGHT 250 - -typedef struct _KeywordDlg KeywordDlg; -struct _KeywordDlg -{ - GenericDialog *gd; - GtkWidget *treeview; -}; - -static KeywordDlg *keyword_dialog = NULL; - - -static void keyword_dialog_cancel_cb(GenericDialog *gd, gpointer data) -{ - g_free(keyword_dialog); - keyword_dialog = NULL; -} - -static void keyword_dialog_ok_cb(GenericDialog *gd, gpointer data) -{ - KeywordDlg *kd = data; - GtkTreeModel *store; - GtkTreeIter iter; - gint valid; - - history_list_free_key("keywords"); - - store = gtk_tree_view_get_model(GTK_TREE_VIEW(kd->treeview)); - valid = gtk_tree_model_get_iter_first(store, &iter); - while (valid) - { - gchar *key; - - gtk_tree_model_get(store, &iter, 0, &key, -1); - valid = gtk_tree_model_iter_next(store, &iter); - - history_list_add_to_key("keywords", key, 0); - } - - keyword_dialog_cancel_cb(gd, data); - - bar_info_keyword_update_all(); -} - -static void keyword_dialog_add_cb(GtkWidget *button, gpointer data) -{ - KeywordDlg *kd = data; - GtkTreeSelection *selection; - GtkTreeModel *store; - GtkTreeIter sibling; - GtkTreeIter iter; - GtkTreePath *tpath; - - selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(kd->treeview)); - if (gtk_tree_selection_get_selected(selection, &store, &sibling)) - { - gtk_list_store_insert_before(GTK_LIST_STORE(store), &iter, &sibling); - } - else - { - store = gtk_tree_view_get_model(GTK_TREE_VIEW(kd->treeview)); - gtk_list_store_append(GTK_LIST_STORE(store), &iter); - } - - gtk_list_store_set(GTK_LIST_STORE(store), &iter, 1, TRUE, -1); - - tpath = gtk_tree_model_get_path(store, &iter); - gtk_tree_view_set_cursor(GTK_TREE_VIEW(kd->treeview), tpath, - gtk_tree_view_get_column(GTK_TREE_VIEW(kd->treeview), 0), TRUE); - gtk_tree_path_free(tpath); -} - -static void keyword_dialog_remove_cb(GtkWidget *button, gpointer data) -{ - KeywordDlg *kd = data; - GtkTreeSelection *selection; - GtkTreeModel *store; - GtkTreeIter iter; - GtkTreeIter next; - GtkTreePath *tpath; - - selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(kd->treeview)); - if (!gtk_tree_selection_get_selected(selection, &store, &iter)) return; - - tpath = NULL; - next = iter; - if (gtk_tree_model_iter_next(store, &next)) - { - tpath = gtk_tree_model_get_path(store, &next); - } - else - { - tpath = gtk_tree_model_get_path(store, &iter); - if (!gtk_tree_path_prev(tpath)) - { - gtk_tree_path_free(tpath); - tpath = NULL; - } - } - if (tpath) - { - gtk_tree_view_set_cursor(GTK_TREE_VIEW(kd->treeview), tpath, - gtk_tree_view_get_column(GTK_TREE_VIEW(kd->treeview), 0), FALSE); - gtk_tree_path_free(tpath); - } - - gtk_list_store_remove(GTK_LIST_STORE(store), &iter); -} - -static void keyword_dialog_edit_cb(GtkCellRendererText *renderer, const gchar *path, - const gchar *new_text, gpointer data) -{ - KeywordDlg *kd = data; - GtkTreeModel *store; - GtkTreeIter iter; - GtkTreePath *tpath; - - if (!new_text || strlen(new_text) == 0) return; - - store = gtk_tree_view_get_model(GTK_TREE_VIEW(kd->treeview)); - - tpath = gtk_tree_path_new_from_string(path); - gtk_tree_model_get_iter(store, &iter, tpath); - gtk_tree_path_free(tpath); - - gtk_list_store_set(GTK_LIST_STORE(store), &iter, 0, new_text, -1); -} - -static void keyword_dialog_populate(KeywordDlg *kd) -{ - GtkListStore *store; - GList *list; - - store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(kd->treeview))); - gtk_list_store_clear(store); - - list = history_list_get_by_key("keywords"); - list = g_list_last(list); - while (list) - { - GtkTreeIter iter; - - gtk_list_store_append(store, &iter); - gtk_list_store_set(store, &iter, 0, list->data, - 1, TRUE, -1); - - list = list->prev; - } -} - -static void keyword_dialog_show(void) -{ - GtkWidget *scrolled; - GtkListStore *store; - GtkTreeViewColumn *column; - GtkCellRenderer *renderer; - GtkWidget *hbox; - GtkWidget *button; - - if (keyword_dialog) - { - gtk_window_present(GTK_WINDOW(keyword_dialog->gd->dialog)); - return; - } - - keyword_dialog = g_new0(KeywordDlg, 1); - - keyword_dialog->gd = generic_dialog_new(_("Keyword Presets"), - "keyword_presets", NULL, TRUE, - keyword_dialog_cancel_cb, keyword_dialog); - generic_dialog_add_message(keyword_dialog->gd, NULL, _("Favorite keywords list"), NULL); - - generic_dialog_add_button(keyword_dialog->gd, GTK_STOCK_OK, NULL, - keyword_dialog_ok_cb, TRUE); - - scrolled = gtk_scrolled_window_new(NULL, NULL); - gtk_widget_set_size_request(scrolled, KEYWORD_DIALOG_WIDTH, KEYWORD_DIALOG_HEIGHT); - gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled), GTK_SHADOW_IN); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled), - GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - gtk_box_pack_start(GTK_BOX(keyword_dialog->gd->vbox), scrolled, TRUE, TRUE, 5); - gtk_widget_show(scrolled); - - store = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_BOOLEAN); - keyword_dialog->treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)); - g_object_unref(store); - - gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(keyword_dialog->treeview), FALSE); - gtk_tree_view_set_search_column(GTK_TREE_VIEW(keyword_dialog->treeview), 0); - gtk_tree_view_set_reorderable(GTK_TREE_VIEW(keyword_dialog->treeview), TRUE); - - column = gtk_tree_view_column_new(); - gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE); - renderer = gtk_cell_renderer_text_new(); - g_signal_connect(G_OBJECT(renderer), "edited", - G_CALLBACK(keyword_dialog_edit_cb), keyword_dialog); - gtk_tree_view_column_pack_start(column, renderer, TRUE); - gtk_tree_view_column_add_attribute(column, renderer, "text", 0); - gtk_tree_view_column_add_attribute(column, renderer, "editable", 1); - gtk_tree_view_append_column(GTK_TREE_VIEW(keyword_dialog->treeview), column); - - gtk_container_add(GTK_CONTAINER(scrolled), keyword_dialog->treeview); - gtk_widget_show(keyword_dialog->treeview); - - hbox = gtk_hbox_new(FALSE, 5); - gtk_box_pack_start(GTK_BOX(keyword_dialog->gd->vbox), hbox, FALSE, FALSE, 0); - gtk_widget_show(hbox); - - button = gtk_button_new_from_stock(GTK_STOCK_ADD); - g_signal_connect(G_OBJECT(button), "clicked", - G_CALLBACK(keyword_dialog_add_cb), keyword_dialog); - gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); - gtk_widget_show(button); - - button = gtk_button_new_from_stock(GTK_STOCK_REMOVE); - g_signal_connect(G_OBJECT(button), "clicked", - G_CALLBACK(keyword_dialog_remove_cb), keyword_dialog); - gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); - gtk_widget_show(button); - - keyword_dialog_populate(keyword_dialog); - - gtk_widget_show(keyword_dialog->gd->dialog); -} - - -static void bar_keyword_edit_cb(GtkWidget *button, gpointer data) -{ - keyword_dialog_show(); -} - - -/* - *------------------------------------------------------------------- - * info bar - *------------------------------------------------------------------- - */ - -typedef enum { - BAR_SORT_COPY, - BAR_SORT_MOVE, - BAR_SORT_LINK -} SortActionType; - -enum { - KEYWORD_COLUMN_TOGGLE = 0, - KEYWORD_COLUMN_TEXT, - KEYWORD_COLUMN_MARK -}; - -typedef struct _BarInfoData BarInfoData; -struct _BarInfoData -{ - GtkWidget *vbox; - GtkWidget *group_box; - GtkWidget *label_file_name; - GtkWidget *label_file_time; - - GtkWidget *keyword_view; - GtkWidget *keyword_treeview; - - GtkWidget *comment_view; - -#if 0 - GtkWidget *button_save; -#endif - GtkWidget *button_set_keywords_add; - GtkWidget *button_set_keywords_replace; - GtkWidget *button_set_comment_add; - GtkWidget *button_set_comment_replace; - - FileData *fd; - - GList *(*list_func)(gpointer); - gpointer list_data; -}; - - -static GList *bar_list = NULL; - - -static void bar_info_write(BarInfoData *bd) -{ - GList *list; - gchar *comment; - - if (!bd->fd) return; - - list = keyword_list_pull(bd->keyword_view); - comment = comment_pull(bd->comment_view); - - metadata_write_string(bd->fd, COMMENT_KEY, comment); - metadata_write_list(bd->fd, KEYWORD_KEY, list); - - string_list_free(list); - g_free(comment); -} - -static gchar *bar_info_get_mark_text(const gchar *key) -{ - gint i; - static gchar buf[10]; - - for (i = 0; i < FILEDATA_MARKS_SIZE; i++) - { - FileDataGetMarkFunc get_mark_func; - FileDataSetMarkFunc set_mark_func; - gpointer data; - file_data_get_registered_mark_func(i, &get_mark_func, &set_mark_func, &data); - if (get_mark_func == meta_data_get_keyword_mark && strcmp(data, key) == 0) - { - sprintf(buf, " %d ", i + 1); - return buf; - } - } - return " ... "; -} - -static void bar_keyword_list_sync(BarInfoData *bd, GList *keywords) -{ - GList *list; - GtkListStore *store; - GtkTreeIter iter; - - list = history_list_get_by_key("keywords"); - if (!list) - { - /* blank? set up a few example defaults */ - - gint i = 0; - - while (keyword_favorite_defaults[i] != NULL) - { - history_list_add_to_key("keywords", _(keyword_favorite_defaults[i]), 0); - i++; - } - - list = history_list_get_by_key("keywords"); - } - - store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(bd->keyword_treeview))); - - gtk_list_store_clear(store); - - list = g_list_last(list); - while (list) - { - gchar *key = list->data; - - gtk_list_store_append(store, &iter); - gtk_list_store_set(store, &iter, KEYWORD_COLUMN_TOGGLE, find_string_in_list(keywords, key), - KEYWORD_COLUMN_TEXT, key, - KEYWORD_COLUMN_MARK, bar_info_get_mark_text(key), -1); - - list = list->prev; - } -} - -static void bar_info_keyword_update_all(void) -{ - GList *work; - - work = bar_list; - while (work) - { - BarInfoData *bd; - GList *keywords; - - bd = work->data; - work = work->next; - - keywords = keyword_list_pull(bd->keyword_view); - bar_keyword_list_sync(bd, keywords); - string_list_free(keywords); - } -} - -static void bar_info_update(BarInfoData *bd) -{ - GList *keywords = NULL; - gchar *comment = NULL; - GtkTextBuffer *keyword_buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(bd->keyword_view)); - GtkTextBuffer *comment_buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(bd->comment_view)); - - g_signal_handlers_block_by_func(keyword_buffer, bar_info_changed, bd); - g_signal_handlers_block_by_func(comment_buffer, bar_info_changed, bd); - - if (bd->label_file_name) - { - gtk_label_set_text(GTK_LABEL(bd->label_file_name), (bd->fd) ? bd->fd->name : ""); - } - if (bd->label_file_time) - { - gtk_label_set_text(GTK_LABEL(bd->label_file_time), (bd->fd) ? text_from_time(bd->fd->date) : ""); - } - - comment = metadata_read_string(bd->fd, COMMENT_KEY, METADATA_PLAIN); - gtk_text_buffer_set_text(comment_buffer, - (comment) ? comment : "", -1); - g_free(comment); - - keywords = metadata_read_list(bd->fd, KEYWORD_KEY, METADATA_PLAIN); - keyword_list_push(bd->keyword_view, keywords); - bar_keyword_list_sync(bd, keywords); - string_list_free(keywords); - - g_signal_handlers_unblock_by_func(keyword_buffer, bar_info_changed, bd); - g_signal_handlers_unblock_by_func(comment_buffer, bar_info_changed, bd); - - gtk_widget_set_sensitive(bd->group_box, (bd->fd != NULL)); -} - -void bar_info_set(GtkWidget *bar, FileData *fd) -{ - BarInfoData *bd; - - bd = g_object_get_data(G_OBJECT(bar), "bar_info_data"); - if (!bd) return; - - file_data_unref(bd->fd); - bd->fd = file_data_ref(fd); - - bar_info_update(bd); -} - -void bar_info_maint_renamed(GtkWidget *bar, FileData *fd) -{ - BarInfoData *bd; - - bd = g_object_get_data(G_OBJECT(bar), "bar_info_data"); - if (!bd) return; - - file_data_unref(bd->fd); - bd->fd = file_data_ref(fd); - - if (bd->label_file_name) - { - gtk_label_set_text(GTK_LABEL(bd->label_file_name), (bd->fd) ? bd->fd->name : ""); - } -} - -gint bar_info_event(GtkWidget *bar, GdkEvent *event) -{ - BarInfoData *bd; - - bd = g_object_get_data(G_OBJECT(bar), "bar_info_data"); - if (!bd) return FALSE; - - if (GTK_WIDGET_HAS_FOCUS(bd->keyword_view)) return gtk_widget_event(bd->keyword_view, event); - if (GTK_WIDGET_HAS_FOCUS(bd->comment_view)) return gtk_widget_event(bd->comment_view, event); - - return FALSE; -} - -static void bar_info_keyword_set(BarInfoData *bd, const gchar *keyword, gint active) -{ - GList *list; - gint found; - - if (!keyword) return; - - list = keyword_list_pull(bd->keyword_view); - found = find_string_in_list(list, keyword); - - if (active != found) - { - if (found) - { - GList *work = list; - - while (work) - { - gchar *key = work->data; - work = work->next; - - if (key && keyword && strcmp(key, keyword) == 0) - { - list = g_list_remove(list, key); - g_free(key); - } - } - } - else - { - list = g_list_append(list, g_strdup(keyword)); - } - - keyword_list_push(bd->keyword_view, list); - } - - string_list_free(list); -} - -static void bar_info_keyword_toggle(GtkCellRendererToggle *toggle, const gchar *path, gpointer data) -{ - BarInfoData *bd = data; - GtkTreeModel *store; - GtkTreeIter iter; - GtkTreePath *tpath; - gchar *key = NULL; - gboolean active; - - store = gtk_tree_view_get_model(GTK_TREE_VIEW(bd->keyword_treeview)); - - tpath = gtk_tree_path_new_from_string(path); - gtk_tree_model_get_iter(store, &iter, tpath); - gtk_tree_path_free(tpath); - - gtk_tree_model_get(store, &iter, KEYWORD_COLUMN_TOGGLE, &active, - KEYWORD_COLUMN_TEXT, &key, -1); - active = (!active); - gtk_list_store_set(GTK_LIST_STORE(store), &iter, KEYWORD_COLUMN_TOGGLE, active, -1); - - bar_info_keyword_set(bd, key, active); - g_free(key); -} - -static void bar_info_set_selection(BarInfoData *bd, gboolean set_keywords, gboolean set_comment, gboolean append) -{ - GList *keywords = NULL; - GList *list = NULL; - GList *work; - gchar *comment = NULL; - - if (!bd->list_func) return; - - if (set_keywords) - { - keywords = keyword_list_pull(bd->keyword_view); - } - - if (set_comment) - { - comment = comment_pull(bd->comment_view); - } - - if (append && !keywords && !comment) return; - - list = bd->list_func(bd->list_data); - work = list; - while (work) - { - FileData *fd = work->data; - work = work->next; - - if (append) - { - if (comment) metadata_append_string(fd, COMMENT_KEY, comment); - if (keywords) metadata_append_list(fd, KEYWORD_KEY, keywords); - } - else - { - if (comment) metadata_write_string(fd, COMMENT_KEY, comment); - if (keywords) metadata_write_list(fd, KEYWORD_KEY, keywords); - } - } - - filelist_free(list); - string_list_free(keywords); - g_free(comment); -} - -static void bar_info_set_keywords_add(GtkWidget *button, gpointer data) -{ - BarInfoData *bd = data; - - bar_info_set_selection(bd, TRUE, FALSE, TRUE); -} - -static void bar_info_set_keywords_replace(GtkWidget *button, gpointer data) -{ - BarInfoData *bd = data; - - bar_info_set_selection(bd, TRUE, FALSE, FALSE); -} - -static void bar_info_set_comment_add(GtkWidget *button, gpointer data) -{ - BarInfoData *bd = data; - - bar_info_set_selection(bd, FALSE, TRUE, TRUE); -} - -static void bar_info_set_comment_replace(GtkWidget *button, gpointer data) -{ - BarInfoData *bd = data; - - bar_info_set_selection(bd, FALSE, TRUE, FALSE); -} - -static void bar_info_notify_cb(FileData *fd, NotifyType type, gpointer data) -{ - BarInfoData *bd = data; - if (fd == bd->fd) bar_info_update(bd); -} - -static void bar_info_changed(GtkTextBuffer *buffer, gpointer data) -{ - BarInfoData *bd = data; - - file_data_unregister_notify_func(bar_info_notify_cb, bd); - bar_info_write(bd); - file_data_register_notify_func(bar_info_notify_cb, bd, NOTIFY_PRIORITY_LOW); -} - -static void bar_info_mark_edited (GtkCellRendererText *cell, const gchar *path, const gchar *text, gpointer data) -{ - BarInfoData *bd = data; - GtkTreeModel *store; - GtkTreeIter iter; - GtkTreePath *tpath; - gchar *key = NULL; - gint i; - FileDataGetMarkFunc get_mark_func; - FileDataSetMarkFunc set_mark_func; - gpointer mark_func_data; - - file_data_unregister_notify_func(bar_info_notify_cb, bd); - - store = gtk_tree_view_get_model(GTK_TREE_VIEW(bd->keyword_treeview)); - - tpath = gtk_tree_path_new_from_string(path); - gtk_tree_model_get_iter(store, &iter, tpath); - gtk_tree_path_free(tpath); - - gtk_tree_model_get(store, &iter, KEYWORD_COLUMN_TEXT, &key, -1); - - for (i = 0; i < FILEDATA_MARKS_SIZE; i++) - { - file_data_get_registered_mark_func(i, &get_mark_func, &set_mark_func, &mark_func_data); - if (get_mark_func == meta_data_get_keyword_mark && strcmp(mark_func_data, key) == 0) - { - g_free(mark_func_data); - file_data_register_mark_func(i, NULL, NULL, NULL); - } - } - - if (sscanf(text, " %d ", &i) &&i >=1 && i <= FILEDATA_MARKS_SIZE) - { - i--; - file_data_get_registered_mark_func(i, &get_mark_func, &set_mark_func, &mark_func_data); - if (get_mark_func == meta_data_get_keyword_mark && mark_func_data) g_free(mark_func_data); - file_data_register_mark_func(i, meta_data_get_keyword_mark, meta_data_set_keyword_mark, g_strdup(key)); - } - - g_free(key); - - file_data_register_notify_func(bar_info_notify_cb, bd, NOTIFY_PRIORITY_LOW); - bar_info_update(bd); -} - -void bar_info_close(GtkWidget *bar) -{ - BarInfoData *bd; - - bd = g_object_get_data(G_OBJECT(bar), "bar_info_data"); - if (!bd) return; - - gtk_widget_destroy(bd->vbox); -} - -static void bar_info_destroy(GtkWidget *widget, gpointer data) -{ - BarInfoData *bd = data; - - file_data_unregister_notify_func(bar_info_notify_cb, bd); - bar_list = g_list_remove(bar_list, bd); - - file_data_unref(bd->fd); - - g_free(bd); -} - -static GtkTreeModel *create_marks_list(void) -{ - GtkListStore *model; - GtkTreeIter iter; - gint i; - - /* create list store */ - model = gtk_list_store_new (1, G_TYPE_STRING); - for (i = 0; i < FILEDATA_MARKS_SIZE; i++) - { - char str[10]; - sprintf(str, " %d ", i + 1); - gtk_list_store_append (model, &iter); - gtk_list_store_set(model, &iter, 0, str, -1); - } - gtk_list_store_append (model, &iter); - gtk_list_store_set(model, &iter, 0, " ... ", -1); - return GTK_TREE_MODEL (model); -} - -GtkWidget *bar_info_new(FileData *fd, gint metadata_only, GtkWidget *bounding_widget) -{ - BarInfoData *bd; - GtkWidget *box; - GtkWidget *hbox; - GtkWidget *table; - GtkWidget *scrolled; - GtkTextBuffer *buffer; - GtkWidget *label; - GtkWidget *tbar; - GtkListStore *store; - GtkTreeViewColumn *column; - GtkCellRenderer *renderer; - - bd = g_new0(BarInfoData, 1); - - bd->list_func = NULL; - bd->list_data = NULL; - - bd->vbox = gtk_vbox_new(FALSE, PREF_PAD_GAP); - g_object_set_data(G_OBJECT(bd->vbox), "bar_info_data", bd); - g_signal_connect(G_OBJECT(bd->vbox), "destroy", - G_CALLBACK(bar_info_destroy), bd); - - if (!metadata_only) - { - hbox = pref_box_new(bd->vbox, FALSE, GTK_ORIENTATION_HORIZONTAL, PREF_PAD_GAP); - - label = sizer_new(bd->vbox, bounding_widget, SIZER_POS_LEFT); - gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); - gtk_widget_show(label); - - label = gtk_label_new(_("Keywords")); - pref_label_bold(label, TRUE, FALSE); - gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0); - gtk_widget_show(label); - } - - bd->group_box = pref_box_new(bd->vbox, TRUE, GTK_ORIENTATION_VERTICAL, PREF_PAD_GAP); - - if (!metadata_only) - { - GtkWidget *table; - - table = pref_table_new(bd->group_box, 2, 2, FALSE, FALSE); - - bd->label_file_name = table_add_line(table, 0, 0, _("Filename:"), NULL); - bd->label_file_time = table_add_line(table, 0, 1, _("File date:"), NULL); - } - else - { - bd->label_file_name = NULL; - bd->label_file_time = NULL; - } - - table = gtk_table_new(3, 1, TRUE); - gtk_table_set_row_spacings(GTK_TABLE(table), PREF_PAD_GAP); - gtk_box_pack_start(GTK_BOX(bd->group_box), table, TRUE, TRUE, 0); - gtk_widget_show(table); - - /* keyword entry */ - - box = gtk_vbox_new(FALSE, 0); - gtk_table_attach(GTK_TABLE(table), box, 0, 1, 0, 2, - GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); - gtk_widget_show(box); - - label = pref_label_new(box, _("Keywords:")); - gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); - pref_label_bold(label, TRUE, FALSE); - - hbox = pref_box_new(box, TRUE, GTK_ORIENTATION_HORIZONTAL, PREF_PAD_GAP); - - scrolled = gtk_scrolled_window_new(NULL, NULL); - gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled), GTK_SHADOW_IN); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled), - GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - gtk_box_pack_start(GTK_BOX(hbox), scrolled, TRUE, TRUE, 0); - gtk_widget_show(scrolled); - - bd->keyword_view = gtk_text_view_new(); - gtk_container_add(GTK_CONTAINER(scrolled), bd->keyword_view); - gtk_widget_show(bd->keyword_view); - - buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(bd->keyword_view)); - g_signal_connect(G_OBJECT(buffer), "changed", - G_CALLBACK(bar_info_changed), bd); - - scrolled = gtk_scrolled_window_new(NULL, NULL); - gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled), GTK_SHADOW_IN); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled), - GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - gtk_box_pack_start(GTK_BOX(hbox), scrolled, TRUE, TRUE, 0); - gtk_widget_show(scrolled); - - store = gtk_list_store_new(3, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING); - bd->keyword_treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)); - g_object_unref(store); - - gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(bd->keyword_treeview), FALSE); - - if (metadata_only) - { - gtk_tree_view_set_search_column(GTK_TREE_VIEW(bd->keyword_treeview), KEYWORD_COLUMN_TEXT); - } - else - { - gtk_tree_view_set_enable_search(GTK_TREE_VIEW(bd->keyword_treeview), FALSE); - } - - column = gtk_tree_view_column_new(); - gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE); - - renderer = gtk_cell_renderer_toggle_new(); - gtk_tree_view_column_pack_start(column, renderer, FALSE); - gtk_tree_view_column_add_attribute(column, renderer, "active", KEYWORD_COLUMN_TOGGLE); - g_signal_connect(G_OBJECT(renderer), "toggled", - G_CALLBACK(bar_info_keyword_toggle), bd); - - renderer = gtk_cell_renderer_text_new(); - gtk_tree_view_column_pack_start(column, renderer, TRUE); - gtk_tree_view_column_add_attribute(column, renderer, "text", KEYWORD_COLUMN_TEXT); - - gtk_tree_view_append_column(GTK_TREE_VIEW(bd->keyword_treeview), column); - - column = gtk_tree_view_column_new(); - gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_GROW_ONLY); - - renderer = gtk_cell_renderer_combo_new(); - g_object_set(G_OBJECT(renderer), "editable", (gboolean)TRUE, - "model", create_marks_list(), - "text-column", 0, - "has-entry", FALSE, - NULL); - - gtk_tree_view_column_pack_start(column, renderer, TRUE); - gtk_tree_view_column_add_attribute(column, renderer, "text", KEYWORD_COLUMN_MARK); - g_signal_connect (renderer, "edited", - G_CALLBACK (bar_info_mark_edited), bd); - gtk_tree_view_append_column(GTK_TREE_VIEW(bd->keyword_treeview), column); - - - gtk_container_add(GTK_CONTAINER(scrolled), bd->keyword_treeview); - gtk_widget_show(bd->keyword_treeview); - - /* comment entry */ - - box = gtk_vbox_new(FALSE, 0); - gtk_table_attach(GTK_TABLE(table), box, 0, 1, 2, 3, - GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); - gtk_widget_show(box); - - label = pref_label_new(box, _("Comment:")); - gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); - pref_label_bold(label, TRUE, FALSE); - - scrolled = gtk_scrolled_window_new(NULL, NULL); - gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled), GTK_SHADOW_IN); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled), - GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - gtk_box_pack_start(GTK_BOX(box), scrolled, TRUE, TRUE, 0); - gtk_widget_show(scrolled); - - bd->comment_view = gtk_text_view_new(); - gtk_container_add(GTK_CONTAINER(scrolled), bd->comment_view); - gtk_widget_show(bd->comment_view); - - buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(bd->comment_view)); - g_signal_connect(G_OBJECT(buffer), "changed", - G_CALLBACK(bar_info_changed), bd); - - /* toolbar */ - - tbar = pref_toolbar_new(bd->group_box, GTK_TOOLBAR_ICONS); - - pref_toolbar_button(tbar, GTK_STOCK_INDEX, NULL, FALSE, - _("Edit favorite keywords list."), - G_CALLBACK(bar_keyword_edit_cb), bd); - pref_toolbar_spacer(tbar); - bd->button_set_keywords_add = pref_toolbar_button(tbar, GTK_STOCK_ADD, NULL, FALSE, - _("Add keywords to selected files"), - G_CALLBACK(bar_info_set_keywords_add), bd); - bd->button_set_keywords_replace = pref_toolbar_button(tbar, GTK_STOCK_CONVERT, NULL, FALSE, - _("Add keywords to selected files, replacing existing ones"), - G_CALLBACK(bar_info_set_keywords_replace), bd); - bd->button_set_comment_add = pref_toolbar_button(tbar, GTK_STOCK_DND_MULTIPLE, NULL, FALSE, - _("Add comment to selected files"), - G_CALLBACK(bar_info_set_comment_add), bd); - bd->button_set_comment_replace = pref_toolbar_button(tbar, GTK_STOCK_DND, NULL, FALSE, - _("Add comment to selected files, replacing existing one"), - G_CALLBACK(bar_info_set_comment_replace), bd); - -#if 0 - pref_toolbar_spacer(tbar); - bd->button_save = pref_toolbar_button(tbar, GTK_STOCK_SAVE, NULL, FALSE, - _("Save comment now"), - G_CALLBACK(bar_info_save), bd); -#endif - - bd->fd = file_data_ref(fd); - bar_info_update(bd); - - bar_info_selection(bd->vbox, 0); - - bar_list = g_list_append(bar_list, bd); - - file_data_register_notify_func(bar_info_notify_cb, bd, NOTIFY_PRIORITY_LOW); - - return bd->vbox; -} - -void bar_info_set_selection_func(GtkWidget *bar, GList *(*list_func)(gpointer data), gpointer data) -{ - BarInfoData *bd; - - bd = g_object_get_data(G_OBJECT(bar), "bar_info_data"); - if (!bd) return; - - bd->list_func = list_func; - bd->list_data = data; -} - -void bar_info_selection(GtkWidget *bar, gint count) -{ - BarInfoData *bd; - gint enable; - - bd = g_object_get_data(G_OBJECT(bar), "bar_info_data"); - if (!bd) return; - - enable = (count > 0 && bd->list_func != NULL); - - gtk_widget_set_sensitive(bd->button_set_keywords_add, enable); - gtk_widget_set_sensitive(bd->button_set_keywords_replace, enable); - gtk_widget_set_sensitive(bd->button_set_comment_add, enable); - gtk_widget_set_sensitive(bd->button_set_comment_replace, enable); - -} -/* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */ diff --git a/src/bar_info.h b/src/bar_info.h deleted file mode 100644 index 586ac931..00000000 --- a/src/bar_info.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Geeqie - * (C) 2004 John Ellis - * Copyright (C) 2008 - 2009 The Geeqie Team - * - * Author: John Ellis - * - * This software is released under the GNU General Public License (GNU GPL). - * Please read the included file COPYING for more information. - * This software comes with no warranty of any kind, use at your own risk! - */ - - -#ifndef BAR_INFO_H -#define BAR_INFO_H - - -GtkWidget *bar_info_new(FileData *fd, gint metadata_only, GtkWidget *bounding_widget); -void bar_info_close(GtkWidget *bar); - -void bar_info_set(GtkWidget *bar, FileData *fd); -gint bar_info_event(GtkWidget *bar, GdkEvent *event); - -void bar_info_set_selection_func(GtkWidget *bar, GList *(*list_func)(gpointer data), gpointer data); -void bar_info_selection(GtkWidget *bar, gint count); - -void bar_info_maint_renamed(GtkWidget *bar, FileData *fd); - -GList *keyword_list_pull(GtkWidget *text_widget); -void keyword_list_push(GtkWidget *textview, GList *list); - - -#endif -/* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */ diff --git a/src/bar_keywords.c b/src/bar_keywords.c index 18cbc857..87bb14de 100644 --- a/src/bar_keywords.c +++ b/src/bar_keywords.c @@ -16,7 +16,6 @@ #include "filedata.h" #include "history_list.h" -#include "info.h" #include "metadata.h" #include "misc.h" #include "ui_fileops.h" @@ -48,7 +47,7 @@ static void bar_pane_keywords_changed(GtkTextBuffer *buffer, gpointer data); */ -static GList *keyword_list_pull(GtkWidget *text_widget) +GList *keyword_list_pull(GtkWidget *text_widget) { GList *list; gchar *text; diff --git a/src/bar_keywords.h b/src/bar_keywords.h index 9a6ba599..c65d6c1e 100644 --- a/src/bar_keywords.h +++ b/src/bar_keywords.h @@ -16,5 +16,9 @@ GtkWidget *bar_pane_keywords_new(const gchar *title, const gchar *key); + +/* used in search.c */ +GList *keyword_list_pull(GtkWidget *text_widget); + #endif /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */ diff --git a/src/collect-table.c b/src/collect-table.c index 26b06417..37b769ec 100644 --- a/src/collect-table.c +++ b/src/collect-table.c @@ -22,7 +22,6 @@ #include "editors.h" #include "filedata.h" #include "img-view.h" -#include "info.h" #include "layout.h" #include "layout_image.h" #include "menu.h" @@ -669,13 +668,6 @@ static void collection_table_popup_edit_cb(GtkWidget *widget, gpointer data) } } -static void collection_table_popup_info_cb(GtkWidget *widget, gpointer data) -{ - CollectTable *ct = data; - - info_window_new(NULL, collection_table_popup_file_list(ct), NULL); -} - static void collection_table_popup_copy_cb(GtkWidget *widget, gpointer data) { CollectTable *ct = data; @@ -889,8 +881,6 @@ static GtkWidget *collection_table_popup_menu(CollectTable *ct, gint over_icon) G_CALLBACK(collection_table_popup_edit_cb), ct); gtk_widget_set_sensitive(item, over_icon); - menu_item_add_sensitive(menu, _("_Properties"), over_icon, - G_CALLBACK(collection_table_popup_info_cb), ct); menu_item_add_divider(menu); menu_item_add_stock_sensitive(menu, _("_Copy..."), GTK_STOCK_COPY, over_icon, G_CALLBACK(collection_table_popup_copy_cb), ct); diff --git a/src/collect.c b/src/collect.c index 7e579d77..3c13c093 100644 --- a/src/collect.c +++ b/src/collect.c @@ -20,7 +20,6 @@ #include "editors.h" #include "filedata.h" #include "img-view.h" -#include "info.h" #include "layout.h" #include "layout_image.h" #include "misc.h" @@ -861,9 +860,6 @@ static gint collection_window_keypress(GtkWidget *widget, GdkEventKey *event, gp case 'D': case 'd': file_util_delete(NULL, collection_table_selection_get_list(cw->table), cw->window); break; - case 'P': case 'p': - info_window_new(NULL, collection_table_selection_get_list(cw->table), NULL); - break; case 'S': case 's': collection_dialog_save_as(NULL, cw->cd); break; diff --git a/src/dupe.c b/src/dupe.c index e52df5e2..8e9f6513 100644 --- a/src/dupe.c +++ b/src/dupe.c @@ -22,7 +22,6 @@ #include "filedata.h" #include "image-load.h" #include "img-view.h" -#include "info.h" #include "layout.h" #include "layout_image.h" #include "md5-util.h" @@ -2147,13 +2146,6 @@ static void dupe_menu_edit_cb(GtkWidget *widget, gpointer data) dupe_window_edit_selected(dw, key); } -static void dupe_menu_info_cb(GtkWidget *widget, gpointer data) -{ - DupeWindow *dw = data; - - info_window_new(NULL, dupe_listview_get_selection(dw, dw->listview), NULL); -} - static void dupe_menu_collection_cb(GtkWidget *widget, gpointer data) { DupeWindow *dw = data; @@ -2254,8 +2246,6 @@ static GtkWidget *dupe_menu_popup_main(DupeWindow *dw, DupeItem *di) menu_item_add_divider(menu); submenu_add_edit(menu, &item, G_CALLBACK(dupe_menu_edit_cb), dw); if (!on_row) gtk_widget_set_sensitive(item, FALSE); - menu_item_add_stock_sensitive(menu, _("_Properties"), GTK_STOCK_PROPERTIES, on_row, - G_CALLBACK(dupe_menu_info_cb), dw); menu_item_add_stock_sensitive(menu, _("Add to new collection"), GTK_STOCK_INDEX, on_row, G_CALLBACK(dupe_menu_collection_cb), dw); menu_item_add_stock_sensitive(menu, _("Print..."), GTK_STOCK_PRINT, on_row, @@ -2939,9 +2929,6 @@ static gint dupe_window_keypress_cb(GtkWidget *widget, GdkEventKey *event, gpoin case 'D': case 'd': file_util_delete(NULL, dupe_listview_get_selection(dw, listview), dw->window); break; - case 'P': case 'p': - info_window_new(NULL, dupe_listview_get_selection(dw, listview), NULL); - break; default: stop_signal = FALSE; break; diff --git a/src/img-view.c b/src/img-view.c index 2743994e..a2fbec5e 100644 --- a/src/img-view.c +++ b/src/img-view.c @@ -22,7 +22,6 @@ #include "fullscreen.h" #include "image.h" #include "image-overlay.h" -#include "info.h" #include "layout.h" #include "layout_image.h" #include "menu.h" @@ -421,9 +420,6 @@ static gint view_window_key_press_cb(GtkWidget *widget, GdkEventKey *event, gpoi case 'D': case 'd': file_util_delete(image_get_fd(imd), NULL, imd->widget); break; - case 'P': case 'p': - info_window_new(image_get_fd(imd), NULL, vw->fs ? vw->fs->window : NULL); - break; case 'W': case 'w': view_window_close(vw); break; @@ -1102,15 +1098,6 @@ static void view_alter_cb(GtkWidget *widget, gpointer data) image_alter(vw->imd, type); } -static void view_info_cb(GtkWidget *widget, gpointer data) -{ - ViewWindow *vw = data; - ImageWindow *imd; - - imd = view_window_active_image(vw); - info_window_new(image_get_fd(imd), NULL, vw->fs ? vw->fs->window : NULL); -} - static void view_wallpaper_cb(GtkWidget *widget, gpointer data) { ViewWindow *vw = data; @@ -1276,8 +1263,6 @@ static GtkWidget *view_popup_menu(ViewWindow *vw) submenu_add_alter(menu, G_CALLBACK(view_alter_cb), vw); - menu_item_add_stock(menu, _("_Properties"), GTK_STOCK_PROPERTIES, G_CALLBACK(view_info_cb), vw); - menu_item_add_stock(menu, _("View in _new window"), GTK_STOCK_NEW, G_CALLBACK(view_new_window_cb), vw); item = menu_item_add(menu, _("_Go to directory view"), G_CALLBACK(view_set_layout_path_cb), vw); diff --git a/src/info.c b/src/info.c deleted file mode 100644 index 9e71c7b6..00000000 --- a/src/info.c +++ /dev/null @@ -1,953 +0,0 @@ -/* - * Geeqie - * (C) 2004 John Ellis - * Copyright (C) 2008 - 2009 The Geeqie Team - * - * Author: John Ellis - * - * This software is released under the GNU General Public License (GNU GPL). - * Please read the included file COPYING for more information. - * This software comes with no warranty of any kind, use at your own risk! - */ - - -#include "main.h" -#include "info.h" - -#include "bar_info.h" -#include "bar_exif.h" -#include "dnd.h" -#include "filedata.h" -#include "image.h" -#include "image-load.h" -#include "pixbuf-renderer.h" -#include "ui_fileops.h" -#include "ui_misc.h" -#include "uri_utils.h" -#include "window.h" - -#include -#include - - -#define IMAGE_SIZE_W 200 -#define IMAGE_SIZE_H 200 - - -typedef struct _TabData TabData; -struct _TabData -{ - void (*func_free)(gpointer data); - void (*func_sync)(InfoData *id, gpointer data); - void (*func_image)(InfoData *id, gpointer data); - gpointer data; - TabData *(*func_new)(InfoData *id); - GtkWidget *child; -}; - -typedef struct _InfoTabsPos InfoTabsPos; -struct _InfoTabsPos -{ - TabData *(*func)(InfoData *id); - guint pos; -}; - -static GList *info_tabs_pos_list = NULL; - -static void notebook_set_tab_reorderable(GtkNotebook *notebook, GtkWidget *child, gboolean reorderable) -{ -#if GTK_CHECK_VERSION(2,10,0) - gtk_notebook_set_tab_reorderable(notebook, child, reorderable); -#endif -} - -/* - *------------------------------------------------------------------- - * table utils - *------------------------------------------------------------------- - */ - -GtkWidget *table_add_line(GtkWidget *table, gint x, gint y, - const gchar *description, const gchar *text) -{ - GtkWidget *label; - - if (!text) text = ""; - - label = pref_table_label(table, x, y, description, 1.0); - pref_label_bold(label, TRUE, FALSE); - - label = pref_table_label(table, x + 1, y, text, 0.0); - return label; -} - -/* - *------------------------------------------------------------------- - * EXIF tab - *------------------------------------------------------------------- - */ - -static void info_tab_exif_image(InfoData *id, gpointer data) -{ - GtkWidget *bar = data; - FileData *fd; - - if (id->image->unknown) - { - fd = NULL; - } - else - { - fd = id->image->image_fd; - } - - bar_exif_set(bar, fd); -} - -static void info_tab_exif_sync(InfoData *id, gpointer data) -{ - GtkWidget *bar = data; - - bar_exif_set(bar, NULL); -} - -static TabData *info_tab_exif_new(InfoData *id) -{ - TabData *td; - GtkWidget *bar; - GtkWidget *label; - - bar = bar_exif_new(FALSE, NULL, FALSE, NULL); - gtk_container_set_border_width(GTK_CONTAINER(bar), PREF_PAD_BORDER); - - label = gtk_label_new(_("Exif")); - gtk_notebook_append_page(GTK_NOTEBOOK(id->notebook), bar, label); - notebook_set_tab_reorderable(GTK_NOTEBOOK(id->notebook), bar, TRUE); - gtk_widget_show(bar); - - /* register */ - td = g_new0(TabData, 1); - td->func_free = NULL; - td->func_sync = info_tab_exif_sync; - td->func_image = info_tab_exif_image; - td->data = bar; - td->func_new = info_tab_exif_new; - td->child = bar; - - return td; -} - -/* - *------------------------------------------------------------------- - * file attributes tab - *------------------------------------------------------------------- - */ - -typedef struct _InfoTabMeta InfoTabMeta; -struct _InfoTabMeta -{ - GtkWidget *bar_info; -}; - -static void info_tab_meta_free(gpointer data) -{ - InfoTabMeta *tab = data; - - g_free(tab); -} - -static void info_tab_meta_sync(InfoData *id, gpointer data) -{ - InfoTabMeta *tab = data; - - bar_info_set(tab->bar_info, id->fd); -} - -static GList *info_tab_meta_list_cb(gpointer data) -{ - InfoData *id = data; - - return filelist_copy(id->list); -} - -static TabData *info_tab_meta_new(InfoData *id) -{ - TabData *td; - InfoTabMeta *tab; - GtkWidget *label; - - tab = g_new0(InfoTabMeta, 1); - - tab->bar_info = bar_info_new(NULL, TRUE, NULL); - bar_info_set_selection_func(tab->bar_info, info_tab_meta_list_cb, id); - bar_info_selection(tab->bar_info, g_list_length(id->list) - 1); - - gtk_container_set_border_width(GTK_CONTAINER(tab->bar_info), PREF_PAD_BORDER); - - label = gtk_label_new(_("Keywords")); - gtk_notebook_append_page(GTK_NOTEBOOK(id->notebook), tab->bar_info, label); - notebook_set_tab_reorderable(GTK_NOTEBOOK(id->notebook), tab->bar_info, TRUE); - gtk_widget_show(tab->bar_info); - - /* register */ - td = g_new0(TabData, 1); - td->func_free = info_tab_meta_free; - td->func_sync = info_tab_meta_sync; - td->func_image = NULL; - td->data = tab; - td->func_new = info_tab_meta_new; - td->child = tab->bar_info; - - return td; -} - -/* - *------------------------------------------------------------------- - * general tab - *------------------------------------------------------------------- - */ - -typedef struct _InfoTabGeneral InfoTabGeneral; -struct _InfoTabGeneral -{ - GtkWidget *label_file_time; - GtkWidget *label_file_size; - GtkWidget *label_dimensions; - GtkWidget *label_transparent; - GtkWidget *label_image_size; - GtkWidget *label_compression; - GtkWidget *label_mime_type; - - GtkWidget *label_user; - GtkWidget *label_group; - GtkWidget *label_perms; - - gint compression_done; - gint64 byte_size; -}; - -static void info_tab_general_image(InfoData *id, gpointer data) -{ - InfoTabGeneral *tab = data; - gchar *buf; - guint mem_size; - gint has_alpha; - GdkPixbuf *pixbuf; - gint width, height; - - if (id->image->unknown) return; - - image_get_image_size(id->image, &width, &height); - - buf = g_strdup_printf("%d x %d", width, height); - gtk_label_set_text(GTK_LABEL(tab->label_dimensions), buf); - g_free(buf); - - pixbuf = image_get_pixbuf(id->image); - if (pixbuf) - { - has_alpha = gdk_pixbuf_get_has_alpha(pixbuf); - } - else - { - has_alpha = FALSE; - } - gtk_label_set_text(GTK_LABEL(tab->label_transparent), has_alpha ? _("yes") : _("no")); - - mem_size = width * height * ((has_alpha) ? 4 : 3); - buf = text_from_size_abrev(mem_size); - gtk_label_set_text(GTK_LABEL(tab->label_image_size), buf); - g_free(buf); - - if (!tab->compression_done && mem_size > 0) - { - buf = g_strdup_printf("%.1f%%", (gdouble)tab->byte_size / mem_size * 100.0); - gtk_label_set_text(GTK_LABEL(tab->label_compression), buf); - g_free(buf); - - tab->compression_done = TRUE; - } - - buf = image_loader_get_format(id->image->il); - if (buf) - gtk_label_set_text(GTK_LABEL(tab->label_mime_type), buf); - g_free(buf); -} - -static gchar *mode_number(mode_t m) -{ - gint mb, mu, mg, mo; - - mb = mu = mg = mo = 0; - - if (m & S_ISUID) mb |= 4; - if (m & S_ISGID) mb |= 2; - if (m & S_ISVTX) mb |= 1; - - if (m & S_IRUSR) mu |= 4; - if (m & S_IWUSR) mu |= 2; - if (m & S_IXUSR) mu |= 1; - - if (m & S_IRGRP) mg |= 4; - if (m & S_IWGRP) mg |= 2; - if (m & S_IXGRP) mg |= 1; - - if (m & S_IROTH) mo |= 4; - if (m & S_IWOTH) mo |= 2; - if (m & S_IXOTH) mo |= 1; - - return g_strdup_printf("%d%d%d%d", mb, mu, mg, mo); -} - -static void info_tab_general_sync_perm(InfoTabGeneral *tab, InfoData *id) -{ - struct stat st; - - if (!stat_utf8(id->fd->path, &st)) - { - gtk_label_set_text(GTK_LABEL(tab->label_user), ""); - gtk_label_set_text(GTK_LABEL(tab->label_group), ""); - gtk_label_set_text(GTK_LABEL(tab->label_perms), ""); - } - else - { - struct passwd *user; - struct group *grp; - gchar pbuf[12]; - gchar *pmod; - gchar *buf; - - user = getpwuid(st.st_uid); - gtk_label_set_text(GTK_LABEL(tab->label_user), (user) ? user->pw_name : ""); - - grp = getgrgid(st.st_gid); - gtk_label_set_text(GTK_LABEL(tab->label_group), (grp) ? grp->gr_name : ""); - - pbuf[0] = (st.st_mode & S_IRUSR) ? 'r' : '-'; - pbuf[1] = (st.st_mode & S_IWUSR) ? 'w' : '-'; - pbuf[2] = (st.st_mode & S_IXUSR) ? 'x' : '-'; - pbuf[3] = (st.st_mode & S_IRGRP) ? 'r' : '-'; - pbuf[4] = (st.st_mode & S_IWGRP) ? 'w' : '-'; - pbuf[5] = (st.st_mode & S_IXGRP) ? 'x' : '-'; - pbuf[6] = (st.st_mode & S_IROTH) ? 'r' : '-'; - pbuf[7] = (st.st_mode & S_IWOTH) ? 'w' : '-'; - pbuf[8] = (st.st_mode & S_IXOTH) ? 'x' : '-'; - pbuf[9] = '\0'; - - pmod = mode_number(st.st_mode); - buf = g_strdup_printf("%s (%s)", pbuf, pmod); - gtk_label_set_text(GTK_LABEL(tab->label_perms), buf); - g_free(buf); - g_free(pmod); - } -} - -static void info_tab_general_sync(InfoData *id, gpointer data) -{ - InfoTabGeneral *tab = data; - gchar *buf; - - gtk_label_set_text(GTK_LABEL(tab->label_file_time), text_from_time(id->fd->date)); - - tab->byte_size = id->fd->size; - - buf = text_from_size(tab->byte_size); - gtk_label_set_text(GTK_LABEL(tab->label_file_size), buf); - g_free(buf); - - gtk_label_set_text(GTK_LABEL(tab->label_dimensions), ""); - gtk_label_set_text(GTK_LABEL(tab->label_transparent), ""); - gtk_label_set_text(GTK_LABEL(tab->label_image_size), ""); - - gtk_label_set_text(GTK_LABEL(tab->label_compression), ""); - gtk_label_set_text(GTK_LABEL(tab->label_mime_type), ""); - - info_tab_general_sync_perm(tab, id); - - tab->compression_done = FALSE; -} - -static void info_tab_general_free(gpointer data) -{ - InfoTabGeneral *tab = data; - - g_free(tab); -} - -static TabData *info_tab_general_new(InfoData *id) -{ - TabData *td; - InfoTabGeneral *tab; - GtkWidget *table; - GtkWidget *label; - - tab = g_new0(InfoTabGeneral, 1); - - table = pref_table_new(NULL, 2, 11, FALSE, FALSE); - gtk_container_set_border_width(GTK_CONTAINER(table), PREF_PAD_BORDER); - - tab->label_file_time = table_add_line(table, 0, 0, _("File date:"), NULL); - tab->label_file_size = table_add_line(table, 0, 1, _("File size:"), NULL); - - tab->label_dimensions = table_add_line(table, 0, 2, _("Dimensions:"), NULL); - tab->label_transparent = table_add_line(table, 0, 3, _("Transparent:"), NULL); - tab->label_image_size = table_add_line(table, 0, 4, _("Image size:"), NULL); - - tab->label_compression = table_add_line(table, 0, 5, _("Compress ratio:"), NULL); - tab->label_mime_type = table_add_line(table, 0, 6, _("File type:"), NULL); - - tab->label_user = table_add_line(table, 0, 7, _("Owner:"), NULL); - tab->label_group = table_add_line(table, 0, 8, _("Group:"), NULL); - tab->label_perms = table_add_line(table, 0, 9, "", NULL); - - label = gtk_label_new(_("General")); - gtk_notebook_append_page(GTK_NOTEBOOK(id->notebook), table, label); - notebook_set_tab_reorderable(GTK_NOTEBOOK(id->notebook), table, TRUE); - gtk_widget_show(table); - - /* register */ - td = g_new0(TabData, 1); - td->func_free = info_tab_general_free; - td->func_sync = info_tab_general_sync; - td->func_image = info_tab_general_image; - td->data = tab; - td->func_new = info_tab_general_new; - td->child = table; - - return td; -} - -/* - *------------------------------------------------------------------- - * tabs - *------------------------------------------------------------------- - */ - -static void info_tabs_sync(InfoData *id, gint image) -{ - GList *work; - - work = id->tab_list; - while (work) - { - TabData *td = work->data; - work = work->next; - - if (image) - { - if (td->func_image) td->func_image(id, td->data); - } - else - { - if (td->func_sync) td->func_sync(id, td->data); - } - } -} - -static void info_tabs_free(InfoData *id) -{ - GList *work; - - work = id->tab_list; - while (work) - { - TabData *td = work->data; - work = work->next; - - if (td->func_free) td->func_free(td->data); - g_free(td); - } - g_list_free(id->tab_list); - id->tab_list = NULL; -} - -static InfoTabsPos *info_tabs_pos_new(gpointer func, gint pos) -{ - InfoTabsPos *t = g_new0(InfoTabsPos, 1); - t->func = func; - t->pos = pos; - - return t; -} - -static void info_tabs_pos_list_append(gpointer func) -{ - static gint pos = 0; - - info_tabs_pos_list = g_list_append(info_tabs_pos_list, info_tabs_pos_new(func, pos++)); -} - -static gint compare_info_tabs_pos(gconstpointer a, gconstpointer b) -{ - InfoTabsPos *ta = (InfoTabsPos *) a; - InfoTabsPos *tb = (InfoTabsPos *) b; - - if (ta->pos > tb->pos) return 1; - return -1; -} - -static gpointer info_tab_new_funcs[] = { - info_tab_general_new, - info_tab_meta_new, - info_tab_exif_new, -}; - -gchar *info_tab_default_order(void) -{ - guint i; - static gchar str[G_N_ELEMENTS(info_tab_new_funcs) + 1]; - - for (i = 0; i < G_N_ELEMENTS(info_tab_new_funcs); i++) - str[i] = i + '1'; - str[i] = '\0'; - - return str; -} - -static void info_tab_get_order_string(gchar **dest) -{ - GList *work; - gchar str[G_N_ELEMENTS(info_tab_new_funcs) + 1]; - - g_assert(dest); - - if (!info_tabs_pos_list) - return; - - memset(str, 0, G_N_ELEMENTS(info_tab_new_funcs) + 1); - - work = info_tabs_pos_list; - while (work) - { - guint i; - InfoTabsPos *t = work->data; - work = work->next; - - for (i = 0; i < G_N_ELEMENTS(info_tab_new_funcs); i++) - { - if (t->func == info_tab_new_funcs[i]) - { - g_assert(t->pos < G_N_ELEMENTS(info_tab_new_funcs)); - str[t->pos] = i + '1'; - } - } - } - - if (strlen(str) != G_N_ELEMENTS(info_tab_new_funcs)) return; - - g_free(*dest); - *dest = g_strdup(str); -} - -static void info_tabs_init(InfoData *id) -{ - GList *work; - - if (!info_tabs_pos_list) - { - guint count = 0; - guint i; - gchar *order = options->properties.tabs_order; - - for (i = 0; i < strlen(order); i++) - { - guint n = order[i] - '1'; - - if (n >= G_N_ELEMENTS(info_tab_new_funcs)) break; - count++; - } - - if (count != G_N_ELEMENTS(info_tab_new_funcs)) - order = info_tab_default_order(); - - for (i = 0; i < strlen(order); i++) - { - guint n = order[i] - '1'; - - if (n >= G_N_ELEMENTS(info_tab_new_funcs)) continue; - if (g_list_find(info_tabs_pos_list, info_tab_new_funcs[n])) continue; - info_tabs_pos_list_append(info_tab_new_funcs[n]); - } - } - else - info_tabs_pos_list = g_list_sort(info_tabs_pos_list, compare_info_tabs_pos); - - info_tab_get_order_string(&options->properties.tabs_order); - - work = info_tabs_pos_list; - while (work) - { - InfoTabsPos *t = work->data; - work = work->next; - - id->tab_list = g_list_append(id->tab_list, t->func(id)); - } -} - -/* - *------------------------------------------------------------------- - * sync - *------------------------------------------------------------------- - */ - -static void info_window_sync(InfoData *id, FileData *fd) -{ - - if (!fd) return; - - gtk_entry_set_text(GTK_ENTRY(id->name_entry), fd->name); - - if (id->label_count) - { - gchar *buf; - buf = g_strdup_printf(_("Image %d of %d"), - g_list_index(id->list, (gpointer)fd) + 1, - g_list_length(id->list)); - gtk_label_set_text(GTK_LABEL(id->label_count), buf); - g_free(buf); - } - - info_tabs_sync(id, FALSE); - - id->updated = FALSE; - image_change_fd(id->image, fd, 0.0); -} - -static void info_notebook_reordered_cb(GtkNotebook *notebook, GtkWidget *child, guint page_num, gpointer data) -{ - InfoData *id = data; - GList *work; - - /* Save current tabs position to be able to restore them later. */ - work = id->tab_list; - while (work) - { - GList *tabpos; - TabData *td = work->data; - gint pos = gtk_notebook_page_num(GTK_NOTEBOOK(id->notebook), GTK_WIDGET(td->child)); - work = work->next; - - tabpos = info_tabs_pos_list; - while (tabpos) - { - InfoTabsPos *t = tabpos->data; - tabpos = tabpos->next; - - if (t->func == td->func_new) - { - t->pos = pos; - break; - } - } - } - - info_tabs_pos_list = g_list_sort(info_tabs_pos_list, compare_info_tabs_pos); - info_tab_get_order_string(&options->properties.tabs_order); -} - -/* - *------------------------------------------------------------------- - * drag n drop (dropping not supported!) - *------------------------------------------------------------------- - */ - -static void info_window_dnd_data_set(GtkWidget *widget, GdkDragContext *context, - GtkSelectionData *selection_data, guint info, - guint time, gpointer data) -{ - InfoData *id = data; - FileData *fd; - - fd = image_get_fd(id->image); - if (fd) - { - gchar *text; - gint len; - GList *list; - gint plain_text; - - switch (info) - { - case TARGET_URI_LIST: - plain_text = FALSE; - break; - case TARGET_TEXT_PLAIN: - default: - plain_text = TRUE; - break; - } - list = g_list_append(NULL, fd); - text = uri_text_from_filelist(list, &len, plain_text); - g_list_free(list); - - gtk_selection_data_set(selection_data, selection_data->target, - 8, (guchar *)text, len); - g_free(text); - } -} - -static void info_window_dnd_init(InfoData *id) -{ - ImageWindow *imd; - - imd = id->image; - - gtk_drag_source_set(imd->pr, GDK_BUTTON2_MASK, - dnd_file_drag_types, dnd_file_drag_types_count, - GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK); - g_signal_connect(G_OBJECT(imd->pr), "drag_data_get", - G_CALLBACK(info_window_dnd_data_set), id); - -#if 0 - gtk_drag_dest_set(imd->pr, - GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_DROP, - dnd_file_drop_types, dnd_file_drop_types_count, - GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK); - g_signal_connect(G_OBJECT(imd->pr), "drag_data_received", - G_CALLBACK(info_window_dnd_data_get), id); -#endif -} - -/* - *------------------------------------------------------------------- - * base window - *------------------------------------------------------------------- - */ - -static void info_window_image_update_cb(ImageWindow *imd, gpointer data) -{ - InfoData *id = data; - - /* only do this once after when loading a new image, - * for tabs that depend on image data (exif) - * Subsequent updates are ignored, as the image - * should not really changed if id->updated is TRUE. - */ - - if (id->updated) return; - if (imd->unknown) return; - - info_tabs_sync(id, TRUE); - id->updated = TRUE; -} - -static void info_window_back_cb(GtkWidget *widget, gpointer data) -{ - InfoData *id = data; - GList *work; - - work = g_list_find(id->list, (gpointer)id->fd); - if (!work || !work->prev) return; - - work = work->prev; - id->fd = work->data; - - info_window_sync(id, id->fd); - - gtk_widget_set_sensitive(id->button_back, (work->prev != NULL)); - gtk_widget_set_sensitive(id->button_next, TRUE); -} - -static void info_window_next_cb(GtkWidget *widget, gpointer data) -{ - InfoData *id = data; - GList *work; - - work = g_list_find(id->list, (gpointer)id->fd); - if (!work || !work->next) return; - - work = work->next; - id->fd = work->data; - - info_window_sync(id, id->fd); - - gtk_widget_set_sensitive(id->button_next, (work->next != NULL)); - gtk_widget_set_sensitive(id->button_back, TRUE); -} - -static void info_window_image_button_cb(ImageWindow *imd, GdkEventButton *event, gpointer data) -{ - if (event->button == MOUSE_BUTTON_LEFT) - { - info_window_next_cb(NULL, data); - } - else if (event->button == MOUSE_BUTTON_MIDDLE || event->button == MOUSE_BUTTON_RIGHT) - { - info_window_back_cb(NULL, data); - } -} - -static void info_window_image_scroll_cb(ImageWindow *imd, GdkEventScroll *event, gpointer data) -{ - if (event->direction == GDK_SCROLL_UP) - { - info_window_back_cb(NULL, data); - } - else if (event->direction == GDK_SCROLL_DOWN) - { - info_window_next_cb(NULL, data); - } -} - -static void info_window_close(InfoData *id) -{ - gdk_drawable_get_size(id->window->window, &options->layout.properties_window.w, &options->layout.properties_window.h); - options->layout.properties_window.w = MAX(options->layout.properties_window.w, DEF_PROPERTY_WIDTH); - options->layout.properties_window.h = MAX(options->layout.properties_window.h, DEF_PROPERTY_HEIGHT); - - gtk_widget_destroy(id->window); -} - -static void info_window_close_cb(GtkWidget *widget, gpointer data) -{ - InfoData *id = data; - - info_window_close(id); -} - -static gint info_window_delete_cb(GtkWidget *widget, GdkEventAny *event, gpointer data) -{ - InfoData *id = data; - - info_window_close(id); - return TRUE; -} - -static void info_window_destroy_cb(GtkWidget *widget, gpointer data) -{ - InfoData *id = data; - - info_tabs_free(id); - filelist_free(id->list); - g_free(id); -} - -void info_window_new(FileData *fd, GList *list, GtkWidget *parent) -{ - InfoData *id; - GtkWidget *main_vbox; - GtkWidget *paned; - GtkWidget *hbox; - GtkWidget *button; - GtkWidget *label; - GdkGeometry geometry; - static gboolean run_once = FALSE; - - if (!fd && !list) return; - - run_once = TRUE; - - if (!list) - { - list = g_list_append(NULL, file_data_ref(fd)); - } - - id = g_new0(InfoData, 1); - - id->list = list; - id->fd = (FileData *)id->list->data; - id->updated = FALSE; - - id->window = window_new(GTK_WINDOW_TOPLEVEL, "properties", NULL, NULL, _("Image properties")); - gtk_window_set_type_hint(GTK_WINDOW(id->window), GDK_WINDOW_TYPE_HINT_DIALOG); - id->parent = parent; - if (GTK_IS_WINDOW(id->parent)) { - gtk_window_set_keep_above(GTK_WINDOW(id->window), TRUE); -#if 0 - /* work, but behavior is not that great */ - gtk_window_set_transient_for(GTK_WINDOW(id->window), GTK_WINDOW(id->parent)); -#endif - } - gtk_window_set_resizable(GTK_WINDOW(id->window), TRUE); - - geometry.min_width = DEFAULT_MINIMAL_WINDOW_SIZE; - geometry.min_height = DEFAULT_MINIMAL_WINDOW_SIZE; - geometry.base_width = DEF_PROPERTY_WIDTH; - geometry.base_height = DEF_PROPERTY_HEIGHT; - gtk_window_set_geometry_hints(GTK_WINDOW(id->window), NULL, &geometry, - GDK_HINT_MIN_SIZE | GDK_HINT_BASE_SIZE); - - if (options->layout.save_window_positions || run_once) - gtk_window_set_default_size(GTK_WINDOW(id->window), options->layout.properties_window.w, options->layout.properties_window.h); - else - gtk_window_set_default_size(GTK_WINDOW(id->window), DEF_PROPERTY_WIDTH, DEF_PROPERTY_HEIGHT); - - gtk_container_set_border_width(GTK_CONTAINER(id->window), PREF_PAD_BORDER); - - g_signal_connect(G_OBJECT(id->window), "delete_event", - G_CALLBACK(info_window_delete_cb), id); - g_signal_connect(G_OBJECT(id->window), "destroy", - G_CALLBACK(info_window_destroy_cb), id); - - paned = gtk_hpaned_new(); - gtk_container_add(GTK_CONTAINER(id->window), paned); - gtk_widget_show(paned); - - id->image = image_new(FALSE); - image_set_update_func(id->image, info_window_image_update_cb, id); - - image_set_button_func(id->image, info_window_image_button_cb, id); - image_set_scroll_func(id->image, info_window_image_scroll_cb, id); - - gtk_widget_set_size_request(id->image->widget, IMAGE_SIZE_W, IMAGE_SIZE_H); - gtk_paned_pack1(GTK_PANED(paned), id->image->widget, FALSE, TRUE); - gtk_widget_show(id->image->widget); - - main_vbox = gtk_vbox_new(FALSE, 0); - gtk_paned_pack2(GTK_PANED(paned), main_vbox, TRUE, TRUE); - gtk_widget_show(main_vbox); - - hbox = pref_box_new(main_vbox, FALSE, GTK_ORIENTATION_HORIZONTAL, PREF_PAD_SPACE); - label = pref_label_new(hbox, _("Filename:")); - pref_label_bold(label, TRUE, FALSE); - - id->name_entry = gtk_entry_new(); - gtk_editable_set_editable(GTK_EDITABLE(id->name_entry), FALSE); - gtk_box_pack_start(GTK_BOX(hbox), id->name_entry, TRUE, TRUE, 0); - gtk_widget_show(id->name_entry); - - id->notebook = gtk_notebook_new(); - gtk_notebook_set_tab_pos(GTK_NOTEBOOK(id->notebook), GTK_POS_TOP); - gtk_box_pack_start(GTK_BOX(main_vbox), id->notebook, TRUE, TRUE, 5); - g_signal_connect(G_OBJECT(id->notebook), "page-reordered", - G_CALLBACK(info_notebook_reordered_cb), id); - - gtk_widget_show(id->notebook); - - pref_spacer(main_vbox, PREF_PAD_GAP); - - hbox = pref_box_new(main_vbox, FALSE, GTK_ORIENTATION_HORIZONTAL, PREF_PAD_GAP); - - id->button_back = pref_button_new(hbox, GTK_STOCK_GO_BACK, NULL, TRUE, - G_CALLBACK(info_window_back_cb), id); - gtk_widget_set_sensitive(id->button_back, FALSE); - - id->button_next = pref_button_new(hbox, GTK_STOCK_GO_FORWARD, NULL, TRUE, - G_CALLBACK(info_window_next_cb), id); - gtk_widget_set_sensitive(id->button_next, (id->list->next != NULL)); - - if (id->list->next) - { - id->label_count = pref_label_new(hbox, ""); - } - - button = pref_button_new(NULL, GTK_STOCK_CLOSE, NULL, FALSE, - G_CALLBACK(info_window_close_cb), id); - gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0); - gtk_widget_show(button); - - /* set up tabs */ - - info_tabs_init(id); - - /* fill it */ - - info_window_sync(id, id->fd); - - /* finish */ - - info_window_dnd_init(id); - - gtk_widget_show(id->window); -} -/* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */ diff --git a/src/info.h b/src/info.h deleted file mode 100644 index 2a14a4e8..00000000 --- a/src/info.h +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Geeqie - * (C) 2004 John Ellis - * Copyright (C) 2008 - 2009 The Geeqie Team - * - * Author: John Ellis - * - * This software is released under the GNU General Public License (GNU GPL). - * Please read the included file COPYING for more information. - * This software comes with no warranty of any kind, use at your own risk! - */ - - -#ifndef INFO_H -#define INFO_H - -#define DEF_PROPERTY_WIDTH 600 -#define DEF_PROPERTY_HEIGHT 400 - - -typedef struct _InfoData InfoData; -struct _InfoData -{ - GtkWidget *window; - GtkWidget *parent; - - ImageWindow *image; - - GList *list; - - FileData *fd; - - GtkWidget *notebook; - GtkWidget *name_entry; - - GtkWidget *button_next; - GtkWidget *button_back; - GtkWidget *label_count; - - GList *tab_list; - - gint updated; -}; - - -void info_window_new(FileData *fd, GList *list, GtkWidget *parent); - -GtkWidget *table_add_line(GtkWidget *table, gint x, gint y, - const gchar *description, const gchar *text); - -gchar *info_tab_default_order(void); - -#endif -/* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */ diff --git a/src/layout_image.c b/src/layout_image.c index 9bd1a444..f9cde1c3 100644 --- a/src/layout_image.c +++ b/src/layout_image.c @@ -21,7 +21,6 @@ #include "image.h" #include "image-overlay.h" #include "img-view.h" -#include "info.h" #include "layout.h" #include "layout_util.h" #include "menu.h" @@ -338,13 +337,6 @@ static void li_pop_menu_alter_cb(GtkWidget *widget, gpointer data) image_alter(lw->image, type); } -static void li_pop_menu_info_cb(GtkWidget *widget, gpointer data) -{ - LayoutWindow *lw = data; - - info_window_new(layout_image_get_fd(lw), NULL, lw->full_screen ? lw->full_screen->window : NULL); -} - static void li_pop_menu_new_cb(GtkWidget *widget, gpointer data) { LayoutWindow *lw = data; @@ -494,9 +486,6 @@ static GtkWidget *layout_image_pop_menu(LayoutWindow *lw) item = submenu_add_alter(menu, G_CALLBACK(li_pop_menu_alter_cb), lw); - item = menu_item_add_stock(menu, _("_Properties"), GTK_STOCK_PROPERTIES, G_CALLBACK(li_pop_menu_info_cb), lw); - if (!path) gtk_widget_set_sensitive(item, FALSE); - item = menu_item_add_stock(menu, _("View in _new window"), GTK_STOCK_NEW, G_CALLBACK(li_pop_menu_new_cb), lw); if (!path || fullscreen) gtk_widget_set_sensitive(item, FALSE); diff --git a/src/layout_util.c b/src/layout_util.c index b112f033..72caedfb 100644 --- a/src/layout_util.c +++ b/src/layout_util.c @@ -27,7 +27,6 @@ #include "history_list.h" #include "image-overlay.h" #include "img-view.h" -#include "info.h" #include "layout_image.h" #include "logwindow.h" #include "misc.h" @@ -351,19 +350,6 @@ static void layout_menu_alter_none_cb(GtkAction *action, gpointer data) layout_image_alter(lw, ALTER_NONE); } -static void layout_menu_info_cb(GtkAction *action, gpointer data) -{ - LayoutWindow *lw = data; - GList *list; - FileData *fd = NULL; - - list = layout_selection_list(lw); - if (!list) fd = layout_image_get_fd(lw); - - info_window_new(fd, list, NULL); -} - - static void layout_menu_config_cb(GtkAction *action, gpointer data) { LayoutWindow *lw = data; @@ -1155,7 +1141,6 @@ static GtkActionEntry menu_entries[] = { { "Grayscale", NULL, N_("Toggle _grayscale"),"G", NULL, CB(layout_menu_alter_desaturate_cb) }, { "AlterNone", NULL, N_("_Original state"), "O", NULL, CB(layout_menu_alter_none_cb) }, - { "Properties",GTK_STOCK_PROPERTIES, N_("_Properties"), "P", NULL, CB(layout_menu_info_cb) }, { "SelectAll", NULL, N_("Select _all"), "A", NULL, CB(layout_menu_select_all_cb) }, { "SelectNone", NULL, N_("Select _none"), "A",NULL, CB(layout_menu_unselect_all_cb) }, { "SelectInvert", NULL, N_("_Invert Selection"), "I", NULL, CB(layout_menu_invert_selection_cb) }, @@ -1309,7 +1294,6 @@ static const gchar *menu_ui_description = " " " " " " -" " " " " " " " diff --git a/src/options.c b/src/options.c index 6952872d..7170a003 100644 --- a/src/options.c +++ b/src/options.c @@ -17,7 +17,6 @@ #include "filefilter.h" #include "histogram.h" /* HCHAN_RGB */ #include "image-overlay.h" /* OSD_SHOW_NOTHING */ -#include "info.h" #include "layout.h" #include "layout_image.h" #include "rcfile.h" @@ -106,8 +105,6 @@ ConfOptions *init_options(ConfOptions *options) options->layout.main_window.x = 0; options->layout.main_window.y = 0; options->layout.order = NULL; - options->layout.properties_window.w = DEF_PROPERTY_WIDTH; - options->layout.properties_window.h = DEF_PROPERTY_HEIGHT; options->layout.save_window_positions = TRUE; options->layout.show_directory_date = FALSE; options->layout.show_marks = FALSE; @@ -197,7 +194,6 @@ void setup_default_options(ConfOptions *options) set_default_image_overlay_template_string(&options->image_overlay.common.template_string); options->sidecar.ext = g_strdup(".jpg;%raw;.xmp"); options->layout.order = g_strdup("123"); - options->properties.tabs_order = g_strdup(info_tab_default_order()); options->shell.path = g_strdup(GQ_DEFAULT_SHELL_PATH); options->shell.options = g_strdup(GQ_DEFAULT_SHELL_OPTIONS); diff --git a/src/pan-view.c b/src/pan-view.c index 15fba2f9..a64726da 100644 --- a/src/pan-view.c +++ b/src/pan-view.c @@ -22,7 +22,6 @@ #include "fullscreen.h" #include "history_list.h" #include "img-view.h" -#include "info.h" #include "menu.h" #include "misc.h" #include "pan-types.h" @@ -1315,9 +1314,6 @@ static gint pan_window_key_press_cb(GtkWidget *widget, GdkEventKey *event, gpoin case 'D': case 'd': if (fd) file_util_delete(fd, NULL, GTK_WIDGET(pr)); break; - case 'P': case 'p': - if (fd) info_window_new(fd, NULL, NULL); - break; case 'F': case 'f': pan_search_toggle_visible(pw, TRUE); break; @@ -2677,15 +2673,6 @@ static void pan_edit_cb(GtkWidget *widget, gpointer data) } } -static void pan_info_cb(GtkWidget *widget, gpointer data) -{ - PanWindow *pw = data; - FileData *fd; - - fd = pan_menu_click_fd(pw); - if (fd) info_window_new(fd, NULL, NULL); -} - static void pan_zoom_in_cb(GtkWidget *widget, gpointer data) { PanWindow *pw = data; @@ -2812,9 +2799,6 @@ static GtkWidget *pan_popup_menu(PanWindow *pw) submenu_add_edit(menu, &item, G_CALLBACK(pan_edit_cb), pw); gtk_widget_set_sensitive(item, active); - menu_item_add_stock_sensitive(menu, _("_Properties"), GTK_STOCK_PROPERTIES, active, - G_CALLBACK(pan_info_cb), pw); - menu_item_add_stock_sensitive(menu, _("View in _new window"), GTK_STOCK_NEW, active, G_CALLBACK(pan_new_window_cb), pw); diff --git a/src/search.c b/src/search.c index db7ed896..7291771d 100644 --- a/src/search.c +++ b/src/search.c @@ -14,7 +14,6 @@ #include "main.h" #include "search.h" -#include "bar_info.h" #include "cache.h" #include "collect.h" #include "collect-table.h" @@ -24,7 +23,6 @@ #include "filedata.h" #include "image-load.h" #include "img-view.h" -#include "info.h" #include "layout_image.h" #include "menu.h" #include "metadata.h" @@ -41,6 +39,7 @@ #include "uri_utils.h" #include "utilops.h" #include "window.h" +#include "bar_keywords.h" #include /* for keyboard values */ @@ -916,13 +915,6 @@ static void sr_menu_edit_cb(GtkWidget *widget, gpointer data) search_result_edit_selected(sd, key); } -static void sr_menu_info_cb(GtkWidget *widget, gpointer data) -{ - SearchData *sd = data; - - info_window_new(NULL, search_result_selection_list(sd), NULL); -} - static void sr_menu_collection_cb(GtkWidget *widget, gpointer data) { SearchData *sd = data; @@ -1005,8 +997,6 @@ static GtkWidget *search_result_menu(SearchData *sd, gint on_row, gint empty) menu_item_add_divider(menu); submenu_add_edit(menu, &item, G_CALLBACK(sr_menu_edit_cb), sd); if (!on_row) gtk_widget_set_sensitive(item, FALSE); - menu_item_add_stock_sensitive(menu, _("_Properties"), GTK_STOCK_PROPERTIES, on_row, - G_CALLBACK(sr_menu_info_cb), sd); menu_item_add_stock_sensitive(menu, _("Add to new collection"), GTK_STOCK_INDEX, on_row, G_CALLBACK(sr_menu_collection_cb), sd); menu_item_add_stock_sensitive(menu, _("Print..."), GTK_STOCK_PRINT, on_row, @@ -1261,9 +1251,6 @@ static gint search_result_keypress_cb(GtkWidget *widget, GdkEventKey *event, gpo case 'D': case 'd': file_util_delete(NULL, search_result_selection_list(sd), widget); break; - case 'P': case 'p': - info_window_new(NULL, search_result_selection_list(sd), NULL); - break; case 'A': case 'a': if (event->state & GDK_SHIFT_MASK) { diff --git a/src/view_file.c b/src/view_file.c index 3ccd07e4..51310cb5 100644 --- a/src/view_file.c +++ b/src/view_file.c @@ -13,7 +13,6 @@ #include "view_file.h" #include "editors.h" -#include "info.h" #include "layout.h" #include "menu.h" #include "ui_menu.h" @@ -311,13 +310,6 @@ static void vf_pop_menu_edit_cb(GtkWidget *widget, gpointer data) filelist_free(list); } -static void vf_pop_menu_info_cb(GtkWidget *widget, gpointer data) -{ - ViewFile *vf = data; - - info_window_new(NULL, vf_pop_menu_file_list(vf), NULL); -} - static void vf_pop_menu_view_cb(GtkWidget *widget, gpointer data) { ViewFile *vf = data; @@ -558,8 +550,6 @@ GtkWidget *vf_pop_menu(ViewFile *vf) submenu_add_edit(menu, &item, G_CALLBACK(vf_pop_menu_edit_cb), vf); gtk_widget_set_sensitive(item, active); - menu_item_add_stock_sensitive(menu, _("_Properties"), GTK_STOCK_PROPERTIES, active, - G_CALLBACK(vf_pop_menu_info_cb), vf); menu_item_add_stock_sensitive(menu, _("View in _new window"), GTK_STOCK_NEW, active, G_CALLBACK(vf_pop_menu_view_cb), vf); diff --git a/src/view_file_icon.c b/src/view_file_icon.c index 4a51c23d..40d39e26 100644 --- a/src/view_file_icon.c +++ b/src/view_file_icon.c @@ -13,7 +13,6 @@ #include "main.h" #include "view_file_icon.h" -#include "bar_info.h" #include "bar.h" #include "cellrenderericon.h" #include "collect.h" @@ -22,7 +21,6 @@ #include "dnd.h" #include "editors.h" #include "img-view.h" -#include "info.h" #include "filedata.h" #include "layout.h" #include "layout_image.h" diff --git a/src/view_file_list.c b/src/view_file_list.c index cb94a1bc..2ec33232 100644 --- a/src/view_file_list.c +++ b/src/view_file_list.c @@ -13,13 +13,11 @@ #include "main.h" #include "view_file_list.h" -#include "bar_info.h" #include "bar.h" #include "cache_maint.h" #include "dnd.h" #include "editors.h" #include "img-view.h" -#include "info.h" #include "layout.h" #include "layout_image.h" #include "menu.h" -- 2.20.1