/*
* Geeqie
* (C) 2006 John Ellis
- * Copyright (C) 2008 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
*
* Author: John Ellis
*
#include "dnd.h"
#include "editors.h"
#include "exif.h"
+#include "metadata.h"
#include "fullscreen.h"
+#include "history_list.h"
#include "img-view.h"
-#include "info.h"
#include "menu.h"
+#include "misc.h"
#include "pan-types.h"
#include "thumb.h"
-#include "utilops.h"
-#include "ui_bookmark.h"
#include "ui_fileops.h"
#include "ui_menu.h"
#include "ui_tabcomp.h"
#include "ui_utildlg.h"
+#include "uri_utils.h"
+#include "utilops.h"
#include "window.h"
#include <gdk/gdkkeysyms.h> /* for keyboard values */
static void pan_layout_update_idle(PanWindow *pw);
-static void pan_fullscreen_toggle(PanWindow *pw, gint force_off);
+static void pan_fullscreen_toggle(PanWindow *pw, gboolean force_off);
-static void pan_search_toggle_visible(PanWindow *pw, gint enable);
+static void pan_search_toggle_visible(PanWindow *pw, gboolean enable);
static void pan_search_activate(PanWindow *pw);
static void pan_window_close(PanWindow *pw);
*-----------------------------------------------------------------------------
*/
-static gint pan_queue_step(PanWindow *pw);
+static gboolean pan_queue_step(PanWindow *pw);
static void pan_queue_thumb_done_cb(ThumbLoader *tl, gpointer data)
pi->queued = FALSE;
if (pi->pixbuf) g_object_unref(pi->pixbuf);
- pi->pixbuf = thumb_loader_get_pixbuf(tl, TRUE);
+ pi->pixbuf = thumb_loader_get_pixbuf(tl);
rc = pi->refcount;
image_area_changed(pw->imd, pi->x, pi->y, pi->width, pi->height);
}
#endif
-static gint pan_queue_step(PanWindow *pw)
+static gboolean pan_queue_step(PanWindow *pw)
{
PanItem *pi;
#if 0
image_loader_set_area_ready_func(pw->il, pan_queue_image_area_cb, pw);
#endif
- image_loader_set_error_func(pw->il, pan_queue_image_done_cb, pw);
+ g_signal_connect(G_OBJECT(pw->il), "error", (GCallback)pan_queue_image_done_cb, pw);
+ g_signal_connect(G_OBJECT(pw->il), "done", (GCallback)pan_queue_image_done_cb, pw);
- if (image_loader_start(pw->il, pan_queue_image_done_cb, pw)) return FALSE;
+ if (image_loader_start(pw->il)) return FALSE;
image_loader_free(pw->il);
pw->il = NULL;
pan_queue_thumb_done_cb,
NULL, pw);
- if (thumb_loader_start(pw->tl, pi->fd->path)) return FALSE;
+ if (thumb_loader_start(pw->tl, pi->fd)) return FALSE;
thumb_loader_free(pw->tl);
pw->tl = NULL;
*-----------------------------------------------------------------------------
*/
-static gint pan_window_request_tile_cb(PixbufRenderer *pr, gint x, gint y,
- gint width, gint height, GdkPixbuf *pixbuf, gpointer data)
+static gboolean pan_window_request_tile_cb(PixbufRenderer *pr, gint x, gint y,
+ gint width, gint height, GdkPixbuf *pixbuf, gpointer data)
{
PanWindow *pw = data;
GList *list;
while (work)
{
PanItem *pi;
- gint queue = FALSE;
+ gboolean queue = FALSE;
pi = work->data;
work = work->next;
*-----------------------------------------------------------------------------
*/
-static gint pan_cache_sort_file_cb(void *a, void *b)
+static gint pan_cache_sort_file_cb(gpointer a, gpointer b)
{
PanCacheData *pca = a;
PanCacheData *pcb = b;
return filelist_sort_compare_filedata(pca->fd, pcb->fd);
}
-GList *pan_cache_sort(GList *list, SortType method, gint ascend)
+GList *pan_cache_sort(GList *list, SortType method, gboolean ascend)
{
return filelist_sort_full(list, method, ascend, (GCompareFunc) pan_cache_sort_file_cb);
}
pw->cache_cl = NULL;
}
-static void pan_cache_fill(PanWindow *pw, const gchar *path)
+static void pan_cache_fill(PanWindow *pw, FileData *dir_fd)
{
GList *list;
pan_cache_free(pw);
- list = pan_list_tree(path, SORT_NAME, TRUE, pw->ignore_symlinks);
+ list = pan_list_tree(dir_fd, SORT_NAME, TRUE, pw->ignore_symlinks);
pw->cache_todo = g_list_reverse(list);
pw->cache_total = g_list_length(pw->cache_todo);
pan_layout_update_idle(pw);
}
-static gint pan_cache_step(PanWindow *pw)
+static gboolean pan_cache_step(PanWindow *pw)
{
FileData *fd;
PanCacheData *pc;
mode_t mode = 0755;
base = cache_get_location(CACHE_TYPE_SIM, fd->path, FALSE, &mode);
- if (cache_ensure_dir_exists(base, mode))
+ if (recursive_mkdir_if_not_exists(base, mode))
{
g_free(cd->path);
cd->path = cache_get_location(CACHE_TYPE_SIM, fd->path, TRUE, NULL);
pg->y = j * ch / 2;
pg->w = cw;
pg->h = ch;
- pg->list = NULL;
pw->list_grid = g_list_prepend(pw->list_grid, pg);
*-----------------------------------------------------------------------------
*/
-static void pan_layout_compute(PanWindow *pw, const gchar *path,
+static void pan_layout_compute(PanWindow *pw, FileData *dir_fd,
gint *width, gint *height,
gint *scroll_x, gint *scroll_y)
{
{
case PAN_LAYOUT_GRID:
default:
- pan_grid_compute(pw, path, width, height);
+ pan_grid_compute(pw, dir_fd, width, height);
break;
case PAN_LAYOUT_FOLDERS_LINEAR:
- pan_folder_tree_compute(pw, path, width, height);
+ pan_folder_tree_compute(pw, dir_fd, width, height);
break;
case PAN_LAYOUT_FOLDERS_FLOWER:
- pan_flower_compute(pw, path, width, height, scroll_x, scroll_y);
+ pan_flower_compute(pw, dir_fd, width, height, scroll_x, scroll_y);
break;
case PAN_LAYOUT_CALENDAR:
- pan_calendar_compute(pw, path, width, height);
+ pan_calendar_compute(pw, dir_fd, width, height);
break;
case PAN_LAYOUT_TIMELINE:
- pan_timeline_compute(pw, path, width, height);
+ pan_timeline_compute(pw, dir_fd, width, height);
break;
}
{
if (!pw->cache_list && !pw->cache_todo)
{
- pan_cache_fill(pw, pw->path);
+ pan_cache_fill(pw, pw->dir_fd);
if (pw->cache_todo)
{
pan_window_message(pw, _("Reading image data..."));
if (pan_cache_step(pw)) return TRUE;
- pw->idle_id = -1;
+ pw->idle_id = 0;
return FALSE;
}
}
- pan_layout_compute(pw, pw->path, &width, &height, &scroll_x, &scroll_y);
+ pan_layout_compute(pw, pw->dir_fd, &width, &height, &scroll_x, &scroll_y);
pan_window_zoom_limit(pw);
pan_window_message(pw, NULL);
- pw->idle_id = -1;
+ pw->idle_id = 0;
return FALSE;
}
static void pan_layout_update_idle(PanWindow *pw)
{
- if (pw->idle_id == -1)
+ if (!pw->idle_id)
{
pw->idle_id = g_idle_add(pan_layout_update_idle_cb, pw);
}
pan_layout_update_idle(pw);
}
-static void pan_layout_set_path(PanWindow *pw, const gchar *path)
+static void pan_layout_set_fd(PanWindow *pw, FileData *dir_fd)
{
- if (!path) return;
+ if (!dir_fd) return;
- if (strcmp(path, G_DIR_SEPARATOR_S) == 0)
+ if (strcmp(dir_fd->path, G_DIR_SEPARATOR_S) == 0)
{
- pan_warning_folder(path, pw->window);
+ pan_warning_folder(dir_fd->path, pw->window);
return;
}
- g_free(pw->path);
- pw->path = g_strdup(path);
+ file_data_unref(pw->dir_fd);
+ pw->dir_fd = file_data_ref(dir_fd);
pan_layout_update(pw);
}
{
PanWindow *pw = data;
- gdk_window_get_origin(pw->imd->pr->window, x, y);
+ gdk_window_get_origin(gtk_widget_get_window(pw->imd->pr), x, y);
popup_menu_position_clamp(menu, x, y, 0);
}
-static gint pan_window_key_press_cb(GtkWidget *widget, GdkEventKey *event, gpointer data)
+static gboolean pan_window_key_press_cb(GtkWidget *widget, GdkEventKey *event, gpointer data)
{
PanWindow *pw = data;
PixbufRenderer *pr;
FileData *fd;
- gint stop_signal = FALSE;
+ gboolean stop_signal = FALSE;
GtkWidget *menu;
+ GtkWidget *imd_widget;
gint x = 0;
gint y = 0;
gint focused;
pr = PIXBUF_RENDERER(pw->imd->pr);
fd = pan_menu_click_fd(pw);
-
- focused = (pw->fs || GTK_WIDGET_HAS_FOCUS(GTK_WIDGET(pw->imd->widget)));
- on_entry = (GTK_WIDGET_HAS_FOCUS(pw->path_entry) ||
- GTK_WIDGET_HAS_FOCUS(pw->search_entry));
+
+ imd_widget = gtk_container_get_focus_child(GTK_CONTAINER(pw->imd->widget));
+ focused = (pw->fs || imd_widget && gtk_widget_has_focus(imd_widget));
+ on_entry = (gtk_widget_has_focus(pw->path_entry) ||
+ gtk_widget_has_focus(pw->search_entry));
if (focused)
{
stop_signal = TRUE;
switch (event->keyval)
{
- case GDK_Left: case GDK_KP_Left:
+ case GDK_KEY_Left: case GDK_KEY_KP_Left:
x -= 1;
break;
- case GDK_Right: case GDK_KP_Right:
+ case GDK_KEY_Right: case GDK_KEY_KP_Right:
x += 1;
break;
- case GDK_Up: case GDK_KP_Up:
+ case GDK_KEY_Up: case GDK_KEY_KP_Up:
y -= 1;
break;
- case GDK_Down: case GDK_KP_Down:
+ case GDK_KEY_Down: case GDK_KEY_KP_Down:
y += 1;
break;
- case GDK_Page_Up: case GDK_KP_Page_Up:
+ case GDK_KEY_Page_Up: case GDK_KEY_KP_Page_Up:
pixbuf_renderer_scroll(pr, 0, 0 - pr->vis_height / 2);
break;
- case GDK_Page_Down: case GDK_KP_Page_Down:
+ case GDK_KEY_Page_Down: case GDK_KEY_KP_Page_Down:
pixbuf_renderer_scroll(pr, 0, pr->vis_height / 2);
break;
- case GDK_Home: case GDK_KP_Home:
+ case GDK_KEY_Home: case GDK_KEY_KP_Home:
pixbuf_renderer_scroll(pr, 0 - pr->vis_width / 2, 0);
break;
- case GDK_End: case GDK_KP_End:
+ case GDK_KEY_End: case GDK_KEY_KP_End:
pixbuf_renderer_scroll(pr, pr->vis_width / 2, 0);
break;
default:
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;
stop_signal = FALSE;
break;
}
-
+#if 0
if (n != -1 && fd)
{
if (!editor_window_flag_set(n))
}
file_util_start_editor_from_file(n, fd, GTK_WIDGET(pr));
}
+#endif
}
else
{
stop_signal = TRUE;
switch (event->keyval)
{
- case GDK_Escape:
+ case GDK_KEY_Escape:
if (pw->fs)
{
pan_fullscreen_toggle(pw, TRUE);
stop_signal = TRUE;
switch (event->keyval)
{
- case '+': case '=': case GDK_KP_Add:
+ case '+': case '=': case GDK_KEY_KP_Add:
pixbuf_renderer_zoom_adjust(pr, ZOOM_INCREMENT);
break;
- case '-': case GDK_KP_Subtract:
+ case '-': case GDK_KEY_KP_Subtract:
pixbuf_renderer_zoom_adjust(pr, -ZOOM_INCREMENT);
break;
- case 'Z': case 'z': case GDK_KP_Divide: case '1':
+ case 'Z': case 'z': case GDK_KEY_KP_Divide: case '1':
pixbuf_renderer_zoom_set(pr, 1.0);
break;
case '2':
break;
case 'F': case 'f':
case 'V': case 'v':
- case GDK_F11:
+ case GDK_KEY_F11:
pan_fullscreen_toggle(pw, FALSE);
break;
case 'I': case 'i':
pan_overlay_toggle(pw);
#endif
break;
- case GDK_Delete: case GDK_KP_Delete:
+ case GDK_KEY_Delete: case GDK_KEY_KP_Delete:
break;
- case GDK_Menu:
- case GDK_F10:
+ case GDK_KEY_Menu:
+ case GDK_KEY_F10:
menu = pan_popup_menu(pw);
gtk_menu_popup(GTK_MENU(menu), NULL, NULL,
pan_window_menu_pos_cb, pw, 0, GDK_CURRENT_TIME);
static void pan_info_add_exif(PanTextAlignment *ta, FileData *fd)
{
- ExifData *exif;
- GList *work;
- gint i;
if (!fd) return;
- exif = exif_read_fd(fd);
- if (!exif) return;
pan_text_alignment_add(ta, NULL, NULL);
+#if 0
+ {
+ GList *work;
+ gint i;
+
for (i = 0; ExifUIList[i].key; i++)
{
gchar *label;
+ gchar *desc;
gchar *text;
- gchar *utf8_text;
if (ExifUIList[i].current == EXIF_UI_OFF) continue;
- text = exif_get_data_as_text(exif, ExifUIList[i].key);
+ text = metadata_read_string(fd, ExifUIList[i].key, METADATA_FORMATTED);
+
if (ExifUIList[i].current == EXIF_UI_IFSET && (!text || !*text))
{
g_free(text);
continue;
}
- label = g_strdup_printf("%s:", exif_get_description_by_key(ExifUIList[i].key));
- utf8_text = utf8_validate_or_convert(text);
- g_free(text);
- pan_text_alignment_add(ta, label, utf8_text);
+ desc = exif_get_description_by_key(ExifUIList[i].key);
+ label = g_strdup_printf("%s:", desc);
+ g_free(desc);
+ pan_text_alignment_add(ta, label, text);
g_free(label);
- g_free(utf8_text);
+ g_free(text);
}
work = g_list_last(history_list_get_by_key("exif_extras"));
name = work->data;
work = work->prev;
- text = exif_get_data_as_text(exif, name);
+ text = metadata_read_string(fd, name, METADATA_FORMATTED);
if (text)
{
gchar *label = g_strdup_printf("%s:", name);
- gchar *utf8_text = utf8_validate_or_convert(text);
-
- g_free(text);
- pan_text_alignment_add(ta, label, utf8_text);
+ pan_text_alignment_add(ta, label, text);
g_free(label);
- g_free(utf8_text);
+ g_free(text);
}
}
-
- exif_free(exif);
+ }
+#endif
}
+
static void pan_info_update(PanWindow *pw, PanItem *pi)
{
PanTextAlignment *ta;
PAN_POPUP_BORDER_COLOR, PAN_POPUP_ALPHA);
pan_item_set_key(pbox, "info");
- p = pan_item_image_new(pw, file_data_new_simple(pi->fd->path),
+ p = pan_item_image_new(pw, file_data_new_group(pi->fd->path),
pbox->x + PREF_PAD_BORDER, pbox->y + PREF_PAD_BORDER, iw, ih);
pan_item_set_key(p, "info");
pan_item_size_by_item(pbox, p, PREF_PAD_BORDER);
return TRUE;
}
-static gint pan_search_by_partial(PanWindow *pw, const gchar *text)
+static gboolean pan_search_by_partial(PanWindow *pw, const gchar *text)
{
PanItem *pi;
GList *list;
return TRUE;
}
-static gint valid_date_separator(gchar c)
+static gboolean valid_date_separator(gchar c)
{
return (c == '/' || c == '-' || c == ' ' || c == '.' || c == ',');
}
return g_list_reverse(list);
}
-static gint pan_search_by_date(PanWindow *pw, const gchar *text)
+static gboolean pan_search_by_date(PanWindow *pw, const gchar *text)
{
PanItem *pi = NULL;
GList *list = NULL;
static void pan_search_toggle_cb(GtkWidget *button, gpointer data)
{
PanWindow *pw = data;
- gint visible;
+ gboolean visible;
- visible = GTK_WIDGET_VISIBLE(pw->search_box);
+ visible = gtk_widget_get_visible(pw->search_box);
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)) == visible) return;
if (visible)
}
}
-static void pan_search_toggle_visible(PanWindow *pw, gint enable)
+static void pan_search_toggle_visible(PanWindow *pw, gboolean enable)
{
if (pw->fs) return;
if (enable)
{
- if (GTK_WIDGET_VISIBLE(pw->search_box))
+ if (gtk_widget_get_visible(pw->search_box))
{
gtk_widget_grab_focus(pw->search_entry);
}
}
else
{
- if (GTK_WIDGET_VISIBLE(pw->search_entry))
+ if (gtk_widget_get_visible(pw->search_entry))
{
- if (GTK_WIDGET_HAS_FOCUS(pw->search_entry))
+ if (gtk_widget_has_focus(pw->search_entry))
{
gtk_widget_grab_focus(GTK_WIDGET(pw->imd->widget));
}
rx = ry = 0;
if (pr->scale)
{
- rx = (double)(pr->x_scroll + event->x - pr->x_offset) / pr->scale;
- ry = (double)(pr->y_scroll + event->y - pr->y_offset) / pr->scale;
+ rx = (gdouble)(pr->x_scroll + event->x - pr->x_offset) / pr->scale;
+ ry = (gdouble)(pr->y_scroll + event->y - pr->y_offset) / pr->scale;
}
pi = pan_item_find_by_coord(pw, PAN_ITEM_BOX, rx, ry, "info");
pw->imd = pw->imd_normal;
}
-static void pan_fullscreen_toggle(PanWindow *pw, gint force_off)
+static void pan_fullscreen_toggle(PanWindow *pw, gboolean force_off)
{
if (force_off && !pw->fs) return;
pixbuf_renderer_get_image_size(pr, &width, &height);
adj = gtk_range_get_adjustment(GTK_RANGE(pw->scrollbar_h));
- adj->page_size = (gdouble)rect.width;
- adj->page_increment = adj->page_size / 2.0;
- adj->step_increment = 48.0 / pr->scale;
- adj->lower = 0.0;
- adj->upper = MAX((gdouble)width, 1.0);
- adj->value = (gdouble)rect.x;
+ gtk_adjustment_set_page_size(adj, rect.width);
+ gtk_adjustment_set_page_increment(adj, gtk_adjustment_get_page_size(adj) / 2.0);
+ gtk_adjustment_set_step_increment(adj, 48.0 / pr->scale);
+ gtk_adjustment_set_lower(adj, 0.0);
+ gtk_adjustment_set_upper(adj, MAX((gdouble)width, 1.0));
+ gtk_adjustment_set_value(adj, (gdouble)rect.x);
pref_signal_block_data(pw->scrollbar_h, pw);
gtk_adjustment_changed(adj);
pref_signal_unblock_data(pw->scrollbar_h, pw);
adj = gtk_range_get_adjustment(GTK_RANGE(pw->scrollbar_v));
- adj->page_size = (gdouble)rect.height;
- adj->page_increment = adj->page_size / 2.0;
- adj->step_increment = 48.0 / pr->scale;
- adj->lower = 0.0;
- adj->upper = MAX((gdouble)height, 1.0);
- adj->value = (gdouble)rect.y;
+ gtk_adjustment_set_page_size(adj, rect.height);
+ gtk_adjustment_set_page_increment(adj, gtk_adjustment_get_page_size(adj) / 2.0);
+ gtk_adjustment_set_step_increment(adj, 48.0 / pr->scale);
+ gtk_adjustment_set_lower(adj, 0.0);
+ gtk_adjustment_set_upper(adj, MAX((gdouble)height, 1.0));
+ gtk_adjustment_set_value(adj, (gdouble)rect.y);
pref_signal_block_data(pw->scrollbar_v, pw);
gtk_adjustment_changed(adj);
}
else
{
+ FileData *dir_fd = file_data_new_dir(path);
tab_completion_append_to_history(pw->path_entry, path);
- pan_layout_set_path(pw, path);
+ pan_layout_set_fd(pw, dir_fd);
+ file_data_unref(dir_fd);
}
g_free(path);
pref_list_int_set(PAN_PREF_GROUP, PAN_PREF_INFO_IMAGE, pw->info_image_size);
pref_list_int_set(PAN_PREF_GROUP, PAN_PREF_INFO_EXIF, pw->info_includes_exif);
- if (pw->idle_id != -1)
+ if (pw->idle_id)
{
g_source_remove(pw->idle_id);
}
pan_window_items_free(pw);
pan_cache_free(pw);
- g_free(pw->path);
+ file_data_unref(pw->dir_fd);
g_free(pw);
}
-static gint pan_window_delete_cb(GtkWidget *w, GdkEventAny *event, gpointer data)
+static gboolean pan_window_delete_cb(GtkWidget *w, GdkEventAny *event, gpointer data)
{
PanWindow *pw = data;
return TRUE;
}
-static void pan_window_new_real(const gchar *path)
+static void pan_window_new_real(FileData *dir_fd)
{
PanWindow *pw;
GtkWidget *vbox;
pw = g_new0(PanWindow, 1);
- pw->path = g_strdup(path);
+ pw->dir_fd = file_data_ref(dir_fd);
pw->layout = PAN_LAYOUT_TIMELINE;
pw->size = PAN_IMAGE_SIZE_THUMB_NORMAL;
pw->thumb_size = PAN_THUMB_SIZE_NORMAL;
pw->ignore_symlinks = TRUE;
- pw->list = NULL;
- pw->list_static = NULL;
- pw->list_grid = NULL;
-
- pw->fs = NULL;
- pw->overlay_id = -1;
- pw->idle_id = -1;
+ pw->idle_id = 0;
pw->window = window_new(GTK_WINDOW_TOPLEVEL, "panview", NULL, NULL, _("Pan View"));
- geometry.min_width = 8;
- geometry.min_height = 8;
+ geometry.min_width = DEFAULT_MINIMAL_WINDOW_SIZE;
+ geometry.min_height = DEFAULT_MINIMAL_WINDOW_SIZE;
gtk_window_set_geometry_hints(GTK_WINDOW(pw->window), NULL, &geometry, GDK_HINT_MIN_SIZE);
gtk_window_set_resizable(GTK_WINDOW(pw->window), TRUE);
pref_spacer(box, 0);
pref_label_new(box, _("Location:"));
- combo = tab_completion_new_with_history(&pw->path_entry, path, "pan_view_path", -1,
+ combo = tab_completion_new_with_history(&pw->path_entry, dir_fd->path, "pan_view_path", -1,
pan_window_entry_activate_cb, pw);
- g_signal_connect(G_OBJECT(pw->path_entry->parent), "changed",
+ g_signal_connect(G_OBJECT(gtk_widget_get_parent(pw->path_entry)), "changed",
G_CALLBACK(pan_window_entry_change_cb), pw);
gtk_box_pack_start(GTK_BOX(box), combo, TRUE, TRUE, 0);
gtk_widget_show(combo);
- combo = gtk_combo_box_new_text();
- gtk_combo_box_append_text(GTK_COMBO_BOX(combo), _("Timeline"));
- gtk_combo_box_append_text(GTK_COMBO_BOX(combo), _("Calendar"));
- gtk_combo_box_append_text(GTK_COMBO_BOX(combo), _("Folders"));
- gtk_combo_box_append_text(GTK_COMBO_BOX(combo), _("Folders (flower)"));
- gtk_combo_box_append_text(GTK_COMBO_BOX(combo), _("Grid"));
+ combo = gtk_combo_box_text_new();
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _("Timeline"));
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _("Calendar"));
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _("Folders"));
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _("Folders (flower)"));
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _("Grid"));
gtk_combo_box_set_active(GTK_COMBO_BOX(combo), pw->layout);
g_signal_connect(G_OBJECT(combo), "changed",
gtk_box_pack_start(GTK_BOX(box), combo, FALSE, FALSE, 0);
gtk_widget_show(combo);
- combo = gtk_combo_box_new_text();
- gtk_combo_box_append_text(GTK_COMBO_BOX(combo), _("Dots"));
- gtk_combo_box_append_text(GTK_COMBO_BOX(combo), _("No Images"));
- gtk_combo_box_append_text(GTK_COMBO_BOX(combo), _("Small Thumbnails"));
- gtk_combo_box_append_text(GTK_COMBO_BOX(combo), _("Normal Thumbnails"));
- gtk_combo_box_append_text(GTK_COMBO_BOX(combo), _("Large Thumbnails"));
- gtk_combo_box_append_text(GTK_COMBO_BOX(combo), _("1:10 (10%)"));
- gtk_combo_box_append_text(GTK_COMBO_BOX(combo), _("1:4 (25%)"));
- gtk_combo_box_append_text(GTK_COMBO_BOX(combo), _("1:3 (33%)"));
- gtk_combo_box_append_text(GTK_COMBO_BOX(combo), _("1:2 (50%)"));
- gtk_combo_box_append_text(GTK_COMBO_BOX(combo), _("1:1 (100%)"));
+ combo = gtk_combo_box_text_new();
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _("Dots"));
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _("No Images"));
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _("Small Thumbnails"));
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _("Normal Thumbnails"));
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _("Large Thumbnails"));
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _("1:10 (10%)"));
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _("1:4 (25%)"));
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _("1:3 (33%)"));
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _("1:2 (50%)"));
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _("1:1 (100%)"));
gtk_combo_box_set_active(GTK_COMBO_BOX(combo), pw->size);
g_signal_connect(G_OBJECT(combo), "changed",
static void pan_warning_ok_cb(GenericDialog *gd, gpointer data)
{
- gchar *path = data;
+ FileData *dir_fd = data;
generic_dialog_close(gd);
- pan_window_new_real(path);
- g_free(path);
+ pan_window_new_real(dir_fd);
+ file_data_unref(dir_fd);
}
static void pan_warning_hide_cb(GtkWidget *button, gpointer data)
{
- gint hide_dlg;
+ gboolean hide_dlg;
hide_dlg = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button));
pref_list_int_set(PAN_PREF_GROUP, PAN_PREF_HIDE_WARNING, hide_dlg);
}
-static gint pan_warning(const gchar *path)
+static gboolean pan_warning(FileData *dir_fd)
{
GenericDialog *gd;
GtkWidget *box;
GtkWidget *group;
GtkWidget *button;
GtkWidget *ct_button;
- gint hide_dlg;
+ gboolean hide_dlg;
- if (path && strcmp(path, G_DIR_SEPARATOR_S) == 0)
+ if (dir_fd && strcmp(dir_fd->path, G_DIR_SEPARATOR_S) == 0)
{
- pan_warning_folder(path, NULL);
+ pan_warning_folder(dir_fd->path, NULL);
return TRUE;
}
if (!pref_list_int_get(PAN_PREF_GROUP, PAN_PREF_HIDE_WARNING, &hide_dlg)) hide_dlg = FALSE;
if (hide_dlg) return FALSE;
- gd = generic_dialog_new(_("Pan View Performance"), GQ_WMCLASS, "pan_view_warning", NULL, FALSE,
+ gd = generic_dialog_new(_("Pan View Performance"), "pan_view_warning", NULL, FALSE,
NULL, NULL);
- gd->data = g_strdup(path);
+ gd->data = file_data_ref(dir_fd);
generic_dialog_add_button(gd, GTK_STOCK_OK, NULL,
pan_warning_ok_cb, TRUE);
*-----------------------------------------------------------------------------
*/
-void pan_window_new(const gchar *path)
+void pan_window_new(FileData *dir_fd)
{
- if (pan_warning(path)) return;
+ if (pan_warning(dir_fd)) return;
- pan_window_new_real(path);
+ pan_window_new_real(dir_fd);
}
{
PanWindow *pw;
FileData *fd;
- gint n;
+ const gchar *key = data;
pw = submenu_item_get_data(widget);
- n = GPOINTER_TO_INT(data);
if (!pw) return;
fd = pan_menu_click_fd(pw);
if (fd)
{
- if (!editor_window_flag_set(n))
+ if (!editor_window_flag_set(key))
{
pan_fullscreen_toggle(pw, TRUE);
}
- file_util_start_editor_from_file(n, fd, pw->imd->widget);
+ file_util_start_editor_from_file(key, fd, pw->imd->widget);
}
}
-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;
pan_window_close(pw);
}
+static void pan_popup_menu_destroy_cb(GtkWidget *widget, gpointer data)
+{
+ GList *editmenu_fd_list = data;
+
+ filelist_free(editmenu_fd_list);
+}
+
+static GList *pan_view_get_fd_list(PanWindow *pw)
+{
+ GList *list = NULL;
+ FileData *fd = pan_menu_click_fd(pw);
+
+ if (fd) list = g_list_prepend(filelist_copy(fd->sidecar_files), file_data_ref(fd));
+
+ return list;
+}
+
static GtkWidget *pan_popup_menu(PanWindow *pw)
{
GtkWidget *menu;
GtkWidget *submenu;
GtkWidget *item;
- gint active;
+ gboolean active;
+ GList *editmenu_fd_list;
active = (pw->click_pi != NULL);
G_CALLBACK(pan_zoom_1_1_cb), pw);
menu_item_add_divider(menu);
- 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);
+ editmenu_fd_list = pan_view_get_fd_list(pw);
+ g_signal_connect(G_OBJECT(menu), "destroy",
+ G_CALLBACK(pan_popup_menu_destroy_cb), editmenu_fd_list);
+ submenu_add_edit(menu, &item, G_CALLBACK(pan_edit_cb), pw, editmenu_fd_list);
+ gtk_widget_set_sensitive(item, active);
+
menu_item_add_stock_sensitive(menu, _("View in _new window"), GTK_STOCK_NEW, active,
G_CALLBACK(pan_new_window_cb), pw);
G_CALLBACK(pan_rename_cb), pw);
menu_item_add_stock_sensitive(menu, _("_Delete..."), GTK_STOCK_DELETE, active,
G_CALLBACK(pan_delete_cb), pw);
- if (options->show_copy_path)
- menu_item_add_sensitive(menu, _("_Copy path"), active,
- G_CALLBACK(pan_copy_path_cb), pw);
+ menu_item_add_sensitive(menu, _("_Copy path"), active,
+ G_CALLBACK(pan_copy_path_cb), pw);
menu_item_add_divider(menu);
item = menu_item_add_check(menu, _("Sort by E_xif date"), pw->exif_date_enable,
{
GList *list;
- list = uri_filelist_from_text((gchar *)selection_data->data, TRUE);
+ list = uri_filelist_from_gtk_selection_data(selection_data);
if (list && isdir(((FileData *)list->data)->path))
{
FileData *fd = list->data;
- pan_layout_set_path(pw, fd->path);
+ pan_layout_set_fd(pw, fd);
}
filelist_free(list);
{
gchar *text = NULL;
gint len;
- gint plain_text;
GList *list;
- 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);
+ uri_selection_data_set_uris_from_filelist(selection_data, list);
g_list_free(list);
- if (text)
- {
- gtk_selection_data_set(selection_data, selection_data->target,
- 8, (guchar *)text, len);
- g_free(text);
- }
}
else
{
- gtk_selection_data_set(selection_data, selection_data->target,
+ gtk_selection_data_set(selection_data, gtk_selection_data_get_target(selection_data),
8, NULL, 0);
}
}
G_CALLBACK(pan_window_get_dnd_data), pw);
}
-/*
- *-----------------------------------------------------------------------------
- * maintenance (for rename, move, remove)
- *-----------------------------------------------------------------------------
- */
+/* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */