filename | src/gdrom/gdrom.c |
changeset | 678:35eb00945316 |
prev | 644:ccae4bfa5f82 |
next | 691:ad3356543392 |
author | nkeynes |
date | Thu May 29 11:00:26 2008 +0000 (15 years ago) |
permissions | -rw-r--r-- |
last change | Split gdrom.h into public and private gddriver.h Reorganize gdrom mount to use a disc change hook |
file | annotate | diff | log | raw |
1.1 --- a/src/gdrom/gdrom.c Sun Mar 02 11:38:08 2008 +00001.2 +++ b/src/gdrom/gdrom.c Thu May 29 11:00:26 2008 +00001.3 @@ -20,13 +20,22 @@1.4 #include <stdio.h>1.5 #include <fcntl.h>1.6 #include <errno.h>1.7 +#include <glib/gutils.h>1.8 #include "gdrom/ide.h"1.9 #include "gdrom/gdrom.h"1.10 +#include "gdrom/gddriver.h"1.11 #include "gdrom/packet.h"1.12 #include "dream.h"1.14 extern gdrom_disc_t gdrom_disc;1.16 +DEFINE_HOOK( gdrom_disc_change_hook, gdrom_disc_change_hook_t )1.17 +1.18 +gdrom_fire_disc_changed( gdrom_disc_t disc )1.19 +{1.20 + CALL_HOOKS( gdrom_disc_change_hook, disc, disc == NULL ? NULL : disc->name );1.21 +}1.22 +1.23 gdrom_image_class_t gdrom_image_classes[] = { &cdrom_device_class,1.24 &nrg_image_class,1.25 &cdi_image_class,1.26 @@ -89,17 +98,20 @@1.28 void gdrom_mount_disc( gdrom_disc_t disc )1.29 {1.30 - gdrom_unmount_disc();1.31 - gdrom_disc = disc;1.32 - gdrom_image_dump_info( disc );1.33 + if( disc != gdrom_disc ) {1.34 + gdrom_unmount_disc();1.35 + gdrom_disc = disc;1.36 + gdrom_image_dump_info( disc );1.37 + gdrom_fire_disc_changed( disc );1.38 + }1.39 }1.41 gboolean gdrom_mount_image( const gchar *filename )1.42 {1.43 gdrom_disc_t disc = gdrom_image_open(filename);1.44 if( disc != NULL ) {1.45 - gdrom_mount_disc( disc );1.46 - return TRUE;1.47 + gdrom_mount_disc( disc );1.48 + return TRUE;1.49 }1.50 return FALSE;1.51 }1.52 @@ -107,7 +119,8 @@1.53 void gdrom_unmount_disc( )1.54 {1.55 if( gdrom_disc != NULL ) {1.56 - gdrom_disc->close(gdrom_disc);1.57 + gdrom_disc->close(gdrom_disc);1.58 + gdrom_fire_disc_changed(NULL);1.59 }1.60 gdrom_disc = NULL;1.62 @@ -118,6 +131,15 @@1.63 return gdrom_disc;1.64 }1.66 +const gchar *gdrom_get_current_disc_name()1.67 +{1.68 + if( gdrom_disc == NULL ) {1.69 + return NULL;1.70 + } else {1.71 + return gdrom_disc->name;1.72 + }1.73 +}1.74 +1.75 gchar *gdrom_get_relative_filename( const gchar *base_name, const gchar *rel_name )1.76 {1.77 gchar *dirname = g_path_get_dirname(base_name);
.