From eaee3afe6312a04ce41daed8d380ac5e49616ed6 Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Mon, 15 Nov 2010 17:18:19 +0000 Subject: key handling all set up --- src/indicator-sound.c | 3 +-- src/sound-service.c | 4 ++-- src/transport-widget.c | 43 +++++++++++++++++++++++++++++++++++++++---- src/transport-widget.h | 1 - 4 files changed, 42 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/indicator-sound.c b/src/indicator-sound.c index 53a4876..b39d064 100644 --- a/src/indicator-sound.c +++ b/src/indicator-sound.c @@ -715,7 +715,7 @@ key_press_cb(GtkWidget* widget, GdkEventKey* event, gpointer data) volume_widget_update(VOLUME_WIDGET(priv->volume_widget), new_value); } } - if (IS_TRANSPORT_WIDGET(menuitem) == TRUE) { + else if (IS_TRANSPORT_WIDGET(menuitem) == TRUE) { switch (event->keyval) { case GDK_Right: transport_widget_react_to_key_event ( TRANSPORT_WIDGET ( priv->transport_widget ), @@ -761,7 +761,6 @@ indicator_sound_scroll (IndicatorObject *io, gint delta, IndicatorScrollDirectio if (device_available == FALSE || current_state == STATE_MUTED) return; - IndicatorSoundPrivate* priv = INDICATOR_SOUND_GET_PRIVATE(INDICATOR_SOUND (io)); GtkWidget* slider_widget = volume_widget_get_ido_slider(VOLUME_WIDGET(priv->volume_widget)); diff --git a/src/sound-service.c b/src/sound-service.c index 51f5f37..f19379d 100644 --- a/src/sound-service.c +++ b/src/sound-service.c @@ -41,8 +41,8 @@ service_shutdown (IndicatorService *service, gpointer user_data) if (mainloop != NULL) { g_debug("Service shutdown !"); //TODO: uncomment for release !! - //close_pulse_activites(); - //g_main_loop_quit(mainloop); + close_pulse_activites(); + g_main_loop_quit(mainloop); } return; } diff --git a/src/transport-widget.c b/src/transport-widget.c index 3329acc..63fec4b 100644 --- a/src/transport-widget.c +++ b/src/transport-widget.c @@ -77,6 +77,7 @@ struct _TransportWidgetPrivate TransportWidgetState current_state; GHashTable* command_coordinates; DbusmenuMenuitem* twin_item; + gboolean has_focus; }; #define TRANSPORT_WIDGET_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TRANSPORT_WIDGET_TYPE, TransportWidgetPrivate)) @@ -114,6 +115,9 @@ static void transport_widget_react_to_button_release ( TransportWidget* button, TransportWidgetEvent command); static void transport_widget_toggle_play_pause ( TransportWidget* button, TransportWidgetState update); +static void transport_widget_select (GtkItem* menu, gpointer Userdata); +static void transport_widget_deselect (GtkItem* menu, gpointer Userdata); + /// Init functions ////////////////////////////////////////////////////////// @@ -139,6 +143,7 @@ transport_widget_init (TransportWidget *self) TransportWidgetPrivate* priv = TRANSPORT_WIDGET_GET_PRIVATE(self); priv->current_command = TRANSPORT_NADA; priv->current_state = PAUSE; + priv->has_focus = FALSE; priv->command_coordinates = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL, @@ -171,12 +176,20 @@ transport_widget_init (TransportWidget *self) g_hash_table_insert(priv->command_coordinates, GINT_TO_POINTER(TRANSPORT_NEXT), next_list); - gtk_widget_set_size_request(GTK_WIDGET(self), 200, 43); g_signal_connect (G_OBJECT(self), "notify", G_CALLBACK (transport_widget_notify), - NULL); + NULL); + g_signal_connect (GTK_ITEM(self), + "select", + G_CALLBACK (transport_widget_select), + NULL); + g_signal_connect (GTK_ITEM(self), + "deselect", + G_CALLBACK (transport_widget_deselect), + NULL); + } static void @@ -249,7 +262,6 @@ transport_widget_button_press_event (GtkWidget *menuitem, { g_return_val_if_fail ( IS_TRANSPORT_WIDGET(menuitem), FALSE ); TransportWidgetPrivate* priv = TRANSPORT_WIDGET_GET_PRIVATE ( TRANSPORT_WIDGET(menuitem) ); - TransportWidgetEvent result = transport_widget_determine_button_event ( TRANSPORT_WIDGET(menuitem), event); if(result != TRANSPORT_NADA){ @@ -282,12 +294,27 @@ transport_widget_button_release_event (GtkWidget *menuitem, &value, 0 ); } - transport_widget_react_to_button_release ( transport, result ); return TRUE; } +static void +transport_widget_select (GtkItem* item, gpointer Userdata) +{ + TransportWidget* transport = TRANSPORT_WIDGET(item); + TransportWidgetPrivate * priv = TRANSPORT_WIDGET_GET_PRIVATE ( transport ); + priv->has_focus = TRUE; +} + +static void +transport_widget_deselect (GtkItem* item, gpointer Userdata) +{ + TransportWidget* transport = TRANSPORT_WIDGET(item); + TransportWidgetPrivate * priv = TRANSPORT_WIDGET_GET_PRIVATE ( transport ); + priv->has_focus = FALSE; +} + void transport_widget_react_to_key_event ( TransportWidget* transport, TransportWidgetEvent transport_event ) @@ -308,6 +335,14 @@ transport_widget_react_to_key_event ( TransportWidget* transport, transport_event ); } +void +transport_widget_focus_update ( TransportWidget* transport, gboolean focus ) +{ + TransportWidgetPrivate * priv = TRANSPORT_WIDGET_GET_PRIVATE ( transport ); + priv->has_focus = focus; + g_debug("new focus update = %i", focus); +} + static TransportWidgetEvent transport_widget_determine_button_event( TransportWidget* button, GdkEventButton* event ) diff --git a/src/transport-widget.h b/src/transport-widget.h index 470b1cd..58a224c 100644 --- a/src/transport-widget.h +++ b/src/transport-widget.h @@ -68,7 +68,6 @@ GType transport_widget_get_type (void); GtkWidget* transport_widget_new ( DbusmenuMenuitem *item ); void transport_widget_react_to_key_event ( TransportWidget* widget, TransportWidgetEvent transport_event ); - G_END_DECLS #endif -- cgit v1.2.3