[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