[Rhythmbox-devel] lirc patch



I saw a patch for lirc a few weeks ago on the list, and i modified it
so it applies to the rhythmbox-playbin-merge tree.  It is attached.  I
also created a image of this tree for the less patching-inclined
people:
http://www.limeybrit.com/files/rhythmbox-playbin-merge-lirc-2005-04-13.tar.bz2

It works on my computer, let me know if there are any problems.  I
also attached my file .lirc file for it.

I have two questions.  I would like to make it so the up and down
buttons could toggle through playlists.  Any RB hackers want to
suggest to me where to start to look for that?

Also as far as I can tell there is a bug somewhere in the aclocal
configurations for RB.  Whenever I run configure I get this error:

config.status: creating rhythmbox.spec
config.status: creating config.h
config.status: executing intltool commands
sed: -e expression #5, char 24: unknown option to `s'
sed: -e expression #5, char 24: unknown option to `s'
sed: -e expression #5, char 24: unknown option to `s'
config.status: executing depfiles commands
config.status: executing default-1 commands
configure: Rhythmbox was configured with the followin

which I have tracked down to this code in the configure script:
intltool_edit="-e 's:@INTLTOOL_EXTRACT@:`pwd`/intltool-extract:g' \
               -e 's:@INTLTOOL_ICONV@:${ICONV}:g' \
               -e 's:@INTLTOOL_MSGFMT@:${MSGFMT}:g' \
               -e 's:@INTLTOOL_MSGMERGE@:${MSGMERGE}:g' \
               -e 's:@INTLTOOL_XGETTEXT@:${XGETTEXT}:g' \
               -e 's:@INTLTOOL_PERL@:${INTLTOOL_PERL}:g'"

The XGETTEXT variable gets set to : and then the sed command is not
correct.  Manually deleting this variable so the string doesn't have
the extra ':' fixes the problem, but I don't know how to fix it so
autogen doesn't always mess it up (and I figure sometimes it's meant
to have a value).  This line comes from aclocal.m4 but I don't know
how that stuff works to know where that comes from.  I have two
computers, one on gnome 2.10 and one on gnome 2.8 (both gentoo) so I
don't think it's outdated software on my part.  Any suggestions?

James

--- rhythmbox-playbin-merge-2005-03-31/configure.ac     2005-03-25
18:34:08.000000000 -0600
+++ rhythmbox-playbin-merge-lirc-2005-04-13/configure.ac       
2005-04-13 19:09:55.000000000 -0500
@@ -149,12 +149,24 @@
 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 Musicbrainz
 dnl DISABLED
@@ -452,6 +464,11 @@
 else
        AC_MSG_NOTICE([   D-BUS control/activation 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])
--- rhythmbox-playbin-merge-2005-03-31/shell/rb-remote.c       
2005-03-25 12:51:37.000000000 -0600
+++ rhythmbox-playbin-merge-lirc-2005-04-13/shell/rb-remote.c  
2005-04-13 19:09:54.000000000 -0500
@@ -26,7 +26,7 @@

 #include "rb-remote.h"

-#ifdef HAVE_REMOTE
+// #ifdef HAVE_REMOTE

 #include <stdio.h>
 #include <lirc/lirc_client.h>
@@ -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;
 }
@@ -254,4 +254,4 @@
        return g_object_new (RB_TYPE_REMOTE, NULL);
 }

-#endif /* HAVE_REMOTE */
+// #endif /* HAVE_REMOTE */
--- rhythmbox-playbin-merge-2005-03-31/shell/rb-remote.h       
2005-03-25 12:51:37.000000000 -0600
+++ rhythmbox-playbin-merge-lirc-2005-04-13/shell/rb-remote.h  
2005-04-13 19:09:54.000000000 -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
--- rhythmbox-playbin-merge-2005-03-31/shell/rb-shell-player.c 
2005-03-30 07:48:09.000000000 -0600
+++ rhythmbox-playbin-merge-lirc-2005-04-13/shell/rb-shell-player.c   
 2005-04-13 19:09:54.000000000 -0500
@@ -152,6 +152,10 @@

 static gboolean rb_shell_player_jump_to_current_idle (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,
@@ -225,6 +229,7 @@
        GtkWidget *magic_button;

        RBRemote *remote;
+       float muted_volume;

        guint gconf_play_order_id;
        guint gconf_state_id;
@@ -652,6 +657,17 @@
                                            (GConfClientNotifyFunc)
rb_shell_player_volume_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);
@@ -2214,6 +2230,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);
+               break;
+       case RB_REMOTE_COMMAND_PAUSE:
+               rb_shell_player_cmd_pause (NULL, player);
+               break;
+       case RB_REMOTE_COMMAND_STOP:
+               rb_shell_player_cmd_stop (NULL, player);
+               break;
+       case RB_REMOTE_COMMAND_SHUFFLE:
+               rb_shell_player_shuffle_changed_cb (NULL, player);
+               break;
+       case RB_REMOTE_COMMAND_REPEAT:
+               rb_shell_player_repeat_changed_cb (NULL, player);
+               break;
+       case RB_REMOTE_COMMAND_NEXT:
+               rb_shell_player_cmd_next (NULL, player);
+               break;
+       case RB_REMOTE_COMMAND_PREVIOUS:
+               rb_shell_player_cmd_previous (NULL, player);
+               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: rb-playbin-merge-lirc.patch
Description: Binary data

Attachment: .lirc_rb
Description: Binary data



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]