On Mon, 2005-03-07 at 23:19 -0500, Francois Isabelle wrote: > So ... > > What's the verdict ? > > > Either that or remove the current lirc > > support from the 0.8 branch if its not going to be used. > > I think Jon is right, there is nothing evil in needing to link to lirc > at compile time until the bonobo interface is complete. > > LIRC support is a MUST for any multimedia app, a jukebox really needs it > I think. For those who are interested, I've atttached the LIRC patch from way back. I doubt it still applies to the current branch but shouldn't be too much work to integrate. I haven't used LIRC in a while since my remote stopped working but it used to work great with rhythmbox. Regards, Jon Oberheide -- Jon Oberheide <jon oberheide org> GnuPG Key: 1024D/F47C17FE Fingerprint: B716 DA66 8173 6EDD 28F6 F184 5842 1C89 F47C 17FE
diff -ur rhythmbox.old/configure.ac rhythmbox.cvs/configure.ac
--- rhythmbox.old/configure.ac 2004-06-03 11:30:56.427871296 -0500
+++ rhythmbox.cvs/configure.ac 2004-06-03 11:31:24.669577904 -0500
@@ -214,11 +214,23 @@
AC_DEFINE_UNQUOTED(RB_HAVE_ATOMIC_INT, 1, [Some atomic integer implementation present])
fi
-dnl AC_CHECK_LIB(lirc_client, lirc_init,
-dnl [ AC_CHECK_HEADER(lirc/lirc_client.h,
-dnl [ RHYTHMBOX_LIBS="$RHYTHMBOX_LIBS -llirc_client"
-dnl AC_DEFINE(HAVE_REMOTE)]
-dnl ,,) ] ,)
+dnl Check for lirc
+
+AC_ARG_ENABLE(lirc, AC_HELP_STRING([--enable-lirc],
+ [build with lirc support]))
+if test x"$enable_lirc" = xyes; then
+ AC_CHECK_HEADER(lirc/lirc_client.h,[enable_lirc=yes],[enable_lirc=no])
+ if test x"$enable_lirc" = xyes; then
+ AC_CHECK_LIB(lirc_client,lirc_init,[enable_lirc=yes],[enable_lirc=no])
+ fi
+ if test x"$enable_lirc" = xyes; then
+ RHYTHMBOX_LIBS="$RHYTHMBOX_LIBS -llirc_client"
+ AC_DEFINE(HAVE_REMOTE,1,[Define if you have lirc support])
+ else
+ AC_MSG_ERROR([Cannot find lirc on your system])
+ fi
+fi
+AM_CONDITIONAL(HAVE_REMOTE, test x"$enable_lirc" = xyes)
dnl Check for libid3tag
@@ -589,6 +601,11 @@
else
AC_MSG_NOTICE([ iPod integration disabled])
fi
+if test x"$enable_lirc" = xyes; then
+ AC_MSG_NOTICE([** lirc remote support enabled])
+else
+ AC_MSG_NOTICE([ lirc remote support disabled])
+fi
dnl if test "x$enable_audiocd" != "xyes"; then
dnl AC_MSG_NOTICE([ Audio CD support is disabled])
diff -ur rhythmbox.old/shell/rb-remote.c rhythmbox.cvs/shell/rb-remote.c
--- rhythmbox.old/shell/rb-remote.c 2004-06-03 11:30:56.388877224 -0500
+++ rhythmbox.cvs/shell/rb-remote.c 2004-06-03 14:45:09.428345952 -0500
@@ -34,6 +34,7 @@
/* strings that we recognize as commands from lirc */
#define RB_IR_COMMAND_PLAY "play"
#define RB_IR_COMMAND_PAUSE "pause"
+#define RB_IR_COMMAND_STOP "stop"
#define RB_IR_COMMAND_SHUFFLE "shuffle"
#define RB_IR_COMMAND_REPEAT "repeat"
#define RB_IR_COMMAND_NEXT "next"
@@ -43,7 +44,6 @@
#define RB_IR_COMMAND_VOLUME_UP "volume_up"
#define RB_IR_COMMAND_VOLUME_DOWN "volume_down"
#define RB_IR_COMMAND_MUTE "mute"
-#define RB_IR_COMMAND_QUIT "quit"
struct _RBRemote {
GObject parent;
@@ -67,6 +67,8 @@
return RB_REMOTE_COMMAND_PLAY;
else if (strcmp (str, RB_IR_COMMAND_PAUSE) == 0)
return RB_REMOTE_COMMAND_PAUSE;
+ else if (strcmp (str, RB_IR_COMMAND_STOP) == 0)
+ return RB_REMOTE_COMMAND_STOP;
else if (strcmp (str, RB_IR_COMMAND_SHUFFLE) == 0)
return RB_REMOTE_COMMAND_SHUFFLE;
else if (strcmp (str, RB_IR_COMMAND_REPEAT) == 0)
@@ -85,8 +87,6 @@
return RB_REMOTE_COMMAND_VOLUME_DOWN;
else if (strcmp (str, RB_IR_COMMAND_MUTE) == 0)
return RB_REMOTE_COMMAND_MUTE;
- else if (strcmp (str, RB_IR_COMMAND_QUIT) == 0)
- return RB_REMOTE_COMMAND_QUIT;
else
return RB_REMOTE_COMMAND_UNKNOWN;
}
diff -ur rhythmbox.old/shell/rb-remote.h rhythmbox.cvs/shell/rb-remote.h
--- rhythmbox.old/shell/rb-remote.h 2004-06-03 11:30:56.388877224 -0500
+++ rhythmbox.cvs/shell/rb-remote.h 2004-06-03 13:36:16.464651936 -0500
@@ -40,6 +40,7 @@
RB_REMOTE_COMMAND_UNKNOWN,
RB_REMOTE_COMMAND_PLAY,
RB_REMOTE_COMMAND_PAUSE,
+ RB_REMOTE_COMMAND_STOP,
RB_REMOTE_COMMAND_SHUFFLE,
RB_REMOTE_COMMAND_REPEAT,
RB_REMOTE_COMMAND_NEXT,
@@ -49,7 +50,6 @@
RB_REMOTE_COMMAND_VOLUME_UP,
RB_REMOTE_COMMAND_VOLUME_DOWN,
RB_REMOTE_COMMAND_MUTE,
- RB_REMOTE_COMMAND_QUIT
} RBRemoteCommand;
typedef struct
diff -ur rhythmbox.old/shell/rb-shell-player.c rhythmbox.cvs/shell/rb-shell-player.c
--- rhythmbox.old/shell/rb-shell-player.c 2004-06-03 11:30:56.388877224 -0500
+++ rhythmbox.cvs/shell/rb-shell-player.c 2004-06-03 14:58:50.100584808 -0500
@@ -169,6 +169,10 @@
static void gconf_play_order_changed (GConfClient *client,guint cnxn_id,
GConfEntry *entry, RBShellPlayer *player);
+#ifdef HAVE_REMOTE
+static void button_pressed_cb (RBRemote *remote, RBRemoteCommand cmd, gpointer data);
+#endif /* HAVE_REMOTE */
+
#ifdef HAVE_MMKEYS
static void grab_mmkey (int key_code, GdkWindow *root);
static GdkFilterReturn filter_mmkeys (GdkXEvent *xevent,
@@ -248,6 +252,7 @@
GtkWidget *magic_button;
RBRemote *remote;
+ float muted_volume;
guint gconf_play_order_id;
guint gconf_state_id;
@@ -567,6 +572,17 @@
(GConfClientNotifyFunc) rb_shell_player_state_changed_cb,
player);
+#ifdef HAVE_REMOTE
+ /* Enable lirc remote support */
+ player->priv->remote = rb_remote_new ();
+ player->priv->muted_volume = -1;
+
+ g_signal_connect_object (G_OBJECT (player->priv->remote),
+ "button_pressed",
+ G_CALLBACK (button_pressed_cb),
+ player, 0);
+#endif /* HAVE_REMOTE */
+
#ifdef HAVE_MMKEYS
/* Enable Multimedia Keys */
rb_shell_player_init_mmkeys (player);
@@ -2108,6 +2124,98 @@
return shell_player->priv->url;
}
+#ifdef HAVE_REMOTE
+static void
+button_pressed_cb (RBRemote *remote, RBRemoteCommand cmd, gpointer data)
+{
+ long time;
+ float volume;
+ RBPlayer *mmplayer;
+ RBShellPlayer *player = RB_SHELL_PLAYER (data);
+
+ switch (cmd)
+ {
+ case RB_REMOTE_COMMAND_PLAY:
+ rb_shell_player_cmd_play (NULL, player, NULL);
+ break;
+ case RB_REMOTE_COMMAND_PAUSE:
+ rb_shell_player_cmd_pause (NULL, player, NULL);
+ break;
+ case RB_REMOTE_COMMAND_STOP:
+ rb_shell_player_cmd_stop (NULL, player, NULL);
+ break;
+ case RB_REMOTE_COMMAND_SHUFFLE:
+ rb_shell_player_shuffle_changed_cb (NULL, NULL, 0, NULL, player);
+ break;
+ case RB_REMOTE_COMMAND_REPEAT:
+ rb_shell_player_repeat_changed_cb (NULL, NULL, 0, NULL, player);
+ break;
+ case RB_REMOTE_COMMAND_NEXT:
+ rb_shell_player_cmd_next (NULL, player, NULL);
+ break;
+ case RB_REMOTE_COMMAND_PREVIOUS:
+ rb_shell_player_cmd_previous (NULL, player, NULL);
+ break;
+ case RB_REMOTE_COMMAND_SEEK_FORWARD:
+ time = rb_shell_player_get_playing_time (player) + 10;
+ rb_shell_player_set_playing_time (player, time);
+ break;
+ case RB_REMOTE_COMMAND_SEEK_BACKWARD:
+ time = rb_shell_player_get_playing_time (player) - 10;
+
+ if (time < 0)
+ time = 0;
+
+ rb_shell_player_set_playing_time (player, time);
+ break;
+ case RB_REMOTE_COMMAND_VOLUME_UP:
+ mmplayer = rb_shell_player_get_mm_player (player);
+ volume = rb_player_get_volume (mmplayer) + .1;
+
+ if (volume > 1.0)
+ volume = 1.0;
+
+ if (player->priv->muted_volume == -1) {
+ rb_player_set_volume (mmplayer, volume);
+ } else {
+ rb_player_set_volume (mmplayer, player->priv->muted_volume);
+ player->priv->muted_volume = -1;
+ }
+
+ break;
+ case RB_REMOTE_COMMAND_VOLUME_DOWN:
+ mmplayer = rb_shell_player_get_mm_player (player);
+ volume = rb_player_get_volume (mmplayer) - .1;
+
+ if (volume < 0.0)
+ volume = 0.0;
+
+ if (player->priv->muted_volume == -1) {
+ rb_player_set_volume (mmplayer, volume);
+ } else {
+ rb_player_set_volume (mmplayer, player->priv->muted_volume);
+ player->priv->muted_volume = -1;
+ }
+
+ break;
+ case RB_REMOTE_COMMAND_MUTE:
+ mmplayer = rb_shell_player_get_mm_player (player);
+
+ if (player->priv->muted_volume == -1) {
+ player->priv->muted_volume = rb_player_get_volume (mmplayer);
+ rb_player_set_volume (mmplayer, 0.0);
+ } else {
+ rb_player_set_volume (mmplayer, player->priv->muted_volume);
+ player->priv->muted_volume = -1;
+ }
+
+ break;
+ case RB_REMOTE_COMMAND_UNKNOWN:
+ break;
+ }
+}
+#endif /* HAVE_REMOTE */
+
#ifdef HAVE_MMKEYS
static void
grab_mmkey (int key_code, GdkWindow *root)
Attachment:
signature.asc
Description: This is a digitally signed message part