Committing a patch to gnome-2-2 branch of gnome-applets (adds a string)
- From: Balamurali Viswanathan <balamurali viswanathan wipro com>
- To: release-team gnome org
- Cc: gnome-i18n gnome org, kfv101 psu edu
- Subject: Committing a patch to gnome-2-2 branch of gnome-applets (adds a string)
- Date: Wed, 26 Mar 2003 21:23:57 +0530
Hi All,
Have a patch for the following bug
http://bugzilla.gnome.org/show_bug.cgi?id=105296
which has been committed to the HEAD branch of gnome-applets. I would
like to commit it to gnome-2-2 branch as well.
Attaching the patch. Kindly Please let me know whether I can go ahead.
Thanks and Regards,
Bala
Index: gnome-applets//cdplayer/cdplayer.c
===================================================================
RCS file: /export/cvs/gnome-2.0/gnome-applets/cdplayer/cdplayer.c,v
retrieving revision 1.94
diff -p -u -5 -r1.94 cdplayer.c
--- gnome-applets//cdplayer/cdplayer.c 2003/03/07 00:30:36 1.94
+++ gnome-applets//cdplayer/cdplayer.c 2003/03/20 14:45:38
@@ -818,10 +818,11 @@ static void
cdplayer_play_pause(GtkWidget * w, gpointer data)
{
CDPlayerData *cd = data;
cdrom_device_status_t stat;
int status;
+ int ret;
if(!cd_try_open(cd))
return;
status = cdrom_get_status(cd->cdrom_device, &stat);
@@ -838,19 +839,36 @@ cdplayer_play_pause(GtkWidget * w, gpoin
case DISC_COMPLETED:
case DISC_STOP:
cdplayer_update_play_pause_button (cd, PAUSE_IMAGE);
case DISC_ERROR:
cdrom_read_track_info(cd->cdrom_device);
- cdrom_play(cd->cdrom_device, cd->cdrom_device->track0,
+ ret = cdrom_play(cd->cdrom_device, cd->cdrom_device->track0,
cd->cdrom_device->track1);
break;
}
} else if(status == DISC_TRAY_OPEN) {
cdrom_load(cd->cdrom_device);
cdrom_read_track_info(cd->cdrom_device);
- cdrom_play(cd->cdrom_device, cd->cdrom_device->track0,
+ ret = cdrom_play(cd->cdrom_device, cd->cdrom_device->track0,
cd->cdrom_device->track1);
+ }
+
+ if (ret == DISC_DEVICE_BUSY) {
+ GtkWidget *dialog;
+ dialog = gtk_message_dialog_new (NULL,
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_CLOSE,
+ "Audio Device is busy, or being used by another application",
+ NULL);
+ gtk_window_set_screen (GTK_WINDOW (dialog),
+ gtk_widget_get_screen (cd->panel.applet));
+ g_signal_connect_swapped (GTK_OBJECT (dialog), "response",
+ G_CALLBACK (gtk_widget_destroy),
+ GTK_OBJECT (dialog));
+
+ gtk_widget_show_all (dialog);
}
}
static void
cdplayer_stop(GtkWidget * w, gpointer data)
Index: gnome-applets//cdplayer/cdrom-interface.h
===================================================================
RCS file: /export/cvs/gnome-2.0/gnome-applets/cdplayer/cdrom-interface.h,v
retrieving revision 1.9
diff -p -u -5 -r1.9 cdrom-interface.h
--- gnome-applets//cdplayer/cdrom-interface.h 2002/12/02 02:27:44 1.9
+++ gnome-applets//cdplayer/cdrom-interface.h 2003/03/20 14:45:38
@@ -12,11 +12,12 @@ enum {
enum {
DISC_NO_ERROR = 0,
DISC_IO_ERROR,
DISC_INDEX_OUT_OF_RANGE,
DISC_TRAY_OPEN,
- DISC_DRIVE_NOT_READY
+ DISC_DRIVE_NOT_READY,
+ DISC_DEVICE_BUSY
};
enum {
DISC_PLAY,
DISC_PAUSED,
Index: gnome-applets//cdplayer/cdrom-solaris.c
===================================================================
RCS file: /export/cvs/gnome-2.0/gnome-applets/cdplayer/cdrom-solaris.c,v
retrieving revision 1.6
diff -p -u -5 -r1.6 cdrom-solaris.c
--- gnome-applets//cdplayer/cdrom-solaris.c 2002/07/12 00:27:52 1.6
+++ gnome-applets//cdplayer/cdrom-solaris.c 2003/03/20 14:45:38
@@ -22,17 +22,20 @@ int
cdrom_play(cdrom_device_t cdp, int start, int stop)
{
struct cdrom_ti ti;
struct cdrom_msf msf;
int start_lba, end_lba;
+ int ret;
/* If CDDA convert addresses to LBA format */
if (cdp->cdda) {
start_lba = msf2lba(&cdp->track_info[start - 1]);
end_lba = msf2lba(&cdp->track_info[stop]);
audio_stop(cdp->cdda);
- audio_start(cdp->cdda, start_lba, end_lba);
+ ret = audio_start(cdp->cdda, start_lba, end_lba);
+ if (ret == -1)
+ return DISC_DEVICE_BUSY;
return (DISC_NO_ERROR);
}
/* Set up CDROMPLAYMSF call. If this fails try CDROMPLAYTRKIND */
msf.cdmsf_min0 = cdp->track_info[start-1].address.minute;
Index: gnome-applets//cdplayer/writer-solaris.c
===================================================================
RCS file: /export/cvs/gnome-2.0/gnome-applets/cdplayer/writer-solaris.c,v
retrieving revision 1.2
diff -p -u -5 -r1.2 writer-solaris.c
--- gnome-applets//cdplayer/writer-solaris.c 2002/07/16 14:24:47 1.2
+++ gnome-applets//cdplayer/writer-solaris.c 2003/03/20 14:45:39
@@ -5,17 +5,18 @@
*/
#include "cdda-solaris.h"
#include "reader-solaris.h"
#include "writer-solaris.h"
+#include <errno.h>
/* Private function prototypes */
static void audio_get_info(cdda_t *, audio_info_t *);
static void audio_set_info(cdda_t *, audio_info_t *);
static void audio_flush(cdda_t *);
static void audio_drain(cdda_t *);
-static void cdda_audio_open(cdda_t *);
+static int cdda_audio_open(cdda_t *);
static void cdda_audio_close(cdda_t *);
static void audio_config(cdda_t *);
static int audio_supports_analog(cdda_t *);
static void audio_write_chunk(cdda_t *, char *);
static void audio_write_eof(cdda_t *);
@@ -144,25 +145,30 @@ audio_drain(cdda_t *cdda)
*
* Arguments:
* cdda_t *cdda Ptr to cdda state structure
*
* Returns:
- * void
+ * int: The error number if open fails
*/
-static void
+static int
cdda_audio_open(cdda_t *cdda)
{
+ extern int errno;
+ errno = 0;
/* Return if already open */
if (cdda->audio >= 0) {
- return;
+ return errno;
}
/* Open audio device */
- if ((cdda->audio = open(cdda->audio_device, O_WRONLY)) < 0) {
+ if ((cdda->audio = open(cdda->audio_device, O_WRONLY | O_NDELAY)) < 0) {
perror("open()");
+ return errno;
}
+ fcntl (cdda->audio, F_SETFL, O_WRONLY);
+ return errno;
} /* cdda_audio_open() */
/*
* cdda_audio_close()
@@ -601,18 +607,19 @@ audio_get_state(cdda_t *cdda, struct cdr
* cdda_t *cdda Ptr to cdda state structure
* int start_lba Start play address
* int end_lba End play address
*
* Returns:
- * void
+ * int: -1 for failure and 1 for sucess
*/
-void
+int
audio_start(cdda_t *cdda, int start_lba, int end_lba)
{
+ int errno;
/* If playing do nothing */
if (cdda->state != CDDA_STOPPED) {
- return;
+ return 1;
}
/* Initialise */
cdda->start_lba = start_lba;
cdda->end_lba = end_lba;
@@ -621,11 +628,13 @@ audio_start(cdda_t *cdda, int start_lba,
cdda->cdb.occupied = 0;
cdda->cdb.nextin = 0;
cdda->cdb.nextout = 0;
/* Open the audio device */
- cdda_audio_open(cdda);
+ errno = cdda_audio_open(cdda);
+ if (cdda->audio < 0 && errno == EBUSY)
+ return -1;
/* Configure for CD audio */
audio_config(cdda);
/* Fill buffers */
@@ -646,10 +655,11 @@ audio_start(cdda_t *cdda, int start_lba,
(void *)cdda) < 0) {
perror("pthread_create()");
exit(EXIT_FAILURE);
}
+ return 1;
} /* audio_start() */
/*
* cdda_cleanup()
Index: gnome-applets//cdplayer/writer-solaris.h
===================================================================
RCS file: /export/cvs/gnome-2.0/gnome-applets/cdplayer/writer-solaris.h,v
retrieving revision 1.1
diff -p -u -5 -r1.1 writer-solaris.h
--- gnome-applets//cdplayer/writer-solaris.h 2002/07/12 00:27:52 1.1
+++ gnome-applets//cdplayer/writer-solaris.h 2003/03/20 14:45:39
@@ -3,11 +3,11 @@
*/
#ifndef __WRITER_SOLARIS_H__
#define __WRITER_SOLARIS_H__
/* Exported function prototypes */
-void audio_start(cdda_t *, int, int);
+int audio_start(cdda_t *, int, int);
void audio_pause(cdda_t *);
void audio_resume(cdda_t *);
void audio_stop(cdda_t *);
int audio_get_state(cdda_t *, struct cdrom_subchnl *);
void cdda_check(void **, int);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]