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)
{
if (lw->vf) vf_select_invert(lw->vf);
}
+void layout_select_list(LayoutWindow *lw, GList *list)
+{
+ if (!layout_valid(&lw)) return;
+
+ if (lw->vf)
+ {
+ vf_select_list(lw->vf, list);
+ }
+}
+
void layout_mark_to_selection(LayoutWindow *lw, gint mark, MarkToSelectionMode mode)
{
if (!layout_valid(&lw)) return;
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_BOOL(*layout, show_thumbnails);
WRITE_NL(); WRITE_BOOL(*layout, show_directory_date);
WRITE_NL(); WRITE_CHAR(*layout, home_path);
- WRITE_NL(); WRITE_CHAR(*layout, last_path);
WRITE_NL(); WRITE_UINT(*layout, startup_path);
WRITE_SEPARATOR();
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_BOOL(*layout, show_thumbnails)) continue;
if (READ_BOOL(*layout, show_directory_date)) continue;
if (READ_CHAR(*layout, home_path)) continue;
- if (READ_CHAR(*layout, last_path)) continue;
if (READ_UINT_CLAMP(*layout, startup_path, 0, STARTUP_PATH_HOME)) continue;
/* window positions */
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;
switch (lop->startup_path)
{
case STARTUP_PATH_LAST:
- *path = (lop->last_path && isdir(lop->last_path)) ? g_strdup(lop->last_path) : get_current_dir();
+ *path = (history_list_find_last_path_by_key("path_list") && isdir(history_list_find_last_path_by_key("path_list"))) ? g_strdup(history_list_find_last_path_by_key("path_list")) : get_current_dir();
break;
case STARTUP_PATH_HOME:
*path = (lop->home_path && isdir(lop->home_path)) ? g_strdup(lop->home_path) : g_strdup(homedir());
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: */