Based on a patch by: Bastien Nocera <hadess@hadess.net>

2007-02-09  Jens Granseuer  <jensgr@gmx.net>

	Based on a patch by: Bastien Nocera <hadess@hadess.net>

	* 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
This commit is contained in:
Jens Granseuer 2007-02-09 16:59:35 +00:00 committed by Jens Granseuer
parent 5cfc95d400
commit c3b4008673
4 changed files with 31 additions and 13 deletions

View file

@ -1,3 +1,14 @@
2007-02-09 Jens Granseuer <jensgr@gmx.net>
Based on a patch by: Bastien Nocera <hadess@hadess.net>
* 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 <mccann@jhu.edu>
* gsd-media-keys-window.c: (render_eject), (draw_eject),

View file

@ -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*

View file

@ -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

View file

@ -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);
if (do_action (acme, keys[i].key_type) == FALSE)
return GDK_FILTER_REMOVE;
else
return GDK_FILTER_CONTINUE;
}
}