[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