Merge lp:~cjcurran/indicator-sound/keyboard-rewind-forwind into lp:~indicator-applet-developers/indicator-sound/trunk_3

Proposed by Conor Curran
Status: Merged
Merged at revision: 219
Proposed branch: lp:~cjcurran/indicator-sound/keyboard-rewind-forwind
Merge into: lp:~indicator-applet-developers/indicator-sound/trunk_3
Diff against target: 118 lines (+38/-14)
1 file modified
src/transport-widget.c (+38/-14)
To merge this branch: bzr merge lp:~cjcurran/indicator-sound/keyboard-rewind-forwind
Reviewer Review Type Date Requested Status
Kalle Valo (community) Approve
Review via email: mp+53012@code.launchpad.net

Description of the change

Ensure the keyboard shortcuts for the transport widget behave the exact same as the mouse.
This keyboard shortcuts UI functions and button handling functions in the transport-widget do need to be consolidated but for now make it work.

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

Looks good expect commenting out two g_debug messages. But approved anyway.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/transport-widget.c'
2--- src/transport-widget.c 2011-03-09 16:18:02 +0000
3+++ src/transport-widget.c 2011-03-11 13:00:16 +0000
4@@ -87,6 +87,8 @@
5 gint skip_frequency;
6 };
7
8+// TODO refactor the UI handlers, consolidate functionality between key press /release
9+// and button press / release.
10 #define TRANSPORT_WIDGET_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TRANSPORT_WIDGET_TYPE, TransportWidgetPrivate))
11
12 /* Gobject boiler plate */
13@@ -295,6 +297,14 @@
14 event);
15 priv->motion_event = result;
16 gtk_widget_queue_draw (menuitem);
17+ if (priv->hold_timer != 0){
18+ g_source_remove (priv->hold_timer);
19+ priv->hold_timer = 0;
20+ }
21+ if(priv->skip_frequency != 0){
22+ g_source_remove (priv->skip_frequency);
23+ priv->skip_frequency = 0;
24+ }
25 return TRUE;
26 }
27
28@@ -323,7 +333,10 @@
29 if(result != TRANSPORT_ACTION_NO_ACTION){
30 priv->current_command = result;
31 gtk_widget_queue_draw (GTK_WIDGET(menuitem));
32- transport_widget_start_timing (TRANSPORT_WIDGET(menuitem));
33+ if (priv->current_command == TRANSPORT_ACTION_PREVIOUS ||
34+ priv->current_command == TRANSPORT_ACTION_NEXT){
35+ transport_widget_start_timing (TRANSPORT_WIDGET(menuitem));
36+ }
37 }
38 return TRUE;
39 }
40@@ -335,9 +348,11 @@
41 transport_widget_start_timing (TransportWidget* widget)
42 {
43 TransportWidgetPrivate* priv = TRANSPORT_WIDGET_GET_PRIVATE (widget);
44- priv->hold_timer = g_timeout_add (800,
45- transport_widget_trigger_seek,
46- widget);
47+ if (priv->hold_timer == 0){
48+ priv->hold_timer = g_timeout_add (800,
49+ transport_widget_trigger_seek,
50+ widget);
51+ }
52 }
53
54 static gboolean
55@@ -345,9 +360,12 @@
56 {
57 g_return_val_if_fail ( IS_TRANSPORT_WIDGET(userdata), FALSE );
58 TransportWidgetPrivate* priv = TRANSPORT_WIDGET_GET_PRIVATE (TRANSPORT_WIDGET(userdata));
59- priv->skip_frequency = g_timeout_add (100,
60- transport_widget_seek,
61- userdata);
62+ if (priv->skip_frequency == 0){
63+ priv->skip_frequency = g_timeout_add (100,
64+ transport_widget_seek,
65+ userdata);
66+ }
67+ priv->hold_timer = 0;
68 return FALSE;
69 }
70
71@@ -363,7 +381,7 @@
72 TransportWidgetPrivate* priv = TRANSPORT_WIDGET_GET_PRIVATE (TRANSPORT_WIDGET(userdata));
73 GVariant* new_transport_state;
74 if(priv->current_command == TRANSPORT_ACTION_NEXT){
75- g_debug ("we should be skipping forward");
76+ //g_debug ("we should be skipping forward");
77 new_transport_state = g_variant_new_int32 ((int)TRANSPORT_ACTION_FORWIND);
78
79 dbusmenu_menuitem_handle_event ( priv->twin_item,
80@@ -373,7 +391,7 @@
81
82 }
83 else if(priv->current_command == TRANSPORT_ACTION_PREVIOUS){
84- g_debug ("we should be skipping back");
85+ //g_debug ("we should be skipping back");
86 new_transport_state = g_variant_new_int32 ((int)TRANSPORT_ACTION_REWIND);
87
88 dbusmenu_menuitem_handle_event ( priv->twin_item,
89@@ -434,6 +452,10 @@
90 priv->key_event = transport_event;
91 gtk_widget_realize ( GTK_WIDGET(transport) );
92 gtk_widget_queue_draw (GTK_WIDGET(transport) );
93+ if (priv->current_command == TRANSPORT_ACTION_PREVIOUS ||
94+ priv->current_command == TRANSPORT_ACTION_NEXT){
95+ transport_widget_start_timing (transport);
96+ }
97 }
98 }
99
100@@ -443,11 +465,13 @@
101 {
102 if(transport_event != TRANSPORT_ACTION_NO_ACTION){
103 TransportWidgetPrivate * priv = TRANSPORT_WIDGET_GET_PRIVATE ( transport );
104- GVariant* new_transport_event = g_variant_new_int32((int)transport_event);
105- dbusmenu_menuitem_handle_event ( priv->twin_item,
106- "Transport state change",
107- new_transport_event,
108- 0 );
109+ GVariant* new_transport_event = g_variant_new_int32((int)transport_event);
110+ if (priv->skip_frequency == 0){
111+ dbusmenu_menuitem_handle_event ( priv->twin_item,
112+ "Transport state change",
113+ new_transport_event,
114+ 0 );
115+ }
116 }
117 transport_widget_react_to_button_release ( transport,
118 transport_event );

Subscribers

People subscribed via source and target branches