/*
* Geeqie
* (C) 2006 John Ellis
- * Copyright (C) 2008 - 2009 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
*
* Author: John Ellis
*
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)
}
#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
- 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);
+ 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)) return FALSE;
*-----------------------------------------------------------------------------
*/
-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;
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);
}
pan_layout_update_idle(pw);
}
-static gint pan_cache_step(PanWindow *pw)
+static gboolean pan_cache_step(PanWindow *pw)
{
FileData *fd;
PanCacheData *pc;
gint col, row;
gint cw, ch;
gint l;
- gdouble total;
- gdouble s;
- gdouble aw, ah;
gint i, j;
pan_grid_clear(pw);
if (l < 1) return;
- total = (gdouble)width * (gdouble)height / (gdouble)l;
- s = sqrt(total);
-
- aw = (gdouble)width / s;
- ah = (gdouble)height / s;
-
col = (gint)(sqrt((gdouble)l / grid_size) * width / height + 0.999);
col = CLAMP(col, 1, l / grid_size + 1);
row = (gint)((gdouble)l / grid_size / col);
pg->y = j * ch / 2;
pg->w = cw;
pg->h = ch;
- pg->list = NULL;
pw->list_grid = g_list_prepend(pw->list_grid, pg);
if (pan_cache_step(pw)) return TRUE;
- pw->idle_id = -1;
+ pw->idle_id = 0;
return FALSE;
}
}
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);
}
{
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:
if (event->state & GDK_CONTROL_MASK)
{
- gint n = -1;
-
stop_signal = TRUE;
switch (event->keyval)
{
case '1':
- n = 0;
- break;
case '2':
- n = 1;
- break;
case '3':
- n = 2;
- break;
case '4':
- n = 3;
- break;
case '5':
- n = 4;
- break;
case '6':
- n = 5;
- break;
case '7':
- n = 6;
- break;
case '8':
- n = 7;
- break;
case '9':
- n = 8;
- break;
case '0':
- n = 9;
break;
case 'C': case 'c':
if (fd) file_util_copy(fd, NULL, NULL, GTK_WIDGET(pr));
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)
{
- GList *work;
- gint i;
if (!fd) return;
pan_text_alignment_add(ta, NULL, NULL);
+#if 0
+ {
+ GList *work;
+ gint i;
+
for (i = 0; ExifUIList[i].key; i++)
{
g_free(text);
}
}
+ }
+#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));
}
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_simple(path);
+ FileData *dir_fd = file_data_new_dir(path);
tab_completion_append_to_history(pw->path_entry, path);
pan_layout_set_fd(pw, dir_fd);
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);
}
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;
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"));
pref_label_new(box, _("Location:"));
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_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(FileData *dir_fd)
+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 (dir_fd && strcmp(dir_fd->path, G_DIR_SEPARATOR_S) == 0)
{
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);
+ 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;
fd = pan_menu_click_fd(pw);
if (fd)
{
- 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: */