From c3b40086736c8776fbb35042f637c2bd73b65827 Mon Sep 17 00:00:00 2001 From: Jens Granseuer Date: Fri, 9 Feb 2007 16:59:35 +0000 Subject: [PATCH] Based on a patch by: Bastien Nocera 2007-02-09 Jens Granseuer Based on a patch by: Bastien Nocera * gnome-settings-dbus.c: (gnome_settings_server_media_player_key_pressed): * gnome-settings-dbus.h: * gnome-settings-multimedia-keys.c: (do_multimedia_player_action), (do_action), (acme_filter_events): eat media player keys if someone is listening on the dbus interface already (fixes bug #394313) svn path=/trunk/; revision=7271 --- gnome-settings-daemon/ChangeLog | 11 +++++++++ gnome-settings-daemon/gnome-settings-dbus.c | 7 ++++-- gnome-settings-daemon/gnome-settings-dbus.h | 2 +- .../gnome-settings-multimedia-keys.c | 24 +++++++++++-------- 4 files changed, 31 insertions(+), 13 deletions(-) diff --git a/gnome-settings-daemon/ChangeLog b/gnome-settings-daemon/ChangeLog index c11a8045c..2cf6c24d7 100644 --- a/gnome-settings-daemon/ChangeLog +++ b/gnome-settings-daemon/ChangeLog @@ -1,3 +1,14 @@ +2007-02-09 Jens Granseuer + + Based on a patch by: Bastien Nocera + + * gnome-settings-dbus.c: + (gnome_settings_server_media_player_key_pressed): + * gnome-settings-dbus.h: + * gnome-settings-multimedia-keys.c: (do_multimedia_player_action), + (do_action), (acme_filter_events): eat media player keys if someone is + listening on the dbus interface already (fixes bug #394313) + 2007-02-05 William Jon McCann * gsd-media-keys-window.c: (render_eject), (draw_eject), diff --git a/gnome-settings-daemon/gnome-settings-dbus.c b/gnome-settings-daemon/gnome-settings-dbus.c index 51add3d49..53e119c5b 100644 --- a/gnome-settings-daemon/gnome-settings-dbus.c +++ b/gnome-settings-daemon/gnome-settings-dbus.c @@ -134,16 +134,19 @@ gnome_settings_server_get (void) return g_object_new (GNOME_SETTINGS_TYPE_SERVER, NULL); } -void +gboolean gnome_settings_server_media_player_key_pressed (GObject *server, const gchar *key) { const gchar *application = NULL; + gboolean have_listeners = (GNOME_SETTINGS_SERVER (server)->media_players != NULL); - if (GNOME_SETTINGS_SERVER (server)->media_players != NULL) { + if (have_listeners) { application = ((MediaPlayer *)GNOME_SETTINGS_SERVER (server)->media_players->data)->application; } g_signal_emit (server, signals[MEDIA_PLAYER_KEY_PRESSED], 0, application, key); + + return !have_listeners; } static GObject* diff --git a/gnome-settings-daemon/gnome-settings-dbus.h b/gnome-settings-daemon/gnome-settings-dbus.h index a20dab39e..912c3b68e 100644 --- a/gnome-settings-daemon/gnome-settings-dbus.h +++ b/gnome-settings-daemon/gnome-settings-dbus.h @@ -27,7 +27,7 @@ G_BEGIN_DECLS GObject *gnome_settings_server_get (void); -void gnome_settings_server_media_player_key_pressed (GObject *server, const gchar *key); +gboolean gnome_settings_server_media_player_key_pressed (GObject *server, const gchar *key); G_END_DECLS diff --git a/gnome-settings-daemon/gnome-settings-multimedia-keys.c b/gnome-settings-daemon/gnome-settings-multimedia-keys.c index 95a30e9b6..487b5b057 100644 --- a/gnome-settings-daemon/gnome-settings-multimedia-keys.c +++ b/gnome-settings-daemon/gnome-settings-multimedia-keys.c @@ -558,13 +558,13 @@ do_sound_action (Acme *acme, int type) dialog_show (acme); } -static void +static gboolean do_multimedia_player_action (Acme *acme, const gchar *key) { - gnome_settings_server_media_player_key_pressed (acme->server, key); + return gnome_settings_server_media_player_key_pressed (acme->server, key); } -static void +static gboolean do_action (Acme *acme, int type) { gchar *cmd; @@ -608,23 +608,25 @@ do_action (Acme *acme, int type) do_www_action (acme, NULL); break; case PLAY_KEY: - do_multimedia_player_action (acme, "Play"); + return do_multimedia_player_action (acme, "Play"); break; case PAUSE_KEY: - do_multimedia_player_action (acme, "Pause"); + return do_multimedia_player_action (acme, "Pause"); break; case STOP_KEY: - do_multimedia_player_action (acme, "Stop"); + return do_multimedia_player_action (acme, "Stop"); break; case PREVIOUS_KEY: - do_multimedia_player_action (acme, "Previous"); + return do_multimedia_player_action (acme, "Previous"); break; case NEXT_KEY: - do_multimedia_player_action (acme, "Next"); + return do_multimedia_player_action (acme, "Next"); break; default: g_assert_not_reached (); } + + return FALSE; } static GdkScreen * @@ -689,8 +691,10 @@ acme_filter_events (GdkXEvent *xevent, GdkEvent *event, gpointer data) acme->current_screen = acme_get_screen_from_event (acme, xanyev); - do_action (acme, keys[i].key_type); - return GDK_FILTER_REMOVE; + if (do_action (acme, keys[i].key_type) == FALSE) + return GDK_FILTER_REMOVE; + else + return GDK_FILTER_CONTINUE; } }