[Goodies-commits] r6191 - ristretto/trunk/src

Stephan Arts stephan at xfce.org
Mon Nov 24 00:57:08 CET 2008


Author: stephan
Date: 2008-11-23 23:57:08 +0000 (Sun, 23 Nov 2008)
New Revision: 6191

Modified:
   ristretto/trunk/src/main_window.c
   ristretto/trunk/src/navigator.c
   ristretto/trunk/src/save_dialog.c
   ristretto/trunk/src/save_dialog.h
Log:
Improve save dialog
Fix segfault (reference-count bug)



Modified: ristretto/trunk/src/main_window.c
===================================================================
--- ristretto/trunk/src/main_window.c	2008-11-23 23:02:09 UTC (rev 6190)
+++ ristretto/trunk/src/main_window.c	2008-11-23 23:57:08 UTC (rev 6191)
@@ -891,7 +891,9 @@
         for (iter = navigator->file_list; iter != NULL; iter = iter->next)
         {
             if (rstto_navigator_entry_get_modified((RsttoNavigatorEntry *)iter->data))
+            {
                 modified_files = g_list_append (modified_files, iter->data);
+            }
         }
 
         if (modified_files)
@@ -901,7 +903,10 @@
             {
                 gtk_widget_hide(dialog);
                 GtkWidget *save_dialog = rstto_save_dialog_new (GTK_WINDOW(window), modified_files);
-                gtk_dialog_run (GTK_DIALOG(save_dialog));
+                if (gtk_dialog_run (GTK_DIALOG(save_dialog)) == GTK_RESPONSE_OK)
+                {
+                    
+                }
             }
         }
 
@@ -1575,7 +1580,7 @@
     gtk_about_dialog_set_license((GtkAboutDialog *)about_dialog,
         xfce_get_license_text(XFCE_LICENSE_TEXT_GPL));
     gtk_about_dialog_set_copyright((GtkAboutDialog *)about_dialog,
-        "Copyright \302\251 2006-2007 Stephan Arts");
+        "Copyright \302\251 2006-2008 Stephan Arts");
 
     gtk_dialog_run(GTK_DIALOG(about_dialog));
 
@@ -1746,6 +1751,35 @@
 static void
 cb_rstto_main_window_close_all(GtkWidget *widget, RsttoMainWindow *window)
 {
+    RsttoNavigator  *navigator = window->priv->navigator;
+
+    if (navigator)
+    {
+        GList *iter, *modified_files = NULL;
+        
+        for (iter = navigator->file_list; iter != NULL; iter = iter->next)
+        {
+            if (rstto_navigator_entry_get_modified((RsttoNavigatorEntry *)iter->data))
+            {
+                modified_files = g_list_append (modified_files, iter->data);
+            }
+        }
+
+        if (modified_files)
+        {
+            GtkWidget *dialog = gtk_message_dialog_new (NULL, 0, GTK_MESSAGE_QUESTION, GTK_BUTTONS_OK_CANCEL, _("One or more images have been modified, do you want to save the changes?")); 
+            if (gtk_dialog_run (GTK_DIALOG(dialog)) == GTK_RESPONSE_OK)
+            {
+                gtk_widget_hide(dialog);
+                GtkWidget *save_dialog = rstto_save_dialog_new (GTK_WINDOW(window), modified_files);
+                if (gtk_dialog_run (GTK_DIALOG(save_dialog)) == GTK_RESPONSE_OK)
+                {
+                    
+                }
+            }
+        }
+    }
+
     rstto_navigator_clear (window->priv->navigator);
     gtk_widget_set_sensitive(widget, FALSE);
     gtk_widget_set_sensitive(window->priv->menus.file.menu_item_close, FALSE);

Modified: ristretto/trunk/src/navigator.c
===================================================================
--- ristretto/trunk/src/navigator.c	2008-11-23 23:02:09 UTC (rev 6190)
+++ ristretto/trunk/src/navigator.c	2008-11-23 23:57:08 UTC (rev 6191)
@@ -811,6 +811,7 @@
             entry->info = info;
             entry->exif_data = exif_data_new_from_file(filename);
             entry->navigator = navigator;
+            entry->animation = NULL;
             
             ExifEntry *exifentry = exif_data_get_entry(entry->exif_data, EXIF_TAG_ORIENTATION);
             if (exifentry)
@@ -927,6 +928,7 @@
         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);
     }
+
     if(nav_entry->animation)
     {
         g_object_unref(nav_entry->animation);
@@ -1254,6 +1256,8 @@
         entry->src_pixbuf = NULL;
     }
 
+    g_object_ref (entry->animation);
+
     gint time = gdk_pixbuf_animation_iter_get_delay_time(entry->iter);
 
     if (time != -1)

Modified: ristretto/trunk/src/save_dialog.c
===================================================================
--- ristretto/trunk/src/save_dialog.c	2008-11-23 23:02:09 UTC (rev 6190)
+++ ristretto/trunk/src/save_dialog.c	2008-11-23 23:57:08 UTC (rev 6191)
@@ -29,9 +29,104 @@
 static void
 cb_rstto_save_row_toggled (GtkCellRendererToggle *cell, gchar *path, gpointer user_data);
 
+static void
+rstto_save_dialog_init(RsttoSaveDialog *);
+static void
+rstto_save_dialog_class_init(RsttoSaveDialogClass *);
+
+static GtkWidgetClass *parent_class = NULL;
+
+GType
+rstto_save_dialog_get_type ()
+{
+    static GType rstto_save_dialog_type = 0;
+
+    if (!rstto_save_dialog_type)
+    {
+        static const GTypeInfo rstto_save_dialog_info = 
+        {
+            sizeof (RsttoSaveDialogClass),
+            (GBaseInitFunc) NULL,
+            (GBaseFinalizeFunc) NULL,
+            (GClassInitFunc) rstto_save_dialog_class_init,
+            (GClassFinalizeFunc) NULL,
+            NULL,
+            sizeof (RsttoSaveDialog),
+            0,
+            (GInstanceInitFunc) rstto_save_dialog_init,
+            NULL
+        };
+
+        rstto_save_dialog_type = g_type_register_static (GTK_TYPE_DIALOG, "RsttoSaveDialog", &rstto_save_dialog_info, 0);
+    }
+    return rstto_save_dialog_type;
+}
+
+static void
+rstto_save_dialog_init(RsttoSaveDialog *dialog)
+{
+    GtkTreeViewColumn *column = NULL;
+    GtkCellRenderer *renderer;
+    GtkListStore *store;
+    GtkWidget *treeview, *s_window;
+
+    store = gtk_list_store_new (4, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN);
+    treeview = gtk_tree_view_new_with_model (GTK_TREE_MODEL(store));
+
+    renderer = gtk_cell_renderer_pixbuf_new();
+    column = gtk_tree_view_column_new_with_attributes ( "", renderer, "pixbuf", 0, NULL);
+    gtk_tree_view_insert_column (GTK_TREE_VIEW(treeview), column, -1);
+
+    renderer = gtk_cell_renderer_text_new();
+    g_object_set (renderer, "ellipsize", PANGO_ELLIPSIZE_MIDDLE, NULL);
+    column = gtk_tree_view_column_new_with_attributes ( _("Filename"), renderer, "text", 1, NULL);
+    gtk_tree_view_column_set_expand (column, TRUE);
+    gtk_tree_view_insert_column (GTK_TREE_VIEW(treeview), column, -1);
+
+    renderer = gtk_cell_renderer_toggle_new();
+    g_object_set (renderer, "mode", GTK_CELL_RENDERER_MODE_ACTIVATABLE, NULL);
+    g_signal_connect (renderer, "toggled", (GCallback)cb_rstto_save_row_toggled, store);
+
+    column = gtk_tree_view_column_new_with_attributes ( _("Save"), renderer, "active", 2, NULL);
+    gtk_tree_view_insert_column (GTK_TREE_VIEW(treeview), column, -1);
+
+    s_window = gtk_scrolled_window_new (NULL, NULL);
+    gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (s_window), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
+    gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (s_window), treeview);
+
+    gtk_container_add (GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), s_window);
+    gtk_widget_show_all (s_window);
+
+
+    gtk_dialog_add_buttons (GTK_DIALOG (dialog),
+        GTK_STOCK_CANCEL,
+        GTK_RESPONSE_CANCEL,
+        GTK_STOCK_SAVE,
+        GTK_RESPONSE_OK,
+        NULL);
+}
+
+static void
+rstto_save_dialog_class_init(RsttoSaveDialogClass *dialog_class)
+{
+    GObjectClass *object_class = (GObjectClass*)dialog_class;
+    parent_class = g_type_class_peek_parent(dialog_class);
+}
+
 GtkWidget *
 rstto_save_dialog_new (GtkWindow *parent, GList *entries)
 {
+    GtkWidget *dialog = g_object_new (RSTTO_TYPE_SAVE_DIALOG, NULL);
+    gtk_window_set_transient_for (GTK_WINDOW (dialog), parent);
+
+    return dialog;
+}
+
+
+/*
+GtkWidget *
+rstto_save_dialog_new (GtkWindow *parent, GList *entries)
+{
     GtkTreeIter iter;
     GtkTreeViewColumn *column = NULL;
     GList *list_iter = entries;
@@ -87,6 +182,7 @@
     gtk_widget_show_all (s_window);
     return dialog;
 }
+*/
 
 static void
 cb_rstto_save_row_toggled (GtkCellRendererToggle *cell, gchar *path, gpointer user_data)
@@ -96,4 +192,4 @@
 
     gtk_tree_model_get_iter_from_string (model, &iter, path);
     gtk_list_store_set (GTK_LIST_STORE(model), &iter, 2, !gtk_cell_renderer_toggle_get_active (cell), -1);
-}
+};

Modified: ristretto/trunk/src/save_dialog.h
===================================================================
--- ristretto/trunk/src/save_dialog.h	2008-11-23 23:02:09 UTC (rev 6190)
+++ ristretto/trunk/src/save_dialog.h	2008-11-23 23:57:08 UTC (rev 6191)
@@ -16,5 +16,50 @@
  *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  */
 
+#ifndef __RISTRETTO_SAVE_DIALOG_H__
+#define __RISTRETTO_SAVE_DIALOG_H__
+
+G_BEGIN_DECLS
+
+#define RSTTO_TYPE_SAVE_DIALOG rstto_save_dialog_get_type()
+
+#define RSTTO_SAVE_DIALOG(obj)( \
+        G_TYPE_CHECK_INSTANCE_CAST ((obj), \
+                RSTTO_TYPE_SAVE_DIALOG, \
+                RsttoSaveDialog))
+
+#define RSTTO_IS_SAVE_DIALOG(obj)( \
+        G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
+                RSTTO_TYPE_SAVE_DIALOG))
+
+#define RSTTO_SAVE_DIALOG_CLASS(klass)( \
+        G_TYPE_CHECK_CLASS_CAST ((klass), \
+                RSTTO_TYPE_SAVE_DIALOG, \
+                RsttoSaveDialogClass))
+
+#define RSTTO_IS_SAVE_DIALOG_CLASS(klass)( \
+        G_TYPE_CHECK_CLASS_TYPE ((klass), \
+                RSTTO_TYPE_SAVE_DIALOG()))
+
+typedef struct _RsttoSaveDialog RsttoSaveDialog;
+
+struct _RsttoSaveDialog
+{
+    GtkDialog         parent;
+};
+
+typedef struct _RsttoSaveDialogClass RsttoSaveDialogClass;
+
+struct _RsttoSaveDialogClass
+{
+    GtkDialogClass  parent_class;
+};
+
+GType      rstto_save_dialog_get_type();
+
 GtkWidget *
 rstto_save_dialog_new (GtkWindow *parent, GList *entries);
+
+G_END_DECLS
+
+#endif /* __RISTRETTO_SAVE_DIALOG_H__ */




More information about the Goodies-commits mailing list