From 46c07c1a044b012dde2a322b41bad8d7bb34aaf4 Mon Sep 17 00:00:00 2001 From: Jeremy Bicha Date: Fri, 20 May 2011 02:38:14 -0400 Subject: changed "Sound Preferences..." to "Sound Settings" (LP: #785571) --- src/sound-service-dbus.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sound-service-dbus.c b/src/sound-service-dbus.c index d0fd765..318892b 100644 --- a/src/sound-service-dbus.c +++ b/src/sound-service-dbus.c @@ -183,7 +183,7 @@ sound_service_dbus_build_sound_menu ( SoundServiceDbus* self, dbusmenu_menuitem_property_set( settings_mi, DBUSMENU_MENUITEM_PROP_LABEL, - _("Sound Preferences...")); + _("Sound Settings")); dbusmenu_menuitem_child_append(priv->root_menuitem, settings_mi); g_object_unref (settings_mi); g_signal_connect(G_OBJECT(settings_mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, -- cgit v1.2.3 From 58627767fbd151587a843fd2397f1c293533664a Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Thu, 9 Jun 2011 12:15:39 +0200 Subject: merged the title and metadata at the backend, now for the tricky UI work@ --- src/Makefile.am | 3 --- src/common-defs.h | 20 ++++++++++---------- src/indicator-sound.c | 11 ++--------- src/metadata-menu-item.vala | 38 ++++++++++++++++++++++++++++++++++---- src/mpris2-controller.vala | 8 ++++---- src/player-controller.vala | 29 ++++++++++++----------------- src/title-menu-item.vala | 4 ++-- vapi/common-defs.vapi | 8 ++++---- 8 files changed, 68 insertions(+), 53 deletions(-) diff --git a/src/Makefile.am b/src/Makefile.am index bafd6be..c546f0f 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -18,8 +18,6 @@ libsoundmenu_la_SOURCES = \ transport-widget.h \ metadata-widget.c \ metadata-widget.h \ - title-widget.c \ - title-widget.h \ volume-widget.c \ volume-widget.h \ voip-input-widget.c \ @@ -49,7 +47,6 @@ music_bridge_VALASOURCES = \ music-player-bridge.vala \ transport-menu-item.vala \ metadata-menu-item.vala \ - title-menu-item.vala \ player-controller.vala \ mpris2-interfaces.vala \ mpris2-watcher.vala \ diff --git a/src/common-defs.h b/src/common-defs.h index b118d4b..5f44296 100644 --- a/src/common-defs.h +++ b/src/common-defs.h @@ -67,16 +67,16 @@ typedef enum { #define DBUSMENU_TRANSPORT_MENUITEM_TYPE "x-canonical-sound-menu-player-transport-type" #define DBUSMENU_TRANSPORT_MENUITEM_PLAY_STATE "x-canonical-sound-menu-player-transport-state" -#define DBUSMENU_METADATA_MENUITEM_TYPE "x-canonical-sound-menu-player-metadata-type" -#define DBUSMENU_METADATA_MENUITEM_ARTIST "x-canonical-sound-menu-player-metadata-xesam:artist" -#define DBUSMENU_METADATA_MENUITEM_TITLE "x-canonical-sound-menu-player-metadata-xesam:title" -#define DBUSMENU_METADATA_MENUITEM_ALBUM "x-canonical-sound-menu-player-metadata-xesam:album" -#define DBUSMENU_METADATA_MENUITEM_ARTURL "x-canonical-sound-menu-player-metadata-mpris:artUrl" - -#define DBUSMENU_TITLE_MENUITEM_TYPE "x-canonical-sound-menu-player-title-type" -#define DBUSMENU_TITLE_MENUITEM_NAME "x-canonical-sound-menu-player-title-name" -#define DBUSMENU_TITLE_MENUITEM_ICON "x-canonical-sound-menu-player-title-icon" -#define DBUSMENU_TITLE_MENUITEM_RUNNING "x-canonical-sound-menu-player-title-running" +#define DBUSMENU_TRACK_SPECIFIC_MENUITEM_TYPE "x-canonical-sound-menu-player-track-specific-type" + +#define DBUSMENU_METADATA_MENUITEM_TYPE "x-canonical-sound-menu-player-metadata-type" +#define DBUSMENU_METADATA_MENUITEM_ARTIST "x-canonical-sound-menu-player-metadata-xesam:artist" +#define DBUSMENU_METADATA_MENUITEM_TITLE "x-canonical-sound-menu-player-metadata-xesam:title" +#define DBUSMENU_METADATA_MENUITEM_ALBUM "x-canonical-sound-menu-player-metadata-xesam:album" +#define DBUSMENU_METADATA_MENUITEM_ARTURL "x-canonical-sound-menu-player-metadata-mpris:artUrl" +#define DBUSMENU_METADATA_MENUITEM_PLAYER_NAME "x-canonical-sound-menu-player-metadata-player-name" +#define DBUSMENU_METADATA_MENUITEM_PLAYER_ICON "x-canonical-sound-menu-player-metadata-player-icon" +#define DBUSMENU_METADATA_MENUITEM_PLAYER_RUNNING "x-canonical-sound-menu-player-metadata-player-running" #define DBUSMENU_SCRUB_MENUITEM_TYPE "x-canonical-sound-menu-player-scrub-type" #define DBUSMENU_SCRUB_MENUITEM_DURATION "x-canonical-sound-menu-player-scrub-mpris:length" diff --git a/src/indicator-sound.c b/src/indicator-sound.c index 5002463..da5218f 100644 --- a/src/indicator-sound.c +++ b/src/indicator-sound.c @@ -94,10 +94,6 @@ static gboolean new_metadata_widget (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, DbusmenuClient * client, gpointer user_data); -static gboolean new_title_widget (DbusmenuMenuitem * newitem, - DbusmenuMenuitem * parent, - DbusmenuClient * client, - gpointer user_data); // DBUS communication static GDBusNodeInfo *node_info = NULL; @@ -208,9 +204,6 @@ get_menu (IndicatorObject * io) dbusmenu_client_add_type_handler (DBUSMENU_CLIENT(client), DBUSMENU_METADATA_MENUITEM_TYPE, new_metadata_widget); - dbusmenu_client_add_type_handler (DBUSMENU_CLIENT(client), - DBUSMENU_TITLE_MENUITEM_TYPE, - new_title_widget); // Note: Not ideal but all key handling needs to be managed here and then // delegated to the appropriate widget. g_signal_connect (menu, "key-press-event", G_CALLBACK(key_press_cb), io); @@ -369,7 +362,7 @@ new_metadata_widget (DbusmenuMenuitem * newitem, return TRUE; } -static gboolean +/*static gboolean new_title_widget(DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, DbusmenuClient * client, @@ -391,7 +384,7 @@ new_title_widget(DbusmenuMenuitem * newitem, newitem, menu_title_widget, parent); return TRUE; -} +}*/ static gboolean new_volume_slider_widget(DbusmenuMenuitem * newitem, diff --git a/src/metadata-menu-item.vala b/src/metadata-menu-item.vala index 741bb9f..599a9c6 100644 --- a/src/metadata-menu-item.vala +++ b/src/metadata-menu-item.vala @@ -29,9 +29,9 @@ public class MetadataMenuitem : PlayerItem private static FetchFile fetcher; private string previous_temp_album_art_path; - public MetadataMenuitem() + public MetadataMenuitem (PlayerController parent) { - Object(item_type: MENUITEM_TYPE); + Object(item_type: MENUITEM_TYPE, owner: parent); reset(attributes_format()); } @@ -39,6 +39,9 @@ public class MetadataMenuitem : PlayerItem MetadataMenuitem.clean_album_art_temp_dir(); this.previous_temp_album_art_path = null; this.album_art_cache_dir = MetadataMenuitem.create_album_art_temp_dir(); + this.property_set(MENUITEM_PLAYER_NAME, this.owner.app_info.get_name()); + this.property_set(MENUITEM_PLAYER_ICON, this.owner.icon_name); + this.property_set_bool(MENUITEM_PLAYER_RUNNING, false); } private static void clean_album_art_temp_dir() @@ -135,7 +138,7 @@ public class MetadataMenuitem : PlayerItem PixbufLoader loader = new PixbufLoader (); loader.write (update.data); loader.close (); - Pixbuf icon = loader.get_pixbuf (); + Pixbuf icon = loader.get_pixbuf (); string path = this.album_art_cache_dir.concat("/downloaded-coverart-XXXXXX"); int r = FileUtils.mkstemp(path); if(r != -1){ @@ -152,7 +155,31 @@ public class MetadataMenuitem : PlayerItem e.message); } } + + public override void handle_event (string name, + Variant input_value, + uint timestamp) + { + if(this.owner.current_state == PlayerController.state.OFFLINE) + { + this.owner.instantiate(); + } + else if(this.owner.current_state == PlayerController.state.CONNECTED){ + this.owner.mpris_bridge.expose(); + } + } + public void alter_label (string new_title) + { + if (new_title == null) return; + this.property_set (MENUITEM_PLAYER_NAME, new_title); + } + + public void toggle_active_triangle (bool update) + { + this.property_set_bool (MENUITEM_PLAYER_RUNNING, update); + } + public static HashSet attributes_format() { HashSet attrs = new HashSet(); @@ -160,6 +187,9 @@ public class MetadataMenuitem : PlayerItem attrs.add(MENUITEM_ARTIST); attrs.add(MENUITEM_ALBUM); attrs.add(MENUITEM_ARTURL); + attrs.add(MENUITEM_PLAYER_NAME); + attrs.add(MENUITEM_PLAYER_ICON); + attrs.add(MENUITEM_PLAYER_RUNNING); return attrs; - } + } } diff --git a/src/mpris2-controller.vala b/src/mpris2-controller.vala index 04ceb88..e0d13cf 100644 --- a/src/mpris2-controller.vala +++ b/src/mpris2-controller.vala @@ -109,8 +109,8 @@ public class Mpris2Controller : GLib.Object } Variant? identity_v = changed_properties.lookup("Identity"); if (identity_v != null){ - TitleMenuitem title = this.owner.custom_items[PlayerController.widget_order.TITLE] as TitleMenuitem; - title.alter_label (this.mpris2_root.Identity); + MetadataMenuitem md = this.owner.custom_items[PlayerController.widget_order.METADATA] as MetadataMenuitem; + md.alter_label (this.mpris2_root.Identity); } } @@ -162,8 +162,8 @@ public class Mpris2Controller : GLib.Object update = determine_play_state (this.player.PlaybackStatus); } if (this.mpris2_root.Identity != null){ - TitleMenuitem title = this.owner.custom_items[PlayerController.widget_order.TITLE] as TitleMenuitem; - title.alter_label (this.mpris2_root.Identity); + MetadataMenuitem md = this.owner.custom_items[PlayerController.widget_order.METADATA] as MetadataMenuitem; + md.alter_label (this.mpris2_root.Identity); } (this.owner.custom_items[PlayerController.widget_order.TRANSPORT] as TransportMenuitem).change_play_state (update); GLib.HashTable? cleaned_metadata = this.clean_metadata(); diff --git a/src/player-controller.vala b/src/player-controller.vala index 20479d9..1ff8b08 100644 --- a/src/player-controller.vala +++ b/src/player-controller.vala @@ -23,11 +23,10 @@ using Gee; public class PlayerController : GLib.Object { - public const int WIDGET_QUANTITY = 5; + public const int WIDGET_QUANTITY = 4; public static enum widget_order{ SEPARATOR, - TITLE, METADATA, TRANSPORT, PLAYLISTS @@ -111,10 +110,10 @@ public class PlayerController : GLib.Object if(this.current_state != state.READY || this.dbus_name == null ){ debug("establish_mpris_connection - Not ready to connect"); return; - } + } debug ( " establish mpris connection - use playlists value = %s ", this.use_playlists.to_string() ); - + this.mpris_bridge = new Mpris2Controller(this); this.determine_state(); } @@ -136,8 +135,8 @@ public class PlayerController : GLib.Object TransportMenuitem transport = this.custom_items[widget_order.TRANSPORT] as TransportMenuitem; transport.change_play_state (Transport.State.PAUSED); this.custom_items[widget_order.METADATA].reset(MetadataMenuitem.attributes_format()); - TitleMenuitem title = this.custom_items[widget_order.TITLE] as TitleMenuitem; - title.toggle_active_triangle(false); + MetadataMenuitem md = this.custom_items[widget_order.METADATA] as MetadataMenuitem; + md.toggle_active_triangle(false); this.mpris_bridge = null; } @@ -172,12 +171,8 @@ public class PlayerController : GLib.Object // Separator item this.custom_items.add(new PlayerItem(CLIENT_TYPES_SEPARATOR)); - // Title item - TitleMenuitem title_menu_item = new TitleMenuitem(this); - this.custom_items.add(title_menu_item); - // Metadata item - MetadataMenuitem metadata_item = new MetadataMenuitem(); + MetadataMenuitem metadata_item = new MetadataMenuitem(this); this.custom_items.add(metadata_item); // Transport item @@ -189,12 +184,12 @@ public class PlayerController : GLib.Object this.custom_items.add(playlist_menuitem); foreach(PlayerItem item in this.custom_items){ - if (this.custom_items.index_of(item) != 4) { - root_menu.child_add_position(item, this.menu_offset + this.custom_items.index_of(item)); + if (this.custom_items.index_of(item) == 3) { + PlaylistsMenuitem playlists_menuitem = item as PlaylistsMenuitem; + root_menu.child_add_position(playlists_menuitem.root_item, this.menu_offset + this.custom_items.index_of(item)); } else{ - PlaylistsMenuitem playlists_menuitem = item as PlaylistsMenuitem; - root_menu.child_add_position(playlists_menuitem.root_item, this.menu_offset + this.custom_items.index_of(item)); + root_menu.child_add_position(item, this.menu_offset + this.custom_items.index_of(item)); } } } @@ -203,8 +198,8 @@ public class PlayerController : GLib.Object { if(this.mpris_bridge.connected() == true){ this.update_state(state.CONNECTED); - TitleMenuitem title = this.custom_items[widget_order.TITLE] as TitleMenuitem; - title.toggle_active_triangle(true); + MetadataMenuitem md = this.custom_items[widget_order.METADATA] as MetadataMenuitem; + md.toggle_active_triangle(true); this.mpris_bridge.initial_update(); } else{ diff --git a/src/title-menu-item.vala b/src/title-menu-item.vala index ac93b89..07294fc 100644 --- a/src/title-menu-item.vala +++ b/src/title-menu-item.vala @@ -43,13 +43,13 @@ public class TitleMenuitem : PlayerItem } else if(this.owner.current_state == PlayerController.state.CONNECTED){ this.owner.mpris_bridge.expose(); - } + } } public void alter_label (string new_title) { if (new_title == null) return; - this.property_set(MENUITEM_NAME, new_title); + this.property_set (MENUITEM_NAME, new_title); } public void toggle_active_triangle(bool update) diff --git a/vapi/common-defs.vapi b/vapi/common-defs.vapi index 0d28cdb..74b57d6 100644 --- a/vapi/common-defs.vapi +++ b/vapi/common-defs.vapi @@ -24,6 +24,9 @@ namespace DbusmenuMetadata{ public const string MENUITEM_TITLE; public const string MENUITEM_ALBUM; public const string MENUITEM_ARTURL; + public const string MENUITEM_PLAYER_NAME; + public const string MENUITEM_PLAYER_ICON; + public const string MENUITEM_PLAYER_RUNNING; } [CCode (cheader_filename = "common-defs.h")] @@ -33,11 +36,8 @@ namespace DbusmenuTransport{ } [CCode (cheader_filename = "common-defs.h")] -namespace DbusmenuTitle{ +namespace DbusmenuTrackSpecific{ public const string MENUITEM_TYPE; - public const string MENUITEM_NAME; - public const string MENUITEM_ICON; - public const string MENUITEM_RUNNING; } [CCode (cheader_filename = "common-defs.h")] -- cgit v1.2.3 From a406685399b46b4b2a62b8e580ce7beec2f875f4 Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Thu, 9 Jun 2011 17:39:03 +0200 Subject: image is appearing inthe gutter hurray --- src/common-defs.h | 2 - src/indicator-sound.c | 9 +++- src/metadata-menu-item.vala | 10 ++-- src/metadata-widget.c | 126 ++++++++++++++++++++++++++++++++++++++++---- src/metadata-widget.h | 7 +-- src/player-controller.vala | 5 +- src/player-item.vala | 2 +- src/title-widget.c | 3 +- 8 files changed, 140 insertions(+), 24 deletions(-) diff --git a/src/common-defs.h b/src/common-defs.h index 5f44296..b6799e8 100644 --- a/src/common-defs.h +++ b/src/common-defs.h @@ -67,8 +67,6 @@ typedef enum { #define DBUSMENU_TRANSPORT_MENUITEM_TYPE "x-canonical-sound-menu-player-transport-type" #define DBUSMENU_TRANSPORT_MENUITEM_PLAY_STATE "x-canonical-sound-menu-player-transport-state" -#define DBUSMENU_TRACK_SPECIFIC_MENUITEM_TYPE "x-canonical-sound-menu-player-track-specific-type" - #define DBUSMENU_METADATA_MENUITEM_TYPE "x-canonical-sound-menu-player-metadata-type" #define DBUSMENU_METADATA_MENUITEM_ARTIST "x-canonical-sound-menu-player-metadata-xesam:artist" #define DBUSMENU_METADATA_MENUITEM_TITLE "x-canonical-sound-menu-player-metadata-xesam:title" diff --git a/src/indicator-sound.c b/src/indicator-sound.c index da5218f..8daf06c 100644 --- a/src/indicator-sound.c +++ b/src/indicator-sound.c @@ -353,12 +353,19 @@ new_metadata_widget (DbusmenuMenuitem * newitem, g_return_val_if_fail(DBUSMENU_IS_MENUITEM(newitem), FALSE); g_return_val_if_fail(DBUSMENU_IS_GTKCLIENT(client), FALSE); + metadata = metadata_widget_new (newitem); + + g_debug ("%s (\"%s\")", __func__, + dbusmenu_menuitem_property_get(newitem, DBUSMENU_METADATA_MENUITEM_PLAYER_NAME)); + 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); + newitem, + menu_metadata_widget, + parent); return TRUE; } diff --git a/src/metadata-menu-item.vala b/src/metadata-menu-item.vala index 599a9c6..1d50d38 100644 --- a/src/metadata-menu-item.vala +++ b/src/metadata-menu-item.vala @@ -18,6 +18,7 @@ with this program. If not, see . */ using Gee; +using Dbusmenu; using DbusmenuMetadata; using Gdk; @@ -32,16 +33,17 @@ public class MetadataMenuitem : PlayerItem public MetadataMenuitem (PlayerController parent) { Object(item_type: MENUITEM_TYPE, owner: parent); - reset(attributes_format()); + //reset(attributes_format()); } construct{ MetadataMenuitem.clean_album_art_temp_dir(); this.previous_temp_album_art_path = null; this.album_art_cache_dir = MetadataMenuitem.create_album_art_temp_dir(); - this.property_set(MENUITEM_PLAYER_NAME, this.owner.app_info.get_name()); - this.property_set(MENUITEM_PLAYER_ICON, this.owner.icon_name); - this.property_set_bool(MENUITEM_PLAYER_RUNNING, false); + debug ("JUST ABOUT TO ATTEMPT PLAYER NAME SETTING %s", this.owner.app_info.get_name()); + this.property_set (MENUITEM_PLAYER_NAME, this.owner.app_info.get_name()); + this.property_set (MENUITEM_PLAYER_ICON, this.owner.icon_name); + this.property_set_bool (MENUITEM_PLAYER_RUNNING, false); } private static void clean_album_art_temp_dir() diff --git a/src/metadata-widget.c b/src/metadata-widget.c index 38ed529..5937eb8 100644 --- a/src/metadata-widget.c +++ b/src/metadata-widget.c @@ -28,6 +28,7 @@ with this program. If not, see . #include #include #include "transport-widget.h" +#include typedef struct _MetadataWidgetPrivate MetadataWidgetPrivate; @@ -41,6 +42,7 @@ struct _MetadataWidgetPrivate GtkWidget* artist_label; GtkWidget* piece_label; GtkWidget* container_label; + GtkWidget* player_label; DbusmenuMenuitem* twin_item; }; @@ -56,7 +58,7 @@ static void metadata_widget_set_style (GtkWidget* button, GtkStyle* style); static void metadata_widget_set_twin_item (MetadataWidget* self, DbusmenuMenuitem* twin_item); // keyevent consumers -static gboolean metadata_widget_button_press_event (GtkWidget *menuitem, +static gboolean metadata_widget_button_release_event (GtkWidget *menuitem, GdkEventButton *event); // Dbusmenuitem properties update callback static void metadata_widget_property_update (DbusmenuMenuitem* item, @@ -71,8 +73,12 @@ static void metadata_widget_selection_received_event_callback( GtkWidget GtkSelectionData *data, guint time, gpointer user_data); -G_DEFINE_TYPE (MetadataWidget, metadata_widget, GTK_TYPE_MENU_ITEM); +static gboolean metadata_widget_triangle_draw_cb (GtkWidget *widget, + GdkEventExpose *event, + gpointer data); +static void metadata_widget_set_icon (MetadataWidget *self); +G_DEFINE_TYPE (MetadataWidget, metadata_widget, GTK_TYPE_IMAGE_MENU_ITEM); static void metadata_widget_class_init (MetadataWidgetClass *klass) @@ -80,7 +86,7 @@ metadata_widget_class_init (MetadataWidgetClass *klass) GObjectClass *gobject_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); - widget_class->button_press_event = metadata_widget_button_press_event; + widget_class->button_release_event = metadata_widget_button_release_event; g_type_class_add_private (klass, sizeof (MetadataWidgetPrivate)); @@ -91,8 +97,6 @@ metadata_widget_class_init (MetadataWidgetClass *klass) static void metadata_widget_init (MetadataWidget *self) { - //g_debug("MetadataWidget::metadata_widget_init"); - MetadataWidgetPrivate * priv = METADATA_WIDGET_GET_PRIVATE(self); GtkWidget *hbox; @@ -375,8 +379,8 @@ metadata_widget_selection_received_event_callback ( GtkWidget *widget, /* Suppress/consume keyevents */ static gboolean -metadata_widget_button_press_event (GtkWidget *menuitem, - GdkEventButton *event) +metadata_widget_button_release_event (GtkWidget *menuitem, + GdkEventButton *event) { GtkClipboard* board = gtk_clipboard_get (GDK_NONE); @@ -454,9 +458,48 @@ metadata_widget_set_style(GtkWidget* metadata, GtkStyle* style) gtk_widget_queue_draw(GTK_WIDGET(metadata)); } +static void +metadata_widget_set_icon (MetadataWidget *self) +{ + MetadataWidgetPrivate * priv = METADATA_WIDGET_GET_PRIVATE(self); + + gint padding = 0; + gtk_widget_style_get(GTK_WIDGET(self), "horizontal-padding", &padding, NULL); + gint width, height; + gtk_icon_size_lookup(GTK_ICON_SIZE_MENU, &width, &height); + + GString* banshee_string = g_string_new ( "banshee" ); + GString* app_panel = g_string_new ( g_utf8_strdown ( dbusmenu_menuitem_property_get(priv->twin_item, DBUSMENU_METADATA_MENUITEM_PLAYER_NAME), + -1 )); + GtkWidget * icon = NULL; + + // Not ideal but apparently we want the banshee icon to be the greyscale one + // and any others to be the icon from the desktop file => colour. + if ( g_string_equal ( banshee_string, app_panel ) == TRUE && + gtk_icon_theme_has_icon ( gtk_icon_theme_get_default(), app_panel->str ) ){ + g_string_append ( app_panel, "-panel" ); + icon = gtk_image_new_from_icon_name ( app_panel->str, + GTK_ICON_SIZE_MENU ); + } + else{ + icon = gtk_image_new_from_icon_name ( g_strdup (dbusmenu_menuitem_property_get ( priv->twin_item, DBUSMENU_METADATA_MENUITEM_PLAYER_ICON )), + GTK_ICON_SIZE_MENU ); + } + g_string_free ( app_panel, FALSE) ; + g_string_free ( banshee_string, FALSE) ; + + gtk_widget_set_size_request(icon, width + + 5 /* ref triangle is 5x9 pixels */ + + 1 /* padding */, + height); + gtk_misc_set_alignment(GTK_MISC(icon), 0.5 /* right aligned */, 0); + gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(self), GTK_WIDGET(icon)); + gtk_widget_show(icon); +} + static void -metadata_widget_set_twin_item(MetadataWidget* self, - DbusmenuMenuitem* twin_item) +metadata_widget_set_twin_item (MetadataWidget* self, + DbusmenuMenuitem* twin_item) { MetadataWidgetPrivate* priv = METADATA_WIDGET_GET_PRIVATE(self); priv->twin_item = twin_item; @@ -479,11 +522,22 @@ metadata_widget_set_twin_item(MetadataWidget* self, g_string_erase(priv->image_path, 0, -1); const gchar *arturl = dbusmenu_menuitem_property_get( priv->twin_item, DBUSMENU_METADATA_MENUITEM_ARTURL ); + + g_signal_connect_after (G_OBJECT (self), + "expose_event", + G_CALLBACK (metadata_widget_triangle_draw_cb), + priv->twin_item); + + gtk_menu_item_set_label (GTK_MENU_ITEM(self), + dbusmenu_menuitem_property_get(priv->twin_item, + DBUSMENU_METADATA_MENUITEM_PLAYER_NAME)); + + metadata_widget_set_icon(self); + if (arturl != NULL){ g_string_overwrite( priv->image_path, 0, arturl); - // if its a remote image queue a redraw incase the download took too long if (g_str_has_prefix (arturl, g_get_user_cache_dir())){ gtk_widget_queue_draw(GTK_WIDGET(self)); @@ -491,6 +545,56 @@ metadata_widget_set_twin_item(MetadataWidget* self, } } + +// Title related ... +static gboolean +metadata_widget_triangle_draw_cb (GtkWidget *widget, GdkEventExpose *event, gpointer data) +{ + GtkStyle *style; + cairo_t *cr; + int x, y, arrow_width, arrow_height; + + if (!GTK_IS_WIDGET (widget)) return FALSE; + if (!DBUSMENU_IS_MENUITEM (data)) return FALSE; + + /* render the triangle indicator only if the application is running */ + if (! dbusmenu_menuitem_property_get_bool (DBUSMENU_MENUITEM(data), + DBUSMENU_METADATA_MENUITEM_PLAYER_RUNNING)){ + return FALSE; + } + + /* get style */ + style = gtk_widget_get_style (widget); + + /* set arrow position / dimensions */ + arrow_width = 5; /* the pixel-based reference triangle is 5x9 */ + arrow_height = 9; + x = widget->allocation.x; + y = widget->allocation.y + widget->allocation.height/2.0 - (double)arrow_height/2.0; + + /* initialize cairo drawing area */ + cr = (cairo_t*) gdk_cairo_create (widget->window); + + /* set line width */ + cairo_set_line_width (cr, 1.0); + + /* cairo drawing code */ + cairo_move_to (cr, x, y); + cairo_line_to (cr, x, y + arrow_height); + cairo_line_to (cr, x + arrow_width, y + (double)arrow_height/2.0); + cairo_close_path (cr); + cairo_set_source_rgb (cr, style->fg[gtk_widget_get_state(widget)].red/65535.0, + style->fg[gtk_widget_get_state(widget)].green/65535.0, + style->fg[gtk_widget_get_state(widget)].blue/65535.0); + cairo_fill (cr); + + /* remember to destroy cairo context to avoid leaks */ + cairo_destroy (cr); + + return FALSE; +} + + /** * transport_new: * @returns: a new #MetadataWidget. @@ -500,6 +604,8 @@ metadata_widget_new(DbusmenuMenuitem *item) { GtkWidget* widget = g_object_new(METADATA_WIDGET_TYPE, NULL); + gtk_image_menu_item_set_always_show_image (GTK_IMAGE_MENU_ITEM (widget), + TRUE); metadata_widget_set_twin_item ( METADATA_WIDGET(widget), item ); return widget; diff --git a/src/metadata-widget.h b/src/metadata-widget.h index 6021af5..48dc61e 100644 --- a/src/metadata-widget.h +++ b/src/metadata-widget.h @@ -19,7 +19,8 @@ with this program. If not, see . #ifndef __METADATA_WIDGET_H__ #define __METADATA_WIDGET_H__ -#include +//#include +#include #include G_BEGIN_DECLS @@ -35,11 +36,11 @@ typedef struct _MetadataWidget MetadataWidget; typedef struct _MetadataWidgetClass MetadataWidgetClass; struct _MetadataWidgetClass { - GtkMenuItemClass parent_class; + GtkImageMenuItemClass parent_class; }; struct _MetadataWidget { - GtkMenuItem parent; + GtkImageMenuItem parent; }; GType metadata_widget_get_type (void); diff --git a/src/player-controller.vala b/src/player-controller.vala index 1ff8b08..a7c1424 100644 --- a/src/player-controller.vala +++ b/src/player-controller.vala @@ -70,6 +70,7 @@ public class PlayerController : GLib.Object this.construct_widgets(); this.establish_mpris_connection(); this.update_layout(); + debug ("New player controller for %s with icon name %s", this.app_info.get_name(), this.icon_name); } public void update_state(state new_state) @@ -144,8 +145,10 @@ public class PlayerController : GLib.Object { PlaylistsMenuitem playlists_menuitem = this.custom_items[widget_order.PLAYLISTS] as PlaylistsMenuitem; if(this.current_state != state.CONNECTED){ + // TODO + // For now just set the visibility to true so that I can figure out what todo here. this.custom_items[widget_order.METADATA].property_set_bool (MENUITEM_PROP_VISIBLE, - false); + true); playlists_menuitem.root_item.property_set_bool (MENUITEM_PROP_VISIBLE, false ); this.custom_items[widget_order.TRANSPORT].property_set_bool (MENUITEM_PROP_VISIBLE, diff --git a/src/player-item.vala b/src/player-item.vala index f71b166..cb21115 100644 --- a/src/player-item.vala +++ b/src/player-item.vala @@ -87,7 +87,7 @@ public class PlayerItem : Dbusmenu.Menuitem this.property_set_bool(property, v.get_boolean()); } } - this.property_set_bool(MENUITEM_PROP_VISIBLE, populated(attributes)); + //this.property_set_bool(MENUITEM_PROP_VISIBLE, populated(attributes)); } public bool populated(HashSet attrs) diff --git a/src/title-widget.c b/src/title-widget.c index b8058b8..e463582 100644 --- a/src/title-widget.c +++ b/src/title-widget.c @@ -116,8 +116,7 @@ title_widget_set_icon(TitleWidget *self) gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(self), GTK_WIDGET(icon)); gtk_widget_show(icon); } - - + static void title_widget_dispose (GObject *object) { -- cgit v1.2.3 From e0761ddf73f224b880adea3f226463eb7a996ec6 Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Fri, 10 Jun 2011 11:38:54 +0200 Subject: label appearing dynamic resizing partially working --- src/common-defs.h | 1 + src/metadata-menu-item.vala | 15 +++++++++++ src/metadata-widget.c | 66 ++++++++++++++++++++++++++++++++++++--------- src/player-controller.vala | 10 +++---- vapi/common-defs.vapi | 1 + 5 files changed, 76 insertions(+), 17 deletions(-) diff --git a/src/common-defs.h b/src/common-defs.h index b6799e8..b1b001e 100644 --- a/src/common-defs.h +++ b/src/common-defs.h @@ -75,6 +75,7 @@ typedef enum { #define DBUSMENU_METADATA_MENUITEM_PLAYER_NAME "x-canonical-sound-menu-player-metadata-player-name" #define DBUSMENU_METADATA_MENUITEM_PLAYER_ICON "x-canonical-sound-menu-player-metadata-player-icon" #define DBUSMENU_METADATA_MENUITEM_PLAYER_RUNNING "x-canonical-sound-menu-player-metadata-player-running" +#define DBUSMENU_METADATA_MENUITEM_HIDE_TRACK_DETAILS "x-canonical-sound-menu-player-metadata-hide-track-details" #define DBUSMENU_SCRUB_MENUITEM_TYPE "x-canonical-sound-menu-player-scrub-type" #define DBUSMENU_SCRUB_MENUITEM_DURATION "x-canonical-sound-menu-player-scrub-mpris:length" diff --git a/src/metadata-menu-item.vala b/src/metadata-menu-item.vala index 1d50d38..5d32314 100644 --- a/src/metadata-menu-item.vala +++ b/src/metadata-menu-item.vala @@ -182,6 +182,21 @@ public class MetadataMenuitem : PlayerItem this.property_set_bool (MENUITEM_PLAYER_RUNNING, update); } + public void collapse() + { + this.property_set_bool (MENUITEM_HIDE_TRACK_DETAILS, true); + } + + public void expand() + { + this.property_set_bool (MENUITEM_HIDE_TRACK_DETAILS, false); + } + + public void populated() + { + //this.property_get (MENUITEM_TITLE + } + public static HashSet attributes_format() { HashSet attrs = new HashSet(); diff --git a/src/metadata-widget.c b/src/metadata-widget.c index 5937eb8..135aab0 100644 --- a/src/metadata-widget.c +++ b/src/metadata-widget.c @@ -35,14 +35,15 @@ typedef struct _MetadataWidgetPrivate MetadataWidgetPrivate; struct _MetadataWidgetPrivate { gboolean theme_change_occured; - GtkWidget* hbox; + GtkWidget* meta_data_h_box; + GtkWidget* meta_data_v_box; GtkWidget* album_art; GString* image_path; GString* old_image_path; GtkWidget* artist_label; GtkWidget* piece_label; GtkWidget* container_label; - GtkWidget* player_label; + GtkWidget* player_label; DbusmenuMenuitem* twin_item; }; @@ -94,14 +95,19 @@ metadata_widget_class_init (MetadataWidgetClass *klass) gobject_class->finalize = metadata_widget_finalize; } + + static void metadata_widget_init (MetadataWidget *self) { MetadataWidgetPrivate * priv = METADATA_WIDGET_GET_PRIVATE(self); GtkWidget *hbox; + GtkWidget *outer_v_box; + outer_v_box = gtk_vbox_new (FALSE, 0); hbox = gtk_hbox_new(FALSE, 0); - priv->hbox = hbox; + + priv->meta_data_h_box = hbox; // image priv->album_art = gtk_image_new(); @@ -112,7 +118,7 @@ metadata_widget_init (MetadataWidget *self) G_CALLBACK(metadata_image_expose), GTK_WIDGET(self)); - gtk_box_pack_start (GTK_BOX (priv->hbox), + gtk_box_pack_start (GTK_BOX (priv->meta_data_h_box), priv->album_art, FALSE, FALSE, @@ -154,15 +160,34 @@ metadata_widget_init (MetadataWidget *self) gtk_box_pack_start (GTK_BOX (vbox), priv->artist_label, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), priv->container_label, FALSE, FALSE, 0); - gtk_box_pack_start (GTK_BOX (priv->hbox), vbox, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (priv->meta_data_h_box), vbox, FALSE, FALSE, 0); g_signal_connect(self, "style-set", G_CALLBACK(metadata_widget_set_style), GTK_WIDGET(self)); g_signal_connect (self, "selection-received", G_CALLBACK(metadata_widget_selection_received_event_callback), GTK_WIDGET(self)); - gtk_widget_set_size_request(GTK_WIDGET(self), 200, 75); - gtk_container_add (GTK_CONTAINER (self), hbox); + + // player label + GtkWidget* player_label; + player_label = gtk_label_new("TEST LABEL"); + gtk_misc_set_alignment(GTK_MISC(player_label), (gfloat)0, (gfloat)0); + gtk_misc_set_padding (GTK_MISC(player_label), (gfloat)0, (gfloat)0); + gtk_widget_set_size_request (player_label, 140, 20); + priv->player_label = player_label; + + gtk_box_pack_start (GTK_BOX(outer_v_box), priv->player_label, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX(outer_v_box), priv->meta_data_h_box, FALSE, FALSE, 0); + + gtk_container_add (GTK_CONTAINER (self), outer_v_box); + gtk_widget_set_size_request(GTK_WIDGET(self), 200, 20); + gtk_widget_hide (priv->meta_data_h_box); + gtk_widget_hide (priv->artist_label); + gtk_widget_hide (priv->piece_label); + gtk_widget_hide (priv->container_label); + gtk_widget_hide (priv->album_art); + gtk_widget_hide (priv->meta_data_v_box); + } static void @@ -370,10 +395,6 @@ metadata_widget_selection_received_event_callback ( GtkWidget *widget, gpointer user_data ) { - //g_return_val_if_fail(IS_METADATA_WIDGET(user_data), FALSE); - //MetadataWidget* widget = METADATA_WIDGET(user_data); - //MetadataWidgetPrivate * priv = METADATA_WIDGET_GET_PRIVATE(widget); - g_debug("metadata_widget_selection_request_event_callback"); draw_album_border(widget, TRUE); } @@ -435,7 +456,28 @@ metadata_widget_property_update(DbusmenuMenuitem* item, gchar* property, //g_debug("the image update is a download so redraw"); gtk_widget_queue_draw(GTK_WIDGET(mitem)); } - } + } + else if(g_ascii_strcasecmp(DBUSMENU_METADATA_MENUITEM_HIDE_TRACK_DETAILS, property) == 0){ + + g_debug ("MetadataWidget::Prop update for DBUSMENU_METADATA_MENUITEM_HIDE_TRACK_DETAILS. Value = %i", + dbusmenu_menuitem_property_get_bool (priv->twin_item, DBUSMENU_METADATA_MENUITEM_HIDE_TRACK_DETAILS)); + + if (dbusmenu_menuitem_property_get_bool (priv->twin_item, + DBUSMENU_METADATA_MENUITEM_HIDE_TRACK_DETAILS) == TRUE){ + gtk_widget_hide (priv->meta_data_h_box); + gtk_widget_hide (priv->artist_label); + gtk_widget_hide (priv->piece_label); + gtk_widget_hide (priv->container_label); + gtk_widget_hide (priv->album_art); + gtk_widget_hide (priv->meta_data_v_box); + gtk_widget_set_size_request(GTK_WIDGET(mitem), 200, 20); + + } + else{ + gtk_widget_show (priv->meta_data_h_box); + gtk_widget_set_size_request(GTK_WIDGET(mitem), 200, 85); + } + } } static void diff --git a/src/player-controller.vala b/src/player-controller.vala index a7c1424..3722fff 100644 --- a/src/player-controller.vala +++ b/src/player-controller.vala @@ -144,19 +144,19 @@ public class PlayerController : GLib.Object public void update_layout() { PlaylistsMenuitem playlists_menuitem = this.custom_items[widget_order.PLAYLISTS] as PlaylistsMenuitem; + MetadataMenuitem metadata_menuitem = this.custom_items[widget_order.METADATA] as MetadataMenuitem; if(this.current_state != state.CONNECTED){ // TODO - // For now just set the visibility to true so that I can figure out what todo here. - this.custom_items[widget_order.METADATA].property_set_bool (MENUITEM_PROP_VISIBLE, - true); + metadata_menuitem.collapse (); playlists_menuitem.root_item.property_set_bool (MENUITEM_PROP_VISIBLE, false ); this.custom_items[widget_order.TRANSPORT].property_set_bool (MENUITEM_PROP_VISIBLE, this.app_info.get_id() == "banshee.desktop"); return; } - this.custom_items[widget_order.METADATA].property_set_bool (MENUITEM_PROP_VISIBLE, - this.custom_items[widget_order.METADATA].populated(MetadataMenuitem.attributes_format())); + metadata_menuitem.expand (); + /*this.custom_items[widget_order.METADATA].property_set_bool (MENUITEM_PROP_VISIBLE, + this.custom_items[widget_order.METADATA].populated(MetadataMenuitem.attributes_format()));*/ if (this.app_info.get_id() == "banshee.desktop"){ TransportMenuitem transport = this.custom_items[widget_order.TRANSPORT] as TransportMenuitem; transport.handle_cached_action(); diff --git a/vapi/common-defs.vapi b/vapi/common-defs.vapi index 74b57d6..6262e2f 100644 --- a/vapi/common-defs.vapi +++ b/vapi/common-defs.vapi @@ -27,6 +27,7 @@ namespace DbusmenuMetadata{ public const string MENUITEM_PLAYER_NAME; public const string MENUITEM_PLAYER_ICON; public const string MENUITEM_PLAYER_RUNNING; + public const string MENUITEM_HIDE_TRACK_DETAILS; } [CCode (cheader_filename = "common-defs.h")] -- cgit v1.2.3 From edd58e6f87bd80a4e37eac90b42b03528aba44ee Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Fri, 10 Jun 2011 16:39:31 +0200 Subject: arrow should be showing --- src/metadata-menu-item.vala | 9 ++++--- src/metadata-widget.c | 66 ++++++++++++++++++++++++++------------------- 2 files changed, 44 insertions(+), 31 deletions(-) diff --git a/src/metadata-menu-item.vala b/src/metadata-menu-item.vala index 5d32314..5f3ef8b 100644 --- a/src/metadata-menu-item.vala +++ b/src/metadata-menu-item.vala @@ -38,12 +38,13 @@ public class MetadataMenuitem : PlayerItem construct{ MetadataMenuitem.clean_album_art_temp_dir(); - this.previous_temp_album_art_path = null; + this.previous_temp_album_art_path = null; this.album_art_cache_dir = MetadataMenuitem.create_album_art_temp_dir(); debug ("JUST ABOUT TO ATTEMPT PLAYER NAME SETTING %s", this.owner.app_info.get_name()); - this.property_set (MENUITEM_PLAYER_NAME, this.owner.app_info.get_name()); - this.property_set (MENUITEM_PLAYER_ICON, this.owner.icon_name); - this.property_set_bool (MENUITEM_PLAYER_RUNNING, false); + this.property_set (MENUITEM_PLAYER_NAME, this.owner.app_info.get_name()); + this.property_set (MENUITEM_PLAYER_ICON, this.owner.icon_name); + this.property_set_bool (MENUITEM_PLAYER_RUNNING, false); + this.property_set_bool (MENUITEM_HIDE_TRACK_DETAILS, true); } private static void clean_album_art_temp_dir() diff --git a/src/metadata-widget.c b/src/metadata-widget.c index 135aab0..71120b0 100644 --- a/src/metadata-widget.c +++ b/src/metadata-widget.c @@ -74,9 +74,9 @@ static void metadata_widget_selection_received_event_callback( GtkWidget GtkSelectionData *data, guint time, gpointer user_data); -static gboolean metadata_widget_triangle_draw_cb (GtkWidget *widget, - GdkEventExpose *event, - gpointer data); +static void metadata_widget_triangle_draw_cb (GtkWidget* widget, + MetadataWidget *meta); + static void metadata_widget_set_icon (MetadataWidget *self); G_DEFINE_TYPE (MetadataWidget, metadata_widget, GTK_TYPE_IMAGE_MENU_ITEM); @@ -170,7 +170,7 @@ metadata_widget_init (MetadataWidget *self) // player label GtkWidget* player_label; - player_label = gtk_label_new("TEST LABEL"); + player_label = gtk_label_new(""); gtk_misc_set_alignment(GTK_MISC(player_label), (gfloat)0, (gfloat)0); gtk_misc_set_padding (GTK_MISC(player_label), (gfloat)0, (gfloat)0); gtk_widget_set_size_request (player_label, 140, 20); @@ -186,8 +186,7 @@ metadata_widget_init (MetadataWidget *self) gtk_widget_hide (priv->piece_label); gtk_widget_hide (priv->container_label); gtk_widget_hide (priv->album_art); - gtk_widget_hide (priv->meta_data_v_box); - + gtk_widget_hide (priv->meta_data_v_box); } static void @@ -212,12 +211,22 @@ metadata_image_expose (GtkWidget *metadata, GdkEventExpose *event, gpointer user { g_return_val_if_fail(IS_METADATA_WIDGET(user_data), FALSE); MetadataWidget* widget = METADATA_WIDGET(user_data); - MetadataWidgetPrivate * priv = METADATA_WIDGET_GET_PRIVATE(widget); - draw_album_border(metadata, FALSE); + MetadataWidgetPrivate * priv = METADATA_WIDGET_GET_PRIVATE(widget); + + metadata_widget_triangle_draw_cb (metadata, widget); + + if ( TRUE == dbusmenu_menuitem_property_get_bool (DBUSMENU_MENUITEM(priv->twin_item), + DBUSMENU_METADATA_MENUITEM_HIDE_TRACK_DETAILS)) + { + return TRUE; + } + + draw_album_border(metadata, FALSE); + if(priv->image_path->len > 0){ if(g_string_equal(priv->image_path, priv->old_image_path) == FALSE || priv->theme_change_occured == TRUE){ - priv->theme_change_occured = FALSE; + priv->theme_change_occured = FALSE; GdkPixbuf* pixbuf; pixbuf = gdk_pixbuf_new_from_file_at_size(priv->image_path->str, 60, 60, NULL); //g_debug("metadata_load_new_image -> pixbuf from %s", @@ -457,6 +466,13 @@ metadata_widget_property_update(DbusmenuMenuitem* item, gchar* property, gtk_widget_queue_draw(GTK_WIDGET(mitem)); } } + else if (g_ascii_strcasecmp (DBUSMENU_METADATA_MENUITEM_PLAYER_NAME, property) == 0){ + gtk_label_set_label (GTK_LABEL (priv->player_label), + g_variant_get_string(value, NULL)); + } + else if (g_ascii_strcasecmp (DBUSMENU_METADATA_MENUITEM_PLAYER_ICON, property) == 0){ + metadata_widget_set_icon (mitem); + } else if(g_ascii_strcasecmp(DBUSMENU_METADATA_MENUITEM_HIDE_TRACK_DETAILS, property) == 0){ g_debug ("MetadataWidget::Prop update for DBUSMENU_METADATA_MENUITEM_HIDE_TRACK_DETAILS. Value = %i", @@ -471,7 +487,6 @@ metadata_widget_property_update(DbusmenuMenuitem* item, gchar* property, gtk_widget_hide (priv->album_art); gtk_widget_hide (priv->meta_data_v_box); gtk_widget_set_size_request(GTK_WIDGET(mitem), 200, 20); - } else{ gtk_widget_show (priv->meta_data_h_box); @@ -565,14 +580,14 @@ metadata_widget_set_twin_item (MetadataWidget* self, const gchar *arturl = dbusmenu_menuitem_property_get( priv->twin_item, DBUSMENU_METADATA_MENUITEM_ARTURL ); - g_signal_connect_after (G_OBJECT (self), + /*g_signal_connect_after (G_OBJECT (self), "expose_event", G_CALLBACK (metadata_widget_triangle_draw_cb), - priv->twin_item); + priv->twin_item);*/ - gtk_menu_item_set_label (GTK_MENU_ITEM(self), - dbusmenu_menuitem_property_get(priv->twin_item, - DBUSMENU_METADATA_MENUITEM_PLAYER_NAME)); + gtk_label_set_label (GTK_LABEL(priv->player_label), + dbusmenu_menuitem_property_get(priv->twin_item, + DBUSMENU_METADATA_MENUITEM_PLAYER_NAME)); metadata_widget_set_icon(self); @@ -587,22 +602,23 @@ metadata_widget_set_twin_item (MetadataWidget* self, } } - // Title related ... -static gboolean -metadata_widget_triangle_draw_cb (GtkWidget *widget, GdkEventExpose *event, gpointer data) +static void +metadata_widget_triangle_draw_cb (GtkWidget* widget, MetadataWidget *meta) { GtkStyle *style; cairo_t *cr; int x, y, arrow_width, arrow_height; - if (!GTK_IS_WIDGET (widget)) return FALSE; - if (!DBUSMENU_IS_MENUITEM (data)) return FALSE; - + g_return_if_fail (GTK_IS_WIDGET(widget)); + + //MetadataWidget* widg = METADATA_WIDGET(widget); + MetadataWidgetPrivate* priv = METADATA_WIDGET_GET_PRIVATE (meta); + /* render the triangle indicator only if the application is running */ - if (! dbusmenu_menuitem_property_get_bool (DBUSMENU_MENUITEM(data), + if (! dbusmenu_menuitem_property_get_bool (priv->twin_item, DBUSMENU_METADATA_MENUITEM_PLAYER_RUNNING)){ - return FALSE; + return; } /* get style */ @@ -629,14 +645,10 @@ metadata_widget_triangle_draw_cb (GtkWidget *widget, GdkEventExpose *event, gpoi style->fg[gtk_widget_get_state(widget)].green/65535.0, style->fg[gtk_widget_get_state(widget)].blue/65535.0); cairo_fill (cr); - /* remember to destroy cairo context to avoid leaks */ cairo_destroy (cr); - - return FALSE; } - /** * transport_new: * @returns: a new #MetadataWidget. -- cgit v1.2.3 From ec14b8310dd5b02ed749c2cfade5c1a45ef00bac Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Mon, 13 Jun 2011 12:04:15 +0200 Subject: number of bugs fixed, more to come --- src/metadata-menu-item.vala | 24 ++++++++++++------------ src/mpris2-controller.vala | 11 ++++++++--- src/player-controller.vala | 4 ++-- src/player-item.vala | 2 +- src/playlists-menu-item.vala | 1 - 5 files changed, 23 insertions(+), 19 deletions(-) diff --git a/src/metadata-menu-item.vala b/src/metadata-menu-item.vala index 5f3ef8b..8d7b55d 100644 --- a/src/metadata-menu-item.vala +++ b/src/metadata-menu-item.vala @@ -183,19 +183,9 @@ public class MetadataMenuitem : PlayerItem this.property_set_bool (MENUITEM_PLAYER_RUNNING, update); } - public void collapse() + public void should_collapse(bool collapse) { - this.property_set_bool (MENUITEM_HIDE_TRACK_DETAILS, true); - } - - public void expand() - { - this.property_set_bool (MENUITEM_HIDE_TRACK_DETAILS, false); - } - - public void populated() - { - //this.property_get (MENUITEM_TITLE + this.property_set_bool (MENUITEM_HIDE_TRACK_DETAILS, collapse); } public static HashSet attributes_format() @@ -210,4 +200,14 @@ public class MetadataMenuitem : PlayerItem attrs.add(MENUITEM_PLAYER_RUNNING); return attrs; } + + public static HashSet relevant_attributes_for_ui() + { + HashSet attrs = new HashSet(); + attrs.add(MENUITEM_TITLE); + attrs.add(MENUITEM_ARTIST); + attrs.add(MENUITEM_ALBUM); + attrs.add(MENUITEM_ARTURL); + return attrs; + } } diff --git a/src/mpris2-controller.vala b/src/mpris2-controller.vala index e0d13cf..7e128dd 100644 --- a/src/mpris2-controller.vala +++ b/src/mpris2-controller.vala @@ -84,12 +84,17 @@ public class Mpris2Controller : GLib.Object Variant? meta_v = changed_properties.lookup("Metadata"); if(meta_v != null){ GLib.HashTable changed_updates = clean_metadata(); + //MetadataMenuitem md = this.owner.custom_items[PlayerController.widget_order.METADATA] as MetadataMenuitem; + //md.reset_track_details (); + PlayerItem metadata = this.owner.custom_items[PlayerController.widget_order.METADATA]; - metadata.reset ( MetadataMenuitem.attributes_format()); + metadata.reset (MetadataMenuitem.relevant_attributes_for_ui()); metadata.update ( changed_updates, MetadataMenuitem.attributes_format()); - metadata.property_set_bool ( MENUITEM_PROP_VISIBLE, - metadata.populated(MetadataMenuitem.attributes_format())); + /*metadata.property_set_bool ( MENUITEM_PROP_VISIBLE, + metadata.populated(MetadataMenuitem.relevant_attributes_for_ui()));*/ + debug ("metadata visibility = %s", + metadata.populated (MetadataMenuitem.relevant_attributes_for_ui()).to_string()); } Variant? playlist_v = changed_properties.lookup("ActivePlaylist"); if ( playlist_v != null && this.owner.use_playlists == true ){ diff --git a/src/player-controller.vala b/src/player-controller.vala index 3722fff..7e35d63 100644 --- a/src/player-controller.vala +++ b/src/player-controller.vala @@ -147,14 +147,14 @@ public class PlayerController : GLib.Object MetadataMenuitem metadata_menuitem = this.custom_items[widget_order.METADATA] as MetadataMenuitem; if(this.current_state != state.CONNECTED){ // TODO - metadata_menuitem.collapse (); + metadata_menuitem.should_collapse (true); playlists_menuitem.root_item.property_set_bool (MENUITEM_PROP_VISIBLE, false ); this.custom_items[widget_order.TRANSPORT].property_set_bool (MENUITEM_PROP_VISIBLE, this.app_info.get_id() == "banshee.desktop"); return; } - metadata_menuitem.expand (); + metadata_menuitem.should_collapse (false); /*this.custom_items[widget_order.METADATA].property_set_bool (MENUITEM_PROP_VISIBLE, this.custom_items[widget_order.METADATA].populated(MetadataMenuitem.attributes_format()));*/ if (this.app_info.get_id() == "banshee.desktop"){ diff --git a/src/player-item.vala b/src/player-item.vala index cb21115..f71b166 100644 --- a/src/player-item.vala +++ b/src/player-item.vala @@ -87,7 +87,7 @@ public class PlayerItem : Dbusmenu.Menuitem this.property_set_bool(property, v.get_boolean()); } } - //this.property_set_bool(MENUITEM_PROP_VISIBLE, populated(attributes)); + this.property_set_bool(MENUITEM_PROP_VISIBLE, populated(attributes)); } public bool populated(HashSet attrs) diff --git a/src/playlists-menu-item.vala b/src/playlists-menu-item.vala index 58c3875..7faa214 100644 --- a/src/playlists-menu-item.vala +++ b/src/playlists-menu-item.vala @@ -37,7 +37,6 @@ public class PlaylistsMenuitem : PlayerItem construct{ this.current_playlists = new HashMap(); this.root_item = new Menuitem(); - this.root_item.property_set ( MENUITEM_PROP_LABEL, _("Choose Playlist") ); this.root_item.property_set ( MENUITEM_PATH, "" ); -- cgit v1.2.3 From ed942a6e5eb61a366a87b7346999ef5c146fc7fb Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Mon, 13 Jun 2011 17:02:41 +0200 Subject: arrow drawing properly --- src/metadata-menu-item.vala | 1 + src/metadata-widget.c | 100 +++++++++++++++++++++++++------------------- src/mpris2-controller.vala | 14 +++---- 3 files changed, 65 insertions(+), 50 deletions(-) diff --git a/src/metadata-menu-item.vala b/src/metadata-menu-item.vala index 8d7b55d..de02aec 100644 --- a/src/metadata-menu-item.vala +++ b/src/metadata-menu-item.vala @@ -180,6 +180,7 @@ public class MetadataMenuitem : PlayerItem public void toggle_active_triangle (bool update) { + debug ("toggle active triangle"); this.property_set_bool (MENUITEM_PLAYER_RUNNING, update); } diff --git a/src/metadata-widget.c b/src/metadata-widget.c index 71120b0..c87c944 100644 --- a/src/metadata-widget.c +++ b/src/metadata-widget.c @@ -54,9 +54,12 @@ static void metadata_widget_class_init (MetadataWidgetClass *klass); static void metadata_widget_init (MetadataWidget *self); static void metadata_widget_dispose (GObject *object); static void metadata_widget_finalize (GObject *object); -static gboolean metadata_image_expose (GtkWidget *image, GdkEventExpose *event, gpointer user_data); +static gboolean metadata_image_expose (GtkWidget *image, + GdkEventExpose *event, + gpointer user_data); static void metadata_widget_set_style (GtkWidget* button, GtkStyle* style); -static void metadata_widget_set_twin_item (MetadataWidget* self, DbusmenuMenuitem* twin_item); +static void metadata_widget_set_twin_item (MetadataWidget* self, + DbusmenuMenuitem* twin_item); // keyevent consumers static gboolean metadata_widget_button_release_event (GtkWidget *menuitem, @@ -74,8 +77,9 @@ static void metadata_widget_selection_received_event_callback( GtkWidget GtkSelectionData *data, guint time, gpointer user_data); -static void metadata_widget_triangle_draw_cb (GtkWidget* widget, - MetadataWidget *meta); +static gboolean metadata_widget_triangle_draw_cb ( GtkWidget *image, + GdkEventExpose *event, + gpointer user_data); static void metadata_widget_set_icon (MetadataWidget *self); @@ -117,6 +121,10 @@ metadata_widget_init (MetadataWidget *self) g_signal_connect(priv->album_art, "expose-event", G_CALLBACK(metadata_image_expose), GTK_WIDGET(self)); + + g_signal_connect(GTK_WIDGET(self), "expose-event", + G_CALLBACK(metadata_widget_triangle_draw_cb), + GTK_WIDGET(self)); gtk_box_pack_start (GTK_BOX (priv->meta_data_h_box), priv->album_art, @@ -180,13 +188,6 @@ metadata_widget_init (MetadataWidget *self) gtk_box_pack_start (GTK_BOX(outer_v_box), priv->meta_data_h_box, FALSE, FALSE, 0); gtk_container_add (GTK_CONTAINER (self), outer_v_box); - gtk_widget_set_size_request(GTK_WIDGET(self), 200, 20); - gtk_widget_hide (priv->meta_data_h_box); - gtk_widget_hide (priv->artist_label); - gtk_widget_hide (priv->piece_label); - gtk_widget_hide (priv->container_label); - gtk_widget_hide (priv->album_art); - gtk_widget_hide (priv->meta_data_v_box); } static void @@ -213,12 +214,17 @@ metadata_image_expose (GtkWidget *metadata, GdkEventExpose *event, gpointer user MetadataWidget* widget = METADATA_WIDGET(user_data); MetadataWidgetPrivate * priv = METADATA_WIDGET_GET_PRIVATE(widget); - metadata_widget_triangle_draw_cb (metadata, widget); + /*g_debug ("metadata expose - is the %s player running - %i", + dbusmenu_menuitem_property_get (priv->twin_item, + DBUSMENU_METADATA_MENUITEM_PLAYER_NAME), + dbusmenu_menuitem_property_get_bool (priv->twin_item, + DBUSMENU_METADATA_MENUITEM_PLAYER_RUNNING)); + */ if ( TRUE == dbusmenu_menuitem_property_get_bool (DBUSMENU_MENUITEM(priv->twin_item), DBUSMENU_METADATA_MENUITEM_HIDE_TRACK_DETAILS)) { - return TRUE; + return FALSE; } draw_album_border(metadata, FALSE); @@ -235,7 +241,7 @@ metadata_image_expose (GtkWidget *metadata, GdkEventExpose *event, gpointer user //g_debug("problem loading the downloaded image just use the placeholder instead"); gtk_widget_set_size_request(GTK_WIDGET(priv->album_art), 60, 60); draw_album_art_placeholder(metadata); - return TRUE; + return FALSE; } gtk_image_set_from_pixbuf(GTK_IMAGE(priv->album_art), pixbuf); gtk_widget_set_size_request(GTK_WIDGET(priv->album_art), @@ -251,7 +257,7 @@ metadata_image_expose (GtkWidget *metadata, GdkEventExpose *event, gpointer user } gtk_widget_set_size_request(GTK_WIDGET(priv->album_art), 60, 60); draw_album_art_placeholder(metadata); - return TRUE; + return FALSE; } static void @@ -489,9 +495,23 @@ metadata_widget_property_update(DbusmenuMenuitem* item, gchar* property, gtk_widget_set_size_request(GTK_WIDGET(mitem), 200, 20); } else{ + gtk_widget_show (priv->meta_data_h_box); - gtk_widget_set_size_request(GTK_WIDGET(mitem), 200, 85); + gtk_widget_show (priv->artist_label); + gtk_widget_show (priv->piece_label); + gtk_widget_show (priv->container_label); + gtk_widget_show (priv->album_art); + gtk_widget_show (priv->meta_data_v_box); + + gtk_widget_set_size_request(GTK_WIDGET(mitem), 200, 85); + // This is not working! + gtk_misc_set_alignment (GTK_MISC(gtk_image_menu_item_get_image (GTK_IMAGE_MENU_ITEM(mitem))), + 0.5 /* right aligned */, + 0); + gtk_widget_show( GTK_WIDGET(gtk_image_menu_item_get_image (GTK_IMAGE_MENU_ITEM(mitem)))); + } + gtk_widget_queue_draw(GTK_WIDGET(mitem)); } } @@ -579,11 +599,6 @@ metadata_widget_set_twin_item (MetadataWidget* self, g_string_erase(priv->image_path, 0, -1); const gchar *arturl = dbusmenu_menuitem_property_get( priv->twin_item, DBUSMENU_METADATA_MENUITEM_ARTURL ); - - /*g_signal_connect_after (G_OBJECT (self), - "expose_event", - G_CALLBACK (metadata_widget_triangle_draw_cb), - priv->twin_item);*/ gtk_label_set_label (GTK_LABEL(priv->player_label), dbusmenu_menuitem_property_get(priv->twin_item, @@ -602,41 +617,42 @@ metadata_widget_set_twin_item (MetadataWidget* self, } } -// Title related ... -static void -metadata_widget_triangle_draw_cb (GtkWidget* widget, MetadataWidget *meta) +// Draw the triangle if the player is running ... +static gboolean +metadata_widget_triangle_draw_cb (GtkWidget *widget, + GdkEventExpose *event, + gpointer user_data) { + g_return_val_if_fail(IS_METADATA_WIDGET(user_data), FALSE); + MetadataWidget* meta = METADATA_WIDGET(user_data); + MetadataWidgetPrivate * priv = METADATA_WIDGET_GET_PRIVATE(meta); + GtkStyle *style; cairo_t *cr; int x, y, arrow_width, arrow_height; - - g_return_if_fail (GTK_IS_WIDGET(widget)); - - //MetadataWidget* widg = METADATA_WIDGET(widget); - MetadataWidgetPrivate* priv = METADATA_WIDGET_GET_PRIVATE (meta); - - /* render the triangle indicator only if the application is running */ + + + g_debug ("Triangle draw - is player running - %i", + dbusmenu_menuitem_property_get_bool (priv->twin_item, + DBUSMENU_METADATA_MENUITEM_PLAYER_RUNNING)); + + if (! dbusmenu_menuitem_property_get_bool (priv->twin_item, - DBUSMENU_METADATA_MENUITEM_PLAYER_RUNNING)){ - return; + DBUSMENU_METADATA_MENUITEM_PLAYER_RUNNING)){ + return FALSE; } - /* get style */ style = gtk_widget_get_style (widget); - /* set arrow position / dimensions */ - arrow_width = 5; /* the pixel-based reference triangle is 5x9 */ + arrow_width = 5; arrow_height = 9; x = widget->allocation.x; - y = widget->allocation.y + widget->allocation.height/2.0 - (double)arrow_height/2.0; - - /* initialize cairo drawing area */ + y = widget->allocation.y + (double)arrow_height/2.0; + cr = (cairo_t*) gdk_cairo_create (widget->window); - /* set line width */ cairo_set_line_width (cr, 1.0); - /* cairo drawing code */ cairo_move_to (cr, x, y); cairo_line_to (cr, x, y + arrow_height); cairo_line_to (cr, x + arrow_width, y + (double)arrow_height/2.0); @@ -645,8 +661,8 @@ metadata_widget_triangle_draw_cb (GtkWidget* widget, MetadataWidget *meta) style->fg[gtk_widget_get_state(widget)].green/65535.0, style->fg[gtk_widget_get_state(widget)].blue/65535.0); cairo_fill (cr); - /* remember to destroy cairo context to avoid leaks */ cairo_destroy (cr); + return FALSE; } /** diff --git a/src/mpris2-controller.vala b/src/mpris2-controller.vala index 7e128dd..74e9823 100644 --- a/src/mpris2-controller.vala +++ b/src/mpris2-controller.vala @@ -83,18 +83,16 @@ public class Mpris2Controller : GLib.Object } Variant? meta_v = changed_properties.lookup("Metadata"); if(meta_v != null){ - GLib.HashTable changed_updates = clean_metadata(); - //MetadataMenuitem md = this.owner.custom_items[PlayerController.widget_order.METADATA] as MetadataMenuitem; - //md.reset_track_details (); - + GLib.HashTable changed_updates = clean_metadata(); PlayerItem metadata = this.owner.custom_items[PlayerController.widget_order.METADATA]; metadata.reset (MetadataMenuitem.relevant_attributes_for_ui()); metadata.update ( changed_updates, MetadataMenuitem.attributes_format()); - /*metadata.property_set_bool ( MENUITEM_PROP_VISIBLE, - metadata.populated(MetadataMenuitem.relevant_attributes_for_ui()));*/ - debug ("metadata visibility = %s", - metadata.populated (MetadataMenuitem.relevant_attributes_for_ui()).to_string()); + MetadataMenuitem md = this.owner.custom_items[PlayerController.widget_order.METADATA] as MetadataMenuitem; + bool collapsing = !metadata.populated(MetadataMenuitem.relevant_attributes_for_ui()); + md.should_collapse(collapsing); + + debug ("metadata should collapse = %s", collapsing.to_string()); } Variant? playlist_v = changed_properties.lookup("ActivePlaylist"); if ( playlist_v != null && this.owner.use_playlists == true ){ -- cgit v1.2.3 From f51a22b522b832dc45348f99c387d633ec90fa6d Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Mon, 13 Jun 2011 17:15:47 +0200 Subject: start up hibernated state fixed --- src/metadata-widget.c | 68 ++++++++++++++++++++++++++++----------------------- 1 file changed, 38 insertions(+), 30 deletions(-) diff --git a/src/metadata-widget.c b/src/metadata-widget.c index c87c944..c4e0974 100644 --- a/src/metadata-widget.c +++ b/src/metadata-widget.c @@ -82,6 +82,8 @@ static gboolean metadata_widget_triangle_draw_cb ( GtkWidget *image, gpointer user_data); static void metadata_widget_set_icon (MetadataWidget *self); +static void metadata_widget_handle_resizing (MetadataWidget* self); + G_DEFINE_TYPE (MetadataWidget, metadata_widget, GTK_TYPE_IMAGE_MENU_ITEM); @@ -443,7 +445,6 @@ metadata_widget_property_update(DbusmenuMenuitem* item, gchar* property, if(g_variant_is_of_type(value, G_VARIANT_TYPE_INT32) == TRUE && g_variant_get_int32(value) == DBUSMENU_PROPERTY_EMPTY){ - //g_debug("Metadata widget: property update - reset"); GVariant* new_value = g_variant_new_string (""); value = new_value; } @@ -468,7 +469,6 @@ metadata_widget_property_update(DbusmenuMenuitem* item, gchar* property, g_string_overwrite(priv->image_path, 0, g_variant_get_string (value, NULL)); // if its a remote image queue a redraw incase the download took too long if (g_str_has_prefix(g_variant_get_string (value, NULL), g_get_user_cache_dir())){ - //g_debug("the image update is a download so redraw"); gtk_widget_queue_draw(GTK_WIDGET(mitem)); } } @@ -483,36 +483,43 @@ metadata_widget_property_update(DbusmenuMenuitem* item, gchar* property, g_debug ("MetadataWidget::Prop update for DBUSMENU_METADATA_MENUITEM_HIDE_TRACK_DETAILS. Value = %i", dbusmenu_menuitem_property_get_bool (priv->twin_item, DBUSMENU_METADATA_MENUITEM_HIDE_TRACK_DETAILS)); - - if (dbusmenu_menuitem_property_get_bool (priv->twin_item, - DBUSMENU_METADATA_MENUITEM_HIDE_TRACK_DETAILS) == TRUE){ - gtk_widget_hide (priv->meta_data_h_box); - gtk_widget_hide (priv->artist_label); - gtk_widget_hide (priv->piece_label); - gtk_widget_hide (priv->container_label); - gtk_widget_hide (priv->album_art); - gtk_widget_hide (priv->meta_data_v_box); - gtk_widget_set_size_request(GTK_WIDGET(mitem), 200, 20); - } - else{ - - gtk_widget_show (priv->meta_data_h_box); - gtk_widget_show (priv->artist_label); - gtk_widget_show (priv->piece_label); - gtk_widget_show (priv->container_label); - gtk_widget_show (priv->album_art); - gtk_widget_show (priv->meta_data_v_box); - - gtk_widget_set_size_request(GTK_WIDGET(mitem), 200, 85); - // This is not working! - gtk_misc_set_alignment (GTK_MISC(gtk_image_menu_item_get_image (GTK_IMAGE_MENU_ITEM(mitem))), - 0.5 /* right aligned */, - 0); - gtk_widget_show( GTK_WIDGET(gtk_image_menu_item_get_image (GTK_IMAGE_MENU_ITEM(mitem)))); + metadata_widget_handle_resizing (mitem); + } +} + +static void +metadata_widget_handle_resizing (MetadataWidget* self) +{ + MetadataWidgetPrivate * priv = METADATA_WIDGET_GET_PRIVATE(self); + + if (dbusmenu_menuitem_property_get_bool (priv->twin_item, + DBUSMENU_METADATA_MENUITEM_HIDE_TRACK_DETAILS) == TRUE){ + gtk_widget_hide (priv->meta_data_h_box); + gtk_widget_hide (priv->artist_label); + gtk_widget_hide (priv->piece_label); + gtk_widget_hide (priv->container_label); + gtk_widget_hide (priv->album_art); + gtk_widget_hide (priv->meta_data_v_box); + gtk_widget_set_size_request(GTK_WIDGET(self), 200, 20); + } + else{ + + gtk_widget_show (priv->meta_data_h_box); + gtk_widget_show (priv->artist_label); + gtk_widget_show (priv->piece_label); + gtk_widget_show (priv->container_label); + gtk_widget_show (priv->album_art); + gtk_widget_show (priv->meta_data_v_box); + + gtk_widget_set_size_request(GTK_WIDGET(self), 200, 85); + // This is not working! + gtk_misc_set_alignment (GTK_MISC(gtk_image_menu_item_get_image (GTK_IMAGE_MENU_ITEM(self))), + 0.5 /* right aligned */, + 0); + gtk_widget_show( GTK_WIDGET(gtk_image_menu_item_get_image (GTK_IMAGE_MENU_ITEM(self)))); - } - gtk_widget_queue_draw(GTK_WIDGET(mitem)); } + gtk_widget_queue_draw(GTK_WIDGET(self)); } static void @@ -615,6 +622,7 @@ metadata_widget_set_twin_item (MetadataWidget* self, gtk_widget_queue_draw(GTK_WIDGET(self)); } } + metadata_widget_handle_resizing (self); } // Draw the triangle if the player is running ... -- cgit v1.2.3 From 1f5e377b627ba6d170f0cf5fa30d4d1c5b502609 Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Tue, 14 Jun 2011 12:59:16 +0200 Subject: widget reset now working nicely --- src/player-controller.vala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/player-controller.vala b/src/player-controller.vala index 7e35d63..e8215cd 100644 --- a/src/player-controller.vala +++ b/src/player-controller.vala @@ -135,9 +135,9 @@ public class PlayerController : GLib.Object update_state(PlayerController.state.OFFLINE); TransportMenuitem transport = this.custom_items[widget_order.TRANSPORT] as TransportMenuitem; transport.change_play_state (Transport.State.PAUSED); - this.custom_items[widget_order.METADATA].reset(MetadataMenuitem.attributes_format()); + this.custom_items[widget_order.METADATA].reset(MetadataMenuitem.relevant_attributes_for_ui()); MetadataMenuitem md = this.custom_items[widget_order.METADATA] as MetadataMenuitem; - md.toggle_active_triangle(false); + md.toggle_active_triangle (false); this.mpris_bridge = null; } -- cgit v1.2.3 From 95fdfeacc7b13034ca71aac2fe2e42fef17de253 Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Tue, 14 Jun 2011 13:17:25 +0200 Subject: spacing fixed --- src/metadata-menu-item.vala | 2 +- src/metadata-widget.c | 4 ++-- src/player-controller.vala | 4 +--- src/player-item.vala | 5 +---- 4 files changed, 5 insertions(+), 10 deletions(-) diff --git a/src/metadata-menu-item.vala b/src/metadata-menu-item.vala index de02aec..dccf478 100644 --- a/src/metadata-menu-item.vala +++ b/src/metadata-menu-item.vala @@ -33,7 +33,6 @@ public class MetadataMenuitem : PlayerItem public MetadataMenuitem (PlayerController parent) { Object(item_type: MENUITEM_TYPE, owner: parent); - //reset(attributes_format()); } construct{ @@ -45,6 +44,7 @@ public class MetadataMenuitem : PlayerItem this.property_set (MENUITEM_PLAYER_ICON, this.owner.icon_name); this.property_set_bool (MENUITEM_PLAYER_RUNNING, false); this.property_set_bool (MENUITEM_HIDE_TRACK_DETAILS, true); + reset (relevant_attributes_for_ui()); } private static void clean_album_art_temp_dir() diff --git a/src/metadata-widget.c b/src/metadata-widget.c index c4e0974..9641406 100644 --- a/src/metadata-widget.c +++ b/src/metadata-widget.c @@ -183,7 +183,7 @@ metadata_widget_init (MetadataWidget *self) player_label = gtk_label_new(""); gtk_misc_set_alignment(GTK_MISC(player_label), (gfloat)0, (gfloat)0); gtk_misc_set_padding (GTK_MISC(player_label), (gfloat)0, (gfloat)0); - gtk_widget_set_size_request (player_label, 140, 20); + gtk_widget_set_size_request (player_label, 200, 25); priv->player_label = player_label; gtk_box_pack_start (GTK_BOX(outer_v_box), priv->player_label, FALSE, FALSE, 0); @@ -511,7 +511,7 @@ metadata_widget_handle_resizing (MetadataWidget* self) gtk_widget_show (priv->album_art); gtk_widget_show (priv->meta_data_v_box); - gtk_widget_set_size_request(GTK_WIDGET(self), 200, 85); + gtk_widget_set_size_request(GTK_WIDGET(self), 200, 95); // This is not working! gtk_misc_set_alignment (GTK_MISC(gtk_image_menu_item_get_image (GTK_IMAGE_MENU_ITEM(self))), 0.5 /* right aligned */, diff --git a/src/player-controller.vala b/src/player-controller.vala index e8215cd..002af65 100644 --- a/src/player-controller.vala +++ b/src/player-controller.vala @@ -154,9 +154,7 @@ public class PlayerController : GLib.Object this.app_info.get_id() == "banshee.desktop"); return; } - metadata_menuitem.should_collapse (false); - /*this.custom_items[widget_order.METADATA].property_set_bool (MENUITEM_PROP_VISIBLE, - this.custom_items[widget_order.METADATA].populated(MetadataMenuitem.attributes_format()));*/ + metadata_menuitem.should_collapse (!this.custom_items[widget_order.METADATA].populated (MetadataMenuitem.relevant_attributes_for_ui()) ); if (this.app_info.get_id() == "banshee.desktop"){ TransportMenuitem transport = this.custom_items[widget_order.TRANSPORT] as TransportMenuitem; transport.handle_cached_action(); diff --git a/src/player-item.vala b/src/player-item.vala index f71b166..6d9c8e5 100644 --- a/src/player-item.vala +++ b/src/player-item.vala @@ -24,7 +24,7 @@ public class PlayerItem : Dbusmenu.Menuitem { public PlayerController owner {get; construct;} public string item_type { get; construct; } - private const int EMPTY = -1; + public const int EMPTY = -1; public PlayerItem(string type) { @@ -37,7 +37,6 @@ public class PlayerItem : Dbusmenu.Menuitem public void reset(HashSet attrs){ foreach(string s in attrs){ - //debug("attempting to set prop %s to EMPTY", s); this.property_set_int(s, EMPTY); } } @@ -93,9 +92,7 @@ public class PlayerItem : Dbusmenu.Menuitem public bool populated(HashSet attrs) { foreach(string prop in attrs){ - //debug("populated ? - prop: %s", prop); if(property_get_int(prop) != EMPTY){ - //debug("populated - prop %s and value %i", prop, property_get_int(prop)); return true; } } -- cgit v1.2.3 From 4b0e1e3ae018d0f57104f8b309f159f70fd976dc Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Tue, 14 Jun 2011 15:01:28 +0200 Subject: key handling working nicely for the metadata widget almost there --- src/metadata-widget.c | 70 ++++++++++++++++++++++++++------------------------- 1 file changed, 36 insertions(+), 34 deletions(-) diff --git a/src/metadata-widget.c b/src/metadata-widget.c index 9641406..41a4f3f 100644 --- a/src/metadata-widget.c +++ b/src/metadata-widget.c @@ -216,13 +216,6 @@ metadata_image_expose (GtkWidget *metadata, GdkEventExpose *event, gpointer user MetadataWidget* widget = METADATA_WIDGET(user_data); MetadataWidgetPrivate * priv = METADATA_WIDGET_GET_PRIVATE(widget); - /*g_debug ("metadata expose - is the %s player running - %i", - dbusmenu_menuitem_property_get (priv->twin_item, - DBUSMENU_METADATA_MENUITEM_PLAYER_NAME), - dbusmenu_menuitem_property_get_bool (priv->twin_item, - DBUSMENU_METADATA_MENUITEM_PLAYER_RUNNING)); - */ - if ( TRUE == dbusmenu_menuitem_property_get_bool (DBUSMENU_MENUITEM(priv->twin_item), DBUSMENU_METADATA_MENUITEM_HIDE_TRACK_DETAILS)) { @@ -237,14 +230,13 @@ metadata_image_expose (GtkWidget *metadata, GdkEventExpose *event, gpointer user priv->theme_change_occured = FALSE; GdkPixbuf* pixbuf; pixbuf = gdk_pixbuf_new_from_file_at_size(priv->image_path->str, 60, 60, NULL); - //g_debug("metadata_load_new_image -> pixbuf from %s", - // priv->image_path->str); + if(GDK_IS_PIXBUF(pixbuf) == FALSE){ - //g_debug("problem loading the downloaded image just use the placeholder instead"); gtk_widget_set_size_request(GTK_WIDGET(priv->album_art), 60, 60); draw_album_art_placeholder(metadata); return FALSE; } + gtk_image_set_from_pixbuf(GTK_IMAGE(priv->album_art), pixbuf); gtk_widget_set_size_request(GTK_WIDGET(priv->album_art), gdk_pixbuf_get_width(pixbuf), @@ -420,21 +412,40 @@ static gboolean metadata_widget_button_release_event (GtkWidget *menuitem, GdkEventButton *event) { - GtkClipboard* board = gtk_clipboard_get (GDK_NONE); - - MetadataWidgetPrivate* priv = METADATA_WIDGET_GET_PRIVATE(METADATA_WIDGET(menuitem)); - - gchar* contents = g_strdup_printf("artist: %s \ntitle: %s \nalbum: %s", - dbusmenu_menuitem_property_get(priv->twin_item, - DBUSMENU_METADATA_MENUITEM_ARTIST), - dbusmenu_menuitem_property_get(priv->twin_item, - DBUSMENU_METADATA_MENUITEM_TITLE), - dbusmenu_menuitem_property_get(priv->twin_item, - DBUSMENU_METADATA_MENUITEM_ALBUM)); - gtk_clipboard_set_text (board, contents, -1); - gtk_clipboard_store (board); - g_free(contents); - return FALSE; + g_return_val_if_fail (IS_METADATA_WIDGET (menuitem), FALSE); + MetadataWidgetPrivate* priv = METADATA_WIDGET_GET_PRIVATE(METADATA_WIDGET(menuitem)); + // For the left raise/launch the player + if (event->button == 1){ + GVariant* new_title_event = g_variant_new_boolean(TRUE); + dbusmenu_menuitem_handle_event (priv->twin_item, + "Title menu event", + new_title_event, + 0); + } + // For the right copy track details to clipboard only if the player is running + // and there is something there + else if (event->button == 3){ + gboolean running = dbusmenu_menuitem_property_get_bool (priv->twin_item, + DBUSMENU_METADATA_MENUITEM_PLAYER_RUNNING); + gboolean hidden = dbusmenu_menuitem_property_get_bool (priv->twin_item, + DBUSMENU_METADATA_MENUITEM_HIDE_TRACK_DETAILS); + g_return_val_if_fail ( running, FALSE ); + + g_return_val_if_fail ( !hidden, FALSE ); + + GtkClipboard* board = gtk_clipboard_get (GDK_NONE); + gchar* contents = g_strdup_printf("artist: %s \ntitle: %s \nalbum: %s", + dbusmenu_menuitem_property_get(priv->twin_item, + DBUSMENU_METADATA_MENUITEM_ARTIST), + dbusmenu_menuitem_property_get(priv->twin_item, + DBUSMENU_METADATA_MENUITEM_TITLE), + dbusmenu_menuitem_property_get(priv->twin_item, + DBUSMENU_METADATA_MENUITEM_ALBUM)); + gtk_clipboard_set_text (board, contents, -1); + gtk_clipboard_store (board); + g_free(contents); + } + return TRUE; } static void @@ -480,9 +491,6 @@ metadata_widget_property_update(DbusmenuMenuitem* item, gchar* property, metadata_widget_set_icon (mitem); } else if(g_ascii_strcasecmp(DBUSMENU_METADATA_MENUITEM_HIDE_TRACK_DETAILS, property) == 0){ - - g_debug ("MetadataWidget::Prop update for DBUSMENU_METADATA_MENUITEM_HIDE_TRACK_DETAILS. Value = %i", - dbusmenu_menuitem_property_get_bool (priv->twin_item, DBUSMENU_METADATA_MENUITEM_HIDE_TRACK_DETAILS)); metadata_widget_handle_resizing (mitem); } } @@ -638,12 +646,6 @@ metadata_widget_triangle_draw_cb (GtkWidget *widget, GtkStyle *style; cairo_t *cr; int x, y, arrow_width, arrow_height; - - - g_debug ("Triangle draw - is player running - %i", - dbusmenu_menuitem_property_get_bool (priv->twin_item, - DBUSMENU_METADATA_MENUITEM_PLAYER_RUNNING)); - if (! dbusmenu_menuitem_property_get_bool (priv->twin_item, DBUSMENU_METADATA_MENUITEM_PLAYER_RUNNING)){ -- cgit v1.2.3 From 2e0dd336905735dc75d3ab7e676ef60af76ae746 Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Tue, 14 Jun 2011 18:24:46 +0200 Subject: caught most of the little bugs I could find@ --- src/metadata-menu-item.vala | 12 +++++++++--- src/metadata-widget.c | 18 ++++++++++++------ src/mpris2-controller.vala | 4 ++-- src/player-item.vala | 1 + 4 files changed, 24 insertions(+), 11 deletions(-) diff --git a/src/metadata-menu-item.vala b/src/metadata-menu-item.vala index dccf478..995d248 100644 --- a/src/metadata-menu-item.vala +++ b/src/metadata-menu-item.vala @@ -104,10 +104,16 @@ public class MetadataMenuitem : PlayerItem public void fetch_art(string uri, string prop) { File art_file = File.new_for_uri(uri); - if(art_file.is_native() == true){ + if (art_file.is_native() == true){ + if (art_file.query_exists() == false){ + // Can't load the image, set prop to empty and return. + this.property_set_int ( prop, EMPTY ); + return; + } string path; try{ - path = Filename.from_uri ( uri.strip() ); + path = Filename.from_uri ( uri.strip() ); + debug ("Populating the artwork field with %s", uri.strip()); this.property_set ( prop, path ); } catch(ConvertError e){ @@ -150,7 +156,7 @@ public class MetadataMenuitem : PlayerItem if(this.previous_temp_album_art_path != null){ FileUtils.remove(this.previous_temp_album_art_path); } - this.previous_temp_album_art_path = path; + this.previous_temp_album_art_path = path; } } catch(GLib.Error e){ diff --git a/src/metadata-widget.c b/src/metadata-widget.c index 41a4f3f..779f60c 100644 --- a/src/metadata-widget.c +++ b/src/metadata-widget.c @@ -232,6 +232,7 @@ metadata_image_expose (GtkWidget *metadata, GdkEventExpose *event, gpointer user pixbuf = gdk_pixbuf_new_from_file_at_size(priv->image_path->str, 60, 60, NULL); if(GDK_IS_PIXBUF(pixbuf) == FALSE){ + gtk_image_clear ( GTK_IMAGE(priv->album_art)); gtk_widget_set_size_request(GTK_WIDGET(priv->album_art), 60, 60); draw_album_art_placeholder(metadata); return FALSE; @@ -242,13 +243,14 @@ metadata_image_expose (GtkWidget *metadata, GdkEventExpose *event, gpointer user gdk_pixbuf_get_width(pixbuf), gdk_pixbuf_get_height(pixbuf)); - g_string_erase(priv->old_image_path, 0, -1); - g_string_overwrite(priv->old_image_path, 0, priv->image_path->str); + g_string_erase (priv->old_image_path, 0, -1); + g_string_overwrite (priv->old_image_path, 0, priv->image_path->str); g_object_unref(pixbuf); } return FALSE; } + gtk_image_clear (GTK_IMAGE(priv->album_art)); gtk_widget_set_size_request(GTK_WIDGET(priv->album_art), 60, 60); draw_album_art_placeholder(metadata); return FALSE; @@ -347,6 +349,8 @@ draw_album_border(GtkWidget *metadata, gboolean selected) static void draw_album_art_placeholder(GtkWidget *metadata) { + g_debug ("Attempting to draw the image !"); + cairo_t *cr; cr = gdk_cairo_create (metadata->window); GtkStyle *style; @@ -479,9 +483,9 @@ metadata_widget_property_update(DbusmenuMenuitem* item, gchar* property, g_string_erase(priv->image_path, 0, -1); g_string_overwrite(priv->image_path, 0, g_variant_get_string (value, NULL)); // if its a remote image queue a redraw incase the download took too long - if (g_str_has_prefix(g_variant_get_string (value, NULL), g_get_user_cache_dir())){ - gtk_widget_queue_draw(GTK_WIDGET(mitem)); - } + //if (g_str_has_prefix(g_variant_get_string (value, NULL), g_get_user_cache_dir())){ + gtk_widget_queue_draw(GTK_WIDGET(mitem)); + //} } else if (g_ascii_strcasecmp (DBUSMENU_METADATA_MENUITEM_PLAYER_NAME, property) == 0){ gtk_label_set_label (GTK_LABEL (priv->player_label), @@ -656,8 +660,10 @@ metadata_widget_triangle_draw_cb (GtkWidget *widget, arrow_width = 5; arrow_height = 9; + gint vertical_offset = 3; + x = widget->allocation.x; - y = widget->allocation.y + (double)arrow_height/2.0; + y = widget->allocation.y + (double)arrow_height/2.0 + vertical_offset; cr = (cairo_t*) gdk_cairo_create (widget->window); diff --git a/src/mpris2-controller.vala b/src/mpris2-controller.vala index 74e9823..2975066 100644 --- a/src/mpris2-controller.vala +++ b/src/mpris2-controller.vala @@ -87,12 +87,12 @@ public class Mpris2Controller : GLib.Object PlayerItem metadata = this.owner.custom_items[PlayerController.widget_order.METADATA]; metadata.reset (MetadataMenuitem.relevant_attributes_for_ui()); metadata.update ( changed_updates, - MetadataMenuitem.attributes_format()); + MetadataMenuitem.relevant_attributes_for_ui()); MetadataMenuitem md = this.owner.custom_items[PlayerController.widget_order.METADATA] as MetadataMenuitem; bool collapsing = !metadata.populated(MetadataMenuitem.relevant_attributes_for_ui()); md.should_collapse(collapsing); - debug ("metadata should collapse = %s", collapsing.to_string()); + debug ("Should metadata collapse %s", collapsing.to_string()); } Variant? playlist_v = changed_properties.lookup("ActivePlaylist"); if ( playlist_v != null && this.owner.use_playlists == true ){ diff --git a/src/player-item.vala b/src/player-item.vala index 6d9c8e5..2af3f36 100644 --- a/src/player-item.vala +++ b/src/player-item.vala @@ -86,6 +86,7 @@ public class PlayerItem : Dbusmenu.Menuitem this.property_set_bool(property, v.get_boolean()); } } + // TODO- is this only relevant for the metadata, if so please call for just that case this.property_set_bool(MENUITEM_PROP_VISIBLE, populated(attributes)); } -- cgit v1.2.3 From 8bbe3c423e852f7cdf0385657683185625e3208a Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Tue, 14 Jun 2011 18:25:23 +0200 Subject: caught most of the little bugs I could find@ --- src/metadata-widget.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/metadata-widget.c b/src/metadata-widget.c index 779f60c..bc998fa 100644 --- a/src/metadata-widget.c +++ b/src/metadata-widget.c @@ -348,9 +348,7 @@ draw_album_border(GtkWidget *metadata, gboolean selected) static void draw_album_art_placeholder(GtkWidget *metadata) -{ - g_debug ("Attempting to draw the image !"); - +{ cairo_t *cr; cr = gdk_cairo_create (metadata->window); GtkStyle *style; -- cgit v1.2.3 From f422c1013a3e5413dd63c3a74bc5991b01162998 Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Tue, 14 Jun 2011 18:33:14 +0200 Subject: and finally removed the title related files --- src/indicator-sound.c | 1 - src/title-menu-item.vala | 68 ------------- src/title-widget.c | 247 ----------------------------------------------- src/title-widget.h | 52 ---------- 4 files changed, 368 deletions(-) delete mode 100644 src/title-menu-item.vala delete mode 100644 src/title-widget.c delete mode 100644 src/title-widget.h diff --git a/src/indicator-sound.c b/src/indicator-sound.c index 8daf06c..4708e0f 100644 --- a/src/indicator-sound.c +++ b/src/indicator-sound.c @@ -31,7 +31,6 @@ with this program. If not, see . #include "indicator-sound.h" #include "transport-widget.h" #include "metadata-widget.h" -#include "title-widget.h" #include "volume-widget.h" #include "voip-input-widget.h" #include "dbus-shared-names.h" diff --git a/src/title-menu-item.vala b/src/title-menu-item.vala deleted file mode 100644 index 07294fc..0000000 --- a/src/title-menu-item.vala +++ /dev/null @@ -1,68 +0,0 @@ -/* -Copyright 2010 Canonical Ltd. - -Authors: - Conor Curran - -This program is free software: you can redistribute it and/or modify it -under the terms of the GNU General Public License version 3, as published -by the Free Software Foundation. - -This program is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranties of -MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR -PURPOSE. See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along -with this program. If not, see . -*/ - -using Dbusmenu; -using DbusmenuTitle; -using Gee; - -public class TitleMenuitem : PlayerItem -{ - public TitleMenuitem(PlayerController parent) - { - Object(item_type: MENUITEM_TYPE, owner: parent); - } - - construct - { - this.property_set(MENUITEM_NAME, this.owner.app_info.get_name()); - this.property_set(MENUITEM_ICON, this.owner.icon_name); - this.property_set_bool(MENUITEM_RUNNING, false); - } - - public override void handle_event(string name, Variant input_value, uint timestamp) - { - if(this.owner.current_state == PlayerController.state.OFFLINE) - { - this.owner.instantiate(); - } - else if(this.owner.current_state == PlayerController.state.CONNECTED){ - this.owner.mpris_bridge.expose(); - } - } - - public void alter_label (string new_title) - { - if (new_title == null) return; - this.property_set (MENUITEM_NAME, new_title); - } - - public void toggle_active_triangle(bool update) - { - this.property_set_bool(MENUITEM_RUNNING, update); - } - - public static HashSet attributes_format() - { - HashSet attrs = new HashSet(); - attrs.add(MENUITEM_NAME); - attrs.add(MENUITEM_RUNNING); - attrs.add(MENUITEM_ICON); - return attrs; - } -} \ No newline at end of file diff --git a/src/title-widget.c b/src/title-widget.c deleted file mode 100644 index e463582..0000000 --- a/src/title-widget.c +++ /dev/null @@ -1,247 +0,0 @@ -/* -Copyright 2010 Canonical Ltd. - -Authors: - Conor Curran - -This program is free software: you can redistribute it and/or modify it -under the terms of the GNU General Public License version 3, as published -by the Free Software Foundation. - -This program is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranties of -MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR -PURPOSE. See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along -with this program. If not, see . -*/ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include "title-widget.h" -#include "common-defs.h" -#include -#include - - -typedef struct _TitleWidgetPrivate TitleWidgetPrivate; - -struct _TitleWidgetPrivate -{ - DbusmenuMenuitem* twin_item; -}; - -#define TITLE_WIDGET_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TITLE_WIDGET_TYPE, TitleWidgetPrivate)) - -/* Prototypes */ -static void title_widget_class_init (TitleWidgetClass *klass); -static void title_widget_init (TitleWidget *self); -static void title_widget_dispose (GObject *object); -static void title_widget_finalize (GObject *object); - -// keyevent consumers -static gboolean title_widget_button_release_event (GtkWidget *menuitem, - GdkEventButton *event); - -// Dbusmenuitem properties update callback -static void title_widget_property_update(DbusmenuMenuitem* item, gchar* property, - GVariant* value, gpointer userdata); -static void title_widget_set_twin_item( TitleWidget* self, - DbusmenuMenuitem* twin_item); -static gboolean title_widget_triangle_draw_cb (GtkWidget *widget, - GdkEventExpose *event, - gpointer data); - -G_DEFINE_TYPE (TitleWidget, title_widget, GTK_TYPE_IMAGE_MENU_ITEM); - -static void -title_widget_class_init (TitleWidgetClass *klass) -{ - GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); - - widget_class->button_release_event = title_widget_button_release_event; - - g_type_class_add_private (klass, sizeof (TitleWidgetPrivate)); - - gobject_class->dispose = title_widget_dispose; - gobject_class->finalize = title_widget_finalize; -} - -static void -title_widget_init (TitleWidget *self) -{ - //g_debug("TitleWidget::title_widget_init"); -} - -static void -title_widget_set_icon(TitleWidget *self) -{ - TitleWidgetPrivate *priv = TITLE_WIDGET_GET_PRIVATE(self); - - gint padding = 0; - gtk_widget_style_get(GTK_WIDGET(self), "horizontal-padding", &padding, NULL); - gint width, height; - gtk_icon_size_lookup(GTK_ICON_SIZE_MENU, &width, &height); - - GString* banshee_string = g_string_new ( "banshee" ); - GString* app_panel = g_string_new ( g_utf8_strdown ( dbusmenu_menuitem_property_get(priv->twin_item, DBUSMENU_TITLE_MENUITEM_NAME), - -1 )); - GtkWidget * icon = NULL; - - // Not ideal but apparently we want the banshee icon to be the greyscale one - // and any others to be the icon from the desktop file => colour. - if ( g_string_equal ( banshee_string, app_panel ) == TRUE && - gtk_icon_theme_has_icon ( gtk_icon_theme_get_default(), app_panel->str ) ){ - g_string_append ( app_panel, "-panel" ); - icon = gtk_image_new_from_icon_name ( app_panel->str, - GTK_ICON_SIZE_MENU ); - } - else{ - icon = gtk_image_new_from_icon_name ( g_strdup (dbusmenu_menuitem_property_get ( priv->twin_item, DBUSMENU_TITLE_MENUITEM_ICON )), - GTK_ICON_SIZE_MENU ); - } - g_string_free ( app_panel, FALSE) ; - g_string_free ( banshee_string, FALSE) ; - - gtk_widget_set_size_request(icon, width - + 5 /* ref triangle is 5x9 pixels */ - + 1 /* padding */, - height); - gtk_misc_set_alignment(GTK_MISC(icon), 0.5 /* right aligned */, 0); - gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(self), GTK_WIDGET(icon)); - gtk_widget_show(icon); -} - -static void -title_widget_dispose (GObject *object) -{ - G_OBJECT_CLASS (title_widget_parent_class)->dispose (object); -} - -static void -title_widget_finalize (GObject *object) -{ - G_OBJECT_CLASS (title_widget_parent_class)->finalize (object); -} - -/* Suppress/consume keyevents */ -static gboolean -title_widget_button_release_event (GtkWidget *menuitem, - GdkEventButton *event) -{ - //g_debug("TitleWidget::menu_press_event"); - TitleWidgetPrivate * priv = TITLE_WIDGET_GET_PRIVATE(menuitem); - - GVariant* new_title_event = g_variant_new_boolean(TRUE); - dbusmenu_menuitem_handle_event (priv->twin_item, - "Title menu event", - new_title_event, - 0); - return FALSE; -} - -static void -title_widget_property_update (DbusmenuMenuitem* item, gchar* property, - GVariant* value, gpointer userdata) -{ - g_return_if_fail (IS_TITLE_WIDGET (userdata)); - TitleWidget* mitem = TITLE_WIDGET(userdata); - if(g_ascii_strcasecmp(DBUSMENU_TITLE_MENUITEM_NAME, property) == 0){ - gtk_menu_item_set_label (GTK_MENU_ITEM(mitem), - g_variant_get_string(value, NULL)); - } - else if(g_ascii_strcasecmp(DBUSMENU_TITLE_MENUITEM_ICON, property) == 0){ - title_widget_set_icon (mitem); - } -} - -static void -title_widget_set_twin_item(TitleWidget* self, - DbusmenuMenuitem* twin_item) -{ - TitleWidgetPrivate *priv = TITLE_WIDGET_GET_PRIVATE(self); - - priv->twin_item = twin_item; - - g_signal_connect (G_OBJECT (twin_item), - "property-changed", - G_CALLBACK (title_widget_property_update), - self); - g_signal_connect_after (G_OBJECT (self), - "expose_event", - G_CALLBACK (title_widget_triangle_draw_cb), - twin_item); - - gtk_menu_item_set_label (GTK_MENU_ITEM(self), - dbusmenu_menuitem_property_get(priv->twin_item, - DBUSMENU_TITLE_MENUITEM_NAME)); - title_widget_set_icon(self); -} - -static gboolean -title_widget_triangle_draw_cb (GtkWidget *widget, GdkEventExpose *event, gpointer data) -{ - GtkStyle *style; - cairo_t *cr; - int x, y, arrow_width, arrow_height; - - if (!GTK_IS_WIDGET (widget)) return FALSE; - if (!DBUSMENU_IS_MENUITEM (data)) return FALSE; - - /* render the triangle indicator only if the application is running */ - if (! dbusmenu_menuitem_property_get_bool (DBUSMENU_MENUITEM(data), - DBUSMENU_TITLE_MENUITEM_RUNNING)){ - return FALSE; - } - - /* get style */ - style = gtk_widget_get_style (widget); - - /* set arrow position / dimensions */ - arrow_width = 5; /* the pixel-based reference triangle is 5x9 */ - arrow_height = 9; - x = widget->allocation.x; - y = widget->allocation.y + widget->allocation.height/2.0 - (double)arrow_height/2.0; - - /* initialize cairo drawing area */ - cr = (cairo_t*) gdk_cairo_create (widget->window); - - /* set line width */ - cairo_set_line_width (cr, 1.0); - - /* cairo drawing code */ - cairo_move_to (cr, x, y); - cairo_line_to (cr, x, y + arrow_height); - cairo_line_to (cr, x + arrow_width, y + (double)arrow_height/2.0); - cairo_close_path (cr); - cairo_set_source_rgb (cr, style->fg[gtk_widget_get_state(widget)].red/65535.0, - style->fg[gtk_widget_get_state(widget)].green/65535.0, - style->fg[gtk_widget_get_state(widget)].blue/65535.0); - cairo_fill (cr); - - /* remember to destroy cairo context to avoid leaks */ - cairo_destroy (cr); - - return FALSE; -} - - /** - * transport_new: - * @returns: a new #TitleWidget. - **/ -GtkWidget* -title_widget_new(DbusmenuMenuitem *item) -{ - GtkWidget* widget = g_object_new (TITLE_WIDGET_TYPE, - NULL); - gtk_image_menu_item_set_always_show_image (GTK_IMAGE_MENU_ITEM (widget), TRUE); - title_widget_set_twin_item((TitleWidget*)widget, item); - - return widget; -} - diff --git a/src/title-widget.h b/src/title-widget.h deleted file mode 100644 index 2be904a..0000000 --- a/src/title-widget.h +++ /dev/null @@ -1,52 +0,0 @@ -/* -Copyright 2010 Canonical Ltd. - -Authors: - Conor Curran - -This program is free software: you can redistribute it and/or modify it -under the terms of the GNU General Public License version 3, as published -by the Free Software Foundation. - -This program is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranties of -MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR -PURPOSE. See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along -with this program. If not, see . -*/ -#ifndef __TITLE_WIDGET_H__ -#define __TITLE_WIDGET_H__ - -#include -#include - - -G_BEGIN_DECLS - -#define TITLE_WIDGET_TYPE (title_widget_get_type ()) -#define TITLE_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TITLE_WIDGET_TYPE, TitleWidget)) -#define TITLE_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TITLE_WIDGET_TYPE, TitleWidgetClass)) -#define IS_TITLE_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TITLE_WIDGET_TYPE)) -#define IS_TITLE_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TITLE_WIDGET_TYPE)) -#define TITLE_WIDGET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TITLE_WIDGET_TYPE, TitleWidgetClass)) - -typedef struct _TitleWidget TitleWidget; -typedef struct _TitleWidgetClass TitleWidgetClass; - -struct _TitleWidgetClass { - GtkImageMenuItemClass parent_class; -}; - -struct _TitleWidget { - GtkImageMenuItem parent; -}; - -GType title_widget_get_type (void); -GtkWidget* title_widget_new(DbusmenuMenuitem *twin_item); - -G_END_DECLS - -#endif - -- cgit v1.2.3 From d72fb000fdf8c8a65abb214d1e6e67c7d31b4dbb Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Wed, 15 Jun 2011 08:42:39 +0200 Subject: removed commented out method --- src/indicator-sound.c | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/src/indicator-sound.c b/src/indicator-sound.c index 4708e0f..f2ec0a2 100644 --- a/src/indicator-sound.c +++ b/src/indicator-sound.c @@ -368,30 +368,6 @@ new_metadata_widget (DbusmenuMenuitem * newitem, return TRUE; } -/*static gboolean -new_title_widget(DbusmenuMenuitem * newitem, - DbusmenuMenuitem * parent, - DbusmenuClient * client, - gpointer user_data) -{ - g_return_val_if_fail(DBUSMENU_IS_MENUITEM(newitem), FALSE); - g_return_val_if_fail(DBUSMENU_IS_GTKCLIENT(client), FALSE); - - g_debug ("%s (\"%s\")", __func__, dbusmenu_menuitem_property_get(newitem, DBUSMENU_TITLE_MENUITEM_NAME)); - - GtkWidget* title = NULL; - - title = title_widget_new (newitem); - GtkMenuItem *menu_title_widget = GTK_MENU_ITEM(title); - - gtk_widget_show_all(title); - - dbusmenu_gtkclient_newitem_base(DBUSMENU_GTKCLIENT(client), - newitem, - menu_title_widget, parent); - return TRUE; -}*/ - static gboolean new_volume_slider_widget(DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, -- cgit v1.2.3 From 33a5118a820f07d8017924af1e5fc68467787bf1 Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Thu, 16 Jun 2011 10:52:41 +0200 Subject: rejigged the icon handling so as it should be drawn directly as opposed to be handled by gtkmenuitem --- src/metadata-widget.c | 49 +++++++++++++++++++++++++++++-------------------- 1 file changed, 29 insertions(+), 20 deletions(-) diff --git a/src/metadata-widget.c b/src/metadata-widget.c index bc998fa..95814c8 100644 --- a/src/metadata-widget.c +++ b/src/metadata-widget.c @@ -44,6 +44,7 @@ struct _MetadataWidgetPrivate GtkWidget* piece_label; GtkWidget* container_label; GtkWidget* player_label; + GtkWidget* player_icon; DbusmenuMenuitem* twin_item; }; @@ -109,7 +110,9 @@ metadata_widget_init (MetadataWidget *self) MetadataWidgetPrivate * priv = METADATA_WIDGET_GET_PRIVATE(self); GtkWidget *hbox; GtkWidget *outer_v_box; - + GtkWidget *top_h_box; + + top_h_box = gtk_hbox_new(FALSE, 0); outer_v_box = gtk_vbox_new (FALSE, 0); hbox = gtk_hbox_new(FALSE, 0); @@ -185,8 +188,26 @@ metadata_widget_init (MetadataWidget *self) gtk_misc_set_padding (GTK_MISC(player_label), (gfloat)0, (gfloat)0); gtk_widget_set_size_request (player_label, 200, 25); priv->player_label = player_label; + + gtk_box_pack_start (GTK_BOX (top_h_box), priv->player_label, FALSE, FALSE, 0); + + // Player Icon + gint width, height; + gtk_icon_size_lookup (GTK_ICON_SIZE_MENU, &width, &height); + + GtkWidget* player_icon; + player_icon = gtk_image_new(); + priv->player_icon = player_icon; + + gtk_widget_set_size_request(priv->player_icon, width + + 5 /* ref triangle is 5x9 pixels */ + + 1 /* padding */, + height); + + //gtk_misc_set_alignment(GTK_MISC(priv->player_icon), 0.5 /* right aligned */, 0); + gtk_box_pack_start (GTK_BOX (top_h_box), priv->player_icon, FALSE, FALSE, 0); - gtk_box_pack_start (GTK_BOX(outer_v_box), priv->player_label, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX(outer_v_box), top_h_box, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX(outer_v_box), priv->meta_data_h_box, FALSE, FALSE, 0); gtk_container_add (GTK_CONTAINER (self), outer_v_box); @@ -381,7 +402,6 @@ draw_album_art_placeholder(GtkWidget *metadata) _color_shade ( &fg_normal, 0.78, &light_bottom_color ); - cairo_set_source_rgba (cr, light_bottom_color.r, light_bottom_color.g, @@ -396,7 +416,6 @@ draw_album_art_placeholder(GtkWidget *metadata) g_object_unref(pcontext); g_string_free (string, TRUE); cairo_destroy (cr); - } static void @@ -520,14 +539,7 @@ metadata_widget_handle_resizing (MetadataWidget* self) gtk_widget_show (priv->container_label); gtk_widget_show (priv->album_art); gtk_widget_show (priv->meta_data_v_box); - gtk_widget_set_size_request(GTK_WIDGET(self), 200, 95); - // This is not working! - gtk_misc_set_alignment (GTK_MISC(gtk_image_menu_item_get_image (GTK_IMAGE_MENU_ITEM(self))), - 0.5 /* right aligned */, - 0); - gtk_widget_show( GTK_WIDGET(gtk_image_menu_item_get_image (GTK_IMAGE_MENU_ITEM(self)))); - } gtk_widget_queue_draw(GTK_WIDGET(self)); } @@ -560,11 +572,11 @@ metadata_widget_set_icon (MetadataWidget *self) gint padding = 0; gtk_widget_style_get(GTK_WIDGET(self), "horizontal-padding", &padding, NULL); gint width, height; - gtk_icon_size_lookup(GTK_ICON_SIZE_MENU, &width, &height); + gtk_icon_size_lookup (GTK_ICON_SIZE_MENU, &width, &height); GString* banshee_string = g_string_new ( "banshee" ); - GString* app_panel = g_string_new ( g_utf8_strdown ( dbusmenu_menuitem_property_get(priv->twin_item, DBUSMENU_METADATA_MENUITEM_PLAYER_NAME), - -1 )); + GString* app_panel = g_string_new ( g_utf8_strdown (dbusmenu_menuitem_property_get(priv->twin_item, DBUSMENU_METADATA_MENUITEM_PLAYER_NAME), + -1)); GtkWidget * icon = NULL; // Not ideal but apparently we want the banshee icon to be the greyscale one @@ -587,8 +599,8 @@ metadata_widget_set_icon (MetadataWidget *self) + 1 /* padding */, height); gtk_misc_set_alignment(GTK_MISC(icon), 0.5 /* right aligned */, 0); - gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(self), GTK_WIDGET(icon)); - gtk_widget_show(icon); + priv->player_icon = icon; + gtk_widget_show(priv->player_icon); } static void @@ -644,7 +656,7 @@ metadata_widget_triangle_draw_cb (GtkWidget *widget, g_return_val_if_fail(IS_METADATA_WIDGET(user_data), FALSE); MetadataWidget* meta = METADATA_WIDGET(user_data); MetadataWidgetPrivate * priv = METADATA_WIDGET_GET_PRIVATE(meta); - + GtkStyle *style; cairo_t *cr; int x, y, arrow_width, arrow_height; @@ -686,10 +698,7 @@ metadata_widget_triangle_draw_cb (GtkWidget *widget, GtkWidget* metadata_widget_new(DbusmenuMenuitem *item) { - GtkWidget* widget = g_object_new(METADATA_WIDGET_TYPE, NULL); - gtk_image_menu_item_set_always_show_image (GTK_IMAGE_MENU_ITEM (widget), - TRUE); metadata_widget_set_twin_item ( METADATA_WIDGET(widget), item ); return widget; -- cgit v1.2.3 From 34bbf1f8606d25235727753242686d78802b303a Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Thu, 16 Jun 2011 14:32:55 +0200 Subject: went the cairo method for drawing this icon in the gutter --- src/metadata-widget.c | 105 ++++++++++++++++++++++++++++---------------------- 1 file changed, 58 insertions(+), 47 deletions(-) diff --git a/src/metadata-widget.c b/src/metadata-widget.c index 95814c8..5f04fd7 100644 --- a/src/metadata-widget.c +++ b/src/metadata-widget.c @@ -36,7 +36,7 @@ struct _MetadataWidgetPrivate { gboolean theme_change_occured; GtkWidget* meta_data_h_box; - GtkWidget* meta_data_v_box; + GtkWidget* meta_data_v_box; GtkWidget* album_art; GString* image_path; GString* old_image_path; @@ -45,7 +45,8 @@ struct _MetadataWidgetPrivate GtkWidget* container_label; GtkWidget* player_label; GtkWidget* player_icon; - DbusmenuMenuitem* twin_item; + GdkPixbuf* icon_buf; + DbusmenuMenuitem* twin_item; }; #define METADATA_WIDGET_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), METADATA_WIDGET_TYPE, MetadataWidgetPrivate)) @@ -110,9 +111,8 @@ metadata_widget_init (MetadataWidget *self) MetadataWidgetPrivate * priv = METADATA_WIDGET_GET_PRIVATE(self); GtkWidget *hbox; GtkWidget *outer_v_box; - GtkWidget *top_h_box; - - top_h_box = gtk_hbox_new(FALSE, 0); + priv->icon_buf = NULL; + outer_v_box = gtk_vbox_new (FALSE, 0); hbox = gtk_hbox_new(FALSE, 0); @@ -188,26 +188,8 @@ metadata_widget_init (MetadataWidget *self) gtk_misc_set_padding (GTK_MISC(player_label), (gfloat)0, (gfloat)0); gtk_widget_set_size_request (player_label, 200, 25); priv->player_label = player_label; - - gtk_box_pack_start (GTK_BOX (top_h_box), priv->player_label, FALSE, FALSE, 0); - - // Player Icon - gint width, height; - gtk_icon_size_lookup (GTK_ICON_SIZE_MENU, &width, &height); - - GtkWidget* player_icon; - player_icon = gtk_image_new(); - priv->player_icon = player_icon; - - gtk_widget_set_size_request(priv->player_icon, width - + 5 /* ref triangle is 5x9 pixels */ - + 1 /* padding */, - height); - - //gtk_misc_set_alignment(GTK_MISC(priv->player_icon), 0.5 /* right aligned */, 0); - gtk_box_pack_start (GTK_BOX (top_h_box), priv->player_icon, FALSE, FALSE, 0); - - gtk_box_pack_start (GTK_BOX(outer_v_box), top_h_box, FALSE, FALSE, 0); + + gtk_box_pack_start (GTK_BOX(outer_v_box), priv->player_label, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX(outer_v_box), priv->meta_data_h_box, FALSE, FALSE, 0); gtk_container_add (GTK_CONTAINER (self), outer_v_box); @@ -567,6 +549,9 @@ metadata_widget_set_style(GtkWidget* metadata, GtkStyle* style) static void metadata_widget_set_icon (MetadataWidget *self) { + //TODO + //tidy preexisting pixbufs (if they exist) in the prop update for images. + MetadataWidgetPrivate * priv = METADATA_WIDGET_GET_PRIVATE(self); gint padding = 0; @@ -577,30 +562,32 @@ metadata_widget_set_icon (MetadataWidget *self) GString* banshee_string = g_string_new ( "banshee" ); GString* app_panel = g_string_new ( g_utf8_strdown (dbusmenu_menuitem_property_get(priv->twin_item, DBUSMENU_METADATA_MENUITEM_PLAYER_NAME), -1)); - GtkWidget * icon = NULL; + GdkPixbuf* icon_buf; + // Banshee Special case! // Not ideal but apparently we want the banshee icon to be the greyscale one // and any others to be the icon from the desktop file => colour. if ( g_string_equal ( banshee_string, app_panel ) == TRUE && gtk_icon_theme_has_icon ( gtk_icon_theme_get_default(), app_panel->str ) ){ g_string_append ( app_panel, "-panel" ); - icon = gtk_image_new_from_icon_name ( app_panel->str, - GTK_ICON_SIZE_MENU ); } else{ - icon = gtk_image_new_from_icon_name ( g_strdup (dbusmenu_menuitem_property_get ( priv->twin_item, DBUSMENU_METADATA_MENUITEM_PLAYER_ICON )), - GTK_ICON_SIZE_MENU ); + // Otherwise use what is stored in the props + g_string_erase (app_panel, 0, -1); + g_string_overwrite (app_panel, + 0, + dbusmenu_menuitem_property_get ( priv->twin_item, + DBUSMENU_METADATA_MENUITEM_PLAYER_ICON )); } + icon_buf = gtk_icon_theme_load_icon ( gtk_icon_theme_get_default(), + app_panel->str, + (width > height) ? width : height, + GTK_ICON_LOOKUP_GENERIC_FALLBACK, + NULL ); + gdk_pixbuf_ref (icon_buf); + priv->icon_buf = icon_buf; g_string_free ( app_panel, FALSE) ; g_string_free ( banshee_string, FALSE) ; - - gtk_widget_set_size_request(icon, width - + 5 /* ref triangle is 5x9 pixels */ - + 1 /* padding */, - height); - gtk_misc_set_alignment(GTK_MISC(icon), 0.5 /* right aligned */, 0); - priv->player_icon = icon; - gtk_widget_show(priv->player_icon); } static void @@ -656,15 +643,10 @@ metadata_widget_triangle_draw_cb (GtkWidget *widget, g_return_val_if_fail(IS_METADATA_WIDGET(user_data), FALSE); MetadataWidget* meta = METADATA_WIDGET(user_data); MetadataWidgetPrivate * priv = METADATA_WIDGET_GET_PRIVATE(meta); - + GtkStyle *style; cairo_t *cr; - int x, y, arrow_width, arrow_height; - - if (! dbusmenu_menuitem_property_get_bool (priv->twin_item, - DBUSMENU_METADATA_MENUITEM_PLAYER_RUNNING)){ - return FALSE; - } + int x, y, arrow_width, arrow_height; style = gtk_widget_get_style (widget); @@ -674,7 +656,36 @@ metadata_widget_triangle_draw_cb (GtkWidget *widget, x = widget->allocation.x; y = widget->allocation.y + (double)arrow_height/2.0 + vertical_offset; - + + // Draw player icon + if (priv->icon_buf != NULL){ + g_debug ("Is the icon a pixbuf for image string : %i", + GDK_IS_PIXBUF (priv->icon_buf)); + + gint pixbuf_width = gdk_pixbuf_get_width (priv->icon_buf); + gint pixbuf_height = gdk_pixbuf_get_width (priv->icon_buf); + + cairo_surface_t *surface = cairo_image_surface_create_for_data (gdk_pixbuf_get_pixels(priv->icon_buf), + CAIRO_FORMAT_RGB24, + pixbuf_width, + pixbuf_height, + gdk_pixbuf_get_rowstride(priv->icon_buf)); + cr = cairo_create (surface); + cairo_move_to (cr, x, y); + + cairo_paint (cr); + + cairo_destroy (cr); + cairo_surface_destroy (surface); + g_debug ("here 1"); + } + + // Draw triangle but only if the player is running. + if (! dbusmenu_menuitem_property_get_bool (priv->twin_item, + DBUSMENU_METADATA_MENUITEM_PLAYER_RUNNING)){ + return FALSE; + } + cr = (cairo_t*) gdk_cairo_create (widget->window); cairo_set_line_width (cr, 1.0); @@ -688,7 +699,7 @@ metadata_widget_triangle_draw_cb (GtkWidget *widget, style->fg[gtk_widget_get_state(widget)].blue/65535.0); cairo_fill (cr); cairo_destroy (cr); - return FALSE; + return FALSE; } /** -- cgit v1.2.3 From 9ab1c1505226e7b384ebdaea1eca760d05bc803d Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Thu, 16 Jun 2011 16:01:26 +0200 Subject: spacing issues resolved plus some unwanted prop set to invisible@ --- src/metadata-widget.c | 65 +++++++++++++++++++--------------------------- src/player-controller.vala | 3 ++- src/player-item.vala | 2 -- 3 files changed, 29 insertions(+), 41 deletions(-) diff --git a/src/metadata-widget.c b/src/metadata-widget.c index 5f04fd7..aea6f2e 100644 --- a/src/metadata-widget.c +++ b/src/metadata-widget.c @@ -79,9 +79,9 @@ static void metadata_widget_selection_received_event_callback( GtkWidget GtkSelectionData *data, guint time, gpointer user_data); -static gboolean metadata_widget_triangle_draw_cb ( GtkWidget *image, - GdkEventExpose *event, - gpointer user_data); +static gboolean metadata_widget_icon_triangle_draw_cb ( GtkWidget *image, + GdkEventExpose *event, + gpointer user_data ); static void metadata_widget_set_icon (MetadataWidget *self); static void metadata_widget_handle_resizing (MetadataWidget* self); @@ -127,9 +127,9 @@ metadata_widget_init (MetadataWidget *self) G_CALLBACK(metadata_image_expose), GTK_WIDGET(self)); - g_signal_connect(GTK_WIDGET(self), "expose-event", - G_CALLBACK(metadata_widget_triangle_draw_cb), - GTK_WIDGET(self)); + g_signal_connect_after (GTK_WIDGET(self), "expose-event", + G_CALLBACK(metadata_widget_icon_triangle_draw_cb), + GTK_WIDGET(self)); gtk_box_pack_start (GTK_BOX (priv->meta_data_h_box), priv->album_art, @@ -185,7 +185,7 @@ metadata_widget_init (MetadataWidget *self) GtkWidget* player_label; player_label = gtk_label_new(""); gtk_misc_set_alignment(GTK_MISC(player_label), (gfloat)0, (gfloat)0); - gtk_misc_set_padding (GTK_MISC(player_label), (gfloat)0, (gfloat)0); + gtk_misc_set_padding (GTK_MISC(player_label), (gfloat)1, (gfloat)0); gtk_widget_set_size_request (player_label, 200, 25); priv->player_label = player_label; @@ -391,7 +391,7 @@ draw_album_art_placeholder(GtkWidget *metadata) 1.0); pango_cairo_update_layout(cr, layout); - cairo_move_to (cr, alloc.x + alloc.width/6, alloc.y + alloc.height/8); + cairo_move_to (cr, alloc.x + alloc.width/6, alloc.y + 3); pango_cairo_show_layout(cr, layout); g_object_unref(layout); @@ -586,8 +586,8 @@ metadata_widget_set_icon (MetadataWidget *self) NULL ); gdk_pixbuf_ref (icon_buf); priv->icon_buf = icon_buf; - g_string_free ( app_panel, FALSE) ; - g_string_free ( banshee_string, FALSE) ; + g_string_free ( app_panel, FALSE); + g_string_free ( banshee_string, FALSE); } static void @@ -636,9 +636,9 @@ metadata_widget_set_twin_item (MetadataWidget* self, // Draw the triangle if the player is running ... static gboolean -metadata_widget_triangle_draw_cb (GtkWidget *widget, - GdkEventExpose *event, - gpointer user_data) +metadata_widget_icon_triangle_draw_cb (GtkWidget *widget, + GdkEventExpose *event, + gpointer user_data) { g_return_val_if_fail(IS_METADATA_WIDGET(user_data), FALSE); MetadataWidget* meta = METADATA_WIDGET(user_data); @@ -647,47 +647,36 @@ metadata_widget_triangle_draw_cb (GtkWidget *widget, GtkStyle *style; cairo_t *cr; int x, y, arrow_width, arrow_height; - - style = gtk_widget_get_style (widget); + gint offset = 3; arrow_width = 5; arrow_height = 9; - gint vertical_offset = 3; + + style = gtk_widget_get_style (widget); + + cr = (cairo_t*) gdk_cairo_create (widget->window); x = widget->allocation.x; - y = widget->allocation.y + (double)arrow_height/2.0 + vertical_offset; + y = widget->allocation.y; // Draw player icon - if (priv->icon_buf != NULL){ - g_debug ("Is the icon a pixbuf for image string : %i", - GDK_IS_PIXBUF (priv->icon_buf)); - - gint pixbuf_width = gdk_pixbuf_get_width (priv->icon_buf); - gint pixbuf_height = gdk_pixbuf_get_width (priv->icon_buf); - - cairo_surface_t *surface = cairo_image_surface_create_for_data (gdk_pixbuf_get_pixels(priv->icon_buf), - CAIRO_FORMAT_RGB24, - pixbuf_width, - pixbuf_height, - gdk_pixbuf_get_rowstride(priv->icon_buf)); - cr = cairo_create (surface); - cairo_move_to (cr, x, y); - + if (priv->icon_buf != NULL){ + gdk_cairo_set_source_pixbuf (cr, + priv->icon_buf, + x + arrow_width + 1, + y + offset); cairo_paint (cr); - - cairo_destroy (cr); - cairo_surface_destroy (surface); - g_debug ("here 1"); } // Draw triangle but only if the player is running. if (! dbusmenu_menuitem_property_get_bool (priv->twin_item, DBUSMENU_METADATA_MENUITEM_PLAYER_RUNNING)){ + cairo_destroy (cr); return FALSE; } - cr = (cairo_t*) gdk_cairo_create (widget->window); - + + y += (double)arrow_height/2.0 + offset; cairo_set_line_width (cr, 1.0); cairo_move_to (cr, x, y); diff --git a/src/player-controller.vala b/src/player-controller.vala index 002af65..a08f692 100644 --- a/src/player-controller.vala +++ b/src/player-controller.vala @@ -142,7 +142,8 @@ public class PlayerController : GLib.Object } public void update_layout() - { + { + debug ("a call to update layout"); PlaylistsMenuitem playlists_menuitem = this.custom_items[widget_order.PLAYLISTS] as PlaylistsMenuitem; MetadataMenuitem metadata_menuitem = this.custom_items[widget_order.METADATA] as MetadataMenuitem; if(this.current_state != state.CONNECTED){ diff --git a/src/player-item.vala b/src/player-item.vala index 2af3f36..162dbea 100644 --- a/src/player-item.vala +++ b/src/player-item.vala @@ -86,8 +86,6 @@ public class PlayerItem : Dbusmenu.Menuitem this.property_set_bool(property, v.get_boolean()); } } - // TODO- is this only relevant for the metadata, if so please call for just that case - this.property_set_bool(MENUITEM_PROP_VISIBLE, populated(attributes)); } public bool populated(HashSet attrs) -- cgit v1.2.3 From 76406c4e1590a739f592e336cfa2816bd8ae6f4d Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Thu, 16 Jun 2011 16:06:11 +0200 Subject: reverted the metadata widget to inherit from plain old gtk menu item, we don't need it to inherit from gtkimagemenuitem anymore --- src/metadata-widget.c | 3 +-- src/metadata-widget.h | 7 +++---- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/metadata-widget.c b/src/metadata-widget.c index aea6f2e..71af85d 100644 --- a/src/metadata-widget.c +++ b/src/metadata-widget.c @@ -44,7 +44,6 @@ struct _MetadataWidgetPrivate GtkWidget* piece_label; GtkWidget* container_label; GtkWidget* player_label; - GtkWidget* player_icon; GdkPixbuf* icon_buf; DbusmenuMenuitem* twin_item; }; @@ -87,7 +86,7 @@ static void metadata_widget_set_icon (MetadataWidget *self); static void metadata_widget_handle_resizing (MetadataWidget* self); -G_DEFINE_TYPE (MetadataWidget, metadata_widget, GTK_TYPE_IMAGE_MENU_ITEM); +G_DEFINE_TYPE (MetadataWidget, metadata_widget, GTK_TYPE_MENU_ITEM); static void metadata_widget_class_init (MetadataWidgetClass *klass) diff --git a/src/metadata-widget.h b/src/metadata-widget.h index 48dc61e..30b629c 100644 --- a/src/metadata-widget.h +++ b/src/metadata-widget.h @@ -19,8 +19,7 @@ with this program. If not, see . #ifndef __METADATA_WIDGET_H__ #define __METADATA_WIDGET_H__ -//#include -#include +#include #include G_BEGIN_DECLS @@ -36,11 +35,11 @@ typedef struct _MetadataWidget MetadataWidget; typedef struct _MetadataWidgetClass MetadataWidgetClass; struct _MetadataWidgetClass { - GtkImageMenuItemClass parent_class; + GtkMenuItemClass parent_class; }; struct _MetadataWidget { - GtkImageMenuItem parent; + GtkMenuItem parent; }; GType metadata_widget_get_type (void); -- cgit v1.2.3 From ea24e75c29663159bbb942e8dfdf3a6970a9044a Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Thu, 16 Jun 2011 16:33:03 +0200 Subject: some mem leaks caught and a tidy up --- src/metadata-widget.c | 48 ++++++++++++++++++++++++++---------------------- 1 file changed, 26 insertions(+), 22 deletions(-) diff --git a/src/metadata-widget.c b/src/metadata-widget.c index 71af85d..e4f8fdc 100644 --- a/src/metadata-widget.c +++ b/src/metadata-widget.c @@ -197,6 +197,11 @@ metadata_widget_init (MetadataWidget *self) static void metadata_widget_dispose (GObject *object) { + MetadataWidgetPrivate * priv = METADATA_WIDGET_GET_PRIVATE(METADATA_WIDGET(object)); + + if (priv->icon_buf != NULL){ + gdk_pixbuf_unref(priv->icon_buf); + } G_OBJECT_CLASS (metadata_widget_parent_class)->dispose (object); } @@ -548,11 +553,13 @@ metadata_widget_set_style(GtkWidget* metadata, GtkStyle* style) static void metadata_widget_set_icon (MetadataWidget *self) { - //TODO - //tidy preexisting pixbufs (if they exist) in the prop update for images. - MetadataWidgetPrivate * priv = METADATA_WIDGET_GET_PRIVATE(self); + if (priv->icon_buf != NULL){ + gdk_pixbuf_unref(priv->icon_buf); + priv->icon_buf = NULL; + } + gint padding = 0; gtk_widget_style_get(GTK_WIDGET(self), "horizontal-padding", &padding, NULL); gint width, height; @@ -568,7 +575,7 @@ metadata_widget_set_icon (MetadataWidget *self) // and any others to be the icon from the desktop file => colour. if ( g_string_equal ( banshee_string, app_panel ) == TRUE && gtk_icon_theme_has_icon ( gtk_icon_theme_get_default(), app_panel->str ) ){ - g_string_append ( app_panel, "-panel" ); + g_string_append ( app_panel, "-panel" ); } else{ // Otherwise use what is stored in the props @@ -585,8 +592,8 @@ metadata_widget_set_icon (MetadataWidget *self) NULL ); gdk_pixbuf_ref (icon_buf); priv->icon_buf = icon_buf; - g_string_free ( app_panel, FALSE); - g_string_free ( banshee_string, FALSE); + g_string_free ( app_panel, TRUE); + g_string_free ( banshee_string, TRUE); } static void @@ -668,26 +675,23 @@ metadata_widget_icon_triangle_draw_cb (GtkWidget *widget, } // Draw triangle but only if the player is running. - if (! dbusmenu_menuitem_property_get_bool (priv->twin_item, + if (dbusmenu_menuitem_property_get_bool (priv->twin_item, DBUSMENU_METADATA_MENUITEM_PLAYER_RUNNING)){ - cairo_destroy (cr); - return FALSE; + y += (double)arrow_height/2.0 + offset; + cairo_set_line_width (cr, 1.0); + + cairo_move_to (cr, x, y); + cairo_line_to (cr, x, y + arrow_height); + cairo_line_to (cr, x + arrow_width, y + (double)arrow_height/2.0); + cairo_close_path (cr); + cairo_set_source_rgb (cr, style->fg[gtk_widget_get_state(widget)].red/65535.0, + style->fg[gtk_widget_get_state(widget)].green/65535.0, + style->fg[gtk_widget_get_state(widget)].blue/65535.0); + cairo_fill (cr); } - - y += (double)arrow_height/2.0 + offset; - cairo_set_line_width (cr, 1.0); - - cairo_move_to (cr, x, y); - cairo_line_to (cr, x, y + arrow_height); - cairo_line_to (cr, x + arrow_width, y + (double)arrow_height/2.0); - cairo_close_path (cr); - cairo_set_source_rgb (cr, style->fg[gtk_widget_get_state(widget)].red/65535.0, - style->fg[gtk_widget_get_state(widget)].green/65535.0, - style->fg[gtk_widget_get_state(widget)].blue/65535.0); - cairo_fill (cr); cairo_destroy (cr); - return FALSE; + return FALSE; } /** -- cgit v1.2.3 From 1b7f9eb7bb78339e2755632d3945219d226dbd58 Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Thu, 16 Jun 2011 16:38:53 +0200 Subject: no need to ref the pixbuf --- src/metadata-widget.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/metadata-widget.c b/src/metadata-widget.c index e4f8fdc..f687d0c 100644 --- a/src/metadata-widget.c +++ b/src/metadata-widget.c @@ -590,7 +590,6 @@ metadata_widget_set_icon (MetadataWidget *self) (width > height) ? width : height, GTK_ICON_LOOKUP_GENERIC_FALLBACK, NULL ); - gdk_pixbuf_ref (icon_buf); priv->icon_buf = icon_buf; g_string_free ( app_panel, TRUE); g_string_free ( banshee_string, TRUE); -- cgit v1.2.3 From 808a7108ec6c8cca9423b25269c846b5c6e2461d Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Thu, 16 Jun 2011 16:46:43 +0200 Subject: bump version in prep for new release --- configure.ac | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index 22f04c5..ab02d4e 100644 --- a/configure.ac +++ b/configure.ac @@ -1,10 +1,10 @@ -AC_INIT(indicator-sound, 0.7.0, conor.curran@canonical.com) +AC_INIT(indicator-sound, 0.7.1, conor.curran@canonical.com) AC_PREREQ(2.53) AM_CONFIG_HEADER(config.h) -AM_INIT_AUTOMAKE(indicator-sound, 0.7.0) +AM_INIT_AUTOMAKE(indicator-sound, 0.7.1) AM_MAINTAINER_MODE -- cgit v1.2.3