2 * Copyright (C) 2006 Emmanuele Bassi.
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Library General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Library General Public License for more details.
14 * You should have received a copy of the GNU Library General Public
15 * License along with this library; if not, write to the
16 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17 * Boston, MA 02111-1307, USA.
23 #include <sys/types.h>
34 # define localtime_r(t,b) *(b) = localtime (t)
36 # define S_ISREG(m) ((m) & _S_IFREG)
40 #include "prop-editor.h"
43 print_current_item (GtkRecentChooser
*chooser
)
47 uri
= gtk_recent_chooser_get_current_uri (chooser
);
48 g_print ("Current item changed :\n %s\n", uri
? uri
: "null");
53 print_selected (GtkRecentChooser
*chooser
)
56 gchar
**uris
= gtk_recent_chooser_get_uris (chooser
, &uris_len
);
58 g_print ("Selection changed :\n");
59 for (i
= 0; i
< uris_len
; i
++)
60 g_print (" %s\n", uris
[i
]);
67 response_cb (GtkDialog
*dialog
,
70 if (response_id
== GTK_RESPONSE_OK
)
74 g_print ("Dialog was closed\n");
80 filter_changed (GtkRecentChooserDialog
*dialog
,
83 g_print ("recent filter changed\n");
87 notify_multiple_cb (GtkWidget
*dialog
,
93 multiple
= gtk_recent_chooser_get_select_multiple (GTK_RECENT_CHOOSER (dialog
));
95 gtk_widget_set_sensitive (button
, multiple
);
99 kill_dependent (GtkWindow
*win
,
102 gtk_object_destroy (dep
);
103 g_object_unref (dep
);
110 GtkWidget
*control_window
;
114 GtkWidget
*prop_editor
;
115 GtkRecentFilter
*filter
;
117 gboolean multiple
= FALSE
;
119 gtk_init (&argc
, &argv
);
121 /* to test rtl layout, set RTL=1 in the environment */
122 if (g_getenv ("RTL"))
123 gtk_widget_set_default_direction (GTK_TEXT_DIR_RTL
);
125 for (i
= 1; i
< argc
; i
++)
127 if (!strcmp ("--multiple", argv
[i
]))
131 dialog
= g_object_new (GTK_TYPE_RECENT_CHOOSER_DIALOG
,
132 "select-multiple", multiple
,
136 gtk_window_set_title (GTK_WINDOW (dialog
), "Select a file");
137 gtk_dialog_add_buttons (GTK_DIALOG (dialog
),
138 GTK_STOCK_CANCEL
, GTK_RESPONSE_CANCEL
,
139 GTK_STOCK_OPEN
, GTK_RESPONSE_OK
,
142 gtk_dialog_set_default_response (GTK_DIALOG (dialog
), GTK_RESPONSE_OK
);
144 g_signal_connect (dialog
, "item-activated",
145 G_CALLBACK (print_current_item
), NULL
);
146 g_signal_connect (dialog
, "selection-changed",
147 G_CALLBACK (print_selected
), NULL
);
148 g_signal_connect (dialog
, "response",
149 G_CALLBACK (response_cb
), NULL
);
152 filter
= gtk_recent_filter_new ();
153 gtk_recent_filter_set_name (filter
, "All Files");
154 gtk_recent_filter_add_pattern (filter
, "*");
155 gtk_recent_chooser_add_filter (GTK_RECENT_CHOOSER (dialog
), filter
);
157 filter
= gtk_recent_filter_new ();
158 gtk_recent_filter_set_name (filter
, "Only PDF Files");
159 gtk_recent_filter_add_mime_type (filter
, "application/pdf");
160 gtk_recent_chooser_add_filter (GTK_RECENT_CHOOSER (dialog
), filter
);
162 g_signal_connect (dialog
, "notify::filter",
163 G_CALLBACK (filter_changed
), NULL
);
165 gtk_recent_chooser_set_filter (GTK_RECENT_CHOOSER (dialog
), filter
);
167 filter
= gtk_recent_filter_new ();
168 gtk_recent_filter_set_name (filter
, "PNG and JPEG");
169 gtk_recent_filter_add_mime_type (filter
, "image/png");
170 gtk_recent_filter_add_mime_type (filter
, "image/jpeg");
171 gtk_recent_chooser_add_filter (GTK_RECENT_CHOOSER (dialog
), filter
);
173 gtk_widget_show_all (dialog
);
175 prop_editor
= create_prop_editor (G_OBJECT (dialog
), GTK_TYPE_RECENT_CHOOSER
);
177 control_window
= gtk_window_new (GTK_WINDOW_TOPLEVEL
);
179 vbbox
= gtk_vbutton_box_new ();
180 gtk_container_add (GTK_CONTAINER (control_window
), vbbox
);
182 button
= gtk_button_new_with_mnemonic ("_Select all");
183 gtk_widget_set_sensitive (button
, multiple
);
184 gtk_container_add (GTK_CONTAINER (vbbox
), button
);
185 g_signal_connect_swapped (button
, "clicked",
186 G_CALLBACK (gtk_recent_chooser_select_all
), dialog
);
187 g_signal_connect (dialog
, "notify::select-multiple",
188 G_CALLBACK (notify_multiple_cb
), button
);
190 button
= gtk_button_new_with_mnemonic ("_Unselect all");
191 gtk_container_add (GTK_CONTAINER (vbbox
), button
);
192 g_signal_connect_swapped (button
, "clicked",
193 G_CALLBACK (gtk_recent_chooser_unselect_all
), dialog
);
195 gtk_widget_show_all (control_window
);
197 g_object_ref (control_window
);
198 g_signal_connect (dialog
, "destroy",
199 G_CALLBACK (kill_dependent
), control_window
);
201 g_object_ref (dialog
);
203 gtk_widget_destroy (dialog
);
204 g_object_unref (dialog
);