Updating branch refs/heads/ristretto-0.0 to b53ef99302afe9424dc1f8424e0c896034f3069c (commit) from 4b1c367e21a57eaf0f1785838268f379f22bde89 (commit)
commit b53ef99302afe9424dc1f8424e0c896034f3069c Author: Stephan Arts <step...@xfce.org> Date: Sat May 2 01:27:36 2009 +0200 Added save-as function * src/main_window.c src/main_window_ui.xml: Implement save-as function (Bug #4647) * src/navigator.c: Fix iter_find_image function * src/image_cache.h src/image_cache.c: Return TRUE when the cache had to drop images to fit the new one. * src/main.c: Fix error when trying to open nonexistent file from the CLI ChangeLog | 13 ++++++++++++- src/image_cache.c | 14 ++++++++++++-- src/image_cache.h | 2 +- src/main.c | 16 +++++++++++----- src/main_window.c | 39 +++++++++++++++++++++++++++++++++++++++ src/main_window_ui.xml | 2 ++ src/navigator.c | 1 + 7 files changed, 78 insertions(+), 9 deletions(-) diff --git a/ChangeLog b/ChangeLog index dcfc193..b913bf5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,8 +1,19 @@ 2009-05-02 Stephan Arts <step...@xfce.org> + * src/main_window.c + src/main_window_ui.xml: Implement save-as function (Bug #4647) + * src/navigator.c: Fix iter_find_image function + * src/image_cache.h + src/image_cache.c: Return TRUE when the cache had to drop images to + fit the new one. + * src/main.c: Fix error when trying to open nonexistent file from the + CLI + +2009-05-02 Stephan Arts <step...@xfce.org> + * src/image,c src/image.h - src/image_cache.c: Implement image-cache size calculation + src/image_cache.c: Implement image-cache size calculation (Bug #4064) 2009-05-02 Stephan Arts <step...@xfce.org> diff --git a/src/image_cache.c b/src/image_cache.c index 55f2de3..46d7220 100644 --- a/src/image_cache.c +++ b/src/image_cache.c @@ -86,9 +86,10 @@ rstto_image_cache_class_init (GObjectClass *object_class) } -void +gboolean rstto_image_cache_push_image (RsttoImageCache *cache, RsttoImage *image, gboolean last) { + gboolean retval = FALSE; RsttoSettings *settings = rstto_settings_new(); GValue val = {0, }, val_cache_size = {0, }; guint64 size = 0; @@ -119,17 +120,24 @@ rstto_image_cache_push_image (RsttoImageCache *cache, RsttoImage *image, gboolea cache->cache_list = g_list_prepend (cache->cache_list, image); } + /** + * Check if we are keeping a cache + */ if (g_value_get_boolean (&val) == FALSE) { - if (g_list_length (cache->cache_list) > 1) + while (g_list_length (cache->cache_list) > 1) { c_image = g_list_last (cache->cache_list)->data; rstto_image_unload (c_image); cache->cache_list = g_list_remove (cache->cache_list, c_image); + retval = TRUE; } } else { + /* Calculate the cache-size, if it exceeds the defined maximum, + * unload the the images that exceed that. + */ for (iter = cache->cache_list->next; iter != NULL; iter = g_list_next (iter)) { c_image = iter->data; @@ -139,10 +147,12 @@ rstto_image_cache_push_image (RsttoImageCache *cache, RsttoImage *image, gboolea rstto_image_unload (c_image); cache->cache_list = g_list_remove (cache->cache_list, c_image); iter = g_list_previous(iter); + retval = TRUE; } } } g_value_unset (&val); + return retval; } /** diff --git a/src/image_cache.h b/src/image_cache.h index ac1a4fe..16501a3 100644 --- a/src/image_cache.h +++ b/src/image_cache.h @@ -47,7 +47,7 @@ typedef struct _RsttoImageCacheClass RsttoImageCacheClass; RsttoImageCache *rstto_image_cache_new (); -void rstto_image_cache_push_image (RsttoImageCache *cache, RsttoImage *image, gboolean last); +gboolean rstto_image_cache_push_image (RsttoImageCache *cache, RsttoImage *image, gboolean last); G_END_DECLS diff --git a/src/main.c b/src/main.c index f914872..ef25bca 100644 --- a/src/main.c +++ b/src/main.c @@ -138,12 +138,18 @@ cb_rstto_open_files (RsttoOpenFiles *rof) if (rof->iter < rof->argc) { file = g_file_new_for_commandline_arg (rof->argv[rof->iter]); - file_info = g_file_query_info (file, "standard::content-type", 0, NULL, NULL); - content_type = g_file_info_get_attribute_string (file_info, "standard::content-type"); - - if (strncmp (content_type, "image/", 6) == 0) + if (file) { - rstto_navigator_add_file (rof->navigator, file, NULL); + file_info = g_file_query_info (file, "standard::content-type", 0, NULL, NULL); + if (file_info) + { + content_type = g_file_info_get_attribute_string (file_info, "standard::content-type"); + + if (strncmp (content_type, "image/", 6) == 0) + { + rstto_navigator_add_file (rof->navigator, file, NULL); + } + } } rof->iter++; return TRUE; diff --git a/src/main_window.c b/src/main_window.c index 6ae02d3..7504afe 100644 --- a/src/main_window.c +++ b/src/main_window.c @@ -163,6 +163,8 @@ static void cb_rstto_main_window_close (GtkWidget *widget, RsttoMainWindow *window); static void cb_rstto_main_window_close_all (GtkWidget *widget, RsttoMainWindow *window); +static void +cb_rstto_main_window_save_as (GtkWidget *widget, RsttoMainWindow *window); static void cb_rstto_main_window_play (GtkWidget *widget, RsttoMainWindow *window); @@ -204,6 +206,7 @@ static GtkActionEntry action_entries[] = { "file-menu", NULL, N_ ("_File"), NULL, }, { "open", GTK_STOCK_OPEN, N_ ("_Open"), "<control>O", N_ ("Open an image"), G_CALLBACK (cb_rstto_main_window_open_image), }, { "open-folder", NULL, N_ ("Open _Folder"), NULL, N_ ("Open a folder"), G_CALLBACK (cb_rstto_main_window_open_folder), }, + { "save-as", GTK_STOCK_SAVE_AS, N_ ("_Save as"), "<control>s", N_ ("Save the image"), G_CALLBACK (cb_rstto_main_window_save_as), }, { "close", GTK_STOCK_CLOSE, N_ ("_Close"), "<control>W", N_ ("Close this image"), G_CALLBACK (cb_rstto_main_window_close), }, { "close-all", NULL, N_ ("_Close All"), NULL, N_ ("Close all images"), G_CALLBACK (cb_rstto_main_window_close_all), }, { "quit", GTK_STOCK_QUIT, N_ ("_Quit"), "<control>Q", N_ ("Quit Ristretto"), G_CALLBACK (cb_rstto_main_window_quit), }, @@ -585,6 +588,11 @@ rstto_main_window_set_sensitive (RsttoMainWindow *window, gboolean sensitive) gtk_widget_set_sensitive ( gtk_ui_manager_get_widget ( window->priv->ui_manager, + "/main-menu/file-menu/save-as"), + sensitive); + gtk_widget_set_sensitive ( + gtk_ui_manager_get_widget ( + window->priv->ui_manager, "/main-menu/file-menu/close"), sensitive); gtk_widget_set_sensitive ( @@ -1092,6 +1100,37 @@ cb_rstto_main_window_open_recent(GtkRecentChooser *chooser, RsttoMainWindow *win g_free (uri); } +static void +cb_rstto_main_window_save_as (GtkWidget *widget, RsttoMainWindow *window) +{ + GtkWidget *dialog; + gint response; + GFile *file, *s_file; + + dialog = gtk_file_chooser_dialog_new(_("Save as"), + GTK_WINDOW(window), + GTK_FILE_CHOOSER_ACTION_SAVE, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_SAVE, GTK_RESPONSE_OK, + NULL); + gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), TRUE); + + response = gtk_dialog_run(GTK_DIALOG(dialog)); + if(response == GTK_RESPONSE_OK) + { + file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (dialog)); + s_file = rstto_image_get_file (rstto_navigator_iter_get_image (window->priv->iter)); + if (g_file_copy (s_file, file, G_FILE_COPY_OVERWRITE, NULL, NULL, NULL, NULL)) + { + rstto_navigator_remove_image (window->priv->props.navigator, rstto_navigator_iter_get_image (window->priv->iter)); + rstto_navigator_add_file (window->priv->props.navigator, file, NULL); + } + } + + gtk_widget_destroy(dialog); + +} + /** * cb_rstto_main_window_play: * @widget: diff --git a/src/main_window_ui.xml b/src/main_window_ui.xml index c3ab245..c2aaf0b 100644 --- a/src/main_window_ui.xml +++ b/src/main_window_ui.xml @@ -9,6 +9,8 @@ <menuitem action="open-folder"/> <placeholder name="placeholder-open-recent"/> <separator/> + <menuitem action="save-as"/> + <separator/> <menuitem action="close"/> <menuitem action="close-all"/> <menuitem action="quit"/> diff --git a/src/navigator.c b/src/navigator.c index 29292a1..9a654fc 100644 --- a/src/navigator.c +++ b/src/navigator.c @@ -273,6 +273,7 @@ gboolean rstto_navigator_iter_find_image (RsttoNavigatorIter *iter, RsttoImage *image) { GList *list = g_list_find (iter->list, image); + iter->iter = list; if (list) return TRUE; _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org https://mail.xfce.org/mailman/listinfo/xfce4-commits