← Back to team overview

ayatana-commits team mailing list archive

[Merge] lp:~cjcurran/indicator-sound/event-handling into lp:indicator-sound

 

Conor Curran has proposed merging lp:~cjcurran/indicator-sound/event-handling into lp:indicator-sound.

Requested reviews:
  Indicator Applet Developers (indicator-applet-developers)


Implements mouse press events for the transport bar.
-- 
https://code.launchpad.net/~cjcurran/indicator-sound/event-handling/+merge/29473
Your team ayatana-commits is subscribed to branch lp:indicator-sound.
=== modified file 'src/indicator-sound.c'
--- src/indicator-sound.c	2010-07-07 12:22:18 +0000
+++ src/indicator-sound.c	2010-07-08 15:24:46 +0000
@@ -328,10 +328,9 @@
   bar = transport_widget_new(newitem);
   GtkMenuItem *menu_transport_bar = GTK_MENU_ITEM(bar);
 
+	gtk_widget_show_all(bar);
   dbusmenu_gtkclient_newitem_base(DBUSMENU_GTKCLIENT(client), newitem, menu_transport_bar, parent);
 
-  gtk_widget_show_all(bar);
-
   return TRUE;
 }
 
@@ -348,10 +347,9 @@
   metadata = metadata_widget_new (newitem);
   GtkMenuItem *menu_metadata_widget = GTK_MENU_ITEM(metadata);
 
+	gtk_widget_show_all(metadata);
   dbusmenu_gtkclient_newitem_base(DBUSMENU_GTKCLIENT(client), newitem, menu_metadata_widget, parent);
 
-  gtk_widget_show_all(metadata);
-
   return TRUE;
 }
 

=== modified file 'src/metadata-widget.c'
--- src/metadata-widget.c	2010-07-01 17:30:00 +0000
+++ src/metadata-widget.c	2010-07-08 15:24:46 +0000
@@ -112,7 +112,7 @@
 	                                                      DBUSMENU_METADATA_MENUITEM_TEXT_ARTIST));
 	
 	gtk_misc_set_alignment(GTK_MISC(artist), (gfloat)0, (gfloat)0);
-	gtk_label_set_width_chars(GTK_LABEL(artist), 20);	
+	gtk_label_set_width_chars(GTK_LABEL(artist), 15);	
 	gtk_label_set_ellipsize(GTK_LABEL(artist), PANGO_ELLIPSIZE_MIDDLE);	
 	priv->artist_label = artist;
 	// Style it up.
@@ -123,7 +123,7 @@
 	piece = gtk_label_new(dbusmenu_menuitem_property_get(twin_item,
 	                                                     DBUSMENU_METADATA_MENUITEM_TEXT_TITLE));
 	gtk_misc_set_alignment(GTK_MISC(piece), (gfloat)0, (gfloat)0);
-	gtk_label_set_width_chars(GTK_LABEL(piece), 16);
+	gtk_label_set_width_chars(GTK_LABEL(piece), 12);
 	gtk_label_set_ellipsize(GTK_LABEL(piece), PANGO_ELLIPSIZE_MIDDLE);
 	priv->piece_label =  piece;
 	// Style it up.
@@ -134,7 +134,7 @@
 	container = gtk_label_new(dbusmenu_menuitem_property_get(twin_item,
 	                                                         DBUSMENU_METADATA_MENUITEM_TEXT_ALBUM));
 	gtk_misc_set_alignment(GTK_MISC(container), (gfloat)0, (gfloat)0);
-	gtk_label_set_width_chars(GTK_LABEL(container), 20);		
+	gtk_label_set_width_chars(GTK_LABEL(container), 15);		
 	gtk_label_set_ellipsize(GTK_LABEL(container), PANGO_ELLIPSIZE_MIDDLE);	
 	priv->container_label = container;
 	// Style it up.

=== modified file 'src/mpris-controller.vala'
--- src/mpris-controller.vala	2010-07-06 17:55:05 +0000
+++ src/mpris-controller.vala	2010-07-08 15:24:46 +0000
@@ -65,16 +65,29 @@
 	 * TRUE  => Playing
 	 * FALSE => Paused
 	 **/
-	public void toggle_playback(bool state)
+	public void transport_event(int command)
 	{
-		if(state == true){
-			debug("about to play");
-			this.mpris_player.Play();				
-		}
-		else{
-			debug("about to pause");
-			this.mpris_player.Pause();						
-		}		
+		if(command == 2){
+			status st = this.mpris_player.GetStatus();
+			bool play_state =  st.playback == 1;
+			debug("toggle_playback - initial play state %i", (int)play_state);
+			bool new_play_state = !play_state;
+			debug("toggle_playback - new play state %i", (int)new_play_state);
+			if(new_play_state == true){
+				debug("about to play");
+				this.mpris_player.Play();				
+			}
+			else{
+				debug("about to pause");
+				this.mpris_player.Pause();						
+			}
+		}
+		else if(command == 1){
+			this.mpris_player.previous();
+		}
+		else if(command == 3){
+			this.mpris_player.next();
+		}
 	}
 
 	public bool connected()

=== modified file 'src/play-button.c'
--- src/play-button.c	2010-07-07 16:42:38 +0000
+++ src/play-button.c	2010-07-08 15:24:46 +0000
@@ -349,6 +349,29 @@
 }
 
 
+gint
+determine_button_event(GtkWidget* button, GdkEventButton* event)
+{
+	g_debug("event x coordinate = %f", event->x);
+	g_debug("event y coordinate = %f", event->y);
+	gint result = 0;
+	// For now very simple rectangular collision detection
+	if(event->x > 40 && event->x < 80
+	   && event->y > 22 && event->y < 46){
+		result = 1;
+	}
+	else if(event->x > 86 && event->x < 118
+	   && event->y > 20 && event->y < 47){
+		result = 2;		
+	}
+	else if(event->x > 122 && event->x < 164
+	   && event->y > 22 && event->y < 46){
+		result = 3;		
+	}
+	
+	return result;
+}
+
 void
 play_button_set_style(GtkWidget* button, GtkStyle* style)
 {

=== modified file 'src/play-button.h'
--- src/play-button.h	2010-07-02 19:04:15 +0000
+++ src/play-button.h	2010-07-08 15:24:46 +0000
@@ -43,6 +43,8 @@
 
 GType play_button_get_type (void);
 void play_button_set_style(GtkWidget* button, GtkStyle* style);
+gint determine_button_event(GtkWidget* button, GdkEventButton* event);
+
 GtkWidget* play_button_new();
 
 G_END_DECLS

=== modified file 'src/player-controller.vala'
--- src/player-controller.vala	2010-07-07 12:36:56 +0000
+++ src/player-controller.vala	2010-07-08 15:24:46 +0000
@@ -110,6 +110,7 @@
 		if(this.current_state != CONNECTED){
 			visibility = false;
 		}
+		debug("about the set the visibility on both the transport and metadata widget to %s", visibility.to_string());
 		this.custom_items[TRANSPORT].property_set_bool(MENUITEM_PROP_VISIBLE, visibility);
 		this.custom_items[METADATA].property_set_bool(MENUITEM_PROP_VISIBLE, visibility);
 	}

=== modified file 'src/transport-menu-item.vala'
--- src/transport-menu-item.vala	2010-07-07 12:22:18 +0000
+++ src/transport-menu-item.vala	2010-07-08 15:24:46 +0000
@@ -36,8 +36,14 @@
 	
 	public override void handle_event(string name, GLib.Value input_value, uint timestamp)
 	{
-		debug("handle_event with bool value %s", input_value.get_boolean().to_string());
-		this.owner.mpris_adaptor.toggle_playback(input_value.get_boolean());	
+		int input = input_value.get_int();
+		debug("handle_event with value %s", input.to_string());
+		if(input > 0){
+			this.owner.mpris_adaptor.transport_event(input);
+		}
+		else{
+			debug("A mouse event I'm not interested in");
+		}
 	}	
 
 	public static HashSet<string> attributes_format()

=== modified file 'src/transport-widget.c'
--- src/transport-widget.c	2010-07-08 10:08:39 +0000
+++ src/transport-widget.c	2010-07-08 15:24:46 +0000
@@ -132,13 +132,24 @@
 		return FALSE;
 	}
 
-	//TransportWidgetPrivate * priv = TRANSPORT_WIDGET_GET_PRIVATE(TRANSPORT_WIDGET(menuitem));
-
- 	//GValue value = {0};
-  //g_value_init(&value, G_TYPE_BOOLEAN);
-	//g_debug("TransportWidget::menu_press_event - going to send value %i", state);
-	//g_value_set_boolean(&value, state);	
-	//dbusmenu_menuitem_handle_event (twin_item, "Transport state change", &value, 0);
+	TransportWidgetPrivate * priv = TRANSPORT_WIDGET_GET_PRIVATE(TRANSPORT_WIDGET(menuitem));
+
+  GtkWidget *parent;
+
+  // can we block emissions of "grab-notify" on parent??
+  parent = gtk_widget_get_parent (GTK_WIDGET (menuitem));
+	gint result = determine_button_event(priv->play_button, event);
+
+  //GTK_OBJECT_FLAGS (scale) |= GTK_HAS_GRAB;
+  //gtk_widget_event (scale,
+                    //((GdkEvent *)(void*)(event)));
+  //GTK_OBJECT_FLAGS (scale) &= ~(GTK_HAS_GRAB);
+
+ 	GValue value = {0};
+  g_value_init(&value, G_TYPE_INT);
+	g_debug("TransportWidget::menu_press_event - going to send value %i", result);
+	g_value_set_int(&value, result);	
+	dbusmenu_menuitem_handle_event (twin_item, "Transport state change", &value, 0);
 	
 	return TRUE;
 }


Follow ups