* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
/**
const gchar *filename);
static void gtk_recent_manager_clamp_to_age (GtkRecentManager *manager,
gint age);
+static void gtk_recent_manager_enabled_changed (GtkRecentManager *manager);
static void build_recent_items_list (GtkRecentManager *manager);
gobject_class->finalize = gtk_recent_manager_finalize;
/**
- * GtkRecentManager:filename
+ * GtkRecentManager:filename:
*
* The full path to the file to be used to store and read the recently
* used resources list
(G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE)));
/**
- * GtkRecentManager:size
+ * GtkRecentManager:size:
*
* The size of the recently used resources list.
*
G_PARAM_READABLE));
/**
- * GtkRecentManager::changed
+ * GtkRecentManager::changed:
* @recent_manager: the recent manager
*
* Emitted when the current recently used resources manager changes its
gtk_recent_manager_init (GtkRecentManager *manager)
{
GtkRecentManagerPrivate *priv;
+ GtkSettings *settings;
manager->priv = G_TYPE_INSTANCE_GET_PRIVATE (manager,
GTK_TYPE_RECENT_MANAGER,
priv->size = 0;
priv->filename = NULL;
+
+ settings = gtk_settings_get_default ();
+ g_signal_connect_swapped (settings, "notify::gtk-recent-files-enabled",
+ G_CALLBACK (gtk_recent_manager_enabled_changed), manager);
}
static void
G_OBJECT_CLASS (gtk_recent_manager_parent_class)->dispose (gobject);
}
+static void
+gtk_recent_manager_enabled_changed (GtkRecentManager *manager)
+{
+ manager->priv->is_dirty = TRUE;
+ gtk_recent_manager_changed (manager);
+}
+
static void
gtk_recent_manager_real_changed (GtkRecentManager *manager)
{
{
GtkSettings *settings = gtk_settings_get_default ();
gint age = 30;
+ gboolean enabled;
- g_object_get (G_OBJECT (settings), "gtk-recent-files-max-age", &age, NULL);
- if (age > 0)
- gtk_recent_manager_clamp_to_age (manager, age);
- else if (age == 0)
+ g_object_get (G_OBJECT (settings),
+ "gtk-recent-files-max-age", &age,
+ "gtk-recent-files-enabled", &enabled,
+ NULL);
+
+ if (age == 0 || !enabled)
{
g_bookmark_file_free (priv->recent_items);
priv->recent_items = g_bookmark_file_new ();
}
+ else if (age > 0)
+ gtk_recent_manager_clamp_to_age (manager, age);
}
write_error = NULL;
static gchar *
get_default_filename (void)
{
+ if (g_mkdir_with_parents (g_get_user_data_dir (), 0755) == -1)
+ {
+ int saved_errno = errno;
+
+ g_critical ("Unable to create user data directory '%s' for storing "
+ "the recently used files list: %s",
+ g_get_user_data_dir (),
+ g_strerror (saved_errno));
+
+ return NULL;
+ }
+
return g_build_filename (g_get_user_data_dir (),
GTK_RECENTLY_USED_FILE,
NULL);
GtkRecentManager *manager = user_data;
GtkRecentData recent_data;
GFileInfo *file_info;
- gchar *uri;
- GError *error;
+ gchar *uri, *basename;
uri = g_file_get_uri (file);
- error = NULL;
- file_info = g_file_query_info_finish (file, res, &error);
- if (error)
- {
- g_warning ("Unable to retrieve the file info for `%s': %s",
- uri,
- error->message);
- g_error_free (error);
- goto out;
- }
+ file_info = g_file_query_info_finish (file, res, NULL); /* NULL-GError */
recent_data.display_name = NULL;
recent_data.description = NULL;
g_object_unref (file_info);
}
else
- recent_data.mime_type = g_strdup (GTK_RECENT_DEFAULT_MIME);
+ {
+ basename = g_file_get_basename (file);
+ recent_data.mime_type = g_content_type_guess (basename, NULL, 0, NULL);
+ g_free (basename);
+ }
recent_data.app_name = g_strdup (g_get_application_name ());
recent_data.app_exec = g_strjoin (" ", g_get_prgname (), "%u", NULL);
g_free (recent_data.app_name);
g_free (recent_data.app_exec);
-out:
g_object_unref (manager);
g_free (uri);
}
const GtkRecentData *data)
{
GtkRecentManagerPrivate *priv;
+ GtkSettings *settings;
+ gboolean enabled;
g_return_val_if_fail (GTK_IS_RECENT_MANAGER (manager), FALSE);
g_return_val_if_fail (uri != NULL, FALSE);
uri);
return FALSE;
}
-
+
+ settings = gtk_settings_get_default ();
+ g_object_get (G_OBJECT (settings), "gtk-recent-files-enabled", &enabled, NULL);
+ if (!enabled)
+ return TRUE;
+
priv = manager->priv;
if (!priv->recent_items)
*
* Since: 2.10
*/
-G_CONST_RETURN gchar *
+const gchar *
gtk_recent_info_get_uri (GtkRecentInfo *info)
{
g_return_val_if_fail (info != NULL, NULL);
*
* Since: 2.10
*/
-G_CONST_RETURN gchar *
+const gchar *
gtk_recent_info_get_display_name (GtkRecentInfo *info)
{
g_return_val_if_fail (info != NULL, NULL);
*
* Since: 2.10
**/
-G_CONST_RETURN gchar *
+const gchar *
gtk_recent_info_get_description (GtkRecentInfo *info)
{
g_return_val_if_fail (info != NULL, NULL);
*
* Since: 2.10
*/
-G_CONST_RETURN gchar *
+const gchar *
gtk_recent_info_get_mime_type (GtkRecentInfo *info)
{
g_return_val_if_fail (info != NULL, NULL);
return NULL;
pixbuf = gtk_icon_info_load_icon (info, NULL);
- gtk_icon_info_free (info);
+ g_object_unref (info);
return pixbuf;
}
gtk_recent_info_exists (GtkRecentInfo *info)
{
gchar *filename;
- struct stat stat_buf;
+ GStatBuf stat_buf;
gboolean retval = FALSE;
g_return_val_if_fail (info != NULL, FALSE);
filename = g_filename_from_uri (info->uri, NULL, NULL);
if (filename)
{
- if (stat (filename, &stat_buf) == 0)
+ if (g_stat (filename, &stat_buf) == 0)
retval = TRUE;
g_free (filename);