From 60f948a55b507a1c318cebba97df0cb17d6c019e Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Nov 13 2007 14:55:21 +0000 Subject: 2.21.1 --- diff --git a/.cvsignore b/.cvsignore index 9f3c392..697ca94 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1,2 +1,2 @@ -gnome-applets-2.20.0.tar.bz2 +gnome-applets-2.21.1.tar.bz2 gnome-applets-2.9.3.1-modemlights.tar.bz2 diff --git a/gnome-applets-2.21.1-mixer-sync.patch b/gnome-applets-2.21.1-mixer-sync.patch new file mode 100644 index 0000000..0d64130 --- /dev/null +++ b/gnome-applets-2.21.1-mixer-sync.patch @@ -0,0 +1,309 @@ +diff -up gnome-applets-2.21.1/mixer/applet.h.mixer-sync gnome-applets-2.21.1/mixer/applet.h +--- gnome-applets-2.21.1/mixer/applet.h.mixer-sync 2007-07-27 22:02:35.000000000 -0400 ++++ gnome-applets-2.21.1/mixer/applet.h 2007-11-13 09:39:37.000000000 -0500 +@@ -71,6 +71,7 @@ typedef struct _GnomeVolumeApplet { + + /* element */ + GstMixer *mixer; ++ GstBus *bus; + gboolean lock; + gint state; + GList *tracks; +diff -up gnome-applets-2.21.1/mixer/applet.c.mixer-sync gnome-applets-2.21.1/mixer/applet.c +--- gnome-applets-2.21.1/mixer/applet.c.mixer-sync 2007-11-03 20:12:18.000000000 -0400 ++++ gnome-applets-2.21.1/mixer/applet.c 2007-11-13 09:47:09.000000000 -0500 +@@ -79,7 +79,12 @@ static void gnome_volume_applet_orientat + PanelAppletOrient orient); + + static gboolean gnome_volume_applet_refresh (GnomeVolumeApplet *applet, +- gboolean force_refresh); ++ gboolean force_refresh, ++ gdouble volume, ++ gint mute); ++ ++static void cb_notify_message (GstBus *bus, GstMessage *message, gpointer data); ++ + static gboolean cb_check (gpointer data); + + static void cb_volume (GtkAdjustment *adj, +@@ -218,6 +223,12 @@ gnome_volume_applet_init (GnomeVolumeApp + /* i18n */ + ao = gtk_widget_get_accessible (GTK_WIDGET (applet)); + atk_object_set_name (ao, _("Volume Control")); ++ ++ /* Bus for notifications */ ++ applet->bus = gst_bus_new (); ++ gst_bus_add_signal_watch (applet->bus); ++ g_signal_connect (G_OBJECT (applet->bus), "message::element", ++ (GCallback) cb_notify_message, applet); + } + + /* Parse the list of tracks that are stored in GConf */ +@@ -344,12 +355,33 @@ select_element_and_track (GnomeVolumeApp + return FALSE; + + applet->mixer = g_object_ref (active_element); ++ gst_element_set_bus (GST_ELEMENT (applet->mixer), applet->bus); + applet->tracks = active_tracks; + g_list_foreach (applet->tracks, (GFunc) g_object_ref, NULL); + + return TRUE; + } + ++static void ++gnome_volume_applet_setup_timeout (GnomeVolumeApplet *applet) ++{ ++ gboolean need_timeout = TRUE; ++ need_timeout = ((gst_mixer_get_mixer_flags (GST_MIXER (applet->mixer)) & ++ GST_MIXER_FLAG_AUTO_NOTIFICATIONS) == 0); ++ ++ if (need_timeout) { ++ if (applet->timeout == 0) { ++ applet->timeout = g_timeout_add (100, cb_check, applet); ++ } ++ } ++ else { ++ if (applet->timeout != 0) { ++ g_source_remove (applet->timeout); ++ applet->timeout = 0; ++ } ++ } ++} ++ + gboolean + gnome_volume_applet_setup (GnomeVolumeApplet *applet, + GList *elements) +@@ -411,10 +443,9 @@ gnome_volume_applet_setup (GnomeVolumeAp + component = panel_applet_get_popup_component (PANEL_APPLET (applet)); + g_signal_connect (component, "ui-event", G_CALLBACK (cb_ui_event), applet); + +- gnome_volume_applet_refresh (applet, TRUE); +- if (res) { +- applet->timeout = g_timeout_add (100, cb_check, applet); +- } ++ gnome_volume_applet_refresh (applet, TRUE, -1, -1); ++ if (res) ++ gnome_volume_applet_setup_timeout (applet); + + if (res) { + /* gconf */ +@@ -455,6 +486,11 @@ gnome_volume_applet_dispose (GObject *ob + g_list_free (applet->elements); + applet->elements = NULL; + } ++ gst_bus_remove_signal_watch (applet->bus); ++ if (applet->bus) { ++ gst_object_unref (applet->bus); ++ applet->bus = NULL; ++ } + + if (applet->tracks) { + g_list_foreach (applet->tracks, (GFunc) g_object_unref, NULL); +@@ -649,11 +685,11 @@ gnome_volume_applet_toggle_mute (GnomeVo + component = panel_applet_get_popup_component (PANEL_APPLET (applet)); + bonobo_ui_component_set_prop (component, + "/commands/Mute", +- "state", mute ? "1" : "0", NULL); ++ "state", !mute ? "1" : "0", NULL); + + /* update graphic - this should happen automagically after the next + * idle call, but apparently doesn't for some people... */ +- gnome_volume_applet_refresh (applet, TRUE); ++ gnome_volume_applet_refresh (applet, TRUE, -1, !mute); + } + + /* +@@ -916,7 +952,7 @@ void gnome_volume_applet_size_allocate ( + } + + init_pixbufs (applet); +- gnome_volume_applet_refresh (applet, TRUE); ++ gnome_volume_applet_refresh (applet, TRUE, -1, -1); + } + + static void +@@ -966,15 +1002,23 @@ gnome_volume_applet_adjust_volume (GstMi + { + int range = track->max_volume - track->min_volume; + gdouble scale = ((gdouble) range) / 100; +- int *volumes, n; ++ int *volumes, n, volint; + +- volume *= scale; +- volume += track->min_volume; ++ if (volume == 1.0) { ++ volint = track->max_volume; ++ } else if (volume == 0.0) { ++ volint = track->min_volume; ++ } else { ++ volume *= scale; ++ volume += track->min_volume; ++ volint = lrint (volume); ++ } + + volumes = g_new (gint, track->num_channels); + for (n = 0; n < track->num_channels; n++) +- volumes[n] = lrint (volume); ++ volumes[n] = volint; + gst_mixer_set_volume (mixer, track, volumes); ++ + g_free (volumes); + } + +@@ -1025,6 +1069,8 @@ cb_volume (GtkAdjustment *adj, + + applet->lock = FALSE; + applet->force_next_update = TRUE; ++ ++ gnome_volume_applet_refresh (GNOME_VOLUME_APPLET (data), FALSE, v, -1); + } + + /* +@@ -1035,31 +1081,39 @@ cb_volume (GtkAdjustment *adj, + + static gboolean + gnome_volume_applet_refresh (GnomeVolumeApplet *applet, +- gboolean force_refresh) ++ gboolean force_refresh, ++ gdouble volume, ++ gint mute) + { + BonoboUIComponent *component; + GdkPixbuf *pixbuf; + gint n; +- gdouble volume; +- gboolean mute, did_change; ++ gboolean show_mute, did_change; + gchar *tooltip_str; + GstMixerTrack *first_track; + GString *track_names; + GList *iter; + ++ show_mute = 0; ++ + if (!applet->mixer) { + n = 0; +- mute = FALSE; ++ show_mute = 1; ++ mute = 0; + } else if (!applet->tracks) { + return FALSE; + } else { +- /* only first track */ + first_track = g_list_first (applet->tracks)->data; +- volume = gnome_volume_applet_get_volume (applet->mixer, first_track); +- mute = GST_MIXER_TRACK_HAS_FLAG (first_track, +- GST_MIXER_TRACK_MUTE); +- if (volume <= 0) { +- mute = TRUE; ++ if (volume == -1) { ++ /* only first track */ ++ volume = gnome_volume_applet_get_volume (applet->mixer, first_track); ++ } ++ if (mute == -1) { ++ mute = GST_MIXER_TRACK_HAS_FLAG (first_track, ++ GST_MIXER_TRACK_MUTE) ? 1 : 0; ++ } ++ if (volume <= 0 || mute) { ++ show_mute = 1; + n = 0; + } + else { +@@ -1077,7 +1131,7 @@ gnome_volume_applet_refresh (GnomeVolume + applet->force_next_update = FALSE; + + if (did_change) { +- if (mute) { ++ if (show_mute) { + pixbuf = applet->pix[0]; + } else { + pixbuf = applet->pix[n]; +@@ -1101,7 +1155,7 @@ gnome_volume_applet_refresh (GnomeVolume + track_names = g_string_append (track_names, track->label); + } + +- if (mute) { ++ if (show_mute) { + tooltip_str = g_strdup_printf (_("%s: muted"), track_names->str); + } else { + /* Translator comment: I'm not all too sure if this makes sense +@@ -1129,6 +1183,52 @@ gnome_volume_applet_refresh (GnomeVolume + return did_change; + } + ++static void ++cb_notify_message (GstBus *bus, GstMessage *message, gpointer data) ++{ ++ GnomeVolumeApplet *applet = GNOME_VOLUME_APPLET (data); ++ GstMixerMessageType type; ++ GstMixerTrack *first_track; ++ GstMixerTrack *track = NULL; ++ gint mute; ++ gdouble volume; ++ ++ if (applet->tracks == NULL || ++ GST_MESSAGE_SRC (message) != GST_OBJECT (applet->mixer)) { ++ /* No tracks, or not from our mixer - can't update anything anyway */ ++ return; ++ } ++ ++ volume = mute = -1; ++ ++ first_track = g_list_first (applet->tracks)->data; ++ ++ /* This code only calls refresh if the first_track changes, because the ++ * refresh code only retrieves the current value from that track anyway */ ++ type = gst_mixer_message_get_type (message); ++ if (type == GST_MIXER_MESSAGE_MUTE_TOGGLED) { ++ gboolean muted; ++ gst_mixer_message_parse_mute_toggled (message, &track, &muted); ++ mute = muted ? 1 : 0; ++ } ++ else if (type == GST_MIXER_MESSAGE_VOLUME_CHANGED) { ++ gint n, num_channels, *vols; ++ volume = 0.0; ++ ++ gst_mixer_message_parse_volume_changed (message, &track, &vols, &num_channels); ++ for (n = 0; n < num_channels; n++) ++ volume += vols[n]; ++ volume /= track->num_channels; ++ volume = 100 * volume / (track->max_volume - track->min_volume); ++ } else ++ { ++ return; ++ } ++ ++ if (first_track == track) ++ gnome_volume_applet_refresh (GNOME_VOLUME_APPLET (data), FALSE, volume, mute); ++} ++ + static gboolean + cb_check (gpointer data) + { +@@ -1146,7 +1246,7 @@ cb_check (gpointer data) + */ + if (time_counter % timeout == 0 || recent_change) { + did_change = gnome_volume_applet_refresh (GNOME_VOLUME_APPLET (data), +- FALSE); ++ FALSE, -1, -1); + + /* + * If a change was done, set recent_change so that the update is +@@ -1227,6 +1327,8 @@ cb_gconf (GConfClient *client, + /* save */ + gst_object_replace ((GstObject **) &applet->mixer, item->data); + gst_element_set_state (old_element, GST_STATE_NULL); ++ ++ gnome_volume_applet_setup_timeout (applet); + newdevice = TRUE; + } + break; +@@ -1387,7 +1489,7 @@ cb_theme_change (GtkIconTheme *icon_them + GnomeVolumeApplet *applet = GNOME_VOLUME_APPLET (data); + + init_pixbufs (applet); +- gnome_volume_applet_refresh (applet, TRUE); ++ gnome_volume_applet_refresh (applet, TRUE, -1, -1); + } + + /* diff --git a/gnome-applets.spec b/gnome-applets.spec index 68a46b9..116b7f5 100644 --- a/gnome-applets.spec +++ b/gnome-applets.spec @@ -34,13 +34,13 @@ Summary: Small applications for the GNOME panel Name: gnome-applets -Version: 2.21.2 -Release: 10%{?dist} +Version: 2.21.1 +Release: 1%{?dist} Epoch: 1 License: GPLv2+ and GFDL+ Group: User Interface/Desktops URL: http://www.gnome.org/ -Source: http://download.gnome.org/sources/%{name}/2.20/%{name}-%{version}.tar.bz2 +Source: http://download.gnome.org/sources/%{name}/2.21/%{name}-%{version}.tar.bz2 Source1: copy.xsl Source2: gnome-applets-2.9.3.1-modemlights.tar.bz2 @@ -67,24 +67,11 @@ Patch33: gnome-applets-2.18.0-node-leak.patch Patch34: ppp-includes.patch # http://bugzilla.gnome.org/show_bug.cgi?id=478485 includes the above -Patch35: gnome-applets-2.20.0-mixer-out-of-sync.patch - -# http://bugzilla.gnome.org/show_bug.cgi?id=479172 -Patch36: gweather-pc.patch - -# fixed in upstream svn -Patch38: mixer-preferences-leak.patch +Patch35: gnome-applets-2.21.1-mixer-sync.patch # http://bugzilla.gnome.org/show_bug.cgi?id=488824 Patch39: gweather-network.patch -# http://bugzilla.gnome.org/show_bug.cgi?id=491435 -Patch40: weather-update.patch -# http://bugzilla.gnome.org/show_bug.cgi?id=491437 -Patch41: weather-abort.patch -# http://bugzilla.gnome.org/show_bug.cgi?id=491438 -Patch42: nl_langinfo.patch - BuildRequires: glib2-devel >= %{glib2_version} BuildRequires: gtk2-devel >= %{gtk2_version} BuildRequires: libgnomeui-devel >= %{libgnomeui_version} @@ -184,15 +171,8 @@ libraries contained in the gnome-applets package. %patch30 -p1 -b .fix-null-applet %patch31 -p1 -b .fix-find %patch33 -p1 -b .node-leak -pushd mixer/ -%patch35 -p0 -b .mixer-sync -popd -%patch36 -p1 -b .gweather-pc -%patch38 -p1 -b .mixer-preferences-leak +%patch35 -p1 -b .mixer-sync %patch39 -p1 -b .geweather-network -%patch40 -p1 -b .weather-update -%patch41 -p1 -b .weather-abort -%patch42 -p1 -b .nl_langinfo cp gswitchit/gswitchit-applet.png gswitchit/gswitchit-properties-capplet.png @@ -205,10 +185,10 @@ tar xjf %{SOURCE2} %patch34 -p1 -b .ppp-includes intltoolize --force -autoconf +autoreconf + %build -autoreconf %configure \ --enable-suid=no \ %if %{build_stickynotes} diff --git a/sources b/sources index e7c7830..cfdc464 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ -985cfc3c58a72e1a92201bf4a4873b87 gnome-applets-2.20.0.tar.bz2 +3abfa92d933ed2eda39008c60141aa55 gnome-applets-2.21.1.tar.bz2 ccd89d3a58076214e2f34216388c9621 gnome-applets-2.9.3.1-modemlights.tar.bz2