From 2040bd4fac080fea48853ff98c6d05c1cab68c18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= Date: Fri, 8 Jul 2011 04:46:19 +0200 Subject: Compile with indicator-0.4 --- configure.ac | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/configure.ac b/configure.ac index e6642f8..184de39 100644 --- a/configure.ac +++ b/configure.ac @@ -115,12 +115,12 @@ AS_IF([test "x$with_localinstall" = "xyes"], ], [AS_IF([test "x$with_gtk" = "x2"], [ - INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator` - INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator` + INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator-0.4` + INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator-0.4` ], [ - INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3` - INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3` + INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4` + INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4` ])]) AC_SUBST(INDICATORDIR) AC_SUBST(INDICATORICONSDIR) -- cgit v1.2.3 From 5f35f5e36e90e32aed5105434ee1ecae7c09806b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= Date: Sun, 17 Jul 2011 04:40:00 +0200 Subject: Added MuteWidget item to control the mute-menu-item remotely It's basically a GtkMenuItem that can be activated to change the mute status. --- src/Makefile.am | 2 + src/mute-widget.c | 141 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/mute-widget.h | 67 ++++++++++++++++++++++++++ 3 files changed, 210 insertions(+) create mode 100644 src/mute-widget.c create mode 100644 src/mute-widget.h diff --git a/src/Makefile.am b/src/Makefile.am index e35f871..60c7249 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -18,6 +18,8 @@ libsoundmenu_la_SOURCES = \ transport-widget.h \ metadata-widget.c \ metadata-widget.h \ + mute-widget.c \ + mute-widget.h \ volume-widget.c \ volume-widget.h \ voip-input-widget.c \ diff --git a/src/mute-widget.c b/src/mute-widget.c new file mode 100644 index 0000000..97c87ff --- /dev/null +++ b/src/mute-widget.c @@ -0,0 +1,141 @@ +/* +Copyright 2011 Canonical Ltd. + +Authors: + Marco Trevisan (Treviño) + +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 +#include "mute-widget.h" +#include "common-defs.h" +#include "indicator-sound.h" + +typedef struct _MuteWidgetPrivate MuteWidgetPrivate; + +struct _MuteWidgetPrivate +{ + DbusmenuMenuitem *item; + GtkMenuItem *gitem; +}; + +#define MUTE_WIDGET_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), MUTE_WIDGET_TYPE, MuteWidgetPrivate)) + +/* Prototypes */ +static void mute_widget_class_init (MuteWidgetClass *klass); +static void mute_widget_init (MuteWidget *self); +static void mute_widget_dispose (GObject *object); +static void mute_widget_finalize (GObject *object); + +G_DEFINE_TYPE (MuteWidget, mute_widget, G_TYPE_OBJECT); + +static void +mute_widget_class_init (MuteWidgetClass *klass) +{ + GObjectClass *gobject_class = G_OBJECT_CLASS (klass); + gobject_class->dispose = mute_widget_dispose; + gobject_class->finalize = mute_widget_finalize; + g_type_class_add_private (klass, sizeof (MuteWidgetPrivate)); +} + +static void +mute_widget_init (MuteWidget *self) +{ + MuteWidgetPrivate *priv = MUTE_WIDGET_GET_PRIVATE(self); + priv->item = NULL; + priv->gitem = GTK_MENU_ITEM(gtk_menu_item_new ()); +} + +static void +mute_widget_dispose (GObject *object) +{ + G_OBJECT_CLASS (mute_widget_parent_class)->dispose (object); +} + +static void +mute_widget_finalize (GObject *object) +{ + MuteWidget *self = MUTE_WIDGET (object); + MuteWidgetPrivate *priv = MUTE_WIDGET_GET_PRIVATE(self); + + g_object_unref (priv->item); + g_object_unref (G_OBJECT (priv->gitem)); + G_OBJECT_CLASS (mute_widget_parent_class)->finalize (object); +} + +GtkMenuItem * +mute_widget_get_menu_item(MuteWidget *self) +{ + MuteWidgetPrivate *priv = MUTE_WIDGET_GET_PRIVATE(self); + return priv->gitem; +} + +MuteStatus +mute_widget_get_status (MuteWidget *self) +{ + g_return_val_if_fail(self, MUTE_STATUS_UNAVAILABLE); + MuteStatus status = MUTE_STATUS_UNAVAILABLE; + MuteWidgetPrivate *priv = MUTE_WIDGET_GET_PRIVATE(self); + + GVariant *vstatus = dbusmenu_menuitem_property_get_variant(priv->item, + DBUSMENU_MUTE_MENUITEM_VALUE); + + if (g_variant_is_of_type (vstatus, G_VARIANT_TYPE_BOOLEAN)) + { + if (g_variant_get_boolean (vstatus)) + status = MUTE_STATUS_MUTED; + else + status = MUTE_STATUS_UNMUTED; + } + + return status; +} + +void mute_widget_toggle (MuteWidget *self) +{ + g_return_if_fail (self); + MuteWidgetPrivate *priv = MUTE_WIDGET_GET_PRIVATE(self); + gtk_menu_item_activate (priv->gitem); +} + +/** + * mute_widget_new: + * @returns: a new #MuteWidget. + **/ +MuteWidget * +mute_widget_new (DbusmenuMenuitem *item) +{ + MuteWidget* widget = g_object_new(MUTE_WIDGET_TYPE, NULL); + MuteWidgetPrivate* priv = MUTE_WIDGET_GET_PRIVATE(widget); + priv->item = g_object_ref(item); + + GVariant *label = dbusmenu_menuitem_property_get_variant(priv->item, + DBUSMENU_MENUITEM_PROP_LABEL); + + if (g_variant_is_of_type(label, G_VARIANT_TYPE_STRING)) + gtk_menu_item_set_label(priv->gitem, g_variant_get_string(label, NULL)); + + if (label) + { + g_debug("Added a new Mute Widget %s", g_variant_print(label, FALSE)); + g_variant_unref(label); + } + + return widget; +} diff --git a/src/mute-widget.h b/src/mute-widget.h new file mode 100644 index 0000000..95130a1 --- /dev/null +++ b/src/mute-widget.h @@ -0,0 +1,67 @@ +/* +Copyright 2011 Canonical Ltd. + +Authors: + Marco Trevisan (Treviño) + +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 __MUTE_WIDGET_H__ +#define __MUTE_WIDGET_H__ + +#include +#include +#include +#if GTK_CHECK_VERSION(3, 0, 0) +#include +#else +#include +#endif +#include + +G_BEGIN_DECLS + +#define MUTE_WIDGET_TYPE (mute_widget_get_type ()) +#define MUTE_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MUTE_WIDGET_TYPE, MuteWidget)) +#define MUTE_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MUTE_WIDGET_TYPE, MuteWidgetClass)) +#define IS_MUTE_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MUTE_WIDGET_TYPE)) +#define IS_MUTE_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MUTE_WIDGET_TYPE)) +#define MUTE_WIDGET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MUTE_WIDGET_TYPE, MuteWidgetClass)) + +typedef struct _MuteWidget MuteWidget; +typedef struct _MuteWidgetClass MuteWidgetClass; + +struct _MuteWidgetClass { + GObjectClass parent_class; +}; + +struct _MuteWidget { + GObject parent; +}; + +typedef enum { + MUTE_STATUS_UNAVAILABLE, + MUTE_STATUS_MUTED, + MUTE_STATUS_UNMUTED +} MuteStatus; + +GType mute_widget_get_type (void) G_GNUC_CONST; +MuteWidget* mute_widget_new (DbusmenuMenuitem *item); +MuteStatus mute_widget_get_status (MuteWidget *self); +void mute_widget_toggle (MuteWidget *self); +GtkMenuItem *mute_widget_get_menu_item (MuteWidget *self); + +G_END_DECLS + +#endif + -- cgit v1.2.3 From 4e86af2e6f0fe204731441fb63ab0159fb0863a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= Date: Sun, 17 Jul 2011 04:40:52 +0200 Subject: mute-menu-item: export type to allow to handle it remotely --- src/mute-menu-item.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/mute-menu-item.c b/src/mute-menu-item.c index 2876be3..0e6a46f 100644 --- a/src/mute-menu-item.c +++ b/src/mute-menu-item.c @@ -63,6 +63,11 @@ mute_menu_item_init (MuteMenuItem *self) MuteMenuItemPrivate* priv = MUTE_MENU_ITEM_GET_PRIVATE(self); priv->button = NULL; priv->button = dbusmenu_menuitem_new(); + + dbusmenu_menuitem_property_set(priv->button, + DBUSMENU_MENUITEM_PROP_TYPE, + DBUSMENU_MUTE_MENUITEM_TYPE); + dbusmenu_menuitem_property_set_bool (priv->button, DBUSMENU_MENUITEM_PROP_VISIBLE, TRUE); -- cgit v1.2.3 From 6c14ce6ac83759bba2575d13705541352dad6441 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= Date: Sun, 17 Jul 2011 16:13:15 +0200 Subject: indicator-sound: handle the mute-menu-item and toggle it Handle the mute menu item with a mute widget, then associate the secondary_activate libindicator signal to a function that toggles the status of mute_widget, to apply the change in all the indicator-sound framework. --- src/indicator-sound.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/src/indicator-sound.c b/src/indicator-sound.c index 76bf710..a7ba95c 100644 --- a/src/indicator-sound.c +++ b/src/indicator-sound.c @@ -39,6 +39,7 @@ with this program. If not, see . #include "voip-input-widget.h" #include "dbus-shared-names.h" #include "sound-state-manager.h" +#include "mute-widget.h" #include "gen-sound-service.xml.h" #include "common-defs.h" @@ -49,6 +50,7 @@ struct _IndicatorSoundPrivate { GtkWidget* volume_widget; GtkWidget* voip_widget; + MuteWidget *mute_widget; GList* transport_widgets_list; GDBusProxy *dbus_proxy; SoundStateManager* state_manager; @@ -75,6 +77,10 @@ static const gchar * get_accessible_desc (IndicatorObject * io); static void indicator_sound_scroll (IndicatorObject * io, IndicatorObjectEntry * entry, gint delta, IndicatorScrollDirection direction); +static void indicator_sound_middle_click (IndicatorObject * io, + IndicatorObjectEntry * entry, + guint time, gint x, gint y, + gpointer data); //key/moust event handlers static gboolean key_press_cb(GtkWidget* widget, GdkEventKey* event, gpointer data); @@ -97,6 +103,10 @@ static gboolean new_metadata_widget (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, DbusmenuClient * client, gpointer user_data); +static gboolean new_mute_widget (DbusmenuMenuitem * newitem, + DbusmenuMenuitem * parent, + DbusmenuClient * client, + gpointer user_data); // DBUS communication static GDBusNodeInfo *node_info = NULL; @@ -125,6 +135,7 @@ indicator_sound_class_init (IndicatorSoundClass *klass) io_class->get_menu = get_menu; io_class->get_accessible_desc = get_accessible_desc; io_class->entry_scrolled = indicator_sound_scroll; + io_class->secondary_activate = indicator_sound_middle_click; } static void @@ -137,6 +148,7 @@ indicator_sound_init (IndicatorSound *self) IndicatorSoundPrivate* priv = INDICATOR_SOUND_GET_PRIVATE(self); priv->volume_widget = NULL; priv->voip_widget = NULL; + priv->mute_widget = NULL; priv->dbus_proxy = NULL; GList* t_list = NULL; priv->transport_widgets_list = t_list; @@ -207,6 +219,9 @@ 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_MUTE_MENUITEM_TYPE, + new_mute_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); @@ -459,6 +474,36 @@ new_voip_slider_widget (DbusmenuMenuitem * newitem, return TRUE; } +static gboolean +new_mute_widget(DbusmenuMenuitem * newitem, + DbusmenuMenuitem * parent, + DbusmenuClient * client, + gpointer user_data) +{ + IndicatorObject *io = NULL; + + g_return_val_if_fail(DBUSMENU_IS_MENUITEM(newitem), FALSE); + g_return_val_if_fail(DBUSMENU_IS_GTKCLIENT(client), FALSE); + + io = g_object_get_data (G_OBJECT (client), "indicator"); + IndicatorSoundPrivate* priv = INDICATOR_SOUND_GET_PRIVATE(INDICATOR_SOUND (io)); + + if (priv->mute_widget != NULL){ + g_object_unref (priv->mute_widget); + priv->mute_widget = NULL; + } + + priv->mute_widget = mute_widget_new(newitem); + GtkMenuItem *item = mute_widget_get_menu_item (priv->mute_widget); + + dbusmenu_gtkclient_newitem_base(DBUSMENU_GTKCLIENT(client), + newitem, + item, + parent); + + return TRUE; +} + /*******************************************************************/ //UI callbacks /******************************************************************/ @@ -677,6 +722,16 @@ indicator_sound_scroll (IndicatorObject * io, IndicatorObjectEntry * entry, sound_state_manager_show_notification (priv->state_manager, value); } +static void +indicator_sound_middle_click (IndicatorObject * io, IndicatorObjectEntry * entry, + guint time, gint x, gint y, gpointer data) +{ + IndicatorSoundPrivate* priv = INDICATOR_SOUND_GET_PRIVATE(INDICATOR_SOUND (io)); + g_return_if_fail (priv); + + mute_widget_toggle(priv->mute_widget); +} + void update_accessible_desc (IndicatorObject * io) { -- cgit v1.2.3 From a2871b1b51c2f26a5778a6f15c5cae6650cc8fff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= Date: Thu, 21 Jul 2011 18:12:12 +0200 Subject: X and Y pointer position aren't exported anymore by libindicator Dropping them! --- src/indicator-sound.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/indicator-sound.c b/src/indicator-sound.c index a7ba95c..7c72900 100644 --- a/src/indicator-sound.c +++ b/src/indicator-sound.c @@ -79,8 +79,7 @@ static void indicator_sound_scroll (IndicatorObject * io, IndicatorScrollDirection direction); static void indicator_sound_middle_click (IndicatorObject * io, IndicatorObjectEntry * entry, - guint time, gint x, gint y, - gpointer data); + guint time, gpointer data); //key/moust event handlers static gboolean key_press_cb(GtkWidget* widget, GdkEventKey* event, gpointer data); @@ -724,7 +723,7 @@ indicator_sound_scroll (IndicatorObject * io, IndicatorObjectEntry * entry, static void indicator_sound_middle_click (IndicatorObject * io, IndicatorObjectEntry * entry, - guint time, gint x, gint y, gpointer data) + guint time, gpointer data) { IndicatorSoundPrivate* priv = INDICATOR_SOUND_GET_PRIVATE(INDICATOR_SOUND (io)); g_return_if_fail (priv); -- cgit v1.2.3 From 11c1764fc6b46b364720c64993dffef972598c3a Mon Sep 17 00:00:00 2001 From: Harry van Haaren Date: Wed, 27 Jul 2011 13:23:48 +0100 Subject: Transport-widget has offscreen_window and spinner --- src/transport-widget.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/transport-widget.c b/src/transport-widget.c index 11e0f91..b26147c 100644 --- a/src/transport-widget.c +++ b/src/transport-widget.c @@ -76,6 +76,9 @@ typedef struct _TransportWidgetPrivate TransportWidgetPrivate; struct _TransportWidgetPrivate { + GtkWidget* offscreen_window; + GtkWidget* spinner; + TransportAction current_command; TransportAction key_event; TransportAction motion_event; @@ -170,7 +173,12 @@ transport_widget_class_init (TransportWidgetClass *klass) static void transport_widget_init (TransportWidget *self) { - TransportWidgetPrivate* priv = TRANSPORT_WIDGET_GET_PRIVATE(self); + TransportWidgetPrivate* priv = TRANSPORT_WIDGET_GET_PRIVATE(self); + + priv->spinner = gtk_spinner_new(); + priv->offscreen_window = gtk_offscreen_window_new(); + gtk_container_add( GTK_CONTAINER(priv->offscreen_window), priv->spinner); + priv->current_command = TRANSPORT_ACTION_NO_ACTION; priv->current_state = TRANSPORT_STATE_PAUSED; priv->key_event = TRANSPORT_ACTION_NO_ACTION; @@ -1755,9 +1763,8 @@ draw (GtkWidget* button, cairo_t *cr) } else if(priv->current_state == TRANSPORT_STATE_LAUNCHING) { -/* g_debug ("launching in draw"); -*/ + _setup (&cr_surf, &surf, PLAY_WIDTH+6, PLAY_HEIGHT+6); _mask_play (cr_surf, PLAY_PADDING, -- cgit v1.2.3 From 25f98c314a2e61968511c2eeefd7354cadb9439f Mon Sep 17 00:00:00 2001 From: Harry van Haaren Date: Wed, 27 Jul 2011 16:24:08 +0100 Subject: Updated debugs, added spinner start / stop on transport_launching --- src/transport-widget.c | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/src/transport-widget.c b/src/transport-widget.c index b26147c..76c94aa 100644 --- a/src/transport-widget.c +++ b/src/transport-widget.c @@ -177,7 +177,7 @@ transport_widget_init (TransportWidget *self) priv->spinner = gtk_spinner_new(); priv->offscreen_window = gtk_offscreen_window_new(); - gtk_container_add( GTK_CONTAINER(priv->offscreen_window), priv->spinner); + gtk_container_add( GTK_CONTAINER(priv->offscreen_window), priv->spinner); priv->current_command = TRANSPORT_ACTION_NO_ACTION; priv->current_state = TRANSPORT_STATE_PAUSED; @@ -257,7 +257,7 @@ transport_widget_expose (GtkWidget *button, GdkEventExpose *event) cairo_t *cr; cr = gdk_cairo_create (gtk_widget_get_window (button)); - //g_debug("In the playbutton's expose method, x = %i, y=%i and width: %i and height: %i'"); + g_debug("In the playbutton's expose method, x = %i, y=%i and width: %i and height: %i'"); cairo_rectangle (cr, event->area.x, event->area.y, event->area.width, event->area.height); @@ -283,7 +283,7 @@ transport_widget_toggle_play_pause(TransportWidget* button, { TransportWidgetPrivate* priv = TRANSPORT_WIDGET_GET_PRIVATE(button); priv->current_state = update; - //g_debug("TransportWidget::toggle play state : %i", priv->current_state); + g_debug("TransportWidget::toggle play state : %i", priv->current_state); gtk_widget_queue_draw (GTK_WIDGET(button)); } @@ -314,6 +314,8 @@ static gboolean transport_widget_motion_notify_event (GtkWidget *menuitem, GdkEventMotion *event) { + g_debug("transport_widget_motion_notify_event()"); + g_return_val_if_fail ( IS_TRANSPORT_WIDGET(menuitem), FALSE ); TransportWidgetPrivate* priv = TRANSPORT_WIDGET_GET_PRIVATE ( TRANSPORT_WIDGET(menuitem) ); TransportAction result = transport_widget_determine_motion_event ( TRANSPORT_WIDGET(menuitem), @@ -335,6 +337,8 @@ static gboolean transport_widget_leave_notify_event (GtkWidget *menuitem, GdkEventCrossing *event) { + g_debug("transport_widget_leave_notify_event()"); + g_return_val_if_fail ( IS_TRANSPORT_WIDGET(menuitem), FALSE ); TransportWidgetPrivate* priv = TRANSPORT_WIDGET_GET_PRIVATE ( TRANSPORT_WIDGET(menuitem) ); @@ -349,6 +353,8 @@ static gboolean transport_widget_button_press_event (GtkWidget *menuitem, GdkEventButton *event) { + g_debug("transport_widget_button_press_event()"); + g_return_val_if_fail ( IS_TRANSPORT_WIDGET(menuitem), FALSE ); TransportWidgetPrivate* priv = TRANSPORT_WIDGET_GET_PRIVATE ( TRANSPORT_WIDGET(menuitem) ); TransportAction result = transport_widget_determine_button_event ( TRANSPORT_WIDGET(menuitem), @@ -1236,7 +1242,9 @@ draw (GtkWidget* button, cairo_t *cr) g_return_val_if_fail(IS_TRANSPORT_WIDGET(button), FALSE); g_return_val_if_fail(cr != NULL, FALSE); TransportWidgetPrivate* priv = TRANSPORT_WIDGET_GET_PRIVATE(button); - + + //g_debug("transport-widget draw()"); + cairo_surface_t* surf = NULL; cairo_t* cr_surf = NULL; @@ -1763,7 +1771,7 @@ draw (GtkWidget* button, cairo_t *cr) } else if(priv->current_state == TRANSPORT_STATE_LAUNCHING) { - g_debug ("launching in draw"); + //g_debug ("===launching in draw==="); _setup (&cr_surf, &surf, PLAY_WIDTH+6, PLAY_HEIGHT+6); _mask_play (cr_surf, @@ -1839,9 +1847,7 @@ transport_widget_fade_playbutton (gpointer userdata) { TransportWidget* bar = (TransportWidget*)userdata; g_return_val_if_fail(IS_TRANSPORT_WIDGET(bar), FALSE); -/* - g_debug ("fade in /out timeout"); -*/ + //g_debug ("fade in /out timeout"); TransportWidgetPrivate* priv = TRANSPORT_WIDGET_GET_PRIVATE(bar); if (priv->launching_transparency == 1.0f){ priv->fade_out = TRUE; @@ -1874,13 +1880,14 @@ transport_widget_property_update(DbusmenuMenuitem* item, gchar* property, if(g_ascii_strcasecmp(DBUSMENU_TRANSPORT_MENUITEM_PLAY_STATE, property) == 0) { TransportState new_state = (TransportState)g_variant_get_int32(value); - //g_debug("transport_widget_update_state - with value %i", update_value); + //g_debug("transport_widget_update_state - with value %i", new_state); if (new_state == TRANSPORT_STATE_LAUNCHING){ priv->current_state = TRANSPORT_STATE_LAUNCHING; priv->launching_timer = g_timeout_add (100, transport_widget_fade_playbutton, bar); - //g_debug("TransportWidget::toggle play state : %i", priv->current_state); + g_debug("TransportWidget::toggle play state : %i", priv->current_state); + gtk_spinner_start( (GtkSpinner*)priv->spinner); } else{ if (priv->launching_timer != 0){ @@ -1890,6 +1897,7 @@ transport_widget_property_update(DbusmenuMenuitem* item, gchar* property, priv->launching_transparency = 1.0f; } transport_widget_toggle_play_pause(bar, new_state); + gtk_spinner_stop( (GtkSpinner*)priv->spinner); } } } -- cgit v1.2.3 From b7e9be00dc76778b7e5148c1a343c0ff6133f2d9 Mon Sep 17 00:00:00 2001 From: Harry van Haaren Date: Wed, 27 Jul 2011 17:14:59 +0100 Subject: Implemented spinner to cairo interface, assertion of offscreen_window GDK_IS_WINDOW failing --- src/player-controller.vala | 3 ++- src/transport-widget.c | 25 +++++++++++++++++++------ 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/player-controller.vala b/src/player-controller.vala index a08f692..00b486e 100644 --- a/src/player-controller.vala +++ b/src/player-controller.vala @@ -143,11 +143,12 @@ public class PlayerController : GLib.Object public void update_layout() { - debug ("a call to update layout"); + debug ("player-controller 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 + debug("\tthis.current_state != state.CONNECTED, setting Transport property bool to %s now",this.app_info.get_id() ); metadata_menuitem.should_collapse (true); playlists_menuitem.root_item.property_set_bool (MENUITEM_PROP_VISIBLE, false ); diff --git a/src/transport-widget.c b/src/transport-widget.c index 76c94aa..bd189a2 100644 --- a/src/transport-widget.c +++ b/src/transport-widget.c @@ -177,6 +177,10 @@ transport_widget_init (TransportWidget *self) priv->spinner = gtk_spinner_new(); priv->offscreen_window = gtk_offscreen_window_new(); + + g_assert(priv->spinner); + g_assert(priv->offscreen_window); + gtk_container_add( GTK_CONTAINER(priv->offscreen_window), priv->spinner); priv->current_command = TRANSPORT_ACTION_NO_ACTION; @@ -257,7 +261,7 @@ transport_widget_expose (GtkWidget *button, GdkEventExpose *event) cairo_t *cr; cr = gdk_cairo_create (gtk_widget_get_window (button)); - g_debug("In the playbutton's expose method, x = %i, y=%i and width: %i and height: %i'"); + //g_debug("In the playbutton's expose method, x = %i, y=%i and width: %i and height: %i'"); cairo_rectangle (cr, event->area.x, event->area.y, event->area.width, event->area.height); @@ -283,7 +287,7 @@ transport_widget_toggle_play_pause(TransportWidget* button, { TransportWidgetPrivate* priv = TRANSPORT_WIDGET_GET_PRIVATE(button); priv->current_state = update; - g_debug("TransportWidget::toggle play state : %i", priv->current_state); + //g_debug("TransportWidget::toggle play state : %i", priv->current_state); gtk_widget_queue_draw (GTK_WIDGET(button)); } @@ -314,7 +318,7 @@ static gboolean transport_widget_motion_notify_event (GtkWidget *menuitem, GdkEventMotion *event) { - g_debug("transport_widget_motion_notify_event()"); + //g_debug("transport_widget_motion_notify_event()"); g_return_val_if_fail ( IS_TRANSPORT_WIDGET(menuitem), FALSE ); TransportWidgetPrivate* priv = TRANSPORT_WIDGET_GET_PRIVATE ( TRANSPORT_WIDGET(menuitem) ); @@ -337,7 +341,7 @@ static gboolean transport_widget_leave_notify_event (GtkWidget *menuitem, GdkEventCrossing *event) { - g_debug("transport_widget_leave_notify_event()"); + //g_debug("transport_widget_leave_notify_event()"); g_return_val_if_fail ( IS_TRANSPORT_WIDGET(menuitem), FALSE ); TransportWidgetPrivate* priv = TRANSPORT_WIDGET_GET_PRIVATE ( TRANSPORT_WIDGET(menuitem) ); @@ -353,7 +357,7 @@ static gboolean transport_widget_button_press_event (GtkWidget *menuitem, GdkEventButton *event) { - g_debug("transport_widget_button_press_event()"); + //g_debug("transport_widget_button_press_event()"); g_return_val_if_fail ( IS_TRANSPORT_WIDGET(menuitem), FALSE ); TransportWidgetPrivate* priv = TRANSPORT_WIDGET_GET_PRIVATE ( TRANSPORT_WIDGET(menuitem) ); @@ -1771,8 +1775,16 @@ draw (GtkWidget* button, cairo_t *cr) } else if(priv->current_state == TRANSPORT_STATE_LAUNCHING) { - //g_debug ("===launching in draw==="); + g_debug ("launching in draw"); + + GtkOffscreenWindow* tmp_offscreen_win = (GtkOffscreenWindow*)priv->offscreen_window; + + cairo_t *tmp_cr = cairo_create( gtk_offscreen_window_get_surface( tmp_offscreen_win ) ); + + cairo_set_source_surface( tmp_cr, surf, 0, 0 ); + cairo_paint(tmp_cr); + /* _setup (&cr_surf, &surf, PLAY_WIDTH+6, PLAY_HEIGHT+6); _mask_play (cr_surf, PLAY_PADDING, @@ -1822,6 +1834,7 @@ draw (GtkWidget* button, cairo_t *cr) BUTTON_LAUNCHING_END, FALSE); _finalize (cr, &cr_surf, &surf, PAUSE_X-0.5f, PAUSE_Y); + */ } return FALSE; -- cgit v1.2.3 From 116ed984defc9ddf1191c5ba9599b072e5888240 Mon Sep 17 00:00:00 2001 From: Harry van Haaren Date: Thu, 28 Jul 2011 10:33:44 +0100 Subject: Using gtk_render_activity() to draw the spinner --- src/transport-widget.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/transport-widget.c b/src/transport-widget.c index bd189a2..3d766ee 100644 --- a/src/transport-widget.c +++ b/src/transport-widget.c @@ -1777,12 +1777,38 @@ draw (GtkWidget* button, cairo_t *cr) { g_debug ("launching in draw"); + GtkStyleContext *style_context = gtk_style_context_new (); + + GtkWidgetPath *widget_path = gtk_widget_path_new (); + gtk_widget_path_iter_set_name (widget_path, -1 , "indicator-sound-spinner"); + gtk_widget_path_append_type (widget_path, GTK_TYPE_SPINNER); + + gtk_style_context_set_path (style_context, widget_path); + gtk_style_context_add_class (style_context, GTK_STYLE_CLASS_SPINNER); + +/* + gtk_style_context_notify_state_change(style_context, + gtk_widget_get_window(self), + NULL, + GTK_STATE_ACTIVE, + TRUE); +*/ + gtk_render_activity (style_context, cr, 106, 6 , 30, 30); + + //cairo_mark_dirty (cr); + + gtk_widget_path_free (widget_path); + g_object_unref (style_context); + + + /* GtkOffscreenWindow* tmp_offscreen_win = (GtkOffscreenWindow*)priv->offscreen_window; cairo_t *tmp_cr = cairo_create( gtk_offscreen_window_get_surface( tmp_offscreen_win ) ); cairo_set_source_surface( tmp_cr, surf, 0, 0 ); cairo_paint(tmp_cr); + */ /* _setup (&cr_surf, &surf, PLAY_WIDTH+6, PLAY_HEIGHT+6); -- cgit v1.2.3 From bd4277e440221ae75e450d1fe967cfc5e46140ab Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Thu, 28 Jul 2011 11:37:13 +0100 Subject: fixed the resizing bug --- src/metadata-widget.c | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/src/metadata-widget.c b/src/metadata-widget.c index d34f1fc..ee9957f 100644 --- a/src/metadata-widget.c +++ b/src/metadata-widget.c @@ -77,7 +77,12 @@ static void metadata_widget_selection_received_event_callback( GtkWidget guint time, gpointer user_data); + + #if GTK_CHECK_VERSION(3, 0, 0) +static void metadata_widget_get_preferred_width (GtkWidget* self, + gint* minimum_width, + gint* natural_width); static gboolean metadata_widget_icon_triangle_draw_cb_gtk_3 (GtkWidget *image, cairo_t* cr, gpointer user_data); @@ -106,7 +111,9 @@ metadata_widget_class_init (MetadataWidgetClass *klass) GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); widget_class->button_release_event = metadata_widget_button_release_event; - + #if GTK_CHECK_VERSION(3, 0, 0) + widget_class->get_preferred_width = metadata_widget_get_preferred_width; + #endif g_type_class_add_private (klass, sizeof (MetadataWidgetPrivate)); gobject_class->dispose = metadata_widget_dispose; @@ -163,6 +170,7 @@ metadata_widget_init (MetadataWidget *self) gtk_misc_set_alignment(GTK_MISC(artist), (gfloat)0, (gfloat)0); gtk_misc_set_padding (GTK_MISC(artist), (gfloat)10, (gfloat)0); gtk_widget_set_size_request (artist, 140, 15); + gtk_label_set_ellipsize(GTK_LABEL(artist), PANGO_ELLIPSIZE_MIDDLE); metadata_widget_style_labels(self, GTK_LABEL(artist)); priv->artist_label = artist; @@ -172,6 +180,7 @@ metadata_widget_init (MetadataWidget *self) piece = gtk_label_new(""); gtk_misc_set_alignment(GTK_MISC(piece), (gfloat)0, (gfloat)0); gtk_misc_set_padding (GTK_MISC(piece), (gfloat)10, (gfloat)-5); + gtk_widget_set_size_request (piece, 140, 15); gtk_label_set_ellipsize(GTK_LABEL(piece), PANGO_ELLIPSIZE_MIDDLE); metadata_widget_style_labels(self, GTK_LABEL(piece)); @@ -183,6 +192,7 @@ metadata_widget_init (MetadataWidget *self) gtk_misc_set_alignment(GTK_MISC(container), (gfloat)0, (gfloat)0); gtk_misc_set_padding (GTK_MISC(container), (gfloat)10, (gfloat)0); gtk_widget_set_size_request (container, 140, 15); + gtk_label_set_ellipsize(GTK_LABEL(container), PANGO_ELLIPSIZE_MIDDLE); metadata_widget_style_labels(self, GTK_LABEL(container)); priv->container_label = container; @@ -215,6 +225,7 @@ metadata_widget_init (MetadataWidget *self) gtk_widget_show_all (priv->meta_data_h_box); gtk_widget_set_no_show_all (priv->meta_data_h_box, TRUE); + gtk_widget_hide (priv->meta_data_h_box); } @@ -235,12 +246,19 @@ metadata_widget_finalize (GObject *object) G_OBJECT_CLASS (metadata_widget_parent_class)->finalize (object); } + +#if GTK_CHECK_VERSION(3, 0, 0) +static void +metadata_widget_get_preferred_width (GtkWidget* self, + gint* minimum_width, + gint* natural_width) +{ + *minimum_width = *natural_width = 200; +} /** * We override the expose method to enable primitive drawing of the * empty album art image and rounded rectangles on the album art. */ - -#if GTK_CHECK_VERSION(3, 0, 0) static gboolean metadata_image_expose_gtk_3 (GtkWidget *metadata, cairo_t* cr, -- cgit v1.2.3 From 88880cb32a353f84985831596ea80d54bc31d23d Mon Sep 17 00:00:00 2001 From: Harry van Haaren Date: Thu, 28 Jul 2011 11:38:41 +0100 Subject: Made Spinner variables static, cairo surface isn't being drawn properly --- src/transport-widget.c | 52 ++++++++++++++++++-------------------------------- 1 file changed, 19 insertions(+), 33 deletions(-) diff --git a/src/transport-widget.c b/src/transport-widget.c index 3d766ee..bace76a 100644 --- a/src/transport-widget.c +++ b/src/transport-widget.c @@ -76,9 +76,6 @@ typedef struct _TransportWidgetPrivate TransportWidgetPrivate; struct _TransportWidgetPrivate { - GtkWidget* offscreen_window; - GtkWidget* spinner; - TransportAction current_command; TransportAction key_event; TransportAction motion_event; @@ -93,6 +90,9 @@ struct _TransportWidgetPrivate gboolean fade_out; }; +static GtkStyleContext *spinner_style_context; +static GtkWidgetPath *spinner_widget_path; + // TODO refactor the UI handlers, consolidate functionality between key press /release // and button press / release. #define TRANSPORT_WIDGET_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TRANSPORT_WIDGET_TYPE, TransportWidgetPrivate)) @@ -175,13 +175,15 @@ transport_widget_init (TransportWidget *self) { TransportWidgetPrivate* priv = TRANSPORT_WIDGET_GET_PRIVATE(self); - priv->spinner = gtk_spinner_new(); - priv->offscreen_window = gtk_offscreen_window_new(); + spinner_widget_path = gtk_widget_path_new(); + spinner_style_context = gtk_style_context_new(); - g_assert(priv->spinner); - g_assert(priv->offscreen_window); - - gtk_container_add( GTK_CONTAINER(priv->offscreen_window), priv->spinner); + gtk_widget_path_iter_set_name (spinner_widget_path, -1 , "IndicatorSoundSpinner"); + gtk_widget_path_append_type (spinner_widget_path, GTK_TYPE_SPINNER); + + gtk_style_context_set_path (spinner_style_context, spinner_widget_path); + gtk_style_context_add_class (spinner_style_context, GTK_STYLE_CLASS_SPINNER); + gtk_style_context_set_state (spinner_style_context, GTK_STATE_FLAG_ACTIVE); priv->current_command = TRANSPORT_ACTION_NO_ACTION; priv->current_state = TRANSPORT_STATE_PAUSED; @@ -245,12 +247,16 @@ transport_widget_init (TransportWidget *self) static void transport_widget_dispose (GObject *object) { + g_object_unref (spinner_style_context); + G_OBJECT_CLASS (transport_widget_parent_class)->dispose (object); } static void transport_widget_finalize (GObject *object) { + gtk_widget_path_free (spinner_widget_path); + G_OBJECT_CLASS (transport_widget_parent_class)->finalize (object); } @@ -1777,29 +1783,11 @@ draw (GtkWidget* button, cairo_t *cr) { g_debug ("launching in draw"); - GtkStyleContext *style_context = gtk_style_context_new (); - - GtkWidgetPath *widget_path = gtk_widget_path_new (); - gtk_widget_path_iter_set_name (widget_path, -1 , "indicator-sound-spinner"); - gtk_widget_path_append_type (widget_path, GTK_TYPE_SPINNER); - - gtk_style_context_set_path (style_context, widget_path); - gtk_style_context_add_class (style_context, GTK_STYLE_CLASS_SPINNER); - -/* - gtk_style_context_notify_state_change(style_context, - gtk_widget_get_window(self), - NULL, - GTK_STATE_ACTIVE, - TRUE); -*/ - gtk_render_activity (style_context, cr, 106, 6 , 30, 30); - - //cairo_mark_dirty (cr); - - gtk_widget_path_free (widget_path); - g_object_unref (style_context); + gtk_style_context_set_state (spinner_style_context, GTK_STATE_FLAG_ACTIVE); + gtk_render_activity (spinner_style_context, cr, 106, 6 , 30, 30); + // need to redraw the cairo context here, cairo_paint() doesn't seem to do it + cairo_paint(cr); /* GtkOffscreenWindow* tmp_offscreen_win = (GtkOffscreenWindow*)priv->offscreen_window; @@ -1926,7 +1914,6 @@ transport_widget_property_update(DbusmenuMenuitem* item, gchar* property, transport_widget_fade_playbutton, bar); g_debug("TransportWidget::toggle play state : %i", priv->current_state); - gtk_spinner_start( (GtkSpinner*)priv->spinner); } else{ if (priv->launching_timer != 0){ @@ -1936,7 +1923,6 @@ transport_widget_property_update(DbusmenuMenuitem* item, gchar* property, priv->launching_transparency = 1.0f; } transport_widget_toggle_play_pause(bar, new_state); - gtk_spinner_stop( (GtkSpinner*)priv->spinner); } } } -- cgit v1.2.3 From e5350911b2abaca40482bbacbda92e64f2e6d8bb Mon Sep 17 00:00:00 2001 From: Harry van Haaren Date: Thu, 28 Jul 2011 12:31:36 +0100 Subject: added debug info in draw() of spinner animation --- src/transport-widget.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/transport-widget.c b/src/transport-widget.c index bace76a..b20966f 100644 --- a/src/transport-widget.c +++ b/src/transport-widget.c @@ -183,7 +183,7 @@ transport_widget_init (TransportWidget *self) gtk_style_context_set_path (spinner_style_context, spinner_widget_path); gtk_style_context_add_class (spinner_style_context, GTK_STYLE_CLASS_SPINNER); - gtk_style_context_set_state (spinner_style_context, GTK_STATE_FLAG_ACTIVE); + gtk_style_context_set_state (spinner_style_context, GTK_STATE_FLAG_NORMAL); priv->current_command = TRANSPORT_ACTION_NO_ACTION; priv->current_state = TRANSPORT_STATE_PAUSED; @@ -267,7 +267,7 @@ transport_widget_expose (GtkWidget *button, GdkEventExpose *event) cairo_t *cr; cr = gdk_cairo_create (gtk_widget_get_window (button)); - //g_debug("In the playbutton's expose method, x = %i, y=%i and width: %i and height: %i'"); + g_debug("In the playbutton's expose method, x = %i, y=%i and width: %i and height: %i'"); cairo_rectangle (cr, event->area.x, event->area.y, event->area.width, event->area.height); @@ -1781,9 +1781,15 @@ draw (GtkWidget* button, cairo_t *cr) } else if(priv->current_state == TRANSPORT_STATE_LAUNCHING) { - g_debug ("launching in draw"); + gdouble progress; + gtk_style_context_state_is_running(spinner_style_context, GTK_STATE_ACTIVE, &progress); + + GtkStateFlags state = gtk_style_context_get_state(spinner_style_context); + // state 0 = NORMAL + // state 1 = ACTIVE + + g_debug ("launching in draw state: %i, %f", state ,progress ); - gtk_style_context_set_state (spinner_style_context, GTK_STATE_FLAG_ACTIVE); gtk_render_activity (spinner_style_context, cr, 106, 6 , 30, 30); // need to redraw the cairo context here, cairo_paint() doesn't seem to do it @@ -1914,6 +1920,7 @@ transport_widget_property_update(DbusmenuMenuitem* item, gchar* property, transport_widget_fade_playbutton, bar); g_debug("TransportWidget::toggle play state : %i", priv->current_state); + gtk_style_context_set_state (spinner_style_context, GTK_STATE_FLAG_ACTIVE); } else{ if (priv->launching_timer != 0){ -- cgit v1.2.3 From 4a74ac2d00bf6d093447a27cea421ad6ea6810f2 Mon Sep 17 00:00:00 2001 From: Harry van Haaren Date: Thu, 28 Jul 2011 12:52:59 +0100 Subject: Added debug info, setting gtk-animations to enabled in theme --- src/transport-widget.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/transport-widget.c b/src/transport-widget.c index b20966f..81fbac6 100644 --- a/src/transport-widget.c +++ b/src/transport-widget.c @@ -178,7 +178,16 @@ transport_widget_init (TransportWidget *self) spinner_widget_path = gtk_widget_path_new(); spinner_style_context = gtk_style_context_new(); - gtk_widget_path_iter_set_name (spinner_widget_path, -1 , "IndicatorSoundSpinner"); + + /* + gtk_settings_set_string_property( gtk_settings_get_default(), + "gtk-enable-animations", + const gchar *v_string, + const gchar *origin); */ + + //g_object_set (gtk_settings_get_default (), "gtk-enable-animations", TRUE, NULL); + + gtk_widget_path_iter_set_name (spinner_widget_path, 0 , "IndicatorSoundSpinner"); gtk_widget_path_append_type (spinner_widget_path, GTK_TYPE_SPINNER); gtk_style_context_set_path (spinner_style_context, spinner_widget_path); -- cgit v1.2.3 From c53c671e8e453068d1ee0b9186d6e337797b4d60 Mon Sep 17 00:00:00 2001 From: Harry van Haaren Date: Thu, 28 Jul 2011 13:32:58 +0100 Subject: Fixed assertion of WidgetPath --- src/transport-widget.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/transport-widget.c b/src/transport-widget.c index 81fbac6..c1ff794 100644 --- a/src/transport-widget.c +++ b/src/transport-widget.c @@ -187,8 +187,12 @@ transport_widget_init (TransportWidget *self) //g_object_set (gtk_settings_get_default (), "gtk-enable-animations", TRUE, NULL); - gtk_widget_path_iter_set_name (spinner_widget_path, 0 , "IndicatorSoundSpinner"); gtk_widget_path_append_type (spinner_widget_path, GTK_TYPE_SPINNER); + gtk_widget_path_iter_set_name (spinner_widget_path, 1 , "IndicatorSoundSpinner"); + + gtk_widget_path_iter_add_class(spinner_widget_path,-1,GTK_STYLE_CLASS_SPINNER); + + gtk_style_context_add_class(spinner_style_context,GTK_STYLE_CLASS_SPINNER); gtk_style_context_set_path (spinner_style_context, spinner_widget_path); gtk_style_context_add_class (spinner_style_context, GTK_STYLE_CLASS_SPINNER); @@ -1790,6 +1794,8 @@ draw (GtkWidget* button, cairo_t *cr) } else if(priv->current_state == TRANSPORT_STATE_LAUNCHING) { + gtk_style_context_set_state (spinner_style_context, GTK_STATE_FLAG_ACTIVE); + gdouble progress; gtk_style_context_state_is_running(spinner_style_context, GTK_STATE_ACTIVE, &progress); @@ -1929,7 +1935,6 @@ transport_widget_property_update(DbusmenuMenuitem* item, gchar* property, transport_widget_fade_playbutton, bar); g_debug("TransportWidget::toggle play state : %i", priv->current_state); - gtk_style_context_set_state (spinner_style_context, GTK_STATE_FLAG_ACTIVE); } else{ if (priv->launching_timer != 0){ -- cgit v1.2.3 From db5e00800fb527e9b88cc7c8c1b29ac44b5eee29 Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Thu, 28 Jul 2011 15:07:17 +0100 Subject: tidied style context method calls, more visibility added around querying if the transition is actually running --- src/transport-widget.c | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/src/transport-widget.c b/src/transport-widget.c index c1ff794..5b3001a 100644 --- a/src/transport-widget.c +++ b/src/transport-widget.c @@ -1259,6 +1259,8 @@ _surface_blur (cairo_surface_t* surface, cairo_surface_mark_dirty (surface); } +static gdouble progress = 0.0; + static gboolean draw (GtkWidget* button, cairo_t *cr) { @@ -1794,20 +1796,19 @@ draw (GtkWidget* button, cairo_t *cr) } else if(priv->current_state == TRANSPORT_STATE_LAUNCHING) { - gtk_style_context_set_state (spinner_style_context, GTK_STATE_FLAG_ACTIVE); - - gdouble progress; - gtk_style_context_state_is_running(spinner_style_context, GTK_STATE_ACTIVE, &progress); - - GtkStateFlags state = gtk_style_context_get_state(spinner_style_context); - // state 0 = NORMAL - // state 1 = ACTIVE - - g_debug ("launching in draw state: %i, %f", state ,progress ); - gtk_render_activity (spinner_style_context, cr, 106, 6 , 30, 30); + GtkStateFlags state = gtk_style_context_get_state(spinner_style_context); + // state 0 = NORMAL + // state 1 = ACTIVE - // need to redraw the cairo context here, cairo_paint() doesn't seem to do it + g_debug ("launching in draw state: %i and progress %f", state, progress ); + gtk_render_activity (spinner_style_context, cr, 106, 6 , 30, 30); + g_debug ("context style is running ? = %i", + gtk_style_context_state_is_running (spinner_style_context, + GTK_STATE_ACTIVE, + &progress)); + + // need to redraw the cairo context here, cairo_paint() doesn't seem to do it cairo_paint(cr); /* @@ -1912,6 +1913,7 @@ transport_widget_fade_playbutton (gpointer userdata) gtk_widget_queue_draw (GTK_WIDGET(bar)); return TRUE; } + /** * transport_widget_update_state() * Callback for updates from the other side of dbus @@ -1930,6 +1932,14 @@ transport_widget_property_update(DbusmenuMenuitem* item, gchar* property, TransportState new_state = (TransportState)g_variant_get_int32(value); //g_debug("transport_widget_update_state - with value %i", new_state); if (new_state == TRANSPORT_STATE_LAUNCHING){ + gtk_style_context_notify_state_change (spinner_style_context, + gtk_widget_get_window ( GTK_WIDGET(userdata)), + NULL, + GTK_STATE_PRELIGHT, + TRUE); + + gtk_style_context_set_state (spinner_style_context, GTK_STATE_FLAG_ACTIVE); + priv->current_state = TRANSPORT_STATE_LAUNCHING; priv->launching_timer = g_timeout_add (100, transport_widget_fade_playbutton, -- cgit v1.2.3 From 34c2bb5248b5b408781b2c38c48841899c9df266 Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Thu, 28 Jul 2011 16:23:02 +0100 Subject: clean up debug trace --- src/transport-widget.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/transport-widget.c b/src/transport-widget.c index 5b3001a..66bb748 100644 --- a/src/transport-widget.c +++ b/src/transport-widget.c @@ -1801,7 +1801,9 @@ draw (GtkWidget* button, cairo_t *cr) // state 0 = NORMAL // state 1 = ACTIVE - g_debug ("launching in draw state: %i and progress %f", state, progress ); + g_debug ("Is state active: %i and progress %f", + state == GTK_STATE_FLAG_ACTIVE, + progress ); gtk_render_activity (spinner_style_context, cr, 106, 6 , 30, 30); g_debug ("context style is running ? = %i", gtk_style_context_state_is_running (spinner_style_context, -- cgit v1.2.3 From e11aae188afec1fe6c84c65170251c20d890d08e Mon Sep 17 00:00:00 2001 From: Andrea Cimitan Date: Thu, 28 Jul 2011 19:22:09 +0200 Subject: Cimi's fix for spinner --- src/transport-widget.c | 62 +++++++++++++++++++++++++++++++------------------- 1 file changed, 38 insertions(+), 24 deletions(-) diff --git a/src/transport-widget.c b/src/transport-widget.c index 66bb748..aeaa2d0 100644 --- a/src/transport-widget.c +++ b/src/transport-widget.c @@ -90,8 +90,9 @@ struct _TransportWidgetPrivate gboolean fade_out; }; -static GtkStyleContext *spinner_style_context; -static GtkWidgetPath *spinner_widget_path; +static GList *transport_widget_list = NULL; +static GtkStyleContext *spinner_style_context = NULL; +static GtkWidgetPath *spinner_widget_path = NULL; // TODO refactor the UI handlers, consolidate functionality between key press /release // and button press / release. @@ -174,11 +175,23 @@ static void transport_widget_init (TransportWidget *self) { TransportWidgetPrivate* priv = TRANSPORT_WIDGET_GET_PRIVATE(self); - - spinner_widget_path = gtk_widget_path_new(); - spinner_style_context = gtk_style_context_new(); - - + + if (transport_widget_list == NULL){ + /* append the object to the static linked list. */ + transport_widget_list = g_list_append (transport_widget_list, self); + + /* create widget path */ + spinner_widget_path = gtk_widget_path_new(); + + gtk_widget_path_iter_set_name (spinner_widget_path, -1 , "IndicatorSoundSpinner"); + gtk_widget_path_append_type (spinner_widget_path, GTK_TYPE_SPINNER); + + /* create style context and append path */ + spinner_style_context = gtk_style_context_new(); + + gtk_style_context_set_path (spinner_style_context, spinner_widget_path); + gtk_style_context_add_class (spinner_style_context, GTK_STYLE_CLASS_SPINNER); + } /* gtk_settings_set_string_property( gtk_settings_get_default(), "gtk-enable-animations", @@ -187,17 +200,6 @@ transport_widget_init (TransportWidget *self) //g_object_set (gtk_settings_get_default (), "gtk-enable-animations", TRUE, NULL); - gtk_widget_path_append_type (spinner_widget_path, GTK_TYPE_SPINNER); - gtk_widget_path_iter_set_name (spinner_widget_path, 1 , "IndicatorSoundSpinner"); - - gtk_widget_path_iter_add_class(spinner_widget_path,-1,GTK_STYLE_CLASS_SPINNER); - - gtk_style_context_add_class(spinner_style_context,GTK_STYLE_CLASS_SPINNER); - - gtk_style_context_set_path (spinner_style_context, spinner_widget_path); - gtk_style_context_add_class (spinner_style_context, GTK_STYLE_CLASS_SPINNER); - gtk_style_context_set_state (spinner_style_context, GTK_STATE_FLAG_NORMAL); - priv->current_command = TRANSPORT_ACTION_NO_ACTION; priv->current_state = TRANSPORT_STATE_PAUSED; priv->key_event = TRANSPORT_ACTION_NO_ACTION; @@ -260,7 +262,19 @@ transport_widget_init (TransportWidget *self) static void transport_widget_dispose (GObject *object) { - g_object_unref (spinner_style_context); + transport_widget_list = g_list_remove (transport_widget_list, object); + + if (transport_widget_list == NULL){ + if (spinner_widget_path != NULL){ + gtk_widget_path_free (spinner_widget_path); + spinner_widget_path = NULL; + } + + if (spinner_style_context != NULL){ + g_object_unref (spinner_style_context); + spinner_style_context = NULL; + } + } G_OBJECT_CLASS (transport_widget_parent_class)->dispose (object); } @@ -268,7 +282,7 @@ transport_widget_dispose (GObject *object) static void transport_widget_finalize (GObject *object) { - gtk_widget_path_free (spinner_widget_path); + G_OBJECT_CLASS (transport_widget_parent_class)->finalize (object); } @@ -1804,14 +1818,15 @@ draw (GtkWidget* button, cairo_t *cr) g_debug ("Is state active: %i and progress %f", state == GTK_STATE_FLAG_ACTIVE, progress ); + gtk_render_activity (spinner_style_context, cr, 106, 6 , 30, 30); + g_debug ("context style is running ? = %i", gtk_style_context_state_is_running (spinner_style_context, GTK_STATE_ACTIVE, &progress)); // need to redraw the cairo context here, cairo_paint() doesn't seem to do it - cairo_paint(cr); /* GtkOffscreenWindow* tmp_offscreen_win = (GtkOffscreenWindow*)priv->offscreen_window; @@ -1937,11 +1952,10 @@ transport_widget_property_update(DbusmenuMenuitem* item, gchar* property, gtk_style_context_notify_state_change (spinner_style_context, gtk_widget_get_window ( GTK_WIDGET(userdata)), NULL, - GTK_STATE_PRELIGHT, + GTK_STATE_FLAG_ACTIVE, TRUE); - gtk_style_context_set_state (spinner_style_context, GTK_STATE_FLAG_ACTIVE); - + priv->current_state = TRANSPORT_STATE_LAUNCHING; priv->launching_timer = g_timeout_add (100, transport_widget_fade_playbutton, -- cgit v1.2.3 From 5fcbaa67209c40c752b8b3c2b78cb26233b7ccb8 Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Thu, 28 Jul 2011 18:53:59 +0100 Subject: bumped version for release --- configure.ac | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index 184de39..47d8350 100644 --- a/configure.ac +++ b/configure.ac @@ -1,10 +1,10 @@ -AC_INIT(indicator-sound, 0.7.3, conor.curran@canonical.com) +AC_INIT(indicator-sound, 0.7.4, conor.curran@canonical.com) AC_PREREQ(2.53) AM_CONFIG_HEADER(config.h) -AM_INIT_AUTOMAKE(indicator-sound, 0.7.3) +AM_INIT_AUTOMAKE(indicator-sound, 0.7.4) AM_MAINTAINER_MODE -- cgit v1.2.3 From c277163e3011970526835a288749cdd12dde6c52 Mon Sep 17 00:00:00 2001 From: Ken VanDine Date: Fri, 29 Jul 2011 10:22:17 -0400 Subject: * debian/rules - Moved autoreconf to the top --- debian/changelog | 2 ++ debian/rules | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index da1b8ac..6541ae5 100644 --- a/debian/changelog +++ b/debian/changelog @@ -4,6 +4,8 @@ indicator-sound (0.7.4-0ubuntu1) UNRELEASED; urgency=low - menu resizes on reopen (LP: #809275) - pulse indication of SoundMenu play button not strong enough (LP: #742251) + * debian/rules + - Moved autoreconf to the top -- Ken VanDine Thu, 28 Jul 2011 17:12:15 -0400 diff --git a/debian/rules b/debian/rules index 2c0cbeb..dfd669b 100755 --- a/debian/rules +++ b/debian/rules @@ -3,9 +3,9 @@ DEB_BUILDDIR = build DEB_MAKE_FLAVORS = gtk2 gtk3 +include /usr/share/cdbs/1/rules/autoreconf.mk include /usr/share/cdbs/1/rules/debhelper.mk include /usr/share/cdbs/1/class/gnome.mk -include /usr/share/cdbs/1/rules/autoreconf.mk DEB_MAKE_DESTDIRSKEL = $(CURDIR)/debian/tmp/@FLAVOR@ DEB_DESTDIR = $(CURDIR)/debian/tmp/$(cdbs_make_curflavor)/ -- cgit v1.2.3 From 65982386494b0ffe4ff8bdf4be698e8b7616f561 Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Fri, 29 Jul 2011 16:06:41 +0100 Subject: ifdefs needed for gtk2 compilation --- src/Makefile.am | 2 +- src/transport-widget.c | 15 +++++++++++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/Makefile.am b/src/Makefile.am index 60c7249..9c56c0e 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -109,7 +109,7 @@ indicator_sound_service_SOURCES = \ gen-sound-service.xml.c \ $(music_bridge_VALASOURCES:.vala=.c) -indicator_sound_service_CFLAGS = $(PULSEAUDIO_CFLAGS) $(SOUNDSERVICE_CFLAGS) $(GCONF_CFLAGS) -DLIBEXECDIR=\"$(libexecdir)\" -Wall +indicator_sound_service_CFLAGS = $(PULSEAUDIO_CFLAGS) $(SOUNDSERVICE_CFLAGS) $(GCONF_CFLAGS) -DLIBEXECDIR=\"$(libexecdir)\" -Wall -Werror indicator_sound_service_LDADD = $(PULSEAUDIO_LIBS) $(SOUNDSERVICE_LIBS) $(GCONF_LIBS) ######################### diff --git a/src/transport-widget.c b/src/transport-widget.c index 898472e..564b76f 100644 --- a/src/transport-widget.c +++ b/src/transport-widget.c @@ -87,9 +87,11 @@ struct _TransportWidgetPrivate gint skip_frequency; }; +#if GTK_CHECK_VERSION(3, 0, 0) static GList *transport_widget_list = NULL; static GtkStyleContext *spinner_style_context = NULL; static GtkWidgetPath *spinner_widget_path = NULL; +#endif // TODO refactor the UI handlers, consolidate functionality between key press /release // and button press / release. @@ -171,7 +173,7 @@ static void transport_widget_init (TransportWidget *self) { TransportWidgetPrivate* priv = TRANSPORT_WIDGET_GET_PRIVATE(self); - + #if GTK_CHECK_VERSION(3, 0, 0) if (transport_widget_list == NULL){ /* append the object to the static linked list. */ transport_widget_list = g_list_append (transport_widget_list, self); @@ -188,7 +190,7 @@ transport_widget_init (TransportWidget *self) gtk_style_context_set_path (spinner_style_context, spinner_widget_path); gtk_style_context_add_class (spinner_style_context, GTK_STYLE_CLASS_SPINNER); } - + #endif priv->current_command = TRANSPORT_ACTION_NO_ACTION; priv->current_state = TRANSPORT_STATE_PAUSED; priv->key_event = TRANSPORT_ACTION_NO_ACTION; @@ -248,6 +250,7 @@ transport_widget_init (TransportWidget *self) static void transport_widget_dispose (GObject *object) { + #if GTK_CHECK_VERSION(3, 0, 0) transport_widget_list = g_list_remove (transport_widget_list, object); if (transport_widget_list == NULL){ @@ -261,7 +264,7 @@ transport_widget_dispose (GObject *object) spinner_style_context = NULL; } } - + #endif G_OBJECT_CLASS (transport_widget_parent_class)->dispose (object); } @@ -280,7 +283,6 @@ transport_widget_expose (GtkWidget *button, GdkEventExpose *event) cairo_t *cr; cr = gdk_cairo_create (gtk_widget_get_window (button)); - g_debug("In the playbutton's expose method, x = %i, y=%i and width: %i and height: %i'"); cairo_rectangle (cr, event->area.x, event->area.y, event->area.width, event->area.height); @@ -1791,10 +1793,13 @@ draw (GtkWidget* button, cairo_t *cr) FALSE); _finalize (cr, &cr_surf, &surf, PAUSE_X-0.5f, PAUSE_Y); } + #if GTK_CHECK_VERSION(3, 0, 0) else if(priv->current_state == TRANSPORT_STATE_LAUNCHING) { + gtk_render_activity (spinner_style_context, cr, 106, 6 , 30, 30); } + #endif return FALSE; } @@ -1831,12 +1836,14 @@ transport_widget_property_update(DbusmenuMenuitem* item, gchar* property, TransportState new_state = (TransportState)g_variant_get_int32(value); //g_debug("transport_widget_update_state - with value %i", new_state); if (new_state == TRANSPORT_STATE_LAUNCHING){ + #if GTK_CHECK_VERSION(3, 0, 0) gtk_style_context_notify_state_change (spinner_style_context, gtk_widget_get_window ( GTK_WIDGET(userdata)), NULL, GTK_STATE_FLAG_ACTIVE, TRUE); gtk_style_context_set_state (spinner_style_context, GTK_STATE_FLAG_ACTIVE); + #endif priv->current_state = TRANSPORT_STATE_LAUNCHING; g_debug("TransportWidget::toggle play state : %i", priv->current_state); -- cgit v1.2.3 From c60b7f972eb8faa1b06366dfebdb4a220d565f1e Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Fri, 29 Jul 2011 17:18:02 +0100 Subject: bumped for release and removed -Werror from makefile.am until valac fixes its issues --- configure.ac | 4 ++-- src/Makefile.am | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/configure.ac b/configure.ac index 47d8350..25f861a 100644 --- a/configure.ac +++ b/configure.ac @@ -1,10 +1,10 @@ -AC_INIT(indicator-sound, 0.7.4, conor.curran@canonical.com) +AC_INIT(indicator-sound, 0.7.4.1, conor.curran@canonical.com) AC_PREREQ(2.53) AM_CONFIG_HEADER(config.h) -AM_INIT_AUTOMAKE(indicator-sound, 0.7.4) +AM_INIT_AUTOMAKE(indicator-sound, 0.7.4.1) AM_MAINTAINER_MODE diff --git a/src/Makefile.am b/src/Makefile.am index 9c56c0e..60c7249 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -109,7 +109,7 @@ indicator_sound_service_SOURCES = \ gen-sound-service.xml.c \ $(music_bridge_VALASOURCES:.vala=.c) -indicator_sound_service_CFLAGS = $(PULSEAUDIO_CFLAGS) $(SOUNDSERVICE_CFLAGS) $(GCONF_CFLAGS) -DLIBEXECDIR=\"$(libexecdir)\" -Wall -Werror +indicator_sound_service_CFLAGS = $(PULSEAUDIO_CFLAGS) $(SOUNDSERVICE_CFLAGS) $(GCONF_CFLAGS) -DLIBEXECDIR=\"$(libexecdir)\" -Wall indicator_sound_service_LDADD = $(PULSEAUDIO_LIBS) $(SOUNDSERVICE_LIBS) $(GCONF_LIBS) ######################### -- cgit v1.2.3 From 6a7027eea846bcc0c0a249f7e93fdadb407bed71 Mon Sep 17 00:00:00 2001 From: Ken VanDine Date: Fri, 29 Jul 2011 13:32:37 -0400 Subject: releasing version 0.7.4.1-0ubuntu1 --- debian/changelog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index 5aaa50d..081977c 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -indicator-sound (0.7.4.1-0ubuntu1) UNRELEASED; urgency=low +indicator-sound (0.7.4.1-0ubuntu1) oneiric; urgency=low * New upstream release. - menu resizes on reopen (LP: #809275) -- cgit v1.2.3