LayoutWindow *lw;
GList *work;
-/* FIXME: this is probably not the correct way to implement this */
+/** @FIXME this is probably not the correct way to implement this */
work = layout_window_list;
while (work)
{
return FALSE;
}
-void show_menu_scrollbar_cb(GtkWidget *widget, GdkRectangle *allocation, gpointer data)
-{
- GtkRequisition requisition;
-
- gtk_widget_size_request(widget, &requisition);
-
- if (allocation->width <= requisition.width)
- {
- gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(data), GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC);
- }
- else
- {
- gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(data), GTK_POLICY_NEVER, GTK_POLICY_NEVER);
- }
-}
-
static GtkWidget *layout_tool_setup(LayoutWindow *lw)
{
GtkWidget *box;
toolbar = layout_actions_toolbar(lw, TOOLBAR_MAIN);
scroll_window = gtk_scrolled_window_new(NULL, NULL);
- gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll_window), GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll_window), GTK_POLICY_AUTOMATIC,GTK_POLICY_NEVER);
gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scroll_window), menu_bar);
- g_signal_connect(G_OBJECT(menu_bar), "size-allocate", G_CALLBACK(show_menu_scrollbar_cb), scroll_window);
gtk_widget_show(scroll_window);
gtk_widget_show(menu_bar);
gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, 0, etime);
}
-static GtkWidget *layout_sort_button(LayoutWindow *lw)
+static GtkWidget *layout_sort_button(LayoutWindow *lw, GtkWidget *box)
{
GtkWidget *button;
+ GtkWidget *frame;
+ GtkWidget *image;
+ frame = gtk_frame_new(NULL);
+ DEBUG_NAME(frame);
+ gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN);
+ gtk_box_pack_start(GTK_BOX(box), frame, FALSE, FALSE, 0);
+ gtk_widget_show(frame);
+
+ image = gtk_image_new_from_icon_name("pan-down", GTK_ICON_SIZE_BUTTON);
button = gtk_button_new_with_label(sort_type_get_text(lw->sort_method));
- DEBUG_NAME(button);
+ gtk_button_set_image(GTK_BUTTON(button), image);
g_signal_connect(G_OBJECT(button), "clicked",
G_CALLBACK(layout_sort_button_press_cb), lw);
gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE);
+ gtk_button_set_image_position(GTK_BUTTON(button), GTK_POS_RIGHT);
+
+ gtk_container_add(GTK_CONTAINER(frame), button);
+ gtk_widget_show(button);
return button;
}
{
GtkWidget *button;
GtkWidget *frame;
-
+ GtkWidget *image;
frame = gtk_frame_new(NULL);
DEBUG_NAME(frame);
gtk_widget_show(frame);
+ image = gtk_image_new_from_icon_name("pan-down", GTK_ICON_SIZE_BUTTON);
button = gtk_button_new_with_label("1:1");
+ gtk_button_set_image(GTK_BUTTON(button), image);
g_signal_connect(G_OBJECT(button), "clicked",
G_CALLBACK(layout_zoom_button_press_cb), lw);
gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE);
+ gtk_button_set_image_position(GTK_BUTTON(button), GTK_POS_RIGHT);
gtk_container_add(GTK_CONTAINER(frame), button);
gtk_widget_show(button);
void layout_status_update_info(LayoutWindow *lw, const gchar *text)
{
gchar *buf = NULL;
+ gint hrs;
+ gint min;
+ gdouble sec;
+ GString *delay;
if (!layout_valid(&lw)) return;
{
guint s;
gint64 s_bytes = 0;
- const gchar *ss;
+ gchar *ss;
if (layout_image_slideshow_active(lw))
{
+
if (!layout_image_slideshow_paused(lw))
{
- ss = _(" Slideshow");
+ delay = g_string_new(_(" Slideshow ["));
}
else
{
- ss = _(" Paused");
+ delay = g_string_new(_(" Paused ["));
+ }
+ hrs = options->slideshow.delay / (36000);
+ min = (options->slideshow.delay -(36000 * hrs))/600;
+ sec = (gdouble)(options->slideshow.delay -(36000 * hrs)-(min * 600)) / 10;
+
+ if (hrs > 0)
+ {
+ g_string_append_printf(delay, "%dh ", hrs);
+ }
+ if (min > 0)
+ {
+ g_string_append_printf(delay, "%dm ", min);
}
+ g_string_append_printf(delay, "%.1fs]", sec);
+
+ ss = g_strdup(delay->str);
+
+ g_string_free(delay, TRUE);
}
else
{
- ss = "";
+ ss = g_strdup("");
}
s = layout_selection_count(lw, &s_bytes);
buf = g_strdup_printf(_("%s, %d files (%s, %d)%s"), b, n, sb, s, ss);
g_free(b);
g_free(sb);
+ g_free(ss);
}
else if (n > 0)
{
gchar *b = text_from_size_abrev(n_bytes);
buf = g_strdup_printf(_("%s, %d files%s"), b, n, ss);
g_free(b);
+ g_free(ss);
}
else
{
buf = g_strdup_printf(_("%d files%s"), n, ss);
+ g_free(ss);
}
text = buf;
gtk_widget_show(frame);
label = gtk_label_new(text ? text : "");
+ gtk_label_set_ellipsize(GTK_LABEL(label), PANGO_ELLIPSIZE_END);
gtk_container_add(GTK_CONTAINER(frame), label);
gtk_widget_show(label);
gtk_box_pack_start(GTK_BOX(hbox), lw->info_progress_bar, FALSE, FALSE, 0);
gtk_widget_show(lw->info_progress_bar);
- lw->info_sort = layout_sort_button(lw);
+ lw->info_sort = layout_sort_button(lw, hbox);
gtk_widget_set_tooltip_text(GTK_WIDGET(lw->info_sort), _("Select sort order"));
- gtk_box_pack_start(GTK_BOX(hbox), lw->info_sort, FALSE, FALSE, 0);
gtk_widget_show(lw->info_sort);
lw->info_status = layout_status_label(NULL, lw->info_box, TRUE, 0, (!small_format));
DEBUG_NAME(lw->info_status);
- gtk_widget_set_tooltip_text(GTK_WIDGET(lw->info_status), _("Folder contents (files selected)"));
+ gtk_widget_set_tooltip_text(GTK_WIDGET(lw->info_status), _("Folder contents (files selected)\nSlideshow [time interval]"));
if (small_format)
{
{
gboolean have_file = FALSE;
gboolean dir_changed = TRUE;
+ gchar *last_image;
if (!layout_valid(&lw)) return FALSE;
}
lw->dir_fd = file_data_ref(fd);
file_data_register_real_time_monitor(fd);
+
+ last_image = get_recent_viewed_folder_image(fd->path);
+ if (last_image)
+ {
+ fd = file_data_new_group(last_image);
+ g_free(last_image);
+
+ if (isfile(fd->path)) have_file = TRUE;
+ }
+
}
else
{
lw->sort_method = type;
lw->sort_ascend = ascend;
- if (lw->info_sort) gtk_label_set_text(GTK_LABEL(gtk_bin_get_child(GTK_BIN(lw->info_sort))),
- sort_type_get_text(type));
+ if (lw->info_sort) gtk_button_set_label(GTK_BUTTON(lw->info_sort), sort_type_get_text(type));
layout_list_sync_sort(lw);
}
gboolean refresh_lists;
if (!layout_valid(&lw)) return;
-/* FIXME: add other options too */
+/** @FIXME add other options too */
refresh_style = (lop->style != lw->options.style || strcmp(lop->order, lw->options.order) != 0);
refresh_lists = (lop->show_directory_date != lw->options.show_directory_date);
void layout_close(LayoutWindow *lw)
{
- GList *list;
- LayoutWindow *tmp_lw;
-
if (layout_window_list && layout_window_list->next)
{
save_layout(lw);
GdkGeometry hint;
GdkWindowHints hint_mask;
Histogram *histogram;
+ gchar *default_path;
DEBUG_1("%s layout_new: start", get_exec_time());
lw = g_new0(LayoutWindow, 1);
/* divider positions */
+ default_path = g_build_filename(get_rc_dir(), DEFAULT_WINDOW_LAYOUT, NULL);
+
if (!options->save_window_positions)
{
- lw->options.main_window.hdivider_pos = MAIN_WINDOW_DIV_HPOS;
- lw->options.main_window.vdivider_pos = MAIN_WINDOW_DIV_VPOS;
- lw->options.float_window.vdivider_pos = MAIN_WINDOW_DIV_VPOS;
+ if (!isfile(default_path))
+ {
+ lw->options.main_window.hdivider_pos = MAIN_WINDOW_DIV_HPOS;
+ lw->options.main_window.vdivider_pos = MAIN_WINDOW_DIV_VPOS;
+ lw->options.float_window.vdivider_pos = MAIN_WINDOW_DIV_VPOS;
+ }
}
/* window */
gtk_window_set_geometry_hints(GTK_WINDOW(lw->window), NULL, &hint,
GDK_HINT_MIN_SIZE | GDK_HINT_BASE_SIZE | hint_mask);
- if (options->save_window_positions)
+ if (options->save_window_positions || isfile(default_path))
{
gtk_window_set_default_size(GTK_WINDOW(lw->window), lw->options.main_window.w, lw->options.main_window.h);
// if (!layout_window_list)
gtk_window_set_default_size(GTK_WINDOW(lw->window), MAINWINDOW_DEF_WIDTH, MAINWINDOW_DEF_HEIGHT);
}
+ g_free(default_path);
g_signal_connect(G_OBJECT(lw->window), "delete_event",
G_CALLBACK(layout_delete_cb), lw);
pixbuf = pixbuf_inline(PIXBUF_INLINE_LOGO);
- /* FIXME: the zoom value set here is the value, which is then copied again and again
+ /** @FIXME the zoom value set here is the value, which is then copied again and again
in "Leave Zoom at previous setting" mode. This is not ideal. */
image_change_pixbuf(lw->image, pixbuf, 0.0, FALSE);
g_object_unref(pixbuf);
WRITE_NL(); WRITE_INT(*layout, log_window.w);
WRITE_NL(); WRITE_INT(*layout, log_window.h);
+ WRITE_NL(); WRITE_INT(*layout, preferences_window.x);
+ WRITE_NL(); WRITE_INT(*layout, preferences_window.y);
+ WRITE_NL(); WRITE_INT(*layout, preferences_window.w);
+ WRITE_NL(); WRITE_INT(*layout, preferences_window.h);
+ WRITE_NL(); WRITE_INT(*layout, preferences_window.page_number);
+
WRITE_NL(); WRITE_INT(*layout, search_window.x);
WRITE_NL(); WRITE_INT(*layout, search_window.y);
WRITE_NL(); WRITE_INT(*layout, search_window.w);
WRITE_NL(); WRITE_INT(*layout, dupe_window.y);
WRITE_NL(); WRITE_INT(*layout, dupe_window.w);
WRITE_NL(); WRITE_INT(*layout, dupe_window.h);
+
+ WRITE_NL(); WRITE_INT(*layout, advanced_exif_window.x);
+ WRITE_NL(); WRITE_INT(*layout, advanced_exif_window.y);
+ WRITE_NL(); WRITE_INT(*layout, advanced_exif_window.w);
+ WRITE_NL(); WRITE_INT(*layout, advanced_exif_window.h);
WRITE_SEPARATOR();
WRITE_NL(); WRITE_BOOL(*layout, animate);
if (READ_INT(*layout, log_window.w)) continue;
if (READ_INT(*layout, log_window.h)) continue;
+ if (READ_INT(*layout, preferences_window.x)) continue;
+ if (READ_INT(*layout, preferences_window.y)) continue;
+ if (READ_INT(*layout, preferences_window.w)) continue;
+ if (READ_INT(*layout, preferences_window.h)) continue;
+ if (READ_INT(*layout, preferences_window.page_number)) continue;
+
if (READ_INT(*layout, search_window.x)) continue;
if (READ_INT(*layout, search_window.y)) continue;
if (READ_INT(*layout, search_window.w)) continue;
if (READ_INT(*layout, dupe_window.w)) continue;
if (READ_INT(*layout, dupe_window.h)) continue;
+ if (READ_INT(*layout, advanced_exif_window.x)) continue;
+ if (READ_INT(*layout, advanced_exif_window.y)) continue;
+ if (READ_INT(*layout, advanced_exif_window.w)) continue;
+ if (READ_INT(*layout, advanced_exif_window.h)) continue;
+
if (READ_BOOL(*layout, animate)) continue;
if (READ_INT(*layout, workspace)) continue;
static void layout_config_commandline(LayoutOptions *lop, gchar **path)
{
+ gchar *last_image;
+
if (command_line->startup_blank)
{
*path = NULL;
}
else layout_config_startup_path(lop, path);
+ if (isdir(*path))
+ {
+ last_image = get_recent_viewed_folder_image(*path);
+ if (last_image)
+ {
+ g_free(*path);
+ *path = last_image;
+ }
+ }
+
if (command_line->tools_show)
{
lop->tools_float = FALSE;
free_layout_options_content(&lop);
}
+LayoutWindow *layout_new_from_default()
+{
+ LayoutWindow *lw;
+ GList *work;
+ gboolean success;
+ gchar *default_path;
+
+ default_path = g_build_filename(get_rc_dir(), DEFAULT_WINDOW_LAYOUT, NULL);
+ success = load_config_from_file(default_path, TRUE);
+ g_free(default_path);
+
+ if (success)
+ {
+ work = g_list_last(layout_window_list);
+ lw = work->data;
+ g_free(lw->options.id);
+ lw->options.id = g_strdup(layout_get_unique_id());
+ }
+ else
+ {
+ lw = layout_new_from_config(NULL, NULL, TRUE);
+ }
+ return lw;
+}
+
/* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */