UPDATE: x11/gnome-mplayer

View: New views
1 Messages — Rating Filter:   Alert me  

UPDATE: x11/gnome-mplayer

by David Coppa :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message


Hi all,

An update for gnome-mplayer.

- several fixes for volume control. They solve the issue reported by
  edd@ sometimes ago:
  "On your setup is the volume control in the GUI kinda, unpredictable?
   It tends to jump about while it is being dragged / released."

- bump PKGNAME


Adapted from upstream svn.
I've waited some time for this to go in. Now it's two weeks without
further commits or new bug reports, so I'm considering this as a
definitive solution...

Ciao,
David


Index: Makefile
===================================================================
RCS file: /cvs/ports/x11/gnome-mplayer/Makefile,v
retrieving revision 1.12
diff -N -u -p Makefile
--- Makefile 1 Nov 2009 08:54:42 -0000 1.12
+++ Makefile 6 Nov 2009 11:24:52 -0000
@@ -2,7 +2,7 @@
 
 COMMENT = GTK+/GNOME frontend for MPlayer
 DISTNAME = gnome-mplayer-0.9.8
-PKGNAME = ${DISTNAME}p0
+PKGNAME = ${DISTNAME}p1
 CATEGORIES = x11 multimedia
 
 MAINTAINER = David Coppa <dcoppa@...>
Index: patches/patch-src_common_h
===================================================================
RCS file: patches/patch-src_common_h
diff -N -u -p patches/patch-src_common_h
--- /dev/null 6 Nov 2009 11:24:53 -0000
+++ patches/patch-src_common_h 6 Nov 2009 11:24:53 -0000
@@ -0,0 +1,14 @@
+$OpenBSD$
+
+fix from upstream svn (update volume control)
+
+--- src/common.h.orig Fri Nov  6 05:49:24 2009
++++ src/common.h Fri Nov  6 05:50:06 2009
+@@ -486,6 +486,7 @@ void dbus_disable_screensaver();
+ void menuitem_edit_random_callback(GtkMenuItem * menuitem, void *data);
+
+ gboolean update_audio_meter(gpointer data);
++gboolean update_volume(gpointer data);
+
+ void mplayer_shutdown();
+ gpointer launch_player(gpointer data);
Index: patches/patch-src_gui_c
===================================================================
RCS file: /cvs/ports/x11/gnome-mplayer/patches/patch-src_gui_c,v
retrieving revision 1.4
diff -N -u -p patches/patch-src_gui_c
--- patches/patch-src_gui_c 31 Oct 2009 12:26:25 -0000 1.4
+++ patches/patch-src_gui_c 6 Nov 2009 11:24:53 -0000
@@ -3,11 +3,12 @@ $OpenBSD: patch-src_gui_c,v 1.4 2009/10/31 12:26:25 ed
 fixes from upstream svn:
 add disable_animation config option
 fix hidden cursor over menus
+update volume control
 
 add sun, sndio and rtunes to available audio backends
 
---- src/gui.c.orig Thu Sep 17 18:05:35 2009
-+++ src/gui.c Sun Oct 18 17:51:31 2009
+--- src/gui.c.orig Thu Sep 17 10:05:35 2009
++++ src/gui.c Fri Nov  6 05:04:23 2009
 @@ -94,7 +94,9 @@ static void drawing_area_realized(GtkWidget * widget,
       * onwards, requesting the native window in a thread causes a BadWindowID,
       * so we need to request it now. We could call gdk_window_ensure_native(),
@@ -18,7 +19,31 @@ add sun, sndio and rtunes to available audio backends
  }
 
  gint get_player_window()
-@@ -435,7 +437,7 @@ gboolean set_progress_value(void *data)
+@@ -108,6 +110,23 @@ gint get_player_window()
+     }
+ }
+
++gboolean update_volume(gpointer data)
++{
++ if (use_pulse_flat_volume && !softvol) {
++ if (state != QUIT) {
++ if (idledata->mplayer_volume + 1 != idledata->volume) {
++#ifdef GTK2_12_ENABLED
++ gtk_scale_button_set_value(GTK_SCALE_BUTTON(vol_slider), idledata->mplayer_volume);
++#else
++ gtk_range_set_value(GTK_RANGE(vol_slider), idledata->mplayer_volume);
++#endif
++ }
++ }
++ }
++
++ return FALSE;
++}
++
+ gboolean set_adjust_layout(gpointer data)
+ {
+     adjusting = FALSE;
+@@ -435,7 +454,7 @@ gboolean set_progress_value(void *data)
          }
          if (idle->cachepercent < 1.0 && state == PAUSED) {
              text =
@@ -27,7 +52,7 @@ add sun, sndio and rtunes to available audio backends
                                  (gint) (idle->cachepercent * 100));
              gmtk_media_tracker_set_text(tracker, text);
              g_free(text);
-@@ -561,7 +563,7 @@ gboolean set_progress_time(void *data)
+@@ -561,7 +580,7 @@ gboolean set_progress_time(void *data)
 
      if (idle->cachepercent > 0 && idle->cachepercent < 1.0 && !(playlist) && !forcecache
          && !idle->streaming) {
@@ -36,8 +61,103 @@ add sun, sndio and rtunes to available audio backends
                     (int) (idle->cachepercent * 100));
      } else {
          g_snprintf(idle->progress_text, 128, "%s", text);
-@@ -2427,23 +2429,33 @@ gboolean make_panel_and_mouse_invisible(gpointer data)
+@@ -595,17 +614,9 @@ gboolean set_volume_from_slider(gpointer data)
+     vol = (gint) gtk_range_get_value(GTK_RANGE(vol_slider));
+ #endif
+     if (!idledata->mute) {
+-        if (use_pulse_flat_volume && !softvol) {
+-            set_alsa_volume(TRUE, vol);
+-        } else {
+-            cmd = g_strdup_printf("volume %i 1\n", vol);
+-            send_command(cmd, FALSE);
+-            g_free(cmd);
+-        }
+-        send_command("get_property volume\n", FALSE);
+-        if (state == PAUSED || state == STOPPED) {
+-            send_command("pause\n", FALSE);
+-        }
++ cmd = g_strdup_printf("volume %i 1\n", vol);
++ send_command(cmd, FALSE);
++ g_free(cmd);
+     }
 
+     return FALSE;
+@@ -1416,6 +1427,8 @@ gboolean delete_callback(GtkWidget * widget, GdkEvent
+     ok_to_play = FALSE;
+     dontplaynext = TRUE;
+
++    g_idle_remove_by_data(idledata);
++
+     if (remember_loc && !fullscreen && embed_window == 0) {
+         gm_store = gm_pref_store_new("gnome-mplayer");
+         gtk_window_get_position(GTK_WINDOW(window), &loc_window_x, &loc_window_y);
+@@ -2308,13 +2321,9 @@ void vol_slider_callback(GtkRange * range, gpointer us
+         g_free(cmd);
+         idledata->mute = TRUE;
+     } else {
+-        if (use_pulse_flat_volume && !softvol) {
+-            set_alsa_volume(TRUE, vol);
+-        } else {
+-            cmd = g_strdup_printf("volume %i 1\n", vol);
+-            send_command(cmd, TRUE);
+-            g_free(cmd);
+-        }
++        cmd = g_strdup_printf("volume %i 1\n", vol);
++        send_command(cmd, TRUE);
++        g_free(cmd);
+     }
+     if (idledata->volume != vol) {
+
+@@ -2323,24 +2332,18 @@ void vol_slider_callback(GtkRange * range, gpointer us
+         g_idle_add(set_volume_tip, idledata);
+         g_free(buf);
+     }
+-    send_command("get_property volume\n", TRUE);
+
+     dbus_send_rpsignal_with_double("RP_Volume", gtk_range_get_value(GTK_RANGE(vol_slider)));
+
+ }
+
+ #ifdef GTK2_12_ENABLED
+-void vol_button_callback(GtkVolumeButton * volume, gpointer user_data)
++void vol_button_value_changed_callback(GtkScaleButton * volume, gdouble value, gpointer data)
+ {
+-    gint vol;
++    gint vol = value;
+     gchar *cmd;
+     gchar *buf;
+
+-    if (rpcontrols != NULL && g_strcasecmp(rpcontrols, "volumeslider") == 0) {
+-        vol = (gint) gtk_range_get_value(GTK_RANGE(vol_slider));
+-    } else {
+-        vol = (gint) gtk_scale_button_get_value(GTK_SCALE_BUTTON(volume));
+-    }
+     if (idledata->mute && vol > 0) {
+         cmd = g_strdup_printf("mute 0\n");
+         send_command(cmd, TRUE);
+@@ -2356,6 +2359,7 @@ void vol_button_callback(GtkVolumeButton * volume, gpo
+         cmd = g_strdup_printf("volume %i 1\n", vol);
+         send_command(cmd, TRUE);
+         g_free(cmd);
++ idledata->volume = vol;
+     }
+     if (idledata->volume != vol) {
+
+@@ -2364,11 +2368,8 @@ void vol_button_callback(GtkVolumeButton * volume, gpo
+         g_idle_add(set_volume_tip, idledata);
+         g_free(buf);
+     }
+-    send_command("get_property volume\n", TRUE);
+
+-    dbus_send_rpsignal_with_double("RP_Volume",
+-                                   gtk_scale_button_get_value(GTK_SCALE_BUTTON(vol_slider)));
+-
++    dbus_send_rpsignal_with_double("RP_Volume", vol);
+ }
+ #endif
+
+@@ -2427,23 +2428,26 @@ gboolean make_panel_and_mouse_invisible(gpointer data)
+
      g_get_current_time(¤ttime);
      g_time_val_add(¤ttime, -auto_hide_timeout * G_USEC_PER_SEC);
 -    if (last_movement_time > 0 && currenttime.tv_sec > last_movement_time) {
@@ -48,6 +168,15 @@ add sun, sndio and rtunes to available audio backends
 -        gdk_pixmap_unref(cursor_source);
 -        gdk_window_set_cursor(window->window, cursor);
 -        gdk_cursor_unref(cursor);
+-
+-        if (use_pulse_flat_volume && !softvol) {
+-            if (idledata->mplayer_volume != idledata->volume) {
+-                idledata->volume = idledata->mplayer_volume;
+-                set_volume(idledata);
+-            }
+-        }
+-    }
+-
 + if (GTK_WIDGET_VISIBLE(menu_file)
 + || GTK_WIDGET_VISIBLE(menu_edit)
 + || GTK_WIDGET_VISIBLE(menu_view)
@@ -65,28 +194,13 @@ add sun, sndio and rtunes to available audio backends
 +    gdk_pixmap_unref(cursor_source);
 +    gdk_window_set_cursor(window->window, cursor);
 +    gdk_cursor_unref(cursor);
-
--        if (use_pulse_flat_volume && !softvol) {
--            if (idledata->mplayer_volume != idledata->volume) {
--                idledata->volume = idledata->mplayer_volume;
--                set_volume(idledata);
--            }
--        }
--    }
--
-+    if (use_pulse_flat_volume && !softvol) {
-+        if (idledata->mplayer_volume != idledata->volume) {
-+            idledata->volume = idledata->mplayer_volume;
-+            set_volume(idledata);
-+        }
-+    }
 + }
 + }
 +
      return FALSE;
  }
 
-@@ -3671,6 +3683,8 @@ void config_apply(GtkWidget * widget, void *data)
+@@ -3671,6 +3675,8 @@ void config_apply(GtkWidget * widget, void *data)
          !(gboolean) gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(config_embeddedfonts));
      disable_pause_on_click =
          !(gboolean) gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(config_pause_on_click));
@@ -95,7 +209,7 @@ add sun, sndio and rtunes to available audio backends
      oldosd = osdlevel;
      osdlevel = (gint) gtk_range_get_value(GTK_RANGE(config_osdlevel));
      pplevel = (gint) gtk_range_get_value(GTK_RANGE(config_pplevel));
-@@ -3774,6 +3788,7 @@ void config_apply(GtkWidget * widget, void *data)
+@@ -3774,6 +3780,7 @@ void config_apply(GtkWidget * widget, void *data)
      gm_pref_store_set_boolean(gm_store, DISABLEDEINTERLACE, disable_deinterlace);
      gm_pref_store_set_boolean(gm_store, DISABLEFRAMEDROP, disable_framedrop);
      gm_pref_store_set_boolean(gm_store, DISABLEPAUSEONCLICK, disable_pause_on_click);
@@ -103,7 +217,7 @@ add sun, sndio and rtunes to available audio backends
      gm_pref_store_set_boolean(gm_store, SHOWPLAYLIST, playlist_visible);
      gm_pref_store_set_boolean(gm_store, SHOWDETAILS, details_visible);
      gm_pref_store_set_boolean(gm_store, USE_MEDIAKEYS, use_mediakeys);
-@@ -4697,32 +4712,41 @@ void menuitem_config_callback(GtkMenuItem * menuitem,
+@@ -4697,32 +4704,41 @@ void menuitem_config_callback(GtkMenuItem * menuitem,
      tooltip = gtk_tooltips_new();
      gtk_tooltips_set_tip(tooltip, config_ao,
                           _
@@ -152,16 +266,52 @@ add sun, sndio and rtunes to available audio backends
              }
          }
      }
-@@ -5308,6 +5332,12 @@ void menuitem_config_callback(GtkMenuItem * menuitem,
-     config_pause_on_click = gtk_check_button_new_with_label(_("Pause playback on mouse click"));
-     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(config_pause_on_click), !disable_pause_on_click);
-     gtk_table_attach(GTK_TABLE(conf_table), config_pause_on_click, 0, 2, i, i + 1, GTK_FILL,
-+                     GTK_SHRINK, 0, 0);
-+    i++;
-+
+@@ -5311,6 +5327,12 @@ void menuitem_config_callback(GtkMenuItem * menuitem,
+                      GTK_SHRINK, 0, 0);
+     i++;
+
 +    config_disable_animation = gtk_check_button_new_with_label(_("Disable Fullscreen Control Bar Animation"));
 +    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(config_disable_animation), disable_animation);
 +    gtk_table_attach(GTK_TABLE(conf_table), config_disable_animation, 0, 2, i, i + 1, GTK_FILL,
-                      GTK_SHRINK, 0, 0);
-     i++;
++                     GTK_SHRINK, 0, 0);
++    i++;
++
+     config_verbose = gtk_check_button_new_with_label(_("Verbose Debug Enabled"));
+     tooltip = gtk_tooltips_new();
+     gtk_tooltips_set_tip(tooltip, config_verbose,
+@@ -6235,7 +6257,6 @@ GtkWidget *create_window(gint windowid)
+     drawing_area = gtk_socket_new();
+     g_signal_connect(drawing_area, "realize", G_CALLBACK(drawing_area_realized), NULL);
 
+-
+     cover_art = gtk_image_new();
+     media_label = gtk_label_new("");
+     gtk_widget_set_size_request(media_label, 300, -1);
+@@ -6291,7 +6312,6 @@ GtkWidget *create_window(gint windowid)
+
+
+     // ok if the theme has all the icons we need, use them, otherwise use the default GNOME ones
+-
+     if (gtk_icon_theme_has_icon(icon_theme, "media-playback-start")
+         && gtk_icon_theme_has_icon(icon_theme, "media-playback-pause")
+         && gtk_icon_theme_has_icon(icon_theme, "media-playback-stop")
+@@ -6534,8 +6554,8 @@ GtkWidget *create_window(gint windowid)
+         else
+             gtk_object_set(GTK_OBJECT(vol_slider), "size", GTK_ICON_SIZE_MENU, NULL);
+
+-        g_signal_connect(G_OBJECT(vol_slider), "value_changed", G_CALLBACK(vol_button_callback),
+-                         NULL);
++        g_signal_connect(G_OBJECT(vol_slider), "value_changed", G_CALLBACK(vol_button_value_changed_callback),
++                         idledata);
+         gtk_button_set_relief(GTK_BUTTON(vol_slider), GTK_RELIEF_NONE);
+ #else
+         vol_slider = gtk_hscale_new_with_range(0.0, 100.0, 1.0);
+@@ -6543,7 +6563,7 @@ GtkWidget *create_window(gint windowid)
+         gtk_scale_set_draw_value(GTK_SCALE(vol_slider), FALSE);
+         gtk_range_set_value(GTK_RANGE(vol_slider), idledata->volume);
+         g_signal_connect(G_OBJECT(vol_slider), "value_changed", G_CALLBACK(vol_slider_callback),
+-                         NULL);
++                         idledata);
+ #endif
+     }
+     volume_tip = gtk_tooltips_new();
Index: patches/patch-src_main_c
===================================================================
RCS file: /cvs/ports/x11/gnome-mplayer/patches/patch-src_main_c,v
retrieving revision 1.2
diff -N -u -p patches/patch-src_main_c
--- patches/patch-src_main_c 31 Oct 2009 12:26:25 -0000 1.2
+++ patches/patch-src_main_c 6 Nov 2009 11:24:53 -0000
@@ -5,9 +5,45 @@ set some sane defaults:
 use mplayer's software volume control (see pkg/MESSAGE)
 disable bar animation in full screen
 
---- src/main.c.orig Thu Sep 17 17:56:06 2009
-+++ src/main.c Sat Oct 17 17:53:22 2009
-@@ -699,7 +699,7 @@ int main(int argc, char *argv[])
+fix from upstream svn (update volume control)
+
+--- src/main.c.orig Thu Sep 17 09:56:06 2009
++++ src/main.c Fri Nov  6 05:22:16 2009
+@@ -422,27 +422,13 @@ gint play_iter(GtkTreeIter * playiter, gint restart_se
+         g_strlcpy(thread_data->subtitle, subtitle, 1024);
+         g_free(subtitle);
+     }
+-    /*
+-       #ifdef HAVE_ASOUNDLIB
+-       if (!softvol && ao != NULL
+-       && (g_ascii_strcasecmp(ao, "alsa") == 0
+-       || (use_pulse_flat_volume && g_ascii_strcasecmp(ao, "pulse") == 0))) {
+-       volume = (gint) get_alsa_volume(TRUE);
+-       idledata->volume = volume;
+-       #if GTK2_12_ENABLED
+-       gtk_scale_button_set_value(GTK_SCALE_BUTTON(vol_slider), volume);
+-       #else
+-       gtk_range_set_value(GTK_RANGE(vol_slider), volume);
+-       #endif
+-       }
+-       #endif
+
+-       #if GTK2_12_ENABLED
+-       volume = gtk_scale_button_get_value(GTK_SCALE_BUTTON(vol_slider));
+-       #else
+-       volume = gtk_range_get_value(GTK_RANGE(vol_slider));
+-       #endif
+-     */
++#if GTK2_12_ENABLED
++    volume = gtk_scale_button_get_value(GTK_SCALE_BUTTON(vol_slider));
++#else
++    volume = gtk_range_get_value(GTK_RANGE(vol_slider));
++#endif
++
+     if (g_ascii_strcasecmp(thread_data->filename, "") != 0) {
+         if (!device_name(thread_data->filename) && !streaming_media(thread_data->filename)) {
+             if (!g_file_test(thread_data->filename, G_FILE_TEST_EXISTS)) {
+@@ -699,7 +685,7 @@ int main(int argc, char *argv[])
      playlist_visible = FALSE;
      disable_fullscreen = FALSE;
      disable_framedrop = FALSE;
@@ -16,7 +52,7 @@ disable bar animation in full screen
      subtitlefont = NULL;
      subtitle_codepage = NULL;
      subtitle_color = NULL;
-@@ -711,7 +711,7 @@ int main(int argc, char *argv[])
+@@ -711,7 +697,7 @@ int main(int argc, char *argv[])
      reallyverbose = 0;
      embedding_disabled = FALSE;
      disable_pause_on_click = FALSE;
Index: patches/patch-src_thread_c
===================================================================
RCS file: /cvs/ports/x11/gnome-mplayer/patches/patch-src_thread_c,v
retrieving revision 1.1
diff -N -u -p patches/patch-src_thread_c
--- patches/patch-src_thread_c 31 Oct 2009 12:26:25 -0000 1.1
+++ patches/patch-src_thread_c 6 Nov 2009 11:24:53 -0000
@@ -2,27 +2,77 @@ $OpenBSD: patch-src_thread_c,v 1.1 2009/10/31 12:26:25
 
 volume and mute fixes from upstream svn
 
---- src/thread.c.orig Wed Oct 14 03:38:40 2009
-+++ src/thread.c Wed Oct 14 03:45:28 2009
-@@ -513,7 +513,12 @@ gboolean thread_reader(GIOChannel * source, GIOConditi
-                 idledata->mplayer_volume = volume;
-                 idledata->mute = (volume > 0);
-             }
+--- src/thread.c.orig Thu Sep 17 10:01:44 2009
++++ src/thread.c Fri Nov  6 05:43:59 2009
+@@ -269,7 +269,8 @@ gboolean thread_reader(GIOChannel * source, GIOConditi
+     GIOStatus status;
+     gchar *buf, *message = NULL;
+     gchar *cmd;
+-    gint pos, volume, i;
++    gint pos, i;
++    gfloat vol;
+     gfloat percent;
+     GError *error = NULL;
+     gchar *error_msg = NULL;
+@@ -506,14 +507,11 @@ gboolean thread_reader(GIOChannel * source, GIOConditi
+
+     if (strstr(mplayer_output->str, "ANS_volume") != 0) {
+         buf = strstr(mplayer_output->str, "ANS_volume");
+-        sscanf(buf, "ANS_volume=%i", &volume);
+-        if (!idledata->mute) {
+-            if (use_pulse_flat_volume && !softvol) {
+-                // Need to track what the master volume is, gui is updated in make mouse invisible
+-                idledata->mplayer_volume = volume;
+-                idledata->mute = (volume > 0);
+-            }
 -        }
-+        } else {
-+ if (softvol) {
-+ idledata->mplayer_volume = volume;
-+ idledata->mute = (volume > 0);
-+ }
-+ }
++ sscanf(buf, "ANS_volume=%f", &vol);
++ // Need to track what the master volume is, gui is updated in make mouse invisible
++ idledata->mplayer_volume = vol;
++ idledata->mute = !((gint)vol > 0);
++ g_idle_add(update_volume, idledata);
      }
 
      if (strstr(mplayer_output->str, "ANS_chapters") != 0) {
-@@ -844,6 +849,7 @@ gboolean thread_query(gpointer data)
-         } else {
+@@ -827,13 +825,6 @@ gboolean thread_query(gpointer data)
+         // but don't start polling until meter is visible
+         g_idle_add(map_af_export_file, idledata);
+     }
+-    // track volume control
+-    if (use_pulse_flat_volume && !softvol) {
+-        volume = (gint) get_alsa_volume(FALSE);
+-        idledata->volume = volume;
+-        if (!idledata->mute)
+-            g_idle_add(set_volume, idledata);
+-    }
 
-             //send_command("get_time_pos\n");
-+ send_command("get_time_length\n", TRUE);
-             send_command("get_property stream_pos\n", TRUE);
+     if (state == PLAYING) {
+         // size = write(std_in, "get_percent_pos\n", strlen("get_percent_pos\n"));
+@@ -842,9 +833,9 @@ gboolean thread_query(gpointer data)
+             g_idle_add(set_kill_mplayer,NULL);
+             return FALSE;
+         } else {
+-
+-            //send_command("get_time_pos\n");
+-            send_command("get_property stream_pos\n", TRUE);
++     send_command("get_time_length\n", TRUE);
++     send_command("get_property stream_pos\n", TRUE);
++     send_command("get_property volume\n", TRUE);
              if (threaddata->streaming)
                  send_command("get_property metadata\n", TRUE);
+             g_idle_add(make_panel_and_mouse_invisible, NULL);
+@@ -979,11 +970,9 @@ gpointer launch_player(gpointer data)
+         argv[arg++] = g_strdup_printf("-softvol");
+
+     if (use_volume_option) {
+-        argv[arg++] = g_strdup_printf("-volume");
+-        if (idledata->mute)
+-            argv[arg++] = g_strdup_printf("0");
+-        else
+-            argv[arg++] = g_strdup_printf("%i", (gint) idledata->volume);
++ argv[arg++] = g_strdup_printf("-volume");
++ argv[arg++] = g_strdup_printf("%i", (gint) idledata->volume);
++ idledata->mplayer_volume = idledata->volume;
+     }
+
+     if (mixer != NULL && strlen(mixer) > 0) {


Index: Makefile
===================================================================
RCS file: /cvs/ports/x11/gnome-mplayer/Makefile,v
retrieving revision 1.12
diff -N -u -p Makefile
--- Makefile 1 Nov 2009 08:54:42 -0000 1.12
+++ Makefile 6 Nov 2009 11:24:52 -0000
@@ -2,7 +2,7 @@
 
 COMMENT = GTK+/GNOME frontend for MPlayer
 DISTNAME = gnome-mplayer-0.9.8
-PKGNAME = ${DISTNAME}p0
+PKGNAME = ${DISTNAME}p1
 CATEGORIES = x11 multimedia
 
 MAINTAINER = David Coppa <dcoppa@...>
Index: patches/patch-src_common_h
===================================================================
RCS file: patches/patch-src_common_h
diff -N -u -p patches/patch-src_common_h
--- /dev/null 6 Nov 2009 11:24:53 -0000
+++ patches/patch-src_common_h 6 Nov 2009 11:24:53 -0000
@@ -0,0 +1,14 @@
+$OpenBSD$
+
+fix from upstream svn (update volume control)
+
+--- src/common.h.orig Fri Nov  6 05:49:24 2009
++++ src/common.h Fri Nov  6 05:50:06 2009
+@@ -486,6 +486,7 @@ void dbus_disable_screensaver();
+ void menuitem_edit_random_callback(GtkMenuItem * menuitem, void *data);
+
+ gboolean update_audio_meter(gpointer data);
++gboolean update_volume(gpointer data);
+
+ void mplayer_shutdown();
+ gpointer launch_player(gpointer data);
Index: patches/patch-src_gui_c
===================================================================
RCS file: /cvs/ports/x11/gnome-mplayer/patches/patch-src_gui_c,v
retrieving revision 1.4
diff -N -u -p patches/patch-src_gui_c
--- patches/patch-src_gui_c 31 Oct 2009 12:26:25 -0000 1.4
+++ patches/patch-src_gui_c 6 Nov 2009 11:24:53 -0000
@@ -3,11 +3,12 @@ $OpenBSD: patch-src_gui_c,v 1.4 2009/10/31 12:26:25 ed
 fixes from upstream svn:
 add disable_animation config option
 fix hidden cursor over menus
+update volume control
 
 add sun, sndio and rtunes to available audio backends
 
---- src/gui.c.orig Thu Sep 17 18:05:35 2009
-+++ src/gui.c Sun Oct 18 17:51:31 2009
+--- src/gui.c.orig Thu Sep 17 10:05:35 2009
++++ src/gui.c Fri Nov  6 05:04:23 2009
 @@ -94,7 +94,9 @@ static void drawing_area_realized(GtkWidget * widget,
       * onwards, requesting the native window in a thread causes a BadWindowID,
       * so we need to request it now. We could call gdk_window_ensure_native(),
@@ -18,7 +19,31 @@ add sun, sndio and rtunes to available audio backends
  }
 
  gint get_player_window()
-@@ -435,7 +437,7 @@ gboolean set_progress_value(void *data)
+@@ -108,6 +110,23 @@ gint get_player_window()
+     }
+ }
+
++gboolean update_volume(gpointer data)
++{
++ if (use_pulse_flat_volume && !softvol) {
++ if (state != QUIT) {
++ if (idledata->mplayer_volume + 1 != idledata->volume) {
++#ifdef GTK2_12_ENABLED
++ gtk_scale_button_set_value(GTK_SCALE_BUTTON(vol_slider), idledata->mplayer_volume);
++#else
++ gtk_range_set_value(GTK_RANGE(vol_slider), idledata->mplayer_volume);
++#endif
++ }
++ }
++ }
++
++ return FALSE;
++}
++
+ gboolean set_adjust_layout(gpointer data)
+ {
+     adjusting = FALSE;
+@@ -435,7 +454,7 @@ gboolean set_progress_value(void *data)
          }
          if (idle->cachepercent < 1.0 && state == PAUSED) {
              text =
@@ -27,7 +52,7 @@ add sun, sndio and rtunes to available audio backends
                                  (gint) (idle->cachepercent * 100));
              gmtk_media_tracker_set_text(tracker, text);
              g_free(text);
-@@ -561,7 +563,7 @@ gboolean set_progress_time(void *data)
+@@ -561,7 +580,7 @@ gboolean set_progress_time(void *data)
 
      if (idle->cachepercent > 0 && idle->cachepercent < 1.0 && !(playlist) && !forcecache
          && !idle->streaming) {
@@ -36,8 +61,103 @@ add sun, sndio and rtunes to available audio backends
                     (int) (idle->cachepercent * 100));
      } else {
          g_snprintf(idle->progress_text, 128, "%s", text);
-@@ -2427,23 +2429,33 @@ gboolean make_panel_and_mouse_invisible(gpointer data)
+@@ -595,17 +614,9 @@ gboolean set_volume_from_slider(gpointer data)
+     vol = (gint) gtk_range_get_value(GTK_RANGE(vol_slider));
+ #endif
+     if (!idledata->mute) {
+-        if (use_pulse_flat_volume && !softvol) {
+-            set_alsa_volume(TRUE, vol);
+-        } else {
+-            cmd = g_strdup_printf("volume %i 1\n", vol);
+-            send_command(cmd, FALSE);
+-            g_free(cmd);
+-        }
+-        send_command("get_property volume\n", FALSE);
+-        if (state == PAUSED || state == STOPPED) {
+-            send_command("pause\n", FALSE);
+-        }
++ cmd = g_strdup_printf("volume %i 1\n", vol);
++ send_command(cmd, FALSE);
++ g_free(cmd);
+     }
 
+     return FALSE;
+@@ -1416,6 +1427,8 @@ gboolean delete_callback(GtkWidget * widget, GdkEvent
+     ok_to_play = FALSE;
+     dontplaynext = TRUE;
+
++    g_idle_remove_by_data(idledata);
++
+     if (remember_loc && !fullscreen && embed_window == 0) {
+         gm_store = gm_pref_store_new("gnome-mplayer");
+         gtk_window_get_position(GTK_WINDOW(window), &loc_window_x, &loc_window_y);
+@@ -2308,13 +2321,9 @@ void vol_slider_callback(GtkRange * range, gpointer us
+         g_free(cmd);
+         idledata->mute = TRUE;
+     } else {
+-        if (use_pulse_flat_volume && !softvol) {
+-            set_alsa_volume(TRUE, vol);
+-        } else {
+-            cmd = g_strdup_printf("volume %i 1\n", vol);
+-            send_command(cmd, TRUE);
+-            g_free(cmd);
+-        }
++        cmd = g_strdup_printf("volume %i 1\n", vol);
++        send_command(cmd, TRUE);
++        g_free(cmd);
+     }
+     if (idledata->volume != vol) {
+
+@@ -2323,24 +2332,18 @@ void vol_slider_callback(GtkRange * range, gpointer us
+         g_idle_add(set_volume_tip, idledata);
+         g_free(buf);
+     }
+-    send_command("get_property volume\n", TRUE);
+
+     dbus_send_rpsignal_with_double("RP_Volume", gtk_range_get_value(GTK_RANGE(vol_slider)));
+
+ }
+
+ #ifdef GTK2_12_ENABLED
+-void vol_button_callback(GtkVolumeButton * volume, gpointer user_data)
++void vol_button_value_changed_callback(GtkScaleButton * volume, gdouble value, gpointer data)
+ {
+-    gint vol;
++    gint vol = value;
+     gchar *cmd;
+     gchar *buf;
+
+-    if (rpcontrols != NULL && g_strcasecmp(rpcontrols, "volumeslider") == 0) {
+-        vol = (gint) gtk_range_get_value(GTK_RANGE(vol_slider));
+-    } else {
+-        vol = (gint) gtk_scale_button_get_value(GTK_SCALE_BUTTON(volume));
+-    }
+     if (idledata->mute && vol > 0) {
+         cmd = g_strdup_printf("mute 0\n");
+         send_command(cmd, TRUE);
+@@ -2356,6 +2359,7 @@ void vol_button_callback(GtkVolumeButton * volume, gpo
+         cmd = g_strdup_printf("volume %i 1\n", vol);
+         send_command(cmd, TRUE);
+         g_free(cmd);
++ idledata->volume = vol;
+     }
+     if (idledata->volume != vol) {
+
+@@ -2364,11 +2368,8 @@ void vol_button_callback(GtkVolumeButton * volume, gpo
+         g_idle_add(set_volume_tip, idledata);
+         g_free(buf);
+     }
+-    send_command("get_property volume\n", TRUE);
+
+-    dbus_send_rpsignal_with_double("RP_Volume",
+-                                   gtk_scale_button_get_value(GTK_SCALE_BUTTON(vol_slider)));
+-
++    dbus_send_rpsignal_with_double("RP_Volume", vol);
+ }
+ #endif
+
+@@ -2427,23 +2428,26 @@ gboolean make_panel_and_mouse_invisible(gpointer data)
+
      g_get_current_time(¤ttime);
      g_time_val_add(¤ttime, -auto_hide_timeout * G_USEC_PER_SEC);
 -    if (last_movement_time > 0 && currenttime.tv_sec > last_movement_time) {
@@ -48,6 +168,15 @@ add sun, sndio and rtunes to available audio backends
 -        gdk_pixmap_unref(cursor_source);
 -        gdk_window_set_cursor(window->window, cursor);
 -        gdk_cursor_unref(cursor);
+-
+-        if (use_pulse_flat_volume && !softvol) {
+-            if (idledata->mplayer_volume != idledata->volume) {
+-                idledata->volume = idledata->mplayer_volume;
+-                set_volume(idledata);
+-            }
+-        }
+-    }
+-
 + if (GTK_WIDGET_VISIBLE(menu_file)
 + || GTK_WIDGET_VISIBLE(menu_edit)
 + || GTK_WIDGET_VISIBLE(menu_view)
@@ -65,28 +194,13 @@ add sun, sndio and rtunes to available audio backends
 +    gdk_pixmap_unref(cursor_source);
 +    gdk_window_set_cursor(window->window, cursor);
 +    gdk_cursor_unref(cursor);
-
--        if (use_pulse_flat_volume && !softvol) {
--            if (idledata->mplayer_volume != idledata->volume) {
--                idledata->volume = idledata->mplayer_volume;
--                set_volume(idledata);
--            }
--        }
--    }
--
-+    if (use_pulse_flat_volume && !softvol) {
-+        if (idledata->mplayer_volume != idledata->volume) {
-+            idledata->volume = idledata->mplayer_volume;
-+            set_volume(idledata);
-+        }
-+    }
 + }
 + }
 +
      return FALSE;
  }
 
-@@ -3671,6 +3683,8 @@ void config_apply(GtkWidget * widget, void *data)
+@@ -3671,6 +3675,8 @@ void config_apply(GtkWidget * widget, void *data)
          !(gboolean) gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(config_embeddedfonts));
      disable_pause_on_click =
          !(gboolean) gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(config_pause_on_click));
@@ -95,7 +209,7 @@ add sun, sndio and rtunes to available audio backends
      oldosd = osdlevel;
      osdlevel = (gint) gtk_range_get_value(GTK_RANGE(config_osdlevel));
      pplevel = (gint) gtk_range_get_value(GTK_RANGE(config_pplevel));
-@@ -3774,6 +3788,7 @@ void config_apply(GtkWidget * widget, void *data)
+@@ -3774,6 +3780,7 @@ void config_apply(GtkWidget * widget, void *data)
      gm_pref_store_set_boolean(gm_store, DISABLEDEINTERLACE, disable_deinterlace);
      gm_pref_store_set_boolean(gm_store, DISABLEFRAMEDROP, disable_framedrop);
      gm_pref_store_set_boolean(gm_store, DISABLEPAUSEONCLICK, disable_pause_on_click);
@@ -103,7 +217,7 @@ add sun, sndio and rtunes to available audio backends
      gm_pref_store_set_boolean(gm_store, SHOWPLAYLIST, playlist_visible);
      gm_pref_store_set_boolean(gm_store, SHOWDETAILS, details_visible);
      gm_pref_store_set_boolean(gm_store, USE_MEDIAKEYS, use_mediakeys);
-@@ -4697,32 +4712,41 @@ void menuitem_config_callback(GtkMenuItem * menuitem,
+@@ -4697,32 +4704,41 @@ void menuitem_config_callback(GtkMenuItem * menuitem,
      tooltip = gtk_tooltips_new();
      gtk_tooltips_set_tip(tooltip, config_ao,
                           _
@@ -152,16 +266,52 @@ add sun, sndio and rtunes to available audio backends
              }
          }
      }
-@@ -5308,6 +5332,12 @@ void menuitem_config_callback(GtkMenuItem * menuitem,
-     config_pause_on_click = gtk_check_button_new_with_label(_("Pause playback on mouse click"));
-     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(config_pause_on_click), !disable_pause_on_click);
-     gtk_table_attach(GTK_TABLE(conf_table), config_pause_on_click, 0, 2, i, i + 1, GTK_FILL,
-+                     GTK_SHRINK, 0, 0);
-+    i++;
-+
+@@ -5311,6 +5327,12 @@ void menuitem_config_callback(GtkMenuItem * menuitem,
+                      GTK_SHRINK, 0, 0);
+     i++;
+
 +    config_disable_animation = gtk_check_button_new_with_label(_("Disable Fullscreen Control Bar Animation"));
 +    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(config_disable_animation), disable_animation);
 +    gtk_table_attach(GTK_TABLE(conf_table), config_disable_animation, 0, 2, i, i + 1, GTK_FILL,
-                      GTK_SHRINK, 0, 0);
-     i++;
++                     GTK_SHRINK, 0, 0);
++    i++;
++
+     config_verbose = gtk_check_button_new_with_label(_("Verbose Debug Enabled"));
+     tooltip = gtk_tooltips_new();
+     gtk_tooltips_set_tip(tooltip, config_verbose,
+@@ -6235,7 +6257,6 @@ GtkWidget *create_window(gint windowid)
+     drawing_area = gtk_socket_new();
+     g_signal_connect(drawing_area, "realize", G_CALLBACK(drawing_area_realized), NULL);
 
+-
+     cover_art = gtk_image_new();
+     media_label = gtk_label_new("");
+     gtk_widget_set_size_request(media_label, 300, -1);
+@@ -6291,7 +6312,6 @@ GtkWidget *create_window(gint windowid)
+
+
+     // ok if the theme has all the icons we need, use them, otherwise use the default GNOME ones
+-
+     if (gtk_icon_theme_has_icon(icon_theme, "media-playback-start")
+         && gtk_icon_theme_has_icon(icon_theme, "media-playback-pause")
+         && gtk_icon_theme_has_icon(icon_theme, "media-playback-stop")
+@@ -6534,8 +6554,8 @@ GtkWidget *create_window(gint windowid)
+         else
+             gtk_object_set(GTK_OBJECT(vol_slider), "size", GTK_ICON_SIZE_MENU, NULL);
+
+-        g_signal_connect(G_OBJECT(vol_slider), "value_changed", G_CALLBACK(vol_button_callback),
+-                         NULL);
++        g_signal_connect(G_OBJECT(vol_slider), "value_changed", G_CALLBACK(vol_button_value_changed_callback),
++                         idledata);
+         gtk_button_set_relief(GTK_BUTTON(vol_slider), GTK_RELIEF_NONE);
+ #else
+         vol_slider = gtk_hscale_new_with_range(0.0, 100.0, 1.0);
+@@ -6543,7 +6563,7 @@ GtkWidget *create_window(gint windowid)
+         gtk_scale_set_draw_value(GTK_SCALE(vol_slider), FALSE);
+         gtk_range_set_value(GTK_RANGE(vol_slider), idledata->volume);
+         g_signal_connect(G_OBJECT(vol_slider), "value_changed", G_CALLBACK(vol_slider_callback),
+-                         NULL);
++                         idledata);
+ #endif
+     }
+     volume_tip = gtk_tooltips_new();
Index: patches/patch-src_main_c
===================================================================
RCS file: /cvs/ports/x11/gnome-mplayer/patches/patch-src_main_c,v
retrieving revision 1.2
diff -N -u -p patches/patch-src_main_c
--- patches/patch-src_main_c 31 Oct 2009 12:26:25 -0000 1.2
+++ patches/patch-src_main_c 6 Nov 2009 11:24:53 -0000
@@ -5,9 +5,45 @@ set some sane defaults:
 use mplayer's software volume control (see pkg/MESSAGE)
 disable bar animation in full screen
 
---- src/main.c.orig Thu Sep 17 17:56:06 2009
-+++ src/main.c Sat Oct 17 17:53:22 2009
-@@ -699,7 +699,7 @@ int main(int argc, char *argv[])
+fix from upstream svn (update volume control)
+
+--- src/main.c.orig Thu Sep 17 09:56:06 2009
++++ src/main.c Fri Nov  6 05:22:16 2009
+@@ -422,27 +422,13 @@ gint play_iter(GtkTreeIter * playiter, gint restart_se
+         g_strlcpy(thread_data->subtitle, subtitle, 1024);
+         g_free(subtitle);
+     }
+-    /*
+-       #ifdef HAVE_ASOUNDLIB
+-       if (!softvol && ao != NULL
+-       && (g_ascii_strcasecmp(ao, "alsa") == 0
+-       || (use_pulse_flat_volume && g_ascii_strcasecmp(ao, "pulse") == 0))) {
+-       volume = (gint) get_alsa_volume(TRUE);
+-       idledata->volume = volume;
+-       #if GTK2_12_ENABLED
+-       gtk_scale_button_set_value(GTK_SCALE_BUTTON(vol_slider), volume);
+-       #else
+-       gtk_range_set_value(GTK_RANGE(vol_slider), volume);
+-       #endif
+-       }
+-       #endif
+
+-       #if GTK2_12_ENABLED
+-       volume = gtk_scale_button_get_value(GTK_SCALE_BUTTON(vol_slider));
+-       #else
+-       volume = gtk_range_get_value(GTK_RANGE(vol_slider));
+-       #endif
+-     */
++#if GTK2_12_ENABLED
++    volume = gtk_scale_button_get_value(GTK_SCALE_BUTTON(vol_slider));
++#else
++    volume = gtk_range_get_value(GTK_RANGE(vol_slider));
++#endif
++
+     if (g_ascii_strcasecmp(thread_data->filename, "") != 0) {
+         if (!device_name(thread_data->filename) && !streaming_media(thread_data->filename)) {
+             if (!g_file_test(thread_data->filename, G_FILE_TEST_EXISTS)) {
+@@ -699,7 +685,7 @@ int main(int argc, char *argv[])
      playlist_visible = FALSE;
      disable_fullscreen = FALSE;
      disable_framedrop = FALSE;
@@ -16,7 +52,7 @@ disable bar animation in full screen
      subtitlefont = NULL;
      subtitle_codepage = NULL;
      subtitle_color = NULL;
-@@ -711,7 +711,7 @@ int main(int argc, char *argv[])
+@@ -711,7 +697,7 @@ int main(int argc, char *argv[])
      reallyverbose = 0;
      embedding_disabled = FALSE;
      disable_pause_on_click = FALSE;
Index: patches/patch-src_thread_c
===================================================================
RCS file: /cvs/ports/x11/gnome-mplayer/patches/patch-src_thread_c,v
retrieving revision 1.1
diff -N -u -p patches/patch-src_thread_c
--- patches/patch-src_thread_c 31 Oct 2009 12:26:25 -0000 1.1
+++ patches/patch-src_thread_c 6 Nov 2009 11:24:53 -0000
@@ -2,27 +2,77 @@ $OpenBSD: patch-src_thread_c,v 1.1 2009/10/31 12:26:25
 
 volume and mute fixes from upstream svn
 
---- src/thread.c.orig Wed Oct 14 03:38:40 2009
-+++ src/thread.c Wed Oct 14 03:45:28 2009
-@@ -513,7 +513,12 @@ gboolean thread_reader(GIOChannel * source, GIOConditi
-                 idledata->mplayer_volume = volume;
-                 idledata->mute = (volume > 0);
-             }
+--- src/thread.c.orig Thu Sep 17 10:01:44 2009
++++ src/thread.c Fri Nov  6 05:43:59 2009
+@@ -269,7 +269,8 @@ gboolean thread_reader(GIOChannel * source, GIOConditi
+     GIOStatus status;
+     gchar *buf, *message = NULL;
+     gchar *cmd;
+-    gint pos, volume, i;
++    gint pos, i;
++    gfloat vol;
+     gfloat percent;
+     GError *error = NULL;
+     gchar *error_msg = NULL;
+@@ -506,14 +507,11 @@ gboolean thread_reader(GIOChannel * source, GIOConditi
+
+     if (strstr(mplayer_output->str, "ANS_volume") != 0) {
+         buf = strstr(mplayer_output->str, "ANS_volume");
+-        sscanf(buf, "ANS_volume=%i", &volume);
+-        if (!idledata->mute) {
+-            if (use_pulse_flat_volume && !softvol) {
+-                // Need to track what the master volume is, gui is updated in make mouse invisible
+-                idledata->mplayer_volume = volume;
+-                idledata->mute = (volume > 0);
+-            }
 -        }
-+        } else {
-+ if (softvol) {
-+ idledata->mplayer_volume = volume;
-+ idledata->mute = (volume > 0);
-+ }
-+ }
++ sscanf(buf, "ANS_volume=%f", &vol);
++ // Need to track what the master volume is, gui is updated in make mouse invisible
++ idledata->mplayer_volume = vol;
++ idledata->mute = !((gint)vol > 0);
++ g_idle_add(update_volume, idledata);
      }
 
      if (strstr(mplayer_output->str, "ANS_chapters") != 0) {
-@@ -844,6 +849,7 @@ gboolean thread_query(gpointer data)
-         } else {
+@@ -827,13 +825,6 @@ gboolean thread_query(gpointer data)
+         // but don't start polling until meter is visible
+         g_idle_add(map_af_export_file, idledata);
+     }
+-    // track volume control
+-    if (use_pulse_flat_volume && !softvol) {
+-        volume = (gint) get_alsa_volume(FALSE);
+-        idledata->volume = volume;
+-        if (!idledata->mute)
+-            g_idle_add(set_volume, idledata);
+-    }
 
-             //send_command("get_time_pos\n");
-+ send_command("get_time_length\n", TRUE);
-             send_command("get_property stream_pos\n", TRUE);
+     if (state == PLAYING) {
+         // size = write(std_in, "get_percent_pos\n", strlen("get_percent_pos\n"));
+@@ -842,9 +833,9 @@ gboolean thread_query(gpointer data)
+             g_idle_add(set_kill_mplayer,NULL);
+             return FALSE;
+         } else {
+-
+-            //send_command("get_time_pos\n");
+-            send_command("get_property stream_pos\n", TRUE);
++     send_command("get_time_length\n", TRUE);
++     send_command("get_property stream_pos\n", TRUE);
++     send_command("get_property volume\n", TRUE);
              if (threaddata->streaming)
                  send_command("get_property metadata\n", TRUE);
+             g_idle_add(make_panel_and_mouse_invisible, NULL);
+@@ -979,11 +970,9 @@ gpointer launch_player(gpointer data)
+         argv[arg++] = g_strdup_printf("-softvol");
+
+     if (use_volume_option) {
+-        argv[arg++] = g_strdup_printf("-volume");
+-        if (idledata->mute)
+-            argv[arg++] = g_strdup_printf("0");
+-        else
+-            argv[arg++] = g_strdup_printf("%i", (gint) idledata->volume);
++ argv[arg++] = g_strdup_printf("-volume");
++ argv[arg++] = g_strdup_printf("%i", (gint) idledata->volume);
++ idledata->mplayer_volume = idledata->volume;
+     }
+
+     if (mixer != NULL && strlen(mixer) > 0) {