[Goodies-commits] r3478 - in ristretto/trunk: . src

Stephan Arts stephan at xfce.org
Mon Oct 29 20:33:43 CET 2007


Author: stephan
Date: 2007-10-29 19:33:43 +0000 (Mon, 29 Oct 2007)
New Revision: 3478

Modified:
   ristretto/trunk/configure.in.in
   ristretto/trunk/src/Makefile.am
   ristretto/trunk/src/main.c
   ristretto/trunk/src/main_window.c
   ristretto/trunk/src/main_window.h
   ristretto/trunk/src/navigator.c
   ristretto/trunk/src/picture_viewer.c
Log:
Add preferences dialog
add libxfcegui4 dependency



Modified: ristretto/trunk/configure.in.in
===================================================================
--- ristretto/trunk/configure.in.in	2007-10-29 13:26:10 UTC (rev 3477)
+++ ristretto/trunk/configure.in.in	2007-10-29 19:33:43 UTC (rev 3478)
@@ -114,6 +114,7 @@
 XDT_CHECK_PACKAGE([THUNAR_VFS], [thunar-vfs-1], [0.4.0])
 XDT_CHECK_PACKAGE([DBUS_GLIB], [dbus-glib-1], [0.34])
 XDT_CHECK_PACKAGE([LIBXFCE4UTIL], [libxfce4util-1.0], [4.4.0])
+XDT_CHECK_PACKAGE([LIBXFCEGUI4], [libxfcegui4-1.0], [4.4.0])
 
 
 dnl check for debugging support

Modified: ristretto/trunk/src/Makefile.am
===================================================================
--- ristretto/trunk/src/Makefile.am	2007-10-29 13:26:10 UTC (rev 3477)
+++ ristretto/trunk/src/Makefile.am	2007-10-29 19:33:43 UTC (rev 3478)
@@ -13,6 +13,7 @@
 	$(DBUS_GLIB_CFLAGS) \
 	$(LIBEXIF_CFLAGS) \
 	$(LIBXFCE4UTIL_CFLAGS) \
+	$(LIBXFCEGUI4_CFLAGS) \
 	$(THUNAR_VFS_CFLAGS) \
 	-DDATADIR=\"$(datadir)\" \
 	-DSRCDIR=\"$(top_srcdir)\" \
@@ -24,6 +25,7 @@
 	$(DBUS_GLIB_LIBS) \
 	$(LIBEXIF_LIBS) \
 	$(LIBXFCE4UTIL_LIBS) \
+	$(LIBXFCEGUI4_LIBS) \
 	$(THUNAR_VFS_LIBS)
 
 INCLUDES = \

Modified: ristretto/trunk/src/main.c
===================================================================
--- ristretto/trunk/src/main.c	2007-10-29 13:26:10 UTC (rev 3477)
+++ ristretto/trunk/src/main.c	2007-10-29 19:33:43 UTC (rev 3478)
@@ -93,15 +93,14 @@
     gint window_height = xfce_rc_read_int_entry(xfce_rc, "LastWindowHeight", 300);
     gint slideshow_timeout = xfce_rc_read_int_entry(xfce_rc, "SlideShowTimeout", 5000);
     gint max_cache = xfce_rc_read_int_entry(xfce_rc, "MaxImagesCacheSize", 1);
-    gint max_preload = xfce_rc_read_int_entry(xfce_rc, "MaxImagesPreload", 1);
     
     GtkWidget *window = rstto_main_window_new();
     gtk_widget_ref(window);
 
     RsttoNavigator *navigator = rstto_main_window_get_navigator(RSTTO_MAIN_WINDOW(window));
 
-    navigator->max_history = max_cache;
-    navigator->max_preload = max_preload;
+    rstto_main_window_set_max_cache_size(RSTTO_MAIN_WINDOW(window), max_cache);
+    rstto_main_window_set_slideshow_timeout(RSTTO_MAIN_WINDOW(window), (gdouble)slideshow_timeout);
 
     GtkRecentManager *recent_manager = rstto_main_window_get_recent_manager(RSTTO_MAIN_WINDOW(window));
     rstto_navigator_set_timeout(navigator, slideshow_timeout);
@@ -228,7 +227,8 @@
             xfce_rc_write_entry(xfce_rc, "ThumbnailViewerOrientation", "horizontal");
             break;
     }
-    xfce_rc_write_int_entry(xfce_rc, "MaxImagesCacheSize", rstto_navigator_get_cache_max_images(navigator));
+    xfce_rc_write_int_entry(xfce_rc, "MaxImagesCacheSize", rstto_main_window_get_max_cache_size(RSTTO_MAIN_WINDOW(window)));
+    xfce_rc_write_int_entry(xfce_rc, "SlideShowTimeout", (gint)rstto_main_window_get_slideshow_timeout(RSTTO_MAIN_WINDOW(window)));
     xfce_rc_flush(xfce_rc);
     xfce_rc_close(xfce_rc);
     gtk_widget_unref(window);

Modified: ristretto/trunk/src/main_window.c
===================================================================
--- ristretto/trunk/src/main_window.c	2007-10-29 13:26:10 UTC (rev 3477)
+++ ristretto/trunk/src/main_window.c	2007-10-29 19:33:43 UTC (rev 3478)
@@ -19,6 +19,7 @@
 #include <gdk/gdkkeysyms.h>
 #include <string.h>
 #include <thunar-vfs/thunar-vfs.h>
+#include <libxfcegui4/libxfcegui4.h>
 #include <libexif/exif-data.h>
 #include <dbus/dbus-glib.h>
 
@@ -53,6 +54,8 @@
         GtkOrientation thumbnail_viewer_orientation;
         gboolean       thumbnail_viewer_visibility;
         gboolean       toolbar_visibility;
+        gint           max_cache_size;
+        gdouble        slideshow_timeout;
     } settings;
 
     struct {
@@ -83,6 +86,7 @@
                 GtkWidget *menu;
                 GtkWidget *menu_item_empty;
             } open_with;
+            GtkWidget *menu_item_preferences;
         } edit;
 
         GtkWidget *menu_item_view;
@@ -207,6 +211,8 @@
 cb_rstto_main_window_quit(GtkWidget *widget, RsttoMainWindow *window);
 static void
 cb_rstto_main_window_about(GtkWidget *widget, RsttoMainWindow *window);
+static void
+cb_rstto_main_window_preferences(GtkWidget *widget, RsttoMainWindow *window);
 
 static void
 cb_rstto_main_window_nav_iter_changed(RsttoNavigator *navigator, gint nr, RsttoNavigatorEntry *entry, RsttoMainWindow *window);
@@ -321,9 +327,11 @@
     window->priv->menus.edit.menu = gtk_menu_new();
     gtk_menu_set_accel_group(GTK_MENU(window->priv->menus.edit.menu), accel_group);
     window->priv->menus.edit.menu_item_open_with = gtk_menu_item_new_with_mnemonic(_("Open with..."));
+    window->priv->menus.edit.menu_item_preferences = gtk_image_menu_item_new_from_stock(GTK_STOCK_PREFERENCES, NULL);
 
     gtk_menu_item_set_submenu(GTK_MENU_ITEM(window->priv->menus.menu_item_edit), window->priv->menus.edit.menu);
     gtk_menu_shell_append(GTK_MENU_SHELL(window->priv->menus.edit.menu), window->priv->menus.edit.menu_item_open_with);
+    gtk_menu_shell_append(GTK_MENU_SHELL(window->priv->menus.edit.menu), window->priv->menus.edit.menu_item_preferences);
     
     window->priv->menus.edit.open_with.menu = gtk_menu_new();
     window->priv->menus.edit.open_with.menu_item_empty = gtk_menu_item_new_with_label(_("No applications available"));
@@ -600,6 +608,10 @@
             "activate",
             G_CALLBACK(cb_rstto_main_window_about), window);
 
+    g_signal_connect(window->priv->menus.edit.menu_item_preferences, 
+            "activate",
+            G_CALLBACK(cb_rstto_main_window_preferences), window);
+
     g_signal_connect(window->priv->menus.go.menu_item_next,
             "activate",
             G_CALLBACK(cb_rstto_main_window_next), window);
@@ -811,6 +823,32 @@
     return window->priv->manager;
 }
 
+gdouble
+rstto_main_window_get_slideshow_timeout (RsttoMainWindow *window)
+{
+    return window->priv->settings.slideshow_timeout;
+}
+
+gint
+rstto_main_window_get_max_cache_size (RsttoMainWindow *window)
+{
+    return window->priv->settings.max_cache_size;
+}
+
+void
+rstto_main_window_set_slideshow_timeout (RsttoMainWindow *window, gdouble timeout)
+{
+    window->priv->settings.slideshow_timeout = timeout;
+    rstto_navigator_set_timeout(window->priv->navigator, timeout);
+}
+
+void
+rstto_main_window_set_max_cache_size (RsttoMainWindow *window, gint max_cache_size)
+{
+    window->priv->settings.max_cache_size = max_cache_size;
+    window->priv->navigator->max_history = max_cache_size;
+}
+
 /* CALLBACK FUNCTIONS */
 
 static void
@@ -960,6 +998,73 @@
 }
 
 static void
+cb_rstto_main_window_preferences(GtkWidget *widget, RsttoMainWindow *window)
+{
+    GtkWidget *dialog = xfce_titled_dialog_new_with_buttons(N_("Image viewer Preferences"),
+                                                    GTK_WINDOW(window),
+                                                    0,
+                                                    GTK_STOCK_CANCEL,
+                                                    GTK_RESPONSE_CANCEL,
+                                                    GTK_STOCK_OK,
+                                                    GTK_RESPONSE_OK,
+                                                    NULL);
+    gtk_window_set_icon_name(GTK_WINDOW(dialog), "ristretto");
+
+    GtkWidget *notebook = gtk_notebook_new();
+
+    gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), notebook,  TRUE, TRUE, 0);
+
+    GtkWidget *main_vbox = gtk_vbox_new(FALSE, 0);
+    GtkWidget *main_lbl = gtk_label_new(N_("Behaviour"));
+    gtk_notebook_append_page(GTK_NOTEBOOK(notebook), main_vbox, main_lbl);
+
+    GtkWidget *slideshow_frame = gtk_frame_new(N_("Slideshow:"));
+
+    GtkWidget *slideshow_vbox = gtk_vbox_new(FALSE, 0);
+    GtkWidget *slideshow_lbl = gtk_label_new(NULL);
+    GtkWidget *slideshow_hscale = gtk_hscale_new_with_range(1, 60, 1);
+    
+    gtk_range_set_value(GTK_RANGE(slideshow_hscale), window->priv->settings.slideshow_timeout / 1000);
+
+    gtk_box_pack_start(GTK_BOX(slideshow_vbox), slideshow_lbl, FALSE, TRUE, 0);
+    gtk_box_pack_start(GTK_BOX(slideshow_vbox), slideshow_hscale, FALSE, TRUE, 0);
+
+    gtk_container_add(GTK_CONTAINER(slideshow_frame), slideshow_vbox);
+
+    GtkWidget *cache_frame = gtk_frame_new(N_("Image history cache:"));
+
+    GtkWidget *cache_vbox = gtk_vbox_new(FALSE, 0);
+    GtkWidget *cache_lbl = gtk_label_new(NULL);
+    GtkWidget *cache_hscale = gtk_hscale_new_with_range(1, 20, 3);
+
+    gtk_range_set_value(GTK_RANGE(cache_hscale), window->priv->settings.max_cache_size);
+
+    gtk_box_pack_start(GTK_BOX(cache_vbox), cache_lbl, FALSE, TRUE, 0);
+    gtk_box_pack_start(GTK_BOX(cache_vbox), cache_hscale, FALSE, TRUE, 0);
+
+    gtk_container_add(GTK_CONTAINER(cache_frame), cache_vbox);
+
+    gtk_box_pack_start(GTK_BOX(main_vbox), slideshow_frame, FALSE, TRUE, 0);
+    gtk_box_pack_start(GTK_BOX(main_vbox), cache_frame, FALSE, TRUE, 0);
+
+    gtk_widget_show_all(notebook);
+
+    gint result = gtk_dialog_run(GTK_DIALOG(dialog));
+
+    switch (result)
+    {
+        case GTK_RESPONSE_OK:
+            rstto_main_window_set_slideshow_timeout(window, gtk_range_get_value(GTK_RANGE(slideshow_hscale)) * 1000);
+            rstto_main_window_set_max_cache_size(window, gtk_range_get_value(GTK_RANGE(cache_hscale)));
+            break;
+        default:
+            break;
+    }
+
+    gtk_widget_destroy(dialog);
+}
+
+static void
 cb_rstto_main_window_about(GtkWidget *widget, RsttoMainWindow *window)
 {
     const gchar *authors[] = {

Modified: ristretto/trunk/src/main_window.h
===================================================================
--- ristretto/trunk/src/main_window.h	2007-10-29 13:26:10 UTC (rev 3477)
+++ ristretto/trunk/src/main_window.h	2007-10-29 19:33:43 UTC (rev 3478)
@@ -77,6 +77,16 @@
 GtkRecentManager *
 rstto_main_window_get_recent_manager (RsttoMainWindow *window);
 
+
+gdouble
+rstto_main_window_get_slideshow_timeout (RsttoMainWindow *window);
+gint
+rstto_main_window_get_max_cache_size (RsttoMainWindow *window);
+void
+rstto_main_window_set_slideshow_timeout (RsttoMainWindow *window, gdouble timeout);
+void
+rstto_main_window_set_max_cache_size (RsttoMainWindow *window, gint max_cache_size);
+
 G_END_DECLS
 
 #endif /* __RISTRETTO_MAIN_WINDOW_H__ */

Modified: ristretto/trunk/src/navigator.c
===================================================================
--- ristretto/trunk/src/navigator.c	2007-10-29 13:26:10 UTC (rev 3477)
+++ ristretto/trunk/src/navigator.c	2007-10-29 19:33:43 UTC (rev 3478)
@@ -245,8 +245,6 @@
         {
             g_signal_handlers_disconnect_by_func(entry->loader , cb_rstto_navigator_entry_area_prepared, entry);
             gdk_pixbuf_loader_close(entry->loader, NULL);
-            g_object_unref(entry->loader);
-            entry->loader = NULL;
         }
 
         if(entry->animation)
@@ -554,6 +552,7 @@
 {
     if(navigator->file_iter)
     {
+        rstto_navigator_guard_history(navigator, navigator->file_iter->data);
         navigator->old_position = rstto_navigator_get_position(navigator);
     }
     navigator->file_iter = g_list_nth(navigator->file_list, n);
@@ -713,6 +712,7 @@
     
     if(nav_entry->io_channel)
     {
+        g_io_channel_unref(nav_entry->io_channel);
         g_source_remove(nav_entry->io_source_id);
     }
 
@@ -720,7 +720,6 @@
     {
         g_signal_handlers_disconnect_by_func(nav_entry->loader , cb_rstto_navigator_entry_area_prepared, nav_entry);
         gdk_pixbuf_loader_close(nav_entry->loader, NULL);
-        g_object_unref(nav_entry->loader);
     }
     if(nav_entry->animation)
     {
@@ -836,6 +835,7 @@
 gboolean
 rstto_navigator_entry_load_image (RsttoNavigatorEntry *entry)
 {
+    g_return_val_if_fail(entry != NULL, FALSE);
     gchar *path = NULL;
 
     if (entry->io_channel)
@@ -915,6 +915,8 @@
         }
     }
     g_io_channel_unref(io_channel);
+    entry->io_channel = NULL;
+    entry->io_source_id = 0;
     return FALSE;
 }
 
@@ -965,6 +967,12 @@
         }
     }
 
+    if (entry->loader)
+    {
+        g_object_unref(entry->loader);
+        entry->loader = NULL;
+    }
+
    
     if (pixbuf != NULL)
     {

Modified: ristretto/trunk/src/picture_viewer.c
===================================================================
--- ristretto/trunk/src/picture_viewer.c	2007-10-29 13:26:10 UTC (rev 3477)
+++ ristretto/trunk/src/picture_viewer.c	2007-10-29 19:33:43 UTC (rev 3478)
@@ -730,7 +730,15 @@
 cb_rstto_picture_viewer_nav_iter_changed(RsttoNavigator *nav, gint nr, RsttoNavigatorEntry *entry, RsttoPictureViewer *viewer)
 {
     viewer->priv->entry = entry;
-    rstto_navigator_entry_load_image(entry);
+    if(entry)
+    {
+        rstto_navigator_entry_load_image(entry);
+    }
+    else
+    {
+        rstto_picture_viewer_refresh(viewer);
+        rstto_picture_viewer_paint(GTK_WIDGET(viewer));
+    }
 }
 
 static void




More information about the Goodies-commits mailing list