From 7cd90199beb0b10bfc22a669ca1954c16573abd5 Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Fri, 28 Jan 2011 11:29:18 -0600 Subject: deal with dbusmenu api changes --- src/indicator-sound.c | 41 ++++++++++++++++++++++++++++------------- src/sound-service.c | 4 ++-- src/transport-widget.c | 1 - 3 files changed, 30 insertions(+), 16 deletions(-) (limited to 'src') diff --git a/src/indicator-sound.c b/src/indicator-sound.c index 42560c8..8972844 100644 --- a/src/indicator-sound.c +++ b/src/indicator-sound.c @@ -77,19 +77,22 @@ static gboolean key_release_cb(GtkWidget* widget, GdkEventKey* event, gpointer d //custom widget realisation methods static gboolean new_volume_slider_widget (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, - DbusmenuClient * client); + DbusmenuClient * client, + gboolean user_data); static gboolean new_transport_widget (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, - DbusmenuClient * client); + DbusmenuClient * client, + gboolean user_data); static gboolean new_metadata_widget (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, - DbusmenuClient * client); + DbusmenuClient * client, + gboolean user_data); static gboolean new_title_widget (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, - DbusmenuClient * client); + DbusmenuClient * client, + gboolean user_data); // DBUS communication - static GDBusNodeInfo *node_info = NULL; static GDBusInterfaceInfo *interface_info = NULL; static void create_connection_to_service (GObject *source_object, @@ -185,10 +188,18 @@ get_menu (IndicatorObject * io) DbusmenuGtkClient *client = dbusmenu_gtkmenu_get_client(menu); g_object_set_data (G_OBJECT (client), "indicator", io); - dbusmenu_client_add_type_handler(DBUSMENU_CLIENT(client), DBUSMENU_VOLUME_MENUITEM_TYPE, new_volume_slider_widget); - dbusmenu_client_add_type_handler(DBUSMENU_CLIENT(client), DBUSMENU_TRANSPORT_MENUITEM_TYPE, new_transport_widget); - dbusmenu_client_add_type_handler(DBUSMENU_CLIENT(client), DBUSMENU_METADATA_MENUITEM_TYPE, new_metadata_widget); - dbusmenu_client_add_type_handler(DBUSMENU_CLIENT(client), DBUSMENU_TITLE_MENUITEM_TYPE, new_title_widget); + dbusmenu_client_add_type_handler (DBUSMENU_CLIENT(client), + DBUSMENU_VOLUME_MENUITEM_TYPE, + (DbusmenuClientTypeHandler)new_volume_slider_widget); + dbusmenu_client_add_type_handler (DBUSMENU_CLIENT(client), + DBUSMENU_TRANSPORT_MENUITEM_TYPE, + (DbusmenuClientTypeHandler)new_transport_widget); + dbusmenu_client_add_type_handler (DBUSMENU_CLIENT(client), + DBUSMENU_METADATA_MENUITEM_TYPE, + (DbusmenuClientTypeHandler)new_metadata_widget); + dbusmenu_client_add_type_handler (DBUSMENU_CLIENT(client), + DBUSMENU_TITLE_MENUITEM_TYPE, + (DbusmenuClientTypeHandler)new_title_widget); // Note: Not ideal but all key handling needs to be managed here and then // delegated to the appropriate widget. g_signal_connect (menu, "key-press-event", G_CALLBACK(key_press_cb), io); @@ -286,7 +297,8 @@ static void create_connection_to_service (GObject *source_object, static gboolean new_transport_widget (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, - DbusmenuClient * client) + DbusmenuClient * client, + gboolean user_data) { g_debug("indicator-sound: new_transport_bar() called "); @@ -314,7 +326,8 @@ new_transport_widget (DbusmenuMenuitem * newitem, static gboolean new_metadata_widget (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, - DbusmenuClient * client) + DbusmenuClient * client, + gboolean user_data) { g_debug("indicator-sound: new_metadata_widget"); @@ -335,7 +348,8 @@ new_metadata_widget (DbusmenuMenuitem * newitem, static gboolean new_title_widget(DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, - DbusmenuClient * client) + DbusmenuClient * client, + gboolean user_data) { g_return_val_if_fail(DBUSMENU_IS_MENUITEM(newitem), FALSE); g_return_val_if_fail(DBUSMENU_IS_GTKCLIENT(client), FALSE); @@ -358,7 +372,8 @@ new_title_widget(DbusmenuMenuitem * newitem, static gboolean new_volume_slider_widget(DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, - DbusmenuClient * client) + DbusmenuClient * client, + gboolean user_data) { g_debug("indicator-sound: new_volume_slider_widget"); diff --git a/src/sound-service.c b/src/sound-service.c index 2cb33d3..c1bb9b4 100644 --- a/src/sound-service.c +++ b/src/sound-service.c @@ -40,8 +40,8 @@ service_shutdown (IndicatorService *service, gpointer user_data) { if (mainloop != NULL) { g_debug("Service shutdown !"); - 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 6ddd4bc..5c8e732 100644 --- a/src/transport-widget.c +++ b/src/transport-widget.c @@ -422,7 +422,6 @@ transport_widget_determine_button_event( TransportWidget* button, //g_debug("event x coordinate = %f", event->x); //g_debug("event y coordinate = %f", event->y); TransportWidgetEvent button_event = TRANSPORT_NADA; - // For now very simple rectangular collision detection if(event->x > 67 && event->x < 112 && event->y > 12 && event->y < 40){ button_event = TRANSPORT_PREVIOUS; -- cgit v1.2.3 From 1a99cdc112da4a119df08642d583cc6d6f5fca7f Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Fri, 28 Jan 2011 12:37:53 -0600 Subject: tidy up on the transport widget, all draw are queue'd for performance reasons, bug fixed with regards button release on new hotspot and some refactoring done --- src/transport-widget.c | 98 ++++++++++++++++---------------------------------- 1 file changed, 31 insertions(+), 67 deletions(-) (limited to 'src') diff --git a/src/transport-widget.c b/src/transport-widget.c index 5c8e732..7c96684 100644 --- a/src/transport-widget.c +++ b/src/transport-widget.c @@ -129,10 +129,10 @@ 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); +static TransportWidgetEvent transport_widget_collision_detection (gint x, gint y); /// Init functions ////////////////////////////////////////////////////////// - static void transport_widget_class_init (TransportWidgetClass *klass) { @@ -301,30 +301,23 @@ transport_widget_leave_notify_event (GtkWidget *menuitem, TransportWidgetPrivate* priv = TRANSPORT_WIDGET_GET_PRIVATE ( TRANSPORT_WIDGET(menuitem) ); priv->motion_event = TRANSPORT_NADA; - cairo_t *cr; - cr = gdk_cairo_create (menuitem->window); - draw ( menuitem, cr ); - cairo_destroy ( cr ); - + priv->current_command = TRANSPORT_NADA; + gtk_widget_queue_draw (GTK_WIDGET(menuitem)); + return TRUE; } -/* keyevents */ static gboolean transport_widget_button_press_event (GtkWidget *menuitem, - GdkEventButton *event) + GdkEventButton *event) { 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){ priv->current_command = result; - cairo_t *cr; - cr = gdk_cairo_create (menuitem->window); - draw ( menuitem, cr ); - cairo_destroy ( cr ); + gtk_widget_queue_draw (GTK_WIDGET(menuitem)); } return TRUE; } @@ -333,14 +326,12 @@ static gboolean transport_widget_button_release_event (GtkWidget *menuitem, GdkEventButton *event) { - //g_debug("TransportWidget::menu_release_event"); g_return_val_if_fail(IS_TRANSPORT_WIDGET(menuitem), FALSE); TransportWidget* transport = TRANSPORT_WIDGET(menuitem); TransportWidgetPrivate * priv = TRANSPORT_WIDGET_GET_PRIVATE ( transport ); TransportWidgetEvent result = transport_widget_determine_button_event ( transport, event ); - if(result != TRANSPORT_NADA){ - //g_debug("TransportWidget::menu_press_event - going to send value %i", (int)result); + if (result != TRANSPORT_NADA && priv->current_command == result){ GVariant* new_transport_state = g_variant_new_int32 ((int)result); dbusmenu_menuitem_handle_event ( priv->twin_item, "Transport state change", @@ -376,17 +367,8 @@ transport_widget_react_to_key_press_event ( TransportWidget* transport, TransportWidgetPrivate * priv = TRANSPORT_WIDGET_GET_PRIVATE ( transport ); priv->current_command = transport_event; priv->key_event = transport_event; -/* printf("transport_widget_react_to_key_press_event: before drawing\n");*/ gtk_widget_realize ( GTK_WIDGET(transport) ); - - printf ( "transport widget - react to key press event -> is the window null: %i", - gtk_widget_get_window (GTK_WIDGET (transport) ) == NULL ); - cairo_t *cr; - - printf("transport_widget_react_to_key_press_event: before drawing\n"); - cr = gdk_cairo_create ( GTK_WIDGET(transport)->window ); - draw ( GTK_WIDGET(transport), cr ); - cairo_destroy (cr); + gtk_widget_queue_draw (GTK_WIDGET(transport) ); } } @@ -396,7 +378,6 @@ transport_widget_react_to_key_release_event ( TransportWidget* transport, { if(transport_event != TRANSPORT_NADA){ TransportWidgetPrivate * priv = TRANSPORT_WIDGET_GET_PRIVATE ( transport ); - //g_debug("TransportWidget::menu_press_event - going to send value %i", (int)result); GVariant* new_transport_event = g_variant_new_int32((int)transport_event); dbusmenu_menuitem_handle_event ( priv->twin_item, "Transport state change", @@ -412,52 +393,41 @@ 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 ) { - //g_debug("event x coordinate = %f", event->x); - //g_debug("event y coordinate = %f", event->y); - TransportWidgetEvent button_event = TRANSPORT_NADA; - if(event->x > 67 && event->x < 112 - && event->y > 12 && event->y < 40){ - button_event = TRANSPORT_PREVIOUS; - } - else if(event->x > 111 && event->x < 153 - && event->y > 5 && event->y < 47){ - button_event = TRANSPORT_PLAY_PAUSE; - } - else if(event->x > 152 && event->x < 197 - && event->y > 12 && event->y < 40){ - button_event = TRANSPORT_NEXT; - } - return button_event; + return transport_widget_collision_detection (event->x, event->y); } static TransportWidgetEvent transport_widget_determine_motion_event( TransportWidget* button, GdkEventMotion* event ) { -/* g_debug("event x coordinate = %f", event->x);*/ -/* g_debug("event y coordinate = %f", event->y);*/ - TransportWidgetEvent motion_event = TRANSPORT_NADA; - // For now very simple rectangular collision detection - if(event->x > 67 && event->x < 112 - && event->y > 12 && event->y < 40){ - motion_event = TRANSPORT_PREVIOUS; + return transport_widget_collision_detection (event->x, event->y); +} + +static TransportWidgetEvent +transport_widget_collision_detection ( gint x, + gint y ) +{ + TransportWidgetEvent event = TRANSPORT_NADA; + + if (x > 67 && x < 112 + && y > 12 && y < 40){ + event = TRANSPORT_PREVIOUS; } - else if(event->x > 111 && event->x < 153 - && event->y > 5 && event->y < 47){ - motion_event = TRANSPORT_PLAY_PAUSE; + else if (x > 111 && x < 153 + && y > 5 && y < 47){ + event = TRANSPORT_PLAY_PAUSE; } - else if(event->x > 152 && event->x < 197 - && event->y > 12 && event->y < 40){ - motion_event = TRANSPORT_NEXT; - } - return motion_event; + else if (x > 152 && x < 197 + && y > 12 && y < 40){ + event = TRANSPORT_NEXT; + } + return event; } static void @@ -466,17 +436,11 @@ transport_widget_react_to_button_release ( TransportWidget* button, { g_return_if_fail(IS_TRANSPORT_WIDGET(button)); TransportWidgetPrivate* priv = TRANSPORT_WIDGET_GET_PRIVATE(button); - if(priv->current_command != TRANSPORT_NADA && - command != TRANSPORT_NADA){ - priv->current_command = command; - } - cairo_t *cr; - cr = gdk_cairo_create ( GTK_WIDGET(button)->window ); priv->current_command = TRANSPORT_NADA; priv->key_event = TRANSPORT_NADA; - draw ( GTK_WIDGET(button), cr ); - cairo_destroy (cr); + + gtk_widget_queue_draw (GTK_WIDGET(button)); } /// internal helper functions ////////////////////////////////////////////////// -- cgit v1.2.3 From 3426aa3e89ed01c81f019b4ffd4aea76df864fc7 Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Fri, 28 Jan 2011 12:42:36 -0600 Subject: tidy up --- src/sound-service.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/sound-service.c b/src/sound-service.c index c1bb9b4..2cb33d3 100644 --- a/src/sound-service.c +++ b/src/sound-service.c @@ -40,8 +40,8 @@ service_shutdown (IndicatorService *service, gpointer user_data) { if (mainloop != NULL) { g_debug("Service shutdown !"); - //close_pulse_activites(); - //g_main_loop_quit(mainloop); + close_pulse_activites(); + g_main_loop_quit(mainloop); } return; } -- cgit v1.2.3 From 965f48a39a3411106d531cb5d3dffb2e347f4f73 Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Fri, 28 Jan 2011 12:57:36 -0600 Subject: silly mistake in signature --- src/indicator-sound.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) (limited to 'src') diff --git a/src/indicator-sound.c b/src/indicator-sound.c index 8972844..f259dfd 100644 --- a/src/indicator-sound.c +++ b/src/indicator-sound.c @@ -78,19 +78,19 @@ static gboolean key_release_cb(GtkWidget* widget, GdkEventKey* event, gpointer d static gboolean new_volume_slider_widget (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, DbusmenuClient * client, - gboolean user_data); + gpointer user_data); static gboolean new_transport_widget (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, DbusmenuClient * client, - gboolean user_data); + gpointer user_data); static gboolean new_metadata_widget (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, DbusmenuClient * client, - gboolean user_data); + gpointer user_data); static gboolean new_title_widget (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, DbusmenuClient * client, - gboolean user_data); + gpointer user_data); // DBUS communication static GDBusNodeInfo *node_info = NULL; @@ -190,16 +190,16 @@ get_menu (IndicatorObject * io) g_object_set_data (G_OBJECT (client), "indicator", io); dbusmenu_client_add_type_handler (DBUSMENU_CLIENT(client), DBUSMENU_VOLUME_MENUITEM_TYPE, - (DbusmenuClientTypeHandler)new_volume_slider_widget); + new_volume_slider_widget); dbusmenu_client_add_type_handler (DBUSMENU_CLIENT(client), DBUSMENU_TRANSPORT_MENUITEM_TYPE, - (DbusmenuClientTypeHandler)new_transport_widget); + new_transport_widget); dbusmenu_client_add_type_handler (DBUSMENU_CLIENT(client), DBUSMENU_METADATA_MENUITEM_TYPE, - (DbusmenuClientTypeHandler)new_metadata_widget); + new_metadata_widget); dbusmenu_client_add_type_handler (DBUSMENU_CLIENT(client), DBUSMENU_TITLE_MENUITEM_TYPE, - (DbusmenuClientTypeHandler)new_title_widget); + new_title_widget); // Note: Not ideal but all key handling needs to be managed here and then // delegated to the appropriate widget. g_signal_connect (menu, "key-press-event", G_CALLBACK(key_press_cb), io); @@ -298,7 +298,7 @@ static gboolean new_transport_widget (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, DbusmenuClient * client, - gboolean user_data) + gpointer user_data) { g_debug("indicator-sound: new_transport_bar() called "); @@ -327,7 +327,7 @@ static gboolean new_metadata_widget (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, DbusmenuClient * client, - gboolean user_data) + gpointer user_data) { g_debug("indicator-sound: new_metadata_widget"); @@ -349,7 +349,7 @@ static gboolean new_title_widget(DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, DbusmenuClient * client, - gboolean user_data) + gpointer user_data) { g_return_val_if_fail(DBUSMENU_IS_MENUITEM(newitem), FALSE); g_return_val_if_fail(DBUSMENU_IS_GTKCLIENT(client), FALSE); @@ -373,7 +373,7 @@ static gboolean new_volume_slider_widget(DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, DbusmenuClient * client, - gboolean user_data) + gpointer user_data) { g_debug("indicator-sound: new_volume_slider_widget"); -- cgit v1.2.3