Merge lp:~cjcurran/indicator-sound/058-fixes into lp:~indicator-applet-developers/indicator-sound/trunk_3

Proposed by Conor Curran
Status: Merged
Approved by: Kalle Valo
Approved revision: 192
Merged at revision: 119
Proposed branch: lp:~cjcurran/indicator-sound/058-fixes
Merge into: lp:~indicator-applet-developers/indicator-sound/trunk_3
Diff against target: 286 lines (+61/-83)
2 files modified
src/indicator-sound.c (+28/-13)
src/transport-widget.c (+33/-70)
To merge this branch: bzr merge lp:~cjcurran/indicator-sound/058-fixes
Reviewer Review Type Date Requested Status
Kalle Valo (community) Approve
Review via email: mp+47799@code.launchpad.net

This proposal supersedes a proposal from 2011-01-28.

Description of the change

Fixes both bugs attached

To post a comment you must log in.
Revision history for this message
Kalle Valo (kvalo) wrote : Posted in a previous version of this proposal

Few questions:

o Casts always make suspicious. Why is cast needed for function pointers, eg this one:

  DbusmenuClientTypeHandler)new_volume_slider_widget

o "gboolean user_data" is very confusing. Either it should be of type gpointer or, if it's really a boolean, it should have some other name.

review: Needs Information
Revision history for this message
Conor Curran (cjcurran) wrote :

Well spotted, sorry silly of me.
Fixed in revision 192

Revision history for this message
Kalle Valo (kvalo) wrote :

Thanks, now looks good to me. Approved.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/indicator-sound.c'
2--- src/indicator-sound.c 2011-01-27 22:10:48 +0000
3+++ src/indicator-sound.c 2011-01-28 13:00:46 +0000
4@@ -77,19 +77,22 @@
5 //custom widget realisation methods
6 static gboolean new_volume_slider_widget (DbusmenuMenuitem * newitem,
7 DbusmenuMenuitem * parent,
8- DbusmenuClient * client);
9+ DbusmenuClient * client,
10+ gpointer user_data);
11 static gboolean new_transport_widget (DbusmenuMenuitem * newitem,
12 DbusmenuMenuitem * parent,
13- DbusmenuClient * client);
14+ DbusmenuClient * client,
15+ gpointer user_data);
16 static gboolean new_metadata_widget (DbusmenuMenuitem * newitem,
17 DbusmenuMenuitem * parent,
18- DbusmenuClient * client);
19+ DbusmenuClient * client,
20+ gpointer user_data);
21 static gboolean new_title_widget (DbusmenuMenuitem * newitem,
22 DbusmenuMenuitem * parent,
23- DbusmenuClient * client);
24+ DbusmenuClient * client,
25+ gpointer user_data);
26
27 // DBUS communication
28-
29 static GDBusNodeInfo *node_info = NULL;
30 static GDBusInterfaceInfo *interface_info = NULL;
31 static void create_connection_to_service (GObject *source_object,
32@@ -185,10 +188,18 @@
33
34 DbusmenuGtkClient *client = dbusmenu_gtkmenu_get_client(menu);
35 g_object_set_data (G_OBJECT (client), "indicator", io);
36- dbusmenu_client_add_type_handler(DBUSMENU_CLIENT(client), DBUSMENU_VOLUME_MENUITEM_TYPE, new_volume_slider_widget);
37- dbusmenu_client_add_type_handler(DBUSMENU_CLIENT(client), DBUSMENU_TRANSPORT_MENUITEM_TYPE, new_transport_widget);
38- dbusmenu_client_add_type_handler(DBUSMENU_CLIENT(client), DBUSMENU_METADATA_MENUITEM_TYPE, new_metadata_widget);
39- dbusmenu_client_add_type_handler(DBUSMENU_CLIENT(client), DBUSMENU_TITLE_MENUITEM_TYPE, new_title_widget);
40+ dbusmenu_client_add_type_handler (DBUSMENU_CLIENT(client),
41+ DBUSMENU_VOLUME_MENUITEM_TYPE,
42+ new_volume_slider_widget);
43+ dbusmenu_client_add_type_handler (DBUSMENU_CLIENT(client),
44+ DBUSMENU_TRANSPORT_MENUITEM_TYPE,
45+ new_transport_widget);
46+ dbusmenu_client_add_type_handler (DBUSMENU_CLIENT(client),
47+ DBUSMENU_METADATA_MENUITEM_TYPE,
48+ new_metadata_widget);
49+ dbusmenu_client_add_type_handler (DBUSMENU_CLIENT(client),
50+ DBUSMENU_TITLE_MENUITEM_TYPE,
51+ new_title_widget);
52 // Note: Not ideal but all key handling needs to be managed here and then
53 // delegated to the appropriate widget.
54 g_signal_connect (menu, "key-press-event", G_CALLBACK(key_press_cb), io);
55@@ -286,7 +297,8 @@
56 static gboolean
57 new_transport_widget (DbusmenuMenuitem * newitem,
58 DbusmenuMenuitem * parent,
59- DbusmenuClient * client)
60+ DbusmenuClient * client,
61+ gpointer user_data)
62 {
63 g_debug("indicator-sound: new_transport_bar() called ");
64
65@@ -314,7 +326,8 @@
66 static gboolean
67 new_metadata_widget (DbusmenuMenuitem * newitem,
68 DbusmenuMenuitem * parent,
69- DbusmenuClient * client)
70+ DbusmenuClient * client,
71+ gpointer user_data)
72 {
73 g_debug("indicator-sound: new_metadata_widget");
74
75@@ -335,7 +348,8 @@
76 static gboolean
77 new_title_widget(DbusmenuMenuitem * newitem,
78 DbusmenuMenuitem * parent,
79- DbusmenuClient * client)
80+ DbusmenuClient * client,
81+ gpointer user_data)
82 {
83 g_return_val_if_fail(DBUSMENU_IS_MENUITEM(newitem), FALSE);
84 g_return_val_if_fail(DBUSMENU_IS_GTKCLIENT(client), FALSE);
85@@ -358,7 +372,8 @@
86 static gboolean
87 new_volume_slider_widget(DbusmenuMenuitem * newitem,
88 DbusmenuMenuitem * parent,
89- DbusmenuClient * client)
90+ DbusmenuClient * client,
91+ gpointer user_data)
92 {
93 g_debug("indicator-sound: new_volume_slider_widget");
94
95
96=== modified file 'src/transport-widget.c'
97--- src/transport-widget.c 2011-01-27 18:11:32 +0000
98+++ src/transport-widget.c 2011-01-28 13:00:46 +0000
99@@ -129,10 +129,10 @@
100 TransportWidgetState update);
101 static void transport_widget_select (GtkItem* menu, gpointer Userdata);
102 static void transport_widget_deselect (GtkItem* menu, gpointer Userdata);
103+static TransportWidgetEvent transport_widget_collision_detection (gint x, gint y);
104
105
106 /// Init functions //////////////////////////////////////////////////////////
107-
108 static void
109 transport_widget_class_init (TransportWidgetClass *klass)
110 {
111@@ -301,30 +301,23 @@
112 TransportWidgetPrivate* priv = TRANSPORT_WIDGET_GET_PRIVATE ( TRANSPORT_WIDGET(menuitem) );
113
114 priv->motion_event = TRANSPORT_NADA;
115- cairo_t *cr;
116- cr = gdk_cairo_create (menuitem->window);
117- draw ( menuitem, cr );
118- cairo_destroy ( cr );
119-
120+ priv->current_command = TRANSPORT_NADA;
121+ gtk_widget_queue_draw (GTK_WIDGET(menuitem));
122+
123 return TRUE;
124 }
125
126-/* keyevents */
127 static gboolean
128 transport_widget_button_press_event (GtkWidget *menuitem,
129- GdkEventButton *event)
130+ GdkEventButton *event)
131 {
132 g_return_val_if_fail ( IS_TRANSPORT_WIDGET(menuitem), FALSE );
133 TransportWidgetPrivate* priv = TRANSPORT_WIDGET_GET_PRIVATE ( TRANSPORT_WIDGET(menuitem) );
134 TransportWidgetEvent result = transport_widget_determine_button_event ( TRANSPORT_WIDGET(menuitem),
135 event);
136-
137 if(result != TRANSPORT_NADA){
138 priv->current_command = result;
139- cairo_t *cr;
140- cr = gdk_cairo_create (menuitem->window);
141- draw ( menuitem, cr );
142- cairo_destroy ( cr );
143+ gtk_widget_queue_draw (GTK_WIDGET(menuitem));
144 }
145 return TRUE;
146 }
147@@ -333,14 +326,12 @@
148 transport_widget_button_release_event (GtkWidget *menuitem,
149 GdkEventButton *event)
150 {
151- //g_debug("TransportWidget::menu_release_event");
152 g_return_val_if_fail(IS_TRANSPORT_WIDGET(menuitem), FALSE);
153 TransportWidget* transport = TRANSPORT_WIDGET(menuitem);
154 TransportWidgetPrivate * priv = TRANSPORT_WIDGET_GET_PRIVATE ( transport );
155 TransportWidgetEvent result = transport_widget_determine_button_event ( transport,
156 event );
157- if(result != TRANSPORT_NADA){
158- //g_debug("TransportWidget::menu_press_event - going to send value %i", (int)result);
159+ if (result != TRANSPORT_NADA && priv->current_command == result){
160 GVariant* new_transport_state = g_variant_new_int32 ((int)result);
161 dbusmenu_menuitem_handle_event ( priv->twin_item,
162 "Transport state change",
163@@ -376,17 +367,8 @@
164 TransportWidgetPrivate * priv = TRANSPORT_WIDGET_GET_PRIVATE ( transport );
165 priv->current_command = transport_event;
166 priv->key_event = transport_event;
167-/* printf("transport_widget_react_to_key_press_event: before drawing\n");*/
168 gtk_widget_realize ( GTK_WIDGET(transport) );
169-
170- printf ( "transport widget - react to key press event -> is the window null: %i",
171- gtk_widget_get_window (GTK_WIDGET (transport) ) == NULL );
172- cairo_t *cr;
173-
174- printf("transport_widget_react_to_key_press_event: before drawing\n");
175- cr = gdk_cairo_create ( GTK_WIDGET(transport)->window );
176- draw ( GTK_WIDGET(transport), cr );
177- cairo_destroy (cr);
178+ gtk_widget_queue_draw (GTK_WIDGET(transport) );
179 }
180 }
181
182@@ -396,7 +378,6 @@
183 {
184 if(transport_event != TRANSPORT_NADA){
185 TransportWidgetPrivate * priv = TRANSPORT_WIDGET_GET_PRIVATE ( transport );
186- //g_debug("TransportWidget::menu_press_event - going to send value %i", (int)result);
187 GVariant* new_transport_event = g_variant_new_int32((int)transport_event);
188 dbusmenu_menuitem_handle_event ( priv->twin_item,
189 "Transport state change",
190@@ -412,53 +393,41 @@
191 {
192 TransportWidgetPrivate * priv = TRANSPORT_WIDGET_GET_PRIVATE ( transport );
193 priv->has_focus = focus;
194- g_debug("new focus update = %i", focus);
195 }
196
197 static TransportWidgetEvent
198 transport_widget_determine_button_event( TransportWidget* button,
199 GdkEventButton* event )
200 {
201- //g_debug("event x coordinate = %f", event->x);
202- //g_debug("event y coordinate = %f", event->y);
203- TransportWidgetEvent button_event = TRANSPORT_NADA;
204- // For now very simple rectangular collision detection
205- if(event->x > 67 && event->x < 112
206- && event->y > 12 && event->y < 40){
207- button_event = TRANSPORT_PREVIOUS;
208- }
209- else if(event->x > 111 && event->x < 153
210- && event->y > 5 && event->y < 47){
211- button_event = TRANSPORT_PLAY_PAUSE;
212- }
213- else if(event->x > 152 && event->x < 197
214- && event->y > 12 && event->y < 40){
215- button_event = TRANSPORT_NEXT;
216- }
217- return button_event;
218+ return transport_widget_collision_detection (event->x, event->y);
219 }
220
221 static TransportWidgetEvent
222 transport_widget_determine_motion_event( TransportWidget* button,
223 GdkEventMotion* event )
224 {
225-/* g_debug("event x coordinate = %f", event->x);*/
226-/* g_debug("event y coordinate = %f", event->y);*/
227- TransportWidgetEvent motion_event = TRANSPORT_NADA;
228- // For now very simple rectangular collision detection
229- if(event->x > 67 && event->x < 112
230- && event->y > 12 && event->y < 40){
231- motion_event = TRANSPORT_PREVIOUS;
232- }
233- else if(event->x > 111 && event->x < 153
234- && event->y > 5 && event->y < 47){
235- motion_event = TRANSPORT_PLAY_PAUSE;
236- }
237- else if(event->x > 152 && event->x < 197
238- && event->y > 12 && event->y < 40){
239- motion_event = TRANSPORT_NEXT;
240- }
241- return motion_event;
242+ return transport_widget_collision_detection (event->x, event->y);
243+}
244+
245+static TransportWidgetEvent
246+transport_widget_collision_detection ( gint x,
247+ gint y )
248+{
249+ TransportWidgetEvent event = TRANSPORT_NADA;
250+
251+ if (x > 67 && x < 112
252+ && y > 12 && y < 40){
253+ event = TRANSPORT_PREVIOUS;
254+ }
255+ else if (x > 111 && x < 153
256+ && y > 5 && y < 47){
257+ event = TRANSPORT_PLAY_PAUSE;
258+ }
259+ else if (x > 152 && x < 197
260+ && y > 12 && y < 40){
261+ event = TRANSPORT_NEXT;
262+ }
263+ return event;
264 }
265
266 static void
267@@ -467,17 +436,11 @@
268 {
269 g_return_if_fail(IS_TRANSPORT_WIDGET(button));
270 TransportWidgetPrivate* priv = TRANSPORT_WIDGET_GET_PRIVATE(button);
271- if(priv->current_command != TRANSPORT_NADA &&
272- command != TRANSPORT_NADA){
273- priv->current_command = command;
274- }
275- cairo_t *cr;
276- cr = gdk_cairo_create ( GTK_WIDGET(button)->window );
277
278 priv->current_command = TRANSPORT_NADA;
279 priv->key_event = TRANSPORT_NADA;
280- draw ( GTK_WIDGET(button), cr );
281- cairo_destroy (cr);
282+
283+ gtk_widget_queue_draw (GTK_WIDGET(button));
284 }
285
286 /// internal helper functions //////////////////////////////////////////////////

Subscribers

People subscribed via source and target branches