]> Pileus Git - ~andy/gtk/blobdiff - docs/reference/gtk/tmpl/gtkfilechooser.sgml
2.9.0
[~andy/gtk] / docs / reference / gtk / tmpl / gtkfilechooser.sgml
index 296c55f0b5098ef47c95d8a8155154879506bbb7..3fb662fcad73678fcdf2e0cba7248327fce17d2d 100644 (file)
@@ -7,14 +7,47 @@ File chooser interface used by GtkFileChooserWidget and GtkFileChooserDialog
 <!-- ##### SECTION Long_Description ##### -->
     <para>
       #GtkFileChooser is an interface that can be implemented by file
-      selection widgets.  In GTK+, the main objects that implement
-      this interface are #GtkFileChooserWidget and
-      #GtkFileChooserDialog.  You do not need to write an object that
-      implements the #GtkFileChooser interface unless you are trying
-      to adapt an existing file selector to expose a standard
-      programming interface.
+      selection widgets.  In GTK+, the main objects that implement this
+      interface are #GtkFileChooserWidget, #GtkFileChooserDialog, and
+      #GtkFileChooserButton.  You do not need to write an object that
+      implements the #GtkFileChooser interface unless you are trying to
+      adapt an existing file selector to expose a standard programming
+      interface.
     </para>
 
+    <para>
+      #GtkFileChooser allows for shortcuts to various places in the filesystem.
+      In the default implementation these are displayed in the left pane. It
+      may be a bit confusing at first taht these shortcuts come from various 
+      sources and in various flavours, so lets explain the terminology here:
+    </para>
+      <variablelist>
+         <varlistentry>
+           <term>Bookmarks</term>
+           <listitem><para>
+             are created by the user, by dragging folders from the 
+             right pane to the left pane, or by using the "Add". Bookmarks
+             can be renamed and deleted by the user.
+           </para></listitem>
+         </varlistentry>
+         <varlistentry>
+           <term>Shortcuts</term>
+           <listitem><para> 
+             can be provided by the application or by the underlying filesystem
+             abstraction (e.g. both the gnome-vfs and the Windows filesystems 
+             provide "Desktop" shortcuts). Shortcuts cannot be modified by the 
+             user.
+           </para></listitem>
+         </varlistentry>
+         <varlistentry> 
+           <term>Volumes</term>
+           <listitem><para>
+             are provided by the underlying filesystem abstraction. They are
+             the "roots" of the filesystem. 
+           </para></listitem>
+         </varlistentry>
+      </variablelist>
+
     <refsect2 id="gtkfilechooser-encodings">
       <title>File Names and Encodings</title>
 
@@ -99,7 +132,7 @@ update_preview_cb (GtkFileChooser *file_chooser, gpointer data)
 
   gtk_image_set_from_pixbuf (GTK_IMAGE (preview), pixbuf);
   if (pixbuf)
-    gdk_pixbuf_unref (pixbuf);
+    gobject_unref (pixbuf);
 
   gtk_file_chooser_set_preview_widget_active (file_chooser, have_preview);
 }
@@ -171,15 +204,33 @@ update_preview_cb (GtkFileChooser *file_chooser, gpointer data)
            <tbody>
              <row>
                <entry>Signal name</entry>
-               <entry>Key</entry>
+               <entry>Default key combinations</entry>
              </row>
              <row>
                <entry>location-popup</entry>
-               <entry><keycombo><keycap>Control</keycap><keycap>L</keycap></keycombo></entry>
+               <entry>
+                 <keycombo><keycap>Control</keycap><keycap>L</keycap></keycombo> (empty path);
+                 <keycap>/</keycap> (path of "/")<footnote>
+                   <para>
+                     Both the individual <keycap>/</keycap> key and the
+                     numeric keypad's "divide" key are supported.
+                   </para>
+                 </footnote>;
+                 <keycap>~</keycap> (path of "~")
+               </entry>
              </row>
              <row>
                <entry>up-folder</entry>
-               <entry><keycombo><keycap>Alt</keycap><keycap>Up</keycap></keycombo></entry>
+               <entry>
+                 <keycombo><keycap>Alt</keycap><keycap>Up</keycap></keycombo><footnote>
+                   <para>
+                     Both the individual Up key and the numeric
+                     keypad's Up key are supported.
+                   </para>
+                 </footnote>
+                 ;
+                 <keycap>Backspace</keycap>
+               </entry>
              </row>
              <row>
                <entry>down-folder</entry>
@@ -189,21 +240,27 @@ update_preview_cb (GtkFileChooser *file_chooser, gpointer data)
                <entry>home-folder</entry>
                <entry><keycombo><keycap>Alt</keycap><keycap>Home</keycap></keycombo></entry>
              </row>
+             <row>
+               <entry>desktop-folder</entry>
+               <entry><keycombo><keycap>Alt</keycap><keycap>D</keycap></keycombo></entry>
+             </row>
+             <row>
+               <entry>quick-bookmark</entry>
+               <entry><keycombo><keycap>Alt</keycap><keycap>1</keycap></keycombo> through <keycombo><keycap>Alt</keycap><keycap>0</keycap></keycombo></entry>
+             </row>
            </tbody>
          </tgroup>
        </informaltable>
 
        <para>
-         To change these defaults to something else, you could
-         include the following fragment in your
-         <filename>.gtkrc-2.0</filename> file:
+         You can change these defaults to something else.  For
+         example, to add a <keycap>Shift</keycap> modifier to a few
+         of the default bindings, you can include the following
+         fragment in your <filename>.gtkrc-2.0</filename> file:
        </para>
 
        <programlisting>
 binding "my-own-gtkfilechooser-bindings" {
-       bind "&lt;Alt&gt;&lt;Shift&gt;l" {
-               "location-popup" ()
-       }
        bind "&lt;Alt&gt;&lt;Shift&gt;Up" {
                "up-folder" ()
        }
@@ -211,7 +268,7 @@ binding "my-own-gtkfilechooser-bindings" {
                "down-folder" ()
        }
        bind "&lt;Alt&gt;&lt;Shift&gt;Home" {
-               "home-folder-folder" ()
+               "home-folder" ()
        }
 }
 
@@ -224,14 +281,24 @@ class "GtkFileChooserDefault" binding "my-own-gtkfilechooser-bindings"
 
        <programlisting>
           void user_function (GtkFileChooserDefault *chooser,
+                              const char            *path,
                               <link linkend="gpointer">gpointer</link> user_data);
        </programlisting>
 
        <para>
          This is used to make the file chooser show a "Location"
          dialog which the user can use to manually type the name of
-         the file he wishes to select.  By default this is bound to
-         <keycombo><keycap>Control</keycap><keycap>L</keycap></keycombo>.
+         the file he wishes to select.  The
+         <parameter>path</parameter> argument is a string that gets
+         put in the text entry for the file name.  By default this is bound to
+         <keycombo><keycap>Control</keycap><keycap>L</keycap></keycombo>
+         with a <parameter>path</parameter> string of "" (the empty
+         string).  It is also bound to <keycap>/</keycap> with a
+         <parameter>path</parameter> string of "<literal>/</literal>"
+         (a slash):  this lets you type <keycap>/</keycap> and
+         immediately type a path name.  On Unix systems, this is bound to
+         <keycap>~</keycap> (tilde) with a <parameter>path</parameter> string
+         of "~" itself for access to home directories.
        </para>
 
        <variablelist role="params">
@@ -243,6 +310,14 @@ class "GtkFileChooserDefault" binding "my-own-gtkfilechooser-bindings"
              </simpara>
            </listitem>
          </varlistentry>
+         <varlistentry>
+           <term><parameter>path</parameter>&nbsp;:</term>
+           <listitem>
+             <simpara>
+               default contents for the text entry for the file name
+             </simpara>
+           </listitem>
+         </varlistentry>
          <varlistentry>
            <term><parameter>user_data</parameter>&nbsp;:</term>
            <listitem>
@@ -252,6 +327,30 @@ class "GtkFileChooserDefault" binding "my-own-gtkfilechooser-bindings"
            </listitem>
          </varlistentry>
        </variablelist>
+
+       <tip>
+         <para>
+           You can create your own bindings for the
+           <symbol>location-popup</symbol> signal with custom
+           <parameter>path</parameter> strings, and have a crude form
+           of easily-to-type bookmarks.  For example, say you access
+           the path <filename>/home/username/misc</filename> very
+           frequently.  You could then create an <keycombo>
+           <keycap>Alt</keycap> <keycap>M</keycap> </keycombo>
+           shortcut by including the following in your
+           <filename>.gtkrc-2.0</filename>:
+         </para>
+
+         <programlisting>
+binding "misc-shortcut" {
+       bind "&lt;Alt&gt;M" {
+               "location-popup" ("/home/username/misc")
+       }
+}
+
+class "GtkFileChooserDefault" binding "misc-shortcut"
+         </programlisting>
+       </tip>
       </refsect3>
 
       <refsect3 id="GtkFileChooserDefault-up-folder">
@@ -265,8 +364,9 @@ class "GtkFileChooserDefault" binding "my-own-gtkfilechooser-bindings"
        <para>
          This is used to make the file chooser go to the parent of
          the current folder in the file hierarchy.  By default this
-         is bound to
-         <keycombo><keycap>Alt</keycap><keycap>Up</keycap></keycombo>.
+         is bound to <keycap>Backspace</keycap> and
+         <keycombo><keycap>Alt</keycap><keycap>Up</keycap></keycombo>
+         (the Up key in the numeric keypad also works).
        </para>
 
        <variablelist role="params">
@@ -305,7 +405,8 @@ class "GtkFileChooserDefault" binding "my-own-gtkfilechooser-bindings"
          "/foo/<emphasis>bar/</emphasis>baz", then this will cause
          the file chooser to switch to the "baz" subfolder.  By
          default this is bound to
-         <keycombo><keycap>Alt</keycap><keycap>Down</keycap></keycombo>.
+         <keycombo><keycap>Alt</keycap><keycap>Down</keycap></keycombo>
+         (the Down key in the numeric keypad also works).
        </para>
 
        <variablelist role="params">
@@ -339,7 +440,42 @@ class "GtkFileChooserDefault" binding "my-own-gtkfilechooser-bindings"
        <para>
          This is used to make the file chooser show the user's home
          folder in the file list.  By default this is bound to
-         <keycombo><keycap>Alt</keycap><keycap>Home</keycap></keycombo>.
+         <keycombo><keycap>Alt</keycap><keycap>Home</keycap></keycombo>
+         (the Home key in the numeric keypad also works).
+       </para>
+
+       <variablelist role="params">
+         <varlistentry>
+           <term><parameter>chooser</parameter>&nbsp;:</term>
+           <listitem>
+             <simpara>
+               the object which received the signal.
+             </simpara>
+           </listitem>
+         </varlistentry>
+         <varlistentry>
+           <term><parameter>user_data</parameter>&nbsp;:</term>
+           <listitem>
+             <simpara>
+               user data set when the signal handler was connected.
+             </simpara>
+           </listitem>
+         </varlistentry>
+       </variablelist>
+      </refsect3>
+
+      <refsect3 id="GtkFileChooserDefault-desktop-folder">
+       <title>The &quot;GtkFileChooserDefault::desktop-folder&quot; signal</title>
+
+       <programlisting>
+          void user_function (GtkFileChooserDefault *chooser,
+                              <link linkend="gpointer">gpointer</link> user_data);
+       </programlisting>
+
+       <para>
+         This is used to make the file chooser show the user's Desktop
+         folder in the file list.  By default this is bound to
+         <keycombo><keycap>Alt</keycap><keycap>D</keycap></keycombo>.
        </para>
 
        <variablelist role="params">
@@ -361,19 +497,153 @@ class "GtkFileChooserDefault" binding "my-own-gtkfilechooser-bindings"
          </varlistentry>
        </variablelist>
       </refsect3>
+
+      <refsect3 id="GtkFileChooserDefault-quick-bookmark">
+       <title>The &quot;GtkFileChooserDefault::quick-bookmark&quot; signal</title>
+
+       <programlisting>
+          void user_function (GtkFileChooserDefault *chooser,
+                              gint bookmark_index,
+                              <link linkend="gpointer">gpointer</link> user_data);
+       </programlisting>
+
+       <para>
+         This is used to make the file chooser switch to the bookmark
+         specified in the <parameter>bookmark_index</parameter> parameter.
+         For example, if you have three bookmarks, you can pass 0, 1, 2 to
+         this signal to switch to each of them, respectively.  By default this is bound to
+         <keycombo><keycap>Alt</keycap><keycap>1</keycap></keycombo>,
+         <keycombo><keycap>Alt</keycap><keycap>2</keycap></keycombo>, 
+         etc. until
+         <keycombo><keycap>Alt</keycap><keycap>0</keycap></keycombo>.  Note
+         that in the default binding,
+         that <keycombo><keycap>Alt</keycap><keycap>1</keycap></keycombo> is
+         actually defined to switch to the bookmark at index 0, and so on
+         successively;
+         <keycombo><keycap>Alt</keycap><keycap>0</keycap></keycombo> is
+         defined to switch to the bookmark at index 10.
+       </para>
+
+       <variablelist role="params">
+         <varlistentry>
+           <term><parameter>chooser</parameter>&nbsp;:</term>
+           <listitem>
+             <simpara>
+               the object which received the signal.
+             </simpara>
+           </listitem>
+         </varlistentry>
+         <varlistentry>
+           <term><parameter>bookmark_indes</parameter>&nbsp;:</term>
+           <listitem>
+             <simpara>
+               index of the bookmark to switch to; the indices start at 0.
+             </simpara>
+           </listitem>
+         </varlistentry>
+         <varlistentry>
+           <term><parameter>user_data</parameter>&nbsp;:</term>
+           <listitem>
+             <simpara>
+               user data set when the signal handler was connected.
+             </simpara>
+           </listitem>
+         </varlistentry>
+       </variablelist>
+      </refsect3>
     </refsect2>
 
 <!-- ##### SECTION See_Also ##### -->
     <para>
-      #GtkFileChooserDialog, #GtkFileChooserWidget
+      #GtkFileChooserDialog, #GtkFileChooserWidget, #GtkFileChooserButton
     </para>
 
+<!-- ##### SECTION Stability_Level ##### -->
+
+
 <!-- ##### STRUCT GtkFileChooser ##### -->
 <para>
 
 </para>
 
 
+<!-- ##### SIGNAL GtkFileChooser::confirm-overwrite ##### -->
+    <para>
+      This signal gets emitted whenever it is appropriate to present a
+      confirmation dialog when the user has selected a file name that
+      already exists.  The signal only gets emitted when the file
+      chooser is in #GTK_FILE_CHOOSER_ACTION_SAVE mode.
+    </para>
+
+    <para>
+      Most applications just need to turn on the <link
+      linkend="GtkFileChooser--do-overwrite-confirmation">do-overwrite-confirmation</link>
+      property (or call the
+      gtk_file_chooser_set_do_overwrite_confirmation() function), and
+      they will automatically get a stock confirmation dialog.
+      Applications which need to customize this behavior should do
+      that, and also connect to the <symbol>confirm-overwrite</symbol>
+      signal.
+    </para>
+
+    <para>
+      A signal handler for this signal must return a
+      #GtkFileChooserConfirmation value, which indicates the action to
+      take.  If the handler determines that the user wants to select a
+      different filename, it should return
+      #GTK_FILE_CHOOSER_CONFIRMATION_SELECT_AGAIN.  If it determines
+      that the user is satisfied with his choice of file name, it
+      should return #GTK_FILE_CHOOSER_CONFIRMATION_ACCEPT_FILENAME.
+      On the other hand, if it determines that the stock confirmation
+      dialog should be used, it should return
+      #GTK_FILE_CHOOSER_CONFIRMATION_CONFIRM.  The following example
+      illustrates this.
+    </para>
+
+    <example id="gtkfilechooser-confirmation">
+      <title>Custom confirmation</title>
+
+      <programlisting>
+static GtkFileChooserConfirmation
+confirm_overwrite_callback (GtkFileChooser *chooser, gpointer data)
+{
+  char *uri;
+
+  uri = gtk_file_chooser_get_uri (chooser);
+
+  if (is_uri_read_only (uri))
+    {
+      if (user_wants_to_replace_read_only_file (uri))
+        return GTK_FILE_CHOOSER_CONFIRMATION_ACCEPT_FILENAME;
+      else
+        return GTK_FILE_CHOOSER_CONFIRMATION_SELECT_AGAIN;
+    } else
+      return GTK_FILE_CHOOSER_CONFIRMATION_CONFIRM; /* fall back to the default dialog */
+}
+
+...
+
+chooser = gtk_file_chooser_dialog_new (...);
+
+gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), TRUE);
+g_signal_connect (chooser, "confirm-overwrite",
+                  G_CALLBACK (confirm_overwrite_callback), NULL);
+
+if (gtk_dialog_run (chooser) == GTK_RESPONSE_ACCEPT)
+        save_to_file (gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (chooser));
+
+gtk_widget_destroy (chooser);
+      </programlisting>
+    </example>
+
+@filechooser: the object which received the signal.
+@Returns: #GtkFileChooserConfirmation value that indicates which
+    action to take after emitting the signal.
+
+    <para>
+      Since 2.8
+    </para>
+
 <!-- ##### SIGNAL GtkFileChooser::current-folder-changed ##### -->
 <para>
 
@@ -407,6 +677,11 @@ class "GtkFileChooserDefault" binding "my-own-gtkfilechooser-bindings"
 
 </para>
 
+<!-- ##### ARG GtkFileChooser:do-overwrite-confirmation ##### -->
+<para>
+
+</para>
+
 <!-- ##### ARG GtkFileChooser:extra-widget ##### -->
 <para>
 
@@ -470,6 +745,27 @@ class "GtkFileChooserDefault" binding "my-own-gtkfilechooser-bindings"
     new folder.  The file chooser will let the user name an existing or
     new folder.
 
+<!-- ##### ENUM GtkFileChooserConfirmation ##### -->
+    <para>
+      Used as a return value of handlers for the <link
+      linkend="GtkFileChooser-confirm-overwrite">confirm-overwrite</link>
+      signal of a <classname>GtkFileChooser</classname>.  This value
+      determines whether the file chooser will present the stock
+      confirmation dialog, accept the user's choice of a filename, or
+      let the user choose another filename.
+    </para>
+
+@GTK_FILE_CHOOSER_CONFIRMATION_CONFIRM: The file chooser will present
+    its stock dialog to confirm about overwriting an existing file.
+@GTK_FILE_CHOOSER_CONFIRMATION_ACCEPT_FILENAME: The file chooser will
+    terminate and accept the user's choice of a file name.
+@GTK_FILE_CHOOSER_CONFIRMATION_SELECT_AGAIN: The file chooser will
+    continue running, so as to let the user select another file name.
+
+    <para>
+      Since 2.8
+    </para>
+
 <!-- ##### MACRO GTK_FILE_CHOOSER_ERROR ##### -->
     <para>
       Used to get the #GError quark for #GtkFileChooser errors.
@@ -485,14 +781,7 @@ class "GtkFileChooserDefault" binding "my-own-gtkfilechooser-bindings"
 
 @GTK_FILE_CHOOSER_ERROR_NONEXISTENT: Indicates that a file does not exist.
 @GTK_FILE_CHOOSER_ERROR_BAD_FILENAME: Indicates a malformed filename.
-
-<!-- ##### FUNCTION gtk_file_chooser_error_quark ##### -->
-<para>
-
-</para>
-
-@Returns: 
-
+@GTK_FILE_CHOOSER_ERROR_ALREADY_EXISTS: 
 
 <!-- ##### FUNCTION gtk_file_chooser_set_action ##### -->
 <para>
@@ -519,8 +808,6 @@ class "GtkFileChooserDefault" binding "my-own-gtkfilechooser-bindings"
 
 @chooser: 
 @local_only: 
-<!-- # Unused Parameters # -->
-@files_only: 
 
 
 <!-- ##### FUNCTION gtk_file_chooser_get_local_only ##### -->
@@ -568,6 +855,24 @@ class "GtkFileChooserDefault" binding "my-own-gtkfilechooser-bindings"
 @Returns: 
 
 
+<!-- ##### FUNCTION gtk_file_chooser_set_do_overwrite_confirmation ##### -->
+<para>
+
+</para>
+
+@chooser: 
+@do_overwrite_confirmation: 
+
+
+<!-- ##### FUNCTION gtk_file_chooser_get_do_overwrite_confirmation ##### -->
+<para>
+
+</para>
+
+@chooser: 
+@Returns: 
+
+
 <!-- ##### FUNCTION gtk_file_chooser_set_current_name ##### -->
 <para>
 
@@ -786,8 +1091,6 @@ class "GtkFileChooserDefault" binding "my-own-gtkfilechooser-bindings"
 
 @chooser: 
 @Returns: 
-<!-- # Unused Parameters # -->
-@file_chooser: 
 
 
 <!-- ##### FUNCTION gtk_file_chooser_get_preview_uri ##### -->
@@ -797,8 +1100,6 @@ class "GtkFileChooserDefault" binding "my-own-gtkfilechooser-bindings"
 
 @chooser: 
 @Returns: 
-<!-- # Unused Parameters # -->
-@file_chooser: 
 
 
 <!-- ##### FUNCTION gtk_file_chooser_set_extra_widget ##### -->
@@ -904,8 +1205,6 @@ class "GtkFileChooserDefault" binding "my-own-gtkfilechooser-bindings"
 @uri: 
 @error: 
 @Returns: 
-<!-- # Unused Parameters # -->
-@folder: 
 
 
 <!-- ##### FUNCTION gtk_file_chooser_remove_shortcut_folder_uri ##### -->
@@ -917,8 +1216,6 @@ class "GtkFileChooserDefault" binding "my-own-gtkfilechooser-bindings"
 @uri: 
 @error: 
 @Returns: 
-<!-- # Unused Parameters # -->
-@folder: 
 
 
 <!-- ##### FUNCTION gtk_file_chooser_list_shortcut_folder_uris ##### -->