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
=== modified file 'src/metadata-widget.c'
--- src/metadata-widget.c 2010-09-28 17:11:17 +0000
+++ src/metadata-widget.c 2010-10-01 11:23:41 +0000
@@ -27,7 +27,6 @@
27#include <gtk/gtk.h>27#include <gtk/gtk.h>
28#include <glib.h>28#include <glib.h>
2929
30static DbusmenuMenuitem* twin_item;
3130
32typedef struct _MetadataWidgetPrivate MetadataWidgetPrivate;31typedef struct _MetadataWidgetPrivate MetadataWidgetPrivate;
3332
@@ -40,7 +39,8 @@
40 GString* old_image_path;39 GString* old_image_path;
41 GtkWidget* artist_label;40 GtkWidget* artist_label;
42 GtkWidget* piece_label;41 GtkWidget* piece_label;
43 GtkWidget* container_label; 42 GtkWidget* container_label;
43 DbusmenuMenuitem* twin_item;
44};44};
4545
46#define METADATA_WIDGET_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), METADATA_WIDGET_TYPE, MetadataWidgetPrivate))46#define METADATA_WIDGET_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), METADATA_WIDGET_TYPE, MetadataWidgetPrivate))
@@ -52,6 +52,7 @@
52static void metadata_widget_finalize (GObject *object);52static void metadata_widget_finalize (GObject *object);
53static gboolean metadata_image_expose (GtkWidget *image, GdkEventExpose *event, gpointer user_data);53static gboolean metadata_image_expose (GtkWidget *image, GdkEventExpose *event, gpointer user_data);
54static void metadata_widget_set_style (GtkWidget* button, GtkStyle* style);54static void metadata_widget_set_style (GtkWidget* button, GtkStyle* style);
55static void metadata_widget_set_twin_item (MetadataWidget* self, DbusmenuMenuitem* twin_item);
5556
56// keyevent consumers57// keyevent consumers
57static gboolean metadata_widget_button_press_event (GtkWidget *menuitem, 58static gboolean metadata_widget_button_press_event (GtkWidget *menuitem,
@@ -98,7 +99,7 @@
9899
99 // image100 // image
100 priv->album_art = gtk_image_new();101 priv->album_art = gtk_image_new();
101 priv->image_path = g_string_new(dbusmenu_menuitem_property_get(twin_item, DBUSMENU_METADATA_MENUITEM_ARTURL));102 priv->image_path = g_string_new(dbusmenu_menuitem_property_get(priv->twin_item, DBUSMENU_METADATA_MENUITEM_ARTURL));
102 priv->old_image_path = g_string_new("");103 priv->old_image_path = g_string_new("");
103 g_debug("Metadata::At startup and image path = %s", priv->image_path->str);104 g_debug("Metadata::At startup and image path = %s", priv->image_path->str);
104 105
@@ -115,7 +116,7 @@
115 116
116 // artist117 // artist
117 GtkWidget* artist;118 GtkWidget* artist;
118 artist = gtk_label_new(dbusmenu_menuitem_property_get(twin_item,119 artist = gtk_label_new(dbusmenu_menuitem_property_get(priv->twin_item,
119 DBUSMENU_METADATA_MENUITEM_ARTIST));120 DBUSMENU_METADATA_MENUITEM_ARTIST));
120 gtk_misc_set_alignment(GTK_MISC(artist), (gfloat)0, (gfloat)0);121 gtk_misc_set_alignment(GTK_MISC(artist), (gfloat)0, (gfloat)0);
121 gtk_misc_set_padding (GTK_MISC(artist), (gfloat)10, (gfloat)0);122 gtk_misc_set_padding (GTK_MISC(artist), (gfloat)10, (gfloat)0);
@@ -126,8 +127,8 @@
126 127
127 // title128 // title
128 GtkWidget* piece;129 GtkWidget* piece;
129 piece = gtk_label_new(dbusmenu_menuitem_property_get(twin_item,130 piece = gtk_label_new(dbusmenu_menuitem_property_get( priv->twin_item,
130 DBUSMENU_METADATA_MENUITEM_TITLE));131 DBUSMENU_METADATA_MENUITEM_TITLE) );
131 gtk_misc_set_alignment(GTK_MISC(piece), (gfloat)0, (gfloat)0);132 gtk_misc_set_alignment(GTK_MISC(piece), (gfloat)0, (gfloat)0);
132 gtk_misc_set_padding (GTK_MISC(piece), (gfloat)10, (gfloat)0);133 gtk_misc_set_padding (GTK_MISC(piece), (gfloat)10, (gfloat)0);
133 gtk_label_set_width_chars(GTK_LABEL(piece), 15);134 gtk_label_set_width_chars(GTK_LABEL(piece), 15);
@@ -137,8 +138,8 @@
137138
138 // container139 // container
139 GtkWidget* container;140 GtkWidget* container;
140 container = gtk_label_new(dbusmenu_menuitem_property_get(twin_item,141 container = gtk_label_new(dbusmenu_menuitem_property_get( priv->twin_item,
141 DBUSMENU_METADATA_MENUITEM_ALBUM));142 DBUSMENU_METADATA_MENUITEM_ALBUM) );
142 gtk_misc_set_alignment(GTK_MISC(container), (gfloat)0, (gfloat)0);143 gtk_misc_set_alignment(GTK_MISC(container), (gfloat)0, (gfloat)0);
143 gtk_misc_set_padding (GTK_MISC(container), (gfloat)10, (gfloat)0); 144 gtk_misc_set_padding (GTK_MISC(container), (gfloat)10, (gfloat)0);
144 gtk_label_set_width_chars(GTK_LABEL(container), 15); 145 gtk_label_set_width_chars(GTK_LABEL(container), 15);
@@ -152,8 +153,6 @@
152 153
153 gtk_box_pack_start (GTK_BOX (priv->hbox), vbox, FALSE, FALSE, 0); 154 gtk_box_pack_start (GTK_BOX (priv->hbox), vbox, FALSE, FALSE, 0);
154155
155 g_signal_connect(G_OBJECT(twin_item), "property-changed",
156 G_CALLBACK(metadata_widget_property_update), self);
157 gtk_widget_show_all (priv->hbox);156 gtk_widget_show_all (priv->hbox);
158157
159 g_signal_connect(self, "style-set", G_CALLBACK(metadata_widget_set_style), GTK_WIDGET(self)); 158 g_signal_connect(self, "style-set", G_CALLBACK(metadata_widget_set_style), GTK_WIDGET(self));
@@ -211,9 +210,9 @@
211 return TRUE;210 return TRUE;
212}211}
213212
214static void draw_album_art_placeholder(GtkWidget *metadata)213static void
215{214draw_album_art_placeholder(GtkWidget *metadata)
216 215{
217 cairo_t *cr; 216 cairo_t *cr;
218 cr = gdk_cairo_create (metadata->window);217 cr = gdk_cairo_create (metadata->window);
219 GtkStyle *style;218 GtkStyle *style;
@@ -286,20 +285,20 @@
286 GdkEventButton *event)285 GdkEventButton *event)
287{286{
288 GtkClipboard* board = gtk_clipboard_get (GDK_NONE); 287 GtkClipboard* board = gtk_clipboard_get (GDK_NONE);
289 gchar* title = g_strdup(dbusmenu_menuitem_property_get(twin_item,288
290 DBUSMENU_METADATA_MENUITEM_TITLE));289 MetadataWidgetPrivate* priv = METADATA_WIDGET_GET_PRIVATE(METADATA_WIDGET(menuitem));
291 gchar* artist = g_strdup(dbusmenu_menuitem_property_get(twin_item,290
292 DBUSMENU_METADATA_MENUITEM_ARTIST));291 gchar* contents = g_strdup_printf("artist: %s \ntitle: %s \nalbum: %s",
293 gchar* album = g_strdup(dbusmenu_menuitem_property_get(twin_item,292 dbusmenu_menuitem_property_get(priv->twin_item,
294 DBUSMENU_METADATA_MENUITEM_ALBUM));293 DBUSMENU_METADATA_MENUITEM_ARTIST),
295 gchar* contents = g_strdup_printf("artist: %s \ntitle: %s \nalbum: %s", artist, title, album);294 dbusmenu_menuitem_property_get(priv->twin_item,
295 DBUSMENU_METADATA_MENUITEM_TITLE),
296 dbusmenu_menuitem_property_get(priv->twin_item,
297 DBUSMENU_METADATA_MENUITEM_ALBUM));
296 g_debug("contents to be copied will be : %s", contents); 298 g_debug("contents to be copied will be : %s", contents);
297 gtk_clipboard_set_text (board, contents, -1);299 gtk_clipboard_set_text (board, contents, -1);
298 gtk_clipboard_store (board);300 gtk_clipboard_store (board);
299 g_free(contents);301 g_free(contents);
300 g_free(title);
301 g_free(artist);
302 g_free(album);
303 return FALSE;302 return FALSE;
304}303}
305304
@@ -510,6 +509,17 @@
510 g_debug("metadata_widget: theme change"); 509 g_debug("metadata_widget: theme change");
511}510}
512511
512static void
513metadata_widget_set_twin_item(MetadataWidget* self,
514 DbusmenuMenuitem* twin_item)
515{
516 MetadataWidgetPrivate* priv = METADATA_WIDGET_GET_PRIVATE(self);
517 priv->twin_item = twin_item;
518 g_signal_connect(G_OBJECT(priv->twin_item), "property-changed",
519 G_CALLBACK(metadata_widget_property_update), self);
520}
521
522
513 /**523 /**
514 * transport_new:524 * transport_new:
515 * @returns: a new #MetadataWidget.525 * @returns: a new #MetadataWidget.
@@ -517,7 +527,10 @@
517GtkWidget* 527GtkWidget*
518metadata_widget_new(DbusmenuMenuitem *item)528metadata_widget_new(DbusmenuMenuitem *item)
519{529{
520 twin_item = item;530
521 return g_object_new(METADATA_WIDGET_TYPE, NULL);531 GtkWidget* widget = g_object_new(METADATA_WIDGET_TYPE, NULL);
532 metadata_widget_set_twin_item ( METADATA_WIDGET(widget),
533 item );
534 return widget;
522}535}
523536
524537
=== modified file 'src/transport-widget.c'
--- src/transport-widget.c 2010-09-30 17:01:17 +0000
+++ src/transport-widget.c 2010-10-01 11:23:41 +0000
@@ -77,7 +77,7 @@
77 TransportWidgetEvent current_command;77 TransportWidgetEvent current_command;
78 TransportWidgetState current_state;78 TransportWidgetState current_state;
79 GHashTable* command_coordinates; 79 GHashTable* command_coordinates;
80 DbusmenuMenuitem* twin_item; 80 DbusmenuMenuitem* twin_item;
81};81};
8282
83typedef struct83typedef struct
@@ -234,14 +234,14 @@
234 GParamSpec *pspec,234 GParamSpec *pspec,
235 gpointer user_data)235 gpointer user_data)
236{236{
237 if (g_strcmp0 (pspec->name, "parent")){237 if (g_strcmp0 (pspec->name, "parent")){
238 GtkWidget *parent = gtk_widget_get_parent (GTK_WIDGET (item));238 GtkWidget *parent = gtk_widget_get_parent (GTK_WIDGET (item));
239 if (parent){239 if (parent){
240 g_signal_connect ( parent, "hide",240 g_signal_connect ( parent, "hide",
241 G_CALLBACK (transport_widget_menu_hidden),241 G_CALLBACK (transport_widget_menu_hidden),
242 item);242 item);
243 }
244 }243 }
244 }
245}245}
246246
247static void247static void
@@ -261,15 +261,15 @@
261 g_return_val_if_fail ( IS_TRANSPORT_WIDGET(menuitem), FALSE );261 g_return_val_if_fail ( IS_TRANSPORT_WIDGET(menuitem), FALSE );
262 TransportWidgetPrivate* priv = TRANSPORT_WIDGET_GET_PRIVATE ( TRANSPORT_WIDGET(menuitem) );262 TransportWidgetPrivate* priv = TRANSPORT_WIDGET_GET_PRIVATE ( TRANSPORT_WIDGET(menuitem) );
263263
264 TransportWidgetEvent result = transport_widget_determine_button_event ( TRANSPORT_WIDGET(menuitem),264 TransportWidgetEvent result = transport_widget_determine_button_event ( TRANSPORT_WIDGET(menuitem),
265 event);265 event);
266 if(result != TRANSPORT_NADA){266 if(result != TRANSPORT_NADA){
267 priv->current_command = result;267 priv->current_command = result;
268 cairo_t *cr;268 cairo_t *cr;
269 cr = gdk_cairo_create (menuitem->window);269 cr = gdk_cairo_create (menuitem->window);
270 draw ( menuitem, cr );270 draw ( menuitem, cr );
271 cairo_destroy ( cr );271 cairo_destroy ( cr );
272 }272 }
273 return TRUE;273 return TRUE;
274}274}
275 275
@@ -278,26 +278,26 @@
278 GdkEventButton *event)278 GdkEventButton *event)
279{279{
280 //g_debug("TransportWidget::menu_release_event");280 //g_debug("TransportWidget::menu_release_event");
281 g_return_val_if_fail(IS_TRANSPORT_WIDGET(menuitem), FALSE);281 g_return_val_if_fail(IS_TRANSPORT_WIDGET(menuitem), FALSE);
282 TransportWidget* transport = TRANSPORT_WIDGET(menuitem);282 TransportWidget* transport = TRANSPORT_WIDGET(menuitem);
283 TransportWidgetPrivate * priv = TRANSPORT_WIDGET_GET_PRIVATE ( transport ); 283 TransportWidgetPrivate * priv = TRANSPORT_WIDGET_GET_PRIVATE ( transport );
284284
285 TransportWidgetEvent result = transport_widget_determine_button_event ( transport,285 TransportWidgetEvent result = transport_widget_determine_button_event ( transport,
286 event );286 event );
287 if(result != TRANSPORT_NADA){287 if(result != TRANSPORT_NADA){
288 GValue value = {0};288 GValue value = {0};
289 g_value_init(&value, G_TYPE_INT);289 g_value_init(&value, G_TYPE_INT);
290 //g_debug("TransportWidget::menu_press_event - going to send value %i", (int)result);290 //g_debug("TransportWidget::menu_press_event - going to send value %i", (int)result);
291 g_value_set_int(&value, (int)result); 291 g_value_set_int(&value, (int)result);
292 dbusmenu_menuitem_handle_event ( priv->twin_item,292 dbusmenu_menuitem_handle_event ( priv->twin_item,
293 "Transport state change",293 "Transport state change",
294 &value,294 &value,
295 0 );295 0 );
296 }296 }
297 297
298 transport_widget_react_to_button_release ( transport,298 transport_widget_react_to_button_release ( transport,
299 result );299 result );
300 return TRUE;300 return TRUE;
301}301}
302302
303static TransportWidgetEvent303static TransportWidgetEvent
@@ -1264,7 +1264,8 @@
1264 }1264 }
1265}1265}
12661266
1267static void transport_widget_set_twin_item(TransportWidget* self,1267static void
1268transport_widget_set_twin_item(TransportWidget* self,
1268 DbusmenuMenuitem* twin_item)1269 DbusmenuMenuitem* twin_item)
1269{1270{
1270 TransportWidgetPrivate* priv = TRANSPORT_WIDGET_GET_PRIVATE(self);1271 TransportWidgetPrivate* priv = TRANSPORT_WIDGET_GET_PRIVATE(self);
@@ -1295,7 +1296,6 @@
1295}1296}
12961297
12971298
1298
1299/**1299/**
1300* transport_widget_new:1300* transport_widget_new:
1301* @returns: a new #TransportWidget.1301* @returns: a new #TransportWidget.

Subscribers

People subscribed via source and target branches

to all changes: