Merge lp:~cjcurran/indicator-sound/clipboard-fix into lp:indicator-sound/sound-menu-v2

Proposed by Conor Curran
Status: Merged
Approved by: Gord Allott
Approved revision: 142
Merged at revision: 142
Proposed branch: lp:~cjcurran/indicator-sound/clipboard-fix
Merge into: lp:indicator-sound/sound-menu-v2
Diff against target: 276 lines (+75/-62)
2 files modified
src/metadata-widget.c (+38/-25)
src/transport-widget.c (+37/-37)
To merge this branch: bzr merge lp:~cjcurran/indicator-sound/clipboard-fix
Reviewer Review Type Date Requested Status
Indicator Applet Developers Pending
Review via email: mp+37238@code.launchpad.net

Description of the change

Metadata widget was using a static dbusmenuitem, changes this so as each instance has its own dbusmenuitem equivalent (just like everything else, don't know how this slipped through the net)

- as a result clipboard copying works now as expected.

To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/metadata-widget.c'
2--- src/metadata-widget.c 2010-09-28 17:11:17 +0000
3+++ src/metadata-widget.c 2010-10-01 11:23:41 +0000
4@@ -27,7 +27,6 @@
5 #include <gtk/gtk.h>
6 #include <glib.h>
7
8-static DbusmenuMenuitem* twin_item;
9
10 typedef struct _MetadataWidgetPrivate MetadataWidgetPrivate;
11
12@@ -40,7 +39,8 @@
13 GString* old_image_path;
14 GtkWidget* artist_label;
15 GtkWidget* piece_label;
16- GtkWidget* container_label;
17+ GtkWidget* container_label;
18+ DbusmenuMenuitem* twin_item;
19 };
20
21 #define METADATA_WIDGET_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), METADATA_WIDGET_TYPE, MetadataWidgetPrivate))
22@@ -52,6 +52,7 @@
23 static void metadata_widget_finalize (GObject *object);
24 static gboolean metadata_image_expose (GtkWidget *image, GdkEventExpose *event, gpointer user_data);
25 static void metadata_widget_set_style (GtkWidget* button, GtkStyle* style);
26+static void metadata_widget_set_twin_item (MetadataWidget* self, DbusmenuMenuitem* twin_item);
27
28 // keyevent consumers
29 static gboolean metadata_widget_button_press_event (GtkWidget *menuitem,
30@@ -98,7 +99,7 @@
31
32 // image
33 priv->album_art = gtk_image_new();
34- priv->image_path = g_string_new(dbusmenu_menuitem_property_get(twin_item, DBUSMENU_METADATA_MENUITEM_ARTURL));
35+ priv->image_path = g_string_new(dbusmenu_menuitem_property_get(priv->twin_item, DBUSMENU_METADATA_MENUITEM_ARTURL));
36 priv->old_image_path = g_string_new("");
37 g_debug("Metadata::At startup and image path = %s", priv->image_path->str);
38
39@@ -115,7 +116,7 @@
40
41 // artist
42 GtkWidget* artist;
43- artist = gtk_label_new(dbusmenu_menuitem_property_get(twin_item,
44+ artist = gtk_label_new(dbusmenu_menuitem_property_get(priv->twin_item,
45 DBUSMENU_METADATA_MENUITEM_ARTIST));
46 gtk_misc_set_alignment(GTK_MISC(artist), (gfloat)0, (gfloat)0);
47 gtk_misc_set_padding (GTK_MISC(artist), (gfloat)10, (gfloat)0);
48@@ -126,8 +127,8 @@
49
50 // title
51 GtkWidget* piece;
52- piece = gtk_label_new(dbusmenu_menuitem_property_get(twin_item,
53- DBUSMENU_METADATA_MENUITEM_TITLE));
54+ piece = gtk_label_new(dbusmenu_menuitem_property_get( priv->twin_item,
55+ DBUSMENU_METADATA_MENUITEM_TITLE) );
56 gtk_misc_set_alignment(GTK_MISC(piece), (gfloat)0, (gfloat)0);
57 gtk_misc_set_padding (GTK_MISC(piece), (gfloat)10, (gfloat)0);
58 gtk_label_set_width_chars(GTK_LABEL(piece), 15);
59@@ -137,8 +138,8 @@
60
61 // container
62 GtkWidget* container;
63- container = gtk_label_new(dbusmenu_menuitem_property_get(twin_item,
64- DBUSMENU_METADATA_MENUITEM_ALBUM));
65+ container = gtk_label_new(dbusmenu_menuitem_property_get( priv->twin_item,
66+ DBUSMENU_METADATA_MENUITEM_ALBUM) );
67 gtk_misc_set_alignment(GTK_MISC(container), (gfloat)0, (gfloat)0);
68 gtk_misc_set_padding (GTK_MISC(container), (gfloat)10, (gfloat)0);
69 gtk_label_set_width_chars(GTK_LABEL(container), 15);
70@@ -152,8 +153,6 @@
71
72 gtk_box_pack_start (GTK_BOX (priv->hbox), vbox, FALSE, FALSE, 0);
73
74- g_signal_connect(G_OBJECT(twin_item), "property-changed",
75- G_CALLBACK(metadata_widget_property_update), self);
76 gtk_widget_show_all (priv->hbox);
77
78 g_signal_connect(self, "style-set", G_CALLBACK(metadata_widget_set_style), GTK_WIDGET(self));
79@@ -211,9 +210,9 @@
80 return TRUE;
81 }
82
83-static void draw_album_art_placeholder(GtkWidget *metadata)
84-{
85-
86+static void
87+draw_album_art_placeholder(GtkWidget *metadata)
88+{
89 cairo_t *cr;
90 cr = gdk_cairo_create (metadata->window);
91 GtkStyle *style;
92@@ -286,20 +285,20 @@
93 GdkEventButton *event)
94 {
95 GtkClipboard* board = gtk_clipboard_get (GDK_NONE);
96- gchar* title = g_strdup(dbusmenu_menuitem_property_get(twin_item,
97- DBUSMENU_METADATA_MENUITEM_TITLE));
98- gchar* artist = g_strdup(dbusmenu_menuitem_property_get(twin_item,
99- DBUSMENU_METADATA_MENUITEM_ARTIST));
100- gchar* album = g_strdup(dbusmenu_menuitem_property_get(twin_item,
101- DBUSMENU_METADATA_MENUITEM_ALBUM));
102- gchar* contents = g_strdup_printf("artist: %s \ntitle: %s \nalbum: %s", artist, title, album);
103+
104+ MetadataWidgetPrivate* priv = METADATA_WIDGET_GET_PRIVATE(METADATA_WIDGET(menuitem));
105+
106+ gchar* contents = g_strdup_printf("artist: %s \ntitle: %s \nalbum: %s",
107+ dbusmenu_menuitem_property_get(priv->twin_item,
108+ DBUSMENU_METADATA_MENUITEM_ARTIST),
109+ dbusmenu_menuitem_property_get(priv->twin_item,
110+ DBUSMENU_METADATA_MENUITEM_TITLE),
111+ dbusmenu_menuitem_property_get(priv->twin_item,
112+ DBUSMENU_METADATA_MENUITEM_ALBUM));
113 g_debug("contents to be copied will be : %s", contents);
114 gtk_clipboard_set_text (board, contents, -1);
115 gtk_clipboard_store (board);
116 g_free(contents);
117- g_free(title);
118- g_free(artist);
119- g_free(album);
120 return FALSE;
121 }
122
123@@ -510,6 +509,17 @@
124 g_debug("metadata_widget: theme change");
125 }
126
127+static void
128+metadata_widget_set_twin_item(MetadataWidget* self,
129+ DbusmenuMenuitem* twin_item)
130+{
131+ MetadataWidgetPrivate* priv = METADATA_WIDGET_GET_PRIVATE(self);
132+ priv->twin_item = twin_item;
133+ g_signal_connect(G_OBJECT(priv->twin_item), "property-changed",
134+ G_CALLBACK(metadata_widget_property_update), self);
135+}
136+
137+
138 /**
139 * transport_new:
140 * @returns: a new #MetadataWidget.
141@@ -517,7 +527,10 @@
142 GtkWidget*
143 metadata_widget_new(DbusmenuMenuitem *item)
144 {
145- twin_item = item;
146- return g_object_new(METADATA_WIDGET_TYPE, NULL);
147+
148+ GtkWidget* widget = g_object_new(METADATA_WIDGET_TYPE, NULL);
149+ metadata_widget_set_twin_item ( METADATA_WIDGET(widget),
150+ item );
151+ return widget;
152 }
153
154
155=== modified file 'src/transport-widget.c'
156--- src/transport-widget.c 2010-09-30 17:01:17 +0000
157+++ src/transport-widget.c 2010-10-01 11:23:41 +0000
158@@ -77,7 +77,7 @@
159 TransportWidgetEvent current_command;
160 TransportWidgetState current_state;
161 GHashTable* command_coordinates;
162- DbusmenuMenuitem* twin_item;
163+ DbusmenuMenuitem* twin_item;
164 };
165
166 typedef struct
167@@ -234,14 +234,14 @@
168 GParamSpec *pspec,
169 gpointer user_data)
170 {
171- if (g_strcmp0 (pspec->name, "parent")){
172- GtkWidget *parent = gtk_widget_get_parent (GTK_WIDGET (item));
173- if (parent){
174- g_signal_connect ( parent, "hide",
175- G_CALLBACK (transport_widget_menu_hidden),
176- item);
177- }
178+ if (g_strcmp0 (pspec->name, "parent")){
179+ GtkWidget *parent = gtk_widget_get_parent (GTK_WIDGET (item));
180+ if (parent){
181+ g_signal_connect ( parent, "hide",
182+ G_CALLBACK (transport_widget_menu_hidden),
183+ item);
184 }
185+ }
186 }
187
188 static void
189@@ -261,15 +261,15 @@
190 g_return_val_if_fail ( IS_TRANSPORT_WIDGET(menuitem), FALSE );
191 TransportWidgetPrivate* priv = TRANSPORT_WIDGET_GET_PRIVATE ( TRANSPORT_WIDGET(menuitem) );
192
193- TransportWidgetEvent result = transport_widget_determine_button_event ( TRANSPORT_WIDGET(menuitem),
194+ TransportWidgetEvent result = transport_widget_determine_button_event ( TRANSPORT_WIDGET(menuitem),
195 event);
196 if(result != TRANSPORT_NADA){
197- priv->current_command = result;
198- cairo_t *cr;
199- cr = gdk_cairo_create (menuitem->window);
200- draw ( menuitem, cr );
201- cairo_destroy ( cr );
202- }
203+ priv->current_command = result;
204+ cairo_t *cr;
205+ cr = gdk_cairo_create (menuitem->window);
206+ draw ( menuitem, cr );
207+ cairo_destroy ( cr );
208+ }
209 return TRUE;
210 }
211
212@@ -278,26 +278,26 @@
213 GdkEventButton *event)
214 {
215 //g_debug("TransportWidget::menu_release_event");
216- g_return_val_if_fail(IS_TRANSPORT_WIDGET(menuitem), FALSE);
217- TransportWidget* transport = TRANSPORT_WIDGET(menuitem);
218- TransportWidgetPrivate * priv = TRANSPORT_WIDGET_GET_PRIVATE ( transport );
219-
220- TransportWidgetEvent result = transport_widget_determine_button_event ( transport,
221- event );
222- if(result != TRANSPORT_NADA){
223- GValue value = {0};
224- g_value_init(&value, G_TYPE_INT);
225- //g_debug("TransportWidget::menu_press_event - going to send value %i", (int)result);
226- g_value_set_int(&value, (int)result);
227- dbusmenu_menuitem_handle_event ( priv->twin_item,
228- "Transport state change",
229- &value,
230- 0 );
231- }
232-
233- transport_widget_react_to_button_release ( transport,
234- result );
235- return TRUE;
236+ g_return_val_if_fail(IS_TRANSPORT_WIDGET(menuitem), FALSE);
237+ TransportWidget* transport = TRANSPORT_WIDGET(menuitem);
238+ TransportWidgetPrivate * priv = TRANSPORT_WIDGET_GET_PRIVATE ( transport );
239+
240+ TransportWidgetEvent result = transport_widget_determine_button_event ( transport,
241+ event );
242+ if(result != TRANSPORT_NADA){
243+ GValue value = {0};
244+ g_value_init(&value, G_TYPE_INT);
245+ //g_debug("TransportWidget::menu_press_event - going to send value %i", (int)result);
246+ g_value_set_int(&value, (int)result);
247+ dbusmenu_menuitem_handle_event ( priv->twin_item,
248+ "Transport state change",
249+ &value,
250+ 0 );
251+ }
252+
253+ transport_widget_react_to_button_release ( transport,
254+ result );
255+ return TRUE;
256 }
257
258 static TransportWidgetEvent
259@@ -1264,7 +1264,8 @@
260 }
261 }
262
263-static void transport_widget_set_twin_item(TransportWidget* self,
264+static void
265+transport_widget_set_twin_item(TransportWidget* self,
266 DbusmenuMenuitem* twin_item)
267 {
268 TransportWidgetPrivate* priv = TRANSPORT_WIDGET_GET_PRIVATE(self);
269@@ -1295,7 +1296,6 @@
270 }
271
272
273-
274 /**
275 * transport_widget_new:
276 * @returns: a new #TransportWidget.

Subscribers

People subscribed via source and target branches

to all changes: