[Xfce4-commits] <xfce4-screenshooter:master> Allow users to set custom file names.
Jérôme Guelfucci
noreply at xfce.org
Fri Oct 16 22:58:01 CEST 2009
Updating branch refs/heads/master
to 434defbccea385c94567a81ab4d3a9585aa2555e (commit)
from b72b2d6ac64ec4d384885c2823c6a6868c3e900b (commit)
commit 434defbccea385c94567a81ab4d3a9585aa2555e
Author: Jérôme Guelfucci <jeromeg at xfce.org>
Date: Fri Oct 16 22:59:51 2009 +0200
Allow users to set custom file names.
Fix build with full debugging and plug a leak.
lib/screenshooter-actions.c | 24 ++++++++--
lib/screenshooter-dialogs.c | 108 ++++++++++++++++++++-----------------------
lib/screenshooter-dialogs.h | 3 +-
lib/screenshooter-utils.c | 1 -
lib/screenshooter-zimagez.c | 8 ++--
5 files changed, 75 insertions(+), 69 deletions(-)
diff --git a/lib/screenshooter-actions.c b/lib/screenshooter-actions.c
index f5e25e8..cfb73d6 100644
--- a/lib/screenshooter-actions.c
+++ b/lib/screenshooter-actions.c
@@ -74,13 +74,26 @@ gboolean screenshooter_action_idle (ScreenshotData *sd)
if (sd->action == SAVE)
{
+ const gchar *save_location;
+
if (sd->screenshot_dir == NULL)
sd->screenshot_dir = screenshooter_get_xdg_image_dir_uri ();
- screenshooter_save_screenshot (sd->screenshot,
- sd->screenshot_dir,
- sd->title,
- sd->horodate);
+ save_location = screenshooter_save_screenshot (sd->screenshot,
+ sd->screenshot_dir,
+ sd->title,
+ sd->horodate,
+ TRUE);
+
+ if (save_location)
+ {
+ const gchar *temp;
+
+ g_free (sd->screenshot_dir);
+ temp = g_path_get_dirname (save_location);
+ sd->screenshot_dir = g_build_filename ("file://", temp, NULL);
+ TRACE ("New save directory: %s", sd->screenshot_dir);
+ }
}
else if (sd->action == CLIPBOARD)
{
@@ -94,7 +107,8 @@ gboolean screenshooter_action_idle (ScreenshotData *sd)
screenshooter_save_screenshot (sd->screenshot,
temp_dir_uri,
sd->title,
- sd->horodate);
+ sd->horodate,
+ FALSE);
if (screenshot_path != NULL)
{
diff --git a/lib/screenshooter-dialogs.c b/lib/screenshooter-dialogs.c
index a286579..f44710d 100644
--- a/lib/screenshooter-dialogs.c
+++ b/lib/screenshooter-dialogs.c
@@ -56,14 +56,8 @@ static void
cb_zimagez_toggled (GtkToggleButton *tb,
ScreenshotData *sd);
static void
-cb_default_folder (GtkWidget *chooser,
- ScreenshotData *sd);
-static void
cb_delay_spinner_changed (GtkWidget *spinner,
ScreenshotData *sd);
-static void
-cb_title_entry_changed (GtkEditable *editable,
- ScreenshotData *sd);
static gchar
*generate_filename_for_uri (const gchar *uri,
const gchar *title,
@@ -198,15 +192,6 @@ static void cb_zimagez_toggled (GtkToggleButton *tb, ScreenshotData *sd)
-/* Set sd->screenshot_dir when the user changed the value in the file chooser */
-static void cb_default_folder (GtkWidget *chooser, ScreenshotData *sd)
-{
- g_free (sd->screenshot_dir);
- sd->screenshot_dir = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (chooser));
-}
-
-
-
/* Set the delay according to the spinner */
static void cb_delay_spinner_changed (GtkWidget *spinner, ScreenshotData *sd)
{
@@ -215,15 +200,6 @@ static void cb_delay_spinner_changed (GtkWidget *spinner, ScreenshotData *sd)
-static void cb_title_entry_changed (GtkEditable *editable, ScreenshotData *sd)
-{
- g_free (sd->title);
-
- sd->title = gtk_editable_get_chars (editable, 0, -1);
-}
-
-
-
/* If @horodate is true, generates a file name @title - date - hour - n.png,
* where n is the lowest integer such as this file does not exist in the @uri
* folder.
@@ -890,7 +866,7 @@ GtkWidget *screenshooter_actions_dialog_new (ScreenshotData *sd)
GtkWidget *left_box;
GtkWidget *actions_label, *actions_alignment, *actions_box;
- GtkWidget *save_box, *save_radio_button, *dir_chooser;
+ GtkWidget *save_radio_button;
GtkWidget *clipboard_radio_button, *open_with_radio_button;
GtkWidget *zimagez_radio_button;
@@ -898,7 +874,7 @@ GtkWidget *screenshooter_actions_dialog_new (ScreenshotData *sd)
GtkWidget *combobox, *open_box;
GtkCellRenderer *renderer, *renderer_pixbuf;
- GtkWidget *preview, *preview_box, *preview_label, *title_entry;
+ GtkWidget *preview, *preview_box, *preview_label;
GdkPixbuf *thumbnail;
dlg = xfce_titled_dialog_new_with_buttons (_("Screenshot"),
@@ -956,33 +932,14 @@ GtkWidget *screenshooter_actions_dialog_new (ScreenshotData *sd)
gtk_container_add (GTK_CONTAINER (actions_alignment), actions_box);
gtk_container_set_border_width (GTK_CONTAINER (actions_box), 0);
- /* Create the save horizontal box */
- save_box = gtk_hbox_new (FALSE, 6);
- gtk_container_set_border_width (GTK_CONTAINER (save_box), 0);
- gtk_box_pack_start (GTK_BOX (actions_box), save_box, FALSE, FALSE, 0);
-
/* Save option radio button */
- save_radio_button = gtk_radio_button_new_with_mnemonic (NULL, _("Save in:"));
+ save_radio_button = gtk_radio_button_new_with_mnemonic (NULL, _("Save"));
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (save_radio_button),
(sd->action == SAVE));
g_signal_connect (G_OBJECT (save_radio_button), "toggled",
G_CALLBACK (cb_save_toggled), sd);
gtk_widget_set_tooltip_text (save_radio_button, _("Save the screenshot to a PNG file"));
- gtk_box_pack_start (GTK_BOX (save_box), save_radio_button, FALSE, FALSE, 0);
-
- /* Directory chooser */
- dir_chooser =
- gtk_file_chooser_button_new (_("Default save location"),
- GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
- gtk_file_chooser_set_current_folder_uri (GTK_FILE_CHOOSER (dir_chooser),
- sd->screenshot_dir);
- gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (dir_chooser), FALSE);
- gtk_widget_set_tooltip_text (dir_chooser, _("Set the default save location"));
- g_signal_connect (G_OBJECT (dir_chooser), "selection-changed",
- G_CALLBACK (cb_default_folder), sd);
- g_signal_connect (G_OBJECT (save_radio_button), "toggled",
- G_CALLBACK (cb_toggle_set_sensi), dir_chooser);
- gtk_box_pack_start (GTK_BOX (save_box), dir_chooser, TRUE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (actions_box), save_radio_button, FALSE, FALSE, 0);
/* Copy to clipboard radio button */
clipboard_radio_button =
@@ -1068,14 +1025,6 @@ GtkWidget *screenshooter_actions_dialog_new (ScreenshotData *sd)
gtk_box_pack_start (GTK_BOX (preview_box), preview, FALSE, FALSE, 0);
g_object_unref (thumbnail);
- /* Title entry */
- title_entry = gtk_entry_new ();
- gtk_entry_set_text (GTK_ENTRY (title_entry), sd->title);
- gtk_box_pack_start (GTK_BOX (preview_box), title_entry, FALSE, FALSE, 0);
- gtk_widget_set_tooltip_text (title_entry, _("Title of the screenshot"));
- g_signal_connect (G_OBJECT (title_entry), "changed",
- G_CALLBACK (cb_title_entry_changed), sd);
-
gtk_widget_show_all (GTK_DIALOG (dlg)->vbox);
return dlg;
@@ -1098,10 +1047,53 @@ gchar
*screenshooter_save_screenshot (GdkPixbuf *screenshot,
const gchar *directory,
const gchar *title,
- gboolean horodate)
+ gboolean horodate,
+ gboolean save_dialog)
{
const gchar *filename = generate_filename_for_uri (directory, title, horodate);
- const gchar *save_uri = g_build_filename (directory, filename, NULL);
+ gchar *save_uri = g_build_filename (directory, filename, NULL);
+ gchar *result;
+
+ if (save_dialog)
+ {
+ GtkWidget *chooser;
+ gint dialog_response;
+
+ chooser =
+ gtk_file_chooser_dialog_new (_("Save screenshot as..."),
+ NULL,
+ GTK_FILE_CHOOSER_ACTION_SAVE,
+ GTK_STOCK_CANCEL,
+ GTK_RESPONSE_CANCEL,
+ GTK_STOCK_SAVE,
+ GTK_RESPONSE_ACCEPT,
+ NULL);
+
+ gtk_window_set_icon_name (GTK_WINDOW (chooser), "applets-screenshooter");
+ gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (chooser),
+ TRUE);
+ gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (chooser), FALSE);
+ gtk_dialog_set_default_response (GTK_DIALOG (chooser), GTK_RESPONSE_ACCEPT);
+ gtk_file_chooser_set_current_folder_uri (GTK_FILE_CHOOSER (chooser), directory);
+ gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (chooser), filename);
+
+ dialog_response = gtk_dialog_run (GTK_DIALOG (chooser));
+
+ if (G_LIKELY (dialog_response == GTK_RESPONSE_ACCEPT))
+ {
+ g_free (save_uri);
+ save_uri = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (chooser));
+ result = save_screenshot_to (screenshot, save_uri);
+ }
+ else
+ result = NULL;
+
+ gtk_widget_destroy (chooser);
+ }
+ else
+ result = save_screenshot_to (screenshot, save_uri);
- return save_screenshot_to (screenshot, save_uri);
+ g_free (save_uri);
+
+ return result;
}
diff --git a/lib/screenshooter-dialogs.h b/lib/screenshooter-dialogs.h
index ebbba01..1ae4957 100644
--- a/lib/screenshooter-dialogs.h
+++ b/lib/screenshooter-dialogs.h
@@ -42,7 +42,8 @@ GtkWidget *screenshooter_region_dialog_new (ScreenshotData *sd,
gchar *screenshooter_save_screenshot (GdkPixbuf *screenshot,
const gchar *directory,
const gchar *title,
- gboolean horodate);
+ gboolean horodate,
+ gboolean save_dialog);
diff --git a/lib/screenshooter-utils.c b/lib/screenshooter-utils.c
index 6098dfe..bdd3694 100644
--- a/lib/screenshooter-utils.c
+++ b/lib/screenshooter-utils.c
@@ -145,7 +145,6 @@ screenshooter_write_rc_file (const gchar *file, ScreenshotData *sd)
xfce_rc_write_entry (rc, "screenshot_dir", sd->screenshot_dir);
xfce_rc_write_entry (rc, "app", sd->app);
xfce_rc_write_entry (rc, "last_user", sd->last_user);
- xfce_rc_write_entry (rc, "title", sd->title);
TRACE ("Flush and close the rc file");
xfce_rc_flush (rc);
diff --git a/lib/screenshooter-zimagez.c b/lib/screenshooter-zimagez.c
index 84c3771..281257b 100644
--- a/lib/screenshooter-zimagez.c
+++ b/lib/screenshooter-zimagez.c
@@ -62,8 +62,8 @@ static gboolean do_xmlrpc (SoupSession *session,
...);
static gboolean has_empty_field (GtkListStore *liststore);
static ScreenshooterJob *zimagez_upload_to_zimagez (const gchar *file_name,
- gchar *last_user,
- gchar *title);
+ const gchar *last_user,
+ const gchar *title);
static gboolean zimagez_upload_job (ScreenshooterJob *job,
GValueArray *param_values,
GError **error);
@@ -652,8 +652,8 @@ zimagez_upload_job (ScreenshooterJob *job, GValueArray *param_values, GError **e
static ScreenshooterJob
*zimagez_upload_to_zimagez (const gchar *file_path,
- gchar *last_user,
- gchar *title)
+ const gchar *last_user,
+ const gchar *title)
{
g_return_val_if_fail (file_path != NULL, NULL);
More information about the Xfce4-commits
mailing list